mirror of
https://github.com/mealie-recipes/mealie.git
synced 2026-02-24 08:43:11 -05:00
Compare commits
152 Commits
v2.6.0
...
Kuchenpira
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
df4fd7ed7f | ||
|
|
dc1ec4e69a | ||
|
|
55af4082e7 | ||
|
|
8b059121d1 | ||
|
|
5bf3ba0cc2 | ||
|
|
d4a1c7f756 | ||
|
|
a06046cf5d | ||
|
|
f8c4112c39 | ||
|
|
e118d24261 | ||
|
|
8f3772ed01 | ||
|
|
007d249c20 | ||
|
|
24be42ee88 | ||
|
|
0d605e20fc | ||
|
|
cbfb649d96 | ||
|
|
b1341b9102 | ||
|
|
6be67a1a98 | ||
|
|
62d2dd1c0d | ||
|
|
5c890f3d0e | ||
|
|
d071215f06 | ||
|
|
e5b2ef49b2 | ||
|
|
766968b97d | ||
|
|
ec0e31f8ec | ||
|
|
c911a3190e | ||
|
|
c4baf50ae3 | ||
|
|
30382b36cb | ||
|
|
6b181c122f | ||
|
|
54bb39af55 | ||
|
|
b994d27b0c | ||
|
|
07cd98c125 | ||
|
|
1c6b35a53c | ||
|
|
7c05d58f26 | ||
|
|
6ecba01eb6 | ||
|
|
a39f8cdb90 | ||
|
|
18ebc3de5f | ||
|
|
ead4d4c95e | ||
|
|
6ae4e67c84 | ||
|
|
e77247441c | ||
|
|
d55e48cbe0 | ||
|
|
94170e3e6c | ||
|
|
e0e619df5a | ||
|
|
8469aae7ab | ||
|
|
94dd6eab81 | ||
|
|
8c25bdb62d | ||
|
|
cbbc07cda9 | ||
|
|
6fc9ece191 | ||
|
|
cd6ccf099b | ||
|
|
4f7ee33f1b | ||
|
|
9bfee56bd5 | ||
|
|
e5da33e38e | ||
|
|
2748db781f | ||
|
|
d9bbf8de30 | ||
|
|
c29f651a36 | ||
|
|
5e217fc269 | ||
|
|
0f58ac5b47 | ||
|
|
2deb9c276c | ||
|
|
f46760755d | ||
|
|
eca2ba36c8 | ||
|
|
cdd8e3aca9 | ||
|
|
d724f408cc | ||
|
|
3b1a6280d6 | ||
|
|
974d848ee2 | ||
|
|
72668e2881 | ||
|
|
9e47ade475 | ||
|
|
ad59e653da | ||
|
|
4ecfd8ec78 | ||
|
|
e254dda368 | ||
|
|
7de47004e9 | ||
|
|
28cc6b8d1e | ||
|
|
21278cd7fe | ||
|
|
9a469fe4fd | ||
|
|
98472ff471 | ||
|
|
e2b5f4d08c | ||
|
|
232ad8410c | ||
|
|
c65bd14d74 | ||
|
|
774b3123a2 | ||
|
|
40818722ab | ||
|
|
9cf40f89ea | ||
|
|
a758406719 | ||
|
|
8b3ff9b099 | ||
|
|
c4b26fef8c | ||
|
|
ba8b94232a | ||
|
|
5f766a8c3f | ||
|
|
46d28bd96b | ||
|
|
d483da6c4c | ||
|
|
a6fd50b1ba | ||
|
|
000ec9475a | ||
|
|
25adfe1a48 | ||
|
|
6381ac4c7f | ||
|
|
c636a4f73e | ||
|
|
38ab8aa48d | ||
|
|
17f64a5cfa | ||
|
|
d11bdaf235 | ||
|
|
cfba2fff7e | ||
|
|
61ae6b3e32 | ||
|
|
9c4afb57b8 | ||
|
|
b12aea8272 | ||
|
|
ec1a9d78ac | ||
|
|
8250e793b8 | ||
|
|
f3310ddba6 | ||
|
|
d573a9ea5d | ||
|
|
d24a518bac | ||
|
|
46b821d832 | ||
|
|
637bb30e13 | ||
|
|
b930ebfb20 | ||
|
|
5e2c40731c | ||
|
|
54ae810acc | ||
|
|
716c85cc3b | ||
|
|
3d1b76bcad | ||
|
|
4843a9a74a | ||
|
|
12aec943dc | ||
|
|
3b0d6050a2 | ||
|
|
3fd3661206 | ||
|
|
df8dd3fe4a | ||
|
|
a2c6b3f69b | ||
|
|
c01593e918 | ||
|
|
48484e5b1a | ||
|
|
173e8792a6 | ||
|
|
28047d9b58 | ||
|
|
82393b0cd1 | ||
|
|
eea9a6ae16 | ||
|
|
ca05c25b61 | ||
|
|
af912ebefb | ||
|
|
e6b46b21d9 | ||
|
|
a41f8b31f1 | ||
|
|
6271b33b1b | ||
|
|
09234e3bf0 | ||
|
|
9f467b702e | ||
|
|
6c156e0e14 | ||
|
|
10818ab0ba | ||
|
|
0778919134 | ||
|
|
fb8746e7b8 | ||
|
|
c82d08c0d9 | ||
|
|
be1dc69be6 | ||
|
|
8ea932ef7c | ||
|
|
70a6bc4769 | ||
|
|
c765401ac5 | ||
|
|
3b12a62fc6 | ||
|
|
c351cf7bd5 | ||
|
|
aea5eb3419 | ||
|
|
cb9008bb5c | ||
|
|
3534e445d8 | ||
|
|
c0ab7673ba | ||
|
|
abf73e08ec | ||
|
|
c4df8f0611 | ||
|
|
b28eefab77 | ||
|
|
6f3a139efd | ||
|
|
790f4a9b9a | ||
|
|
c7c87068bf | ||
|
|
f48dafd855 | ||
|
|
273f628acd | ||
|
|
a8653ea904 | ||
|
|
0093627adb |
@@ -48,7 +48,7 @@
|
||||
],
|
||||
// Use 'onCreateCommand' to run commands at the end of container creation.
|
||||
// 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.
|
||||
"remoteUser": "vscode",
|
||||
"features": {
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
.idea
|
||||
.vscode
|
||||
|
||||
__pycache__/
|
||||
**/__pycache__/
|
||||
*.py[cod]
|
||||
*$py.class
|
||||
*.so
|
||||
@@ -25,10 +25,10 @@ venv
|
||||
|
||||
*/node_modules
|
||||
*/dist
|
||||
/dist/
|
||||
*/data/db
|
||||
*/mealie/test
|
||||
*/mealie/.temp
|
||||
|
||||
model.crfmodel
|
||||
/mealie/frontend/
|
||||
|
||||
crowdin.yml
|
||||
|
||||
102
.github/workflows/build-package.yml
vendored
Normal file
102
.github/workflows/build-package.yml
vendored
Normal file
@@ -0,0 +1,102 @@
|
||||
name: Build Package
|
||||
|
||||
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
|
||||
7
.github/workflows/e2e.yml
vendored
7
.github/workflows/e2e.yml
vendored
@@ -18,11 +18,18 @@ jobs:
|
||||
cache-dependency-path: ./tests/e2e/yarn.lock
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
- name: Retrieve Python package
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: backend-dist
|
||||
path: dist
|
||||
- name: Build Image
|
||||
uses: docker/build-push-action@v5
|
||||
with:
|
||||
file: ./docker/Dockerfile
|
||||
context: .
|
||||
build-contexts: |
|
||||
packages=dist
|
||||
push: false
|
||||
load: true
|
||||
tags: mealie:e2e
|
||||
|
||||
19
.github/workflows/nightly.yml
vendored
19
.github/workflows/nightly.yml
vendored
@@ -18,13 +18,19 @@ concurrency:
|
||||
jobs:
|
||||
backend-tests:
|
||||
name: "Backend Server Tests"
|
||||
uses: ./.github/workflows/partial-backend.yml
|
||||
uses: ./.github/workflows/test-backend.yml
|
||||
|
||||
frontend-tests:
|
||||
name: "Frontend and End-to-End Tests"
|
||||
uses: ./.github/workflows/partial-frontend.yml
|
||||
name: "Frontend Tests"
|
||||
uses: ./.github/workflows/test-frontend.yml
|
||||
|
||||
build-release:
|
||||
build-package:
|
||||
name: Build Package
|
||||
uses: ./.github/workflows/build-package.yml
|
||||
with:
|
||||
tag: nightly
|
||||
|
||||
publish:
|
||||
permissions:
|
||||
contents: read
|
||||
packages: write
|
||||
@@ -35,10 +41,11 @@ jobs:
|
||||
id-token: write
|
||||
name: Build Tagged Release
|
||||
if: github.repository == 'mealie-recipes/mealie'
|
||||
uses: ./.github/workflows/partial-builder.yml
|
||||
uses: ./.github/workflows/publish.yml
|
||||
needs:
|
||||
- frontend-tests
|
||||
- backend-tests
|
||||
- build-package
|
||||
with:
|
||||
tag: nightly
|
||||
secrets:
|
||||
@@ -49,7 +56,7 @@ jobs:
|
||||
name: Notify Discord
|
||||
if: github.repository == 'mealie-recipes/mealie'
|
||||
needs:
|
||||
- build-release
|
||||
- publish
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Discord notification
|
||||
|
||||
@@ -35,18 +35,22 @@ jobs:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
|
||||
- name: Override __init__.py
|
||||
run: |
|
||||
echo "__version__ = \"${{ inputs.tag }}\"" > ./mealie/__init__.py
|
||||
|
||||
- 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
|
||||
uses: depot/build-push-action@v1
|
||||
with:
|
||||
project: srzjb6mhzm
|
||||
file: ./docker/Dockerfile
|
||||
context: .
|
||||
build-contexts: |
|
||||
packages=dist
|
||||
platforms: linux/amd64,linux/arm64
|
||||
push: true
|
||||
tags: |
|
||||
40
.github/workflows/pull-requests.yml
vendored
40
.github/workflows/pull-requests.yml
vendored
@@ -16,20 +16,16 @@ jobs:
|
||||
|
||||
backend-tests:
|
||||
name: "Backend Server Tests"
|
||||
uses: ./.github/workflows/partial-backend.yml
|
||||
uses: ./.github/workflows/test-backend.yml
|
||||
|
||||
frontend-tests:
|
||||
name: "Frontend and End-to-End Tests"
|
||||
uses: ./.github/workflows/partial-frontend.yml
|
||||
name: "Frontend Tests"
|
||||
uses: ./.github/workflows/test-frontend.yml
|
||||
|
||||
container-scanning:
|
||||
name: "Trivy Container Scanning"
|
||||
uses: ./.github/workflows/partial-trivy-container-scanning.yml
|
||||
|
||||
end-to-end:
|
||||
name: "End-to-End Tests"
|
||||
uses: ./.github/workflows/e2e.yml
|
||||
|
||||
code-ql:
|
||||
name: "CodeQL"
|
||||
uses: ./.github/workflows/codeql.yml
|
||||
@@ -37,3 +33,33 @@ jobs:
|
||||
actions: read
|
||||
contents: read
|
||||
security-events: write
|
||||
|
||||
build-package:
|
||||
name: "Build Python package"
|
||||
uses: ./.github/workflows/build-package.yml
|
||||
with:
|
||||
tag: e2e
|
||||
|
||||
end-to-end:
|
||||
name: "End-to-End Tests"
|
||||
needs: build-package
|
||||
uses: ./.github/workflows/e2e.yml
|
||||
|
||||
publish-image:
|
||||
name: "Publish PR Image"
|
||||
if: contains(github.event.pull_request.labels.*.name, 'build-image') && github.repository == 'mealie-recipes/mealie'
|
||||
permissions:
|
||||
contents: read
|
||||
packages: write
|
||||
# The id-token write permission is needed to connect to Depot.dev
|
||||
# as part of the partial-builder.yml action. It needs to be declared
|
||||
# in the parent action, as noted here:
|
||||
# https://github.com/orgs/community/discussions/76409#discussioncomment-8131390
|
||||
id-token: write
|
||||
needs: build-package
|
||||
uses: ./.github/workflows/publish.yml
|
||||
with:
|
||||
tag: pr-${{ github.event.pull_request.number }}
|
||||
secrets:
|
||||
DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
|
||||
21
.github/workflows/release.yml
vendored
21
.github/workflows/release.yml
vendored
@@ -7,13 +7,19 @@ on:
|
||||
jobs:
|
||||
backend-tests:
|
||||
name: "Backend Server Tests"
|
||||
uses: ./.github/workflows/partial-backend.yml
|
||||
uses: ./.github/workflows/test-backend.yml
|
||||
|
||||
frontend-tests:
|
||||
name: "Frontend and End-to-End Tests"
|
||||
uses: ./.github/workflows/partial-frontend.yml
|
||||
name: "Frontend Tests"
|
||||
uses: ./.github/workflows/test-frontend.yml
|
||||
|
||||
build-release:
|
||||
build-package:
|
||||
name: Build Package
|
||||
uses: ./.github/workflows/build-package.yml
|
||||
with:
|
||||
tag: release
|
||||
|
||||
publish:
|
||||
permissions:
|
||||
contents: read
|
||||
packages: write
|
||||
@@ -23,10 +29,11 @@ jobs:
|
||||
# https://github.com/orgs/community/discussions/76409#discussioncomment-8131390
|
||||
id-token: write
|
||||
name: Build Tagged Release
|
||||
uses: ./.github/workflows/partial-builder.yml
|
||||
uses: ./.github/workflows/publish.yml
|
||||
needs:
|
||||
- backend-tests
|
||||
- frontend-tests
|
||||
- build-package
|
||||
with:
|
||||
tag: ${{ github.event.release.tag_name }}
|
||||
tags: |
|
||||
@@ -39,7 +46,7 @@ jobs:
|
||||
notify-discord:
|
||||
name: Notify Discord
|
||||
needs:
|
||||
- build-release
|
||||
- publish
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Discord notification
|
||||
@@ -52,7 +59,7 @@ jobs:
|
||||
update-image-tags:
|
||||
name: Update image tag in sample docker-compose files
|
||||
needs:
|
||||
- build-release
|
||||
- publish
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
name: Backend Test/Lint
|
||||
name: Backend Lint and Test
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
@@ -1,4 +1,4 @@
|
||||
name: Frontend Build/Lin
|
||||
name: Frontend Lint and Test
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
@@ -41,37 +41,3 @@ jobs:
|
||||
- name: Run tests 🧪
|
||||
run: yarn test:ci
|
||||
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"
|
||||
7
.gitignore
vendored
7
.gitignore
vendored
@@ -52,7 +52,7 @@ pnpm-debug.log*
|
||||
env/
|
||||
build/
|
||||
develop-eggs/
|
||||
|
||||
/dist/
|
||||
downloads/
|
||||
eggs/
|
||||
.eggs/
|
||||
@@ -66,6 +66,9 @@ wheels/
|
||||
.installed.cfg
|
||||
*.egg
|
||||
|
||||
# frontend copied into Python module for packaging purposes
|
||||
/mealie/frontend/
|
||||
|
||||
# PyInstaller
|
||||
# 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.
|
||||
@@ -154,10 +157,8 @@ dev/data/backups/dev_sample_data*.zip
|
||||
dev/data/recipes/*
|
||||
dev/scripts/output/app_routes.py
|
||||
dev/scripts/output/javascriptAPI/*
|
||||
mealie/services/scraper/ingredient_nlp/model.crfmodel
|
||||
dev/code-generation/generated/openapi.json
|
||||
dev/code-generation/generated/test_routes.py
|
||||
mealie/services/parser_services/crfpp/model.crfmodel
|
||||
lcov.info
|
||||
dev/code-generation/openapi.json
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ repos:
|
||||
exclude: ^tests/data/
|
||||
- repo: https://github.com/astral-sh/ruff-pre-commit
|
||||
# Ruff version.
|
||||
rev: v0.9.4
|
||||
rev: v0.11.4
|
||||
hooks:
|
||||
- id: ruff
|
||||
- id: ruff-format
|
||||
|
||||
4
.vscode/settings.json
vendored
4
.vscode/settings.json
vendored
@@ -60,5 +60,9 @@
|
||||
},
|
||||
"[vue]": {
|
||||
"editor.formatOnSave": false
|
||||
},
|
||||
"[python]": {
|
||||
"editor.formatOnSave": true,
|
||||
"editor.defaultFormatter": "charliermarsh.ruff"
|
||||
}
|
||||
}
|
||||
|
||||
99
Taskfile.yml
99
Taskfile.yml
@@ -41,35 +41,31 @@ tasks:
|
||||
setup:ui:
|
||||
desc: setup frontend dependencies
|
||||
dir: frontend
|
||||
run: once
|
||||
cmds:
|
||||
- yarn install
|
||||
sources:
|
||||
- package.json
|
||||
- yarn.lock
|
||||
generates:
|
||||
- node_modules/**
|
||||
|
||||
setup:py:
|
||||
desc: setup python dependencies
|
||||
run: once
|
||||
cmds:
|
||||
- poetry install --with main,dev,postgres
|
||||
- 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:
|
||||
# using pyproject.toml as the dependency since this should only ever need to run once
|
||||
# during setup. There is perhaps a better way to do this.
|
||||
- ./pyproject.toml
|
||||
generates:
|
||||
- ./mealie/services/parser_services/crfpp/model.crfmodel
|
||||
cmds:
|
||||
- curl -L0 {{ .MODEL_URL }} --output {{ .OUTPUT }}
|
||||
- poetry.lock
|
||||
- pyproject.toml
|
||||
- .pre-commit-config.yaml
|
||||
|
||||
setup:
|
||||
desc: setup all dependencies
|
||||
deps:
|
||||
- setup:ui
|
||||
- setup:py
|
||||
- setup:model
|
||||
|
||||
dev:generate:
|
||||
desc: run code generators
|
||||
@@ -131,6 +127,63 @@ tasks:
|
||||
- poetry run coverage 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:
|
||||
desc: runs the backend server
|
||||
cmds:
|
||||
@@ -160,6 +213,14 @@ tasks:
|
||||
cmds:
|
||||
- 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:
|
||||
desc: runs the frontend linter
|
||||
dir: frontend
|
||||
@@ -184,6 +245,16 @@ tasks:
|
||||
cmds:
|
||||
- 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:
|
||||
desc: builds and runs the production docker image locally
|
||||
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 \
|
||||
--prefer-offline \
|
||||
@@ -26,14 +29,10 @@ ENV PYTHONUNBUFFERED=1 \
|
||||
PIP_NO_CACHE_DIR=off \
|
||||
PIP_DISABLE_PIP_VERSION_CHECK=on \
|
||||
PIP_DEFAULT_TIMEOUT=100 \
|
||||
POETRY_HOME="/opt/poetry" \
|
||||
POETRY_VIRTUALENVS_IN_PROJECT=true \
|
||||
POETRY_NO_INTERACTION=1 \
|
||||
PYSETUP_PATH="/opt/pysetup" \
|
||||
VENV_PATH="/opt/pysetup/.venv"
|
||||
VENV_PATH="/opt/mealie"
|
||||
|
||||
# prepend poetry and venv to path
|
||||
ENV PATH="$POETRY_HOME/bin:$VENV_PATH/bin:$PATH"
|
||||
# prepend venv to path
|
||||
ENV PATH="$VENV_PATH/bin:$PATH"
|
||||
|
||||
# create user account
|
||||
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
|
||||
|
||||
###############################################
|
||||
# Builder Image
|
||||
# Backend Package Build
|
||||
###############################################
|
||||
FROM python-base as builder-base
|
||||
FROM python-base AS backend-builder
|
||||
RUN apt-get update \
|
||||
&& apt-get install --no-install-recommends -y \
|
||||
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 \
|
||||
libpq-dev \
|
||||
libwebp-dev \
|
||||
# LDAP Dependencies
|
||||
libsasl2-dev libldap2-dev libssl-dev \
|
||||
gnupg gnupg2 gnupg1 \
|
||||
&& rm -rf /var/lib/apt/lists/* \
|
||||
&& pip install -U --no-cache-dir pip
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
RUN python3 -m venv --upgrade-deps $VENV_PATH
|
||||
|
||||
# install poetry - respects $POETRY_VERSION & $POETRY_HOME
|
||||
ENV POETRY_VERSION=1.3.1
|
||||
RUN curl -sSL https://install.python-poetry.org | python3 -
|
||||
# Install the wheel and all dependencies into the venv
|
||||
FROM venv-builder-base AS venv-builder
|
||||
|
||||
# copy project requirement files here to ensure they will be cached.
|
||||
WORKDIR $PYSETUP_PATH
|
||||
COPY ./poetry.lock ./pyproject.toml ./
|
||||
# Copy built package (wheel) and its dependency requirements
|
||||
COPY --from=packages * /dist/
|
||||
|
||||
# install runtime deps - uses $POETRY_VIRTUALENVS_IN_PROJECT internally
|
||||
RUN poetry install -E pgsql --only main
|
||||
|
||||
###############################################
|
||||
# CRFPP Image
|
||||
###############################################
|
||||
FROM hkotel/crfpp as crfpp
|
||||
|
||||
RUN echo "crfpp-container"
|
||||
# Install the wheel with exact versions of dependencies into the venv
|
||||
RUN . $VENV_PATH/bin/activate \
|
||||
&& pip install --require-hashes -r /dist/requirements.txt --find-links /dist
|
||||
|
||||
###############################################
|
||||
# Production Image
|
||||
@@ -96,39 +138,20 @@ RUN apt-get update \
|
||||
# create directory used for Docker Secrets
|
||||
RUN mkdir -p /run/secrets
|
||||
|
||||
# copying poetry and venv into image
|
||||
COPY --from=builder-base $POETRY_HOME $POETRY_HOME
|
||||
COPY --from=builder-base $PYSETUP_PATH $PYSETUP_PATH
|
||||
# Copy venv into image. It contains a fully-installed mealie backend and frontend.
|
||||
COPY --from=venv-builder $VENV_PATH $VENV_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
|
||||
# install nltk data for the ingredient parser
|
||||
ENV NLTK_DATA="/nltk_data/"
|
||||
RUN mkdir -p $NLTK_DATA
|
||||
RUN python -m nltk.downloader -d $NLTK_DATA averaged_perceptron_tagger_eng
|
||||
|
||||
VOLUME [ "$MEALIE_HOME/data/" ]
|
||||
ENV APP_PORT=9000
|
||||
|
||||
EXPOSE ${APP_PORT}
|
||||
|
||||
HEALTHCHECK CMD python $MEALIE_HOME/mealie/scripts/healthcheck.py || exit 1
|
||||
|
||||
# ----------------------------------
|
||||
# Copy Frontend
|
||||
|
||||
ENV STATIC_FILES=/spa/static
|
||||
COPY --from=builder /app/dist ${STATIC_FILES}
|
||||
HEALTHCHECK CMD python -m mealie.scripts.healthcheck || exit 1
|
||||
|
||||
ENV HOST 0.0.0.0
|
||||
|
||||
|
||||
@@ -32,13 +32,51 @@ init() {
|
||||
cd /app
|
||||
|
||||
# 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
|
||||
init
|
||||
load_secrets
|
||||
|
||||
# Start API
|
||||
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 .
|
||||
```
|
||||
@@ -1,82 +0,0 @@
|
||||
# Using iOS Shortcuts with Mealie
|
||||
|
||||
!!! info
|
||||
This guide was submitted by a community member. Find something wrong? Submit a PR to get it fixed!
|
||||
|
||||
Don't know what an iOS shortcut is? Neither did I! Experienced iOS users may already be familiar with this utility but for the uninitiated, here is the official Apple explanation:
|
||||
|
||||
> A shortcut is a quick way to get one or more tasks done with your apps. The Shortcuts app lets you create your own shortcuts with multiple steps. For example, build a “Surf Time” shortcut that grabs the surf report, gives an ETA to the beach, and launches your surf music playlist.
|
||||
|
||||
Basically it is a visual scripting language that lets a user build an automation in a guided fashion. The automation can be [shared with anyone](https://www.icloud.com/shortcuts/94aa272af5ff4d2c8fe5e13a946f89a9) but if it is a user creation, you'll have to jump through a few hoops to make an untrusted automation work on your device.
|
||||
|
||||
## Setup Video
|
||||
|
||||
The following YouTube video walks through setting up the shortcut in 3 minutes for those who prefer following along visually.
|
||||
|
||||
<iframe width="560" height="315" src="https://www.youtube.com/embed/XZk6S1MVUrE?si=HGH07RbK-Ip_1qFz" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
|
||||
|
||||
## Guide
|
||||
|
||||
### Prerequisites
|
||||
|
||||
Before setting up the shortcut, make sure you have the following information ready and easily accessable on your Apple device.
|
||||
|
||||
1. The URL of your Mealie instance
|
||||
2. An API Key for your user
|
||||
3. A Gemini API Key from [Google AI Studio](https://makersuite.google.com)
|
||||
|
||||
!!! note
|
||||
A Gemini API Key is not required for importing URLs from Safari or your Camera, however you will not be able to take a photo of a recipe and import it without a Gemini key.
|
||||
|
||||
Google AI Studio is currently only available in [certain countries and languages](https://ai.google.dev/available_regions). Most notably it is not currently available in Europe.
|
||||
|
||||
### Setup
|
||||
|
||||
On the Apple device you wish to add the shortcut to, click on [this link](https://www.icloud.com/shortcuts/94aa272af5ff4d2c8fe5e13a946f89a9) to begin the setup of the shortcut.
|
||||
|
||||

|
||||
|
||||
Next, you need to replace `url` and `port` with the information for your Mealie instance.
|
||||
|
||||
If you have a domain that you use (e.g. `https://mealie.example.com`), put that here. If you just run local, then you need to put in your Mealie instance IP and the port you use (e.g. the default is `9925`).
|
||||
|
||||

|
||||
|
||||
Next, you need to replace `MEALIE_API_KEY` with your API token.
|
||||
|
||||

|
||||
|
||||
Finally, replace `GEMINI_API_KEY` with the one you got from [Google AI Studio](https://makersuite.google.com)
|
||||
|
||||

|
||||
|
||||
You may wish to [add the shortcut to your home screen](https://support.apple.com/guide/shortcuts/add-a-shortcut-to-the-home-screen-apd735880972/ios) for easier access.
|
||||
|
||||
## Features
|
||||
|
||||
- Share a website from Safari with Mealie to import via URL.
|
||||
- Share a recipe photo from photos to perform OCR and import a physical recipe.
|
||||
- Trigger the shortcut and take a photo of a physical recipe to import.
|
||||
- Trigger the shortcut to select a photo from your Photos app to import.
|
||||
- Trigger the shortcut to take a picture of a URL (like on the bottom of a printed recipe) to import.
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
Sometimes Gemini will not be able to parse a recipe, and you will get an error. Users have found success with a combination of the following:
|
||||
|
||||
1. #### Try Again
|
||||
Sometimes Gemini returns the wrong information which causes the import to fail. Often, trying again will be successful.
|
||||
|
||||
2. #### Photo Quality
|
||||
Make sure there is no large glare or shadow over the picture, and you have all the text in frame.
|
||||
|
||||
3. #### Edit the Photo
|
||||
Users have found success by cropping the picture to just the recipe card, adding a "mono" filter, and cranking up the exposure before importing.
|
||||
|
||||
## History
|
||||
|
||||
User [brasilikum](https://github.com/brasilikum) opened an issue on the main repo about how they had created an [iOS shortcut](https://github.com/mealie-recipes/mealie/issues/103) for interested users.
|
||||
|
||||
This original method broke after the transition to version 1.X and an issue was raised on [Github](https://github.com/mealie-recipes/mealie/issues/2092) GitHub user [Zippyy](https://github.com/zippyy) has helped to create a working shortcut for version 1.X.
|
||||
|
||||
When OCR was removed from Mealie, GitHub user [hunterjm](https://github.com/zippyy) created a new shortcut that uses Apple's built-in OCR and Google Gemini to enhance and replace that functionality.
|
||||
@@ -148,7 +148,7 @@
|
||||
```shell
|
||||
docker exec -it mealie bash
|
||||
|
||||
python /app/mealie/scripts/reset_locked_users.py
|
||||
python /opt/mealie/lib64/python3.12/site-packages/mealie/scripts/reset_locked_users.py
|
||||
```
|
||||
|
||||
|
||||
@@ -161,7 +161,7 @@
|
||||
```shell
|
||||
docker exec -it mealie bash
|
||||
|
||||
python /app/mealie/scripts/make_admin.py
|
||||
python /opt/mealie/lib64/python3.12/site-packages/mealie/scripts/make_admin.py
|
||||
```
|
||||
|
||||
|
||||
@@ -174,7 +174,7 @@
|
||||
```shell
|
||||
docker exec -it mealie bash
|
||||
|
||||
python /app/mealie/scripts/change_password.py
|
||||
python /opt/mealie/lib64/python3.12/site-packages/mealie/scripts/change_password.py
|
||||
```
|
||||
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@ Mealie has a robust and flexible recipe organization system with a few different
|
||||
|
||||
#### 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 }
|
||||
|
||||
@@ -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.
|
||||
|
||||
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 }
|
||||
|
||||
@@ -94,9 +117,9 @@ Mealie is designed to integrate with many different external services. There are
|
||||
### Notifiers
|
||||
|
||||
Notifiers are event-driven notifications sent when specific actions are performed within Mealie. Some actions include:
|
||||
- creating a recipe
|
||||
- adding items to a shopping list
|
||||
- creating a new mealplan
|
||||
- Creating / Updating a recipe
|
||||
- Adding items to a shopping list
|
||||
- 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:
|
||||
|
||||
|
||||
@@ -31,27 +31,27 @@
|
||||
|
||||
### Database
|
||||
|
||||
| Variables | Default | Description |
|
||||
| --------------------- | :------: | ----------------------------------------------------------------------- |
|
||||
| DB_ENGINE | sqlite | Optional: 'sqlite', 'postgres' |
|
||||
| POSTGRES_USER | mealie | Postgres database user |
|
||||
| POSTGRES_PASSWORD | mealie | Postgres database password |
|
||||
| POSTGRES_SERVER | postgres | Postgres database server address |
|
||||
| POSTGRES_PORT | 5432 | Postgres database port |
|
||||
| POSTGRES_DB | mealie | Postgres database name |
|
||||
| POSTGRES_URL_OVERRIDE | None | Optional Postgres URL override to use instead of POSTGRES\_\* variables |
|
||||
| Variables | Default | Description |
|
||||
| ------------------------------------------------------- | :------: | ----------------------------------------------------------------------- |
|
||||
| DB_ENGINE | sqlite | Optional: 'sqlite', 'postgres' |
|
||||
| POSTGRES_USER<super>[†][secrets]</super> | mealie | Postgres database user |
|
||||
| POSTGRES_PASSWORD<super>[†][secrets]</super> | mealie | Postgres database password |
|
||||
| POSTGRES_SERVER<super>[†][secrets]</super> | postgres | Postgres database server address |
|
||||
| POSTGRES_PORT<super>[†][secrets]</super> | 5432 | Postgres database port |
|
||||
| POSTGRES_DB<super>[†][secrets]</super> | mealie | Postgres database name |
|
||||
| POSTGRES_URL_OVERRIDE<super>[†][secrets]</super> | None | Optional Postgres URL override to use instead of POSTGRES\_\* variables |
|
||||
|
||||
### Email
|
||||
|
||||
| Variables | Default | Description |
|
||||
| ------------------ | :-----: | ------------------------------------------------- |
|
||||
| SMTP_HOST | None | Required For email |
|
||||
| SMTP_PORT | 587 | Required For email |
|
||||
| ----------------------------------------------- | :-----: | ------------------------------------------------- |
|
||||
| SMTP_HOST<super>[†][secrets]</super> | None | Required For email |
|
||||
| SMTP_PORT<super>[†][secrets]</super> | 587 | Required For email |
|
||||
| SMTP_FROM_NAME | Mealie | Required For email |
|
||||
| SMTP_AUTH_STRATEGY | TLS | Required For email, Options: 'TLS', 'SSL', 'NONE' |
|
||||
| SMTP_FROM_EMAIL | None | Required For email |
|
||||
| SMTP_USER | None | Required if SMTP_AUTH_STRATEGY is 'TLS' or 'SSL' |
|
||||
| SMTP_PASSWORD | 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<super>[†][secrets]</super> | None | Required if SMTP_AUTH_STRATEGY is 'TLS' or 'SSL' |
|
||||
|
||||
### Webworker
|
||||
|
||||
@@ -73,15 +73,15 @@ Use this only when mealie is run without a webserver or reverse proxy.
|
||||
### LDAP
|
||||
|
||||
| Variables | Default | Description |
|
||||
| -------------------- | :-----: | ----------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| ----------------------------------------------------- | :-----: | ----------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| 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_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_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_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_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 |
|
||||
@@ -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)
|
||||
|
||||
| Variables | Default | Description |
|
||||
|---------------------------------------------------|:-------:|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| ----------------------------------------------------------------------------------- | :-----: | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| 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_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_CLIENT_ID | 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_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_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_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_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<super>[†][secrets]</super> | None | The client id 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, 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 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 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_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_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** |
|
||||
@@ -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"}'`)
|
||||
|
||||
| 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_API_KEY | None | Your OpenAI API Key. Enables OpenAI-related features |
|
||||
| ------------------------------------------------- | :-----: | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| 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<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_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 |
|
||||
@@ -154,24 +155,80 @@ Setting the following environmental variables will change the theme of the front
|
||||
|
||||
### Docker Secrets
|
||||
|
||||
Setting a credential can be done using secrets when running in a Docker container.
|
||||
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.
|
||||
Note that environment variables take priority over secrets, so any previously defined environment variables should be removed when migrating to secrets.
|
||||
### Docker Secrets
|
||||
|
||||
> <super>†</super> Starting in version `2.4.2`, any environment variable in the preceding lists with a dagger
|
||||
> 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
|
||||
services:
|
||||
mealie:
|
||||
...
|
||||
environment:
|
||||
...
|
||||
POSTGRES_USER: postgres
|
||||
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:
|
||||
POSTGRES_PASSWORD:
|
||||
file: postgrespassword.txt
|
||||
postgres-host:
|
||||
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
|
||||
|
||||
@@ -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:
|
||||
|
||||
1. Take a backup just in case!
|
||||
2. Replace the image for the API container with `ghcr.io/mealie-recipes/mealie:v2.5.0`
|
||||
2. Replace the image for the API container with `ghcr.io/mealie-recipes/mealie:v2.8.0`
|
||||
3. Take the external port from the frontend container and set that as the port mapped to port `9000` on the new container. The frontend is now served on port 9000 from the new container, so it will need to be mapped for you to have access.
|
||||
4. Restart the container
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ PostgreSQL might be considered if you need to support many concurrent users. In
|
||||
```yaml
|
||||
services:
|
||||
mealie:
|
||||
image: ghcr.io/mealie-recipes/mealie:v2.5.0 # (3)
|
||||
image: ghcr.io/mealie-recipes/mealie:v2.8.0 # (3)
|
||||
container_name: mealie
|
||||
restart: always
|
||||
ports:
|
||||
|
||||
@@ -11,7 +11,7 @@ SQLite is a popular, open source, self-contained, zero-configuration database th
|
||||
```yaml
|
||||
services:
|
||||
mealie:
|
||||
image: ghcr.io/mealie-recipes/mealie:v2.5.0 # (3)
|
||||
image: ghcr.io/mealie-recipes/mealie:v2.8.0 # (3)
|
||||
container_name: mealie
|
||||
restart: always
|
||||
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
|
||||
- Perform a backups
|
||||
- Restore a backup
|
||||
- Create a backup
|
||||
- Upload a backup
|
||||
- Delete a backup (Confirmation Required)
|
||||
- Download a backup
|
||||
- Perform a restore
|
||||
|
||||
!!! 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.
|
||||
|
||||
## 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:
|
||||
|
||||
@@ -19,6 +26,9 @@ Before importing it's critical that you understand the following:
|
||||
- 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
|
||||
|
||||
!!! 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
|
||||
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.
|
||||
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -99,6 +99,7 @@ nav:
|
||||
- Non-Code: "contributors/non-coders.md"
|
||||
- Translating: "contributors/translating.md"
|
||||
- Developers Guide:
|
||||
- Building Packages: "contributors/developers-guide/building-packages.md"
|
||||
- Code Contributions: "contributors/developers-guide/code-contributions.md"
|
||||
- Dev Getting Started: "contributors/developers-guide/starting-dev-server.md"
|
||||
- Database Changes: "contributors/developers-guide/database-changes.md"
|
||||
|
||||
@@ -138,8 +138,8 @@ import RecipeIngredientListItem from "./RecipeIngredientListItem.vue";
|
||||
import { useUserApi } from "~/composables/api";
|
||||
import { alert } from "~/composables/use-toast";
|
||||
import { useShoppingListPreferences } from "~/composables/use-users/preferences";
|
||||
import { ShoppingListSummary } from "~/lib/api/types/household";
|
||||
import { Recipe, RecipeIngredient } from "~/lib/api/types/recipe";
|
||||
import { RecipeIngredient, ShoppingListAddRecipeParamsBulk, ShoppingListSummary } from "~/lib/api/types/household";
|
||||
import { Recipe } from "~/lib/api/types/recipe";
|
||||
|
||||
export interface RecipeWithScale extends Recipe {
|
||||
scale: number;
|
||||
@@ -342,12 +342,12 @@ export default defineComponent({
|
||||
}
|
||||
|
||||
async function addRecipesToList() {
|
||||
const promises: Promise<any>[] = [];
|
||||
recipeIngredientSections.value.forEach((section) => {
|
||||
if (!selectedShoppingList.value) {
|
||||
return;
|
||||
}
|
||||
|
||||
const recipeData: ShoppingListAddRecipeParamsBulk[] = [];
|
||||
recipeIngredientSections.value.forEach((section) => {
|
||||
const ingredients: RecipeIngredient[] = [];
|
||||
section.ingredientSections.forEach((ingSection) => {
|
||||
ingSection.ingredients.forEach((ing) => {
|
||||
@@ -361,24 +361,18 @@ export default defineComponent({
|
||||
return;
|
||||
}
|
||||
|
||||
promises.push(api.shopping.lists.addRecipe(
|
||||
selectedShoppingList.value.id,
|
||||
section.recipeId,
|
||||
section.recipeScale,
|
||||
ingredients,
|
||||
));
|
||||
recipeData.push(
|
||||
{
|
||||
recipeId: section.recipeId,
|
||||
recipeIncrementQuantity: section.recipeScale,
|
||||
recipeIngredients: ingredients,
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
let success = true;
|
||||
const results = await Promise.allSettled(promises);
|
||||
results.forEach((result) => {
|
||||
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"))
|
||||
const { error } = await api.shopping.lists.addRecipes(selectedShoppingList.value.id, recipeData);
|
||||
error ? alert.error(i18n.tc("recipe.failed-to-add-recipes-to-list"))
|
||||
: alert.success(i18n.tc("recipe.successfully-added-to-list"));
|
||||
|
||||
state.shoppingListDialog = false;
|
||||
state.shoppingListIngredientDialog = false;
|
||||
|
||||
@@ -86,29 +86,27 @@
|
||||
</BaseDialog>
|
||||
</div>
|
||||
<div>
|
||||
<div class="d-flex justify-center flex-wrap">
|
||||
<v-chip
|
||||
label
|
||||
:small="$vuetify.breakpoint.smAndDown"
|
||||
color="accent custom-transparent"
|
||||
class="ma-1 pa-3"
|
||||
<div v-if="lastMadeReady" class="d-flex justify-center flex-wrap">
|
||||
<v-row no-gutters class="d-flex flex-wrap align-center" style="font-size: larger;">
|
||||
<v-tooltip bottom>
|
||||
<template #activator="{ on, attrs }">
|
||||
<v-btn
|
||||
rounded
|
||||
outlined
|
||||
x-large
|
||||
color="primary"
|
||||
v-bind="attrs"
|
||||
v-on="on"
|
||||
@click="madeThisDialog = true"
|
||||
>
|
||||
<v-icon left>
|
||||
{{ $globals.icons.calendar }}
|
||||
</v-icon>
|
||||
<div v-if="lastMadeReady">
|
||||
{{ $t('recipe.last-made-date', { date: lastMade ? new Date(lastMade).toLocaleDateString($i18n.locale) : $t("general.never") } ) }}
|
||||
</div>
|
||||
<div v-else>
|
||||
<AppLoader tiny />
|
||||
</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>
|
||||
<v-icon left large>{{ $globals.icons.calendar }}</v-icon>
|
||||
<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 right large>{{ $globals.icons.createAlt }}</v-icon>
|
||||
</v-btn>
|
||||
</template>
|
||||
<span>{{ $tc("recipe.made-this") }}</span>
|
||||
</v-tooltip>
|
||||
</v-row>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -14,15 +14,16 @@
|
||||
</v-card-title>
|
||||
<v-divider class="my-2" />
|
||||
<SafeMarkdown :source="recipe.description" />
|
||||
<v-divider />
|
||||
<v-container class="d-flex flex-row flex-wrap justify-center align-center">
|
||||
<div class="mx-5">
|
||||
<v-row no-gutters class="mb-1">
|
||||
<v-divider v-if="recipe.description" />
|
||||
<v-container class="d-flex flex-row flex-wrap justify-center">
|
||||
<div class="mx-6">
|
||||
<v-row no-gutters>
|
||||
<v-col v-if="recipe.recipeYieldQuantity || recipe.recipeYield" cols="12" class="d-flex flex-wrap justify-center">
|
||||
<RecipeYield
|
||||
:yield-quantity="recipe.recipeYieldQuantity"
|
||||
:yield="recipe.recipeYield"
|
||||
:scale="recipeScale"
|
||||
class="mb-4"
|
||||
/>
|
||||
</v-col>
|
||||
</v-row>
|
||||
@@ -31,18 +32,18 @@
|
||||
<RecipeLastMade
|
||||
v-if="isOwnGroup"
|
||||
:recipe="recipe"
|
||||
:class="true ? undefined : 'force-bottom'"
|
||||
class="mb-4"
|
||||
/>
|
||||
</v-col>
|
||||
</v-row>
|
||||
</div>
|
||||
<div class="mx-5">
|
||||
<div class="mx-6">
|
||||
<RecipeTimeCard
|
||||
stacked
|
||||
container-class="d-flex flex-wrap justify-center"
|
||||
:prep-time="recipe.prepTime"
|
||||
:total-time="recipe.totalTime"
|
||||
:perform-time="recipe.performTime"
|
||||
class="mb-4"
|
||||
/>
|
||||
</div>
|
||||
</v-container>
|
||||
|
||||
@@ -30,12 +30,17 @@
|
||||
<span v-html="recipeYield"></span>
|
||||
</v-chip>
|
||||
</div>
|
||||
<v-row class="d-flex justify-start">
|
||||
<RecipeTimeCard
|
||||
:prep-time="recipe.prepTime"
|
||||
:total-time="recipe.totalTime"
|
||||
:perform-time="recipe.performTime"
|
||||
small
|
||||
color="white"
|
||||
class="ml-4"
|
||||
/>
|
||||
</v-row>
|
||||
|
||||
<v-card-text v-if="preferences.showDescription" class="px-0">
|
||||
<SafeMarkdown :source="recipe.description" />
|
||||
</v-card-text>
|
||||
|
||||
@@ -1,41 +1,37 @@
|
||||
<template>
|
||||
<div v-if="stacked">
|
||||
<v-container>
|
||||
<v-row v-for="(time, index) in allTimes" :key="`${index}-stacked`" no-gutters>
|
||||
<v-col cols="12" :class="containerClass">
|
||||
<v-chip
|
||||
:small="$vuetify.breakpoint.smAndDown"
|
||||
label
|
||||
:color="color"
|
||||
class="ma-1"
|
||||
>
|
||||
<v-icon left>
|
||||
<template v-if="showCards">
|
||||
<div class="text-center">
|
||||
<!-- Total Time -->
|
||||
<div v-if="validateTotalTime" class="time-card-flex mx-auto">
|
||||
<v-row no-gutters class="d-flex flex-no-wrap align-center " :style="fontSize">
|
||||
<v-icon :x-large="!small" left color="primary">
|
||||
{{ $globals.icons.clockOutline }}
|
||||
</v-icon>
|
||||
{{ time.name }} |
|
||||
{{ time.value }}
|
||||
</v-chip>
|
||||
</v-col>
|
||||
<p class="my-0"><span class="font-weight-bold">{{ validateTotalTime.name }}</span><br>{{ validateTotalTime.value }}</p>
|
||||
</v-row>
|
||||
</v-container>
|
||||
</div>
|
||||
<div v-else>
|
||||
<v-container :class="containerClass">
|
||||
<v-chip
|
||||
v-for="(time, index) in allTimes"
|
||||
:key="index"
|
||||
:small="$vuetify.breakpoint.smAndDown"
|
||||
label
|
||||
:color="color"
|
||||
class="ma-1"
|
||||
<v-divider v-if="validateTotalTime && (validatePrepTime || validatePerformTime)" class="my-2" />
|
||||
<!-- Prep Time & Perform Time -->
|
||||
<div v-if="validatePrepTime || validatePerformTime" class="time-card-flex mx-auto">
|
||||
<v-row
|
||||
no-gutters
|
||||
class="d-flex justify-center align-center" :class="{'flex-column': $vuetify.breakpoint.smAndDown}"
|
||||
style="width: 100%;" :style="fontSize"
|
||||
>
|
||||
<v-icon left>
|
||||
{{ $globals.icons.clockOutline }}
|
||||
<div v-if="validatePrepTime" class="d-flex flex-no-wrap my-1">
|
||||
<v-icon :large="!small" :dense="small" left color="primary">
|
||||
{{ $globals.icons.knfife }}
|
||||
</v-icon>
|
||||
{{ time.name }} |
|
||||
{{ time.value }}
|
||||
</v-chip>
|
||||
</v-container>
|
||||
<p class="my-0"><span class="font-weight-bold">{{ validatePrepTime.name }}</span><br>{{ validatePrepTime.value }}</p>
|
||||
</div>
|
||||
<v-divider v-if="validatePrepTime && validatePerformTime" vertical class="mx-4" />
|
||||
<div v-if="validatePerformTime" class="d-flex flex-no-wrap my-1">
|
||||
<v-icon :large="!small" :dense="small" left color="primary">
|
||||
{{ $globals.icons.potSteam }}
|
||||
</v-icon>
|
||||
<p class="my-0"><span class="font-weight-bold">{{ validatePerformTime.name }}</span><br>{{ validatePerformTime.value }}</p>
|
||||
</div>
|
||||
</v-row>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -44,10 +40,6 @@ import { computed, defineComponent, useContext } from "@nuxtjs/composition-api";
|
||||
|
||||
export default defineComponent({
|
||||
props: {
|
||||
stacked: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
prepTime: {
|
||||
type: String,
|
||||
default: null,
|
||||
@@ -64,9 +56,9 @@ export default defineComponent({
|
||||
type: String,
|
||||
default: "accent custom-transparent"
|
||||
},
|
||||
containerClass: {
|
||||
type: String,
|
||||
default: undefined,
|
||||
small: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
},
|
||||
setup(props) {
|
||||
@@ -92,13 +84,16 @@ export default defineComponent({
|
||||
return !isEmpty(props.performTime) ? { name: i18n.t("recipe.perform-time"), value: props.performTime } : null;
|
||||
});
|
||||
|
||||
const allTimes = computed(() => {
|
||||
return [validateTotalTime.value, validatePrepTime.value, validatePerformTime.value].filter((x) => x !== null);
|
||||
const fontSize = computed(() => {
|
||||
return props.small ? { fontSize: "smaller" } : { fontSize: "larger" };
|
||||
});
|
||||
|
||||
return {
|
||||
showCards,
|
||||
allTimes,
|
||||
validateTotalTime,
|
||||
validatePrepTime,
|
||||
validatePerformTime,
|
||||
fontSize,
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
@@ -1,21 +1,20 @@
|
||||
<template>
|
||||
<div v-if="displayText" class="d-flex justify-space-between align-center">
|
||||
<v-chip
|
||||
:small="$vuetify.breakpoint.smAndDown"
|
||||
label
|
||||
:color="color"
|
||||
>
|
||||
<v-icon left>
|
||||
{{ $globals.icons.potSteam }}
|
||||
<div v-if="scaledAmount" class="d-flex align-center">
|
||||
<v-row no-gutters class="d-flex flex-wrap align-center" style="font-size: larger;">
|
||||
<v-icon x-large left color="primary">
|
||||
{{ $globals.icons.bread }}
|
||||
</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 -->
|
||||
<span v-html="displayText"></span>
|
||||
</v-chip>
|
||||
<span v-html="scaledAmount"></span> {{ text }}
|
||||
</p>
|
||||
</v-row>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import { computed, defineComponent, useContext } from "@nuxtjs/composition-api";
|
||||
import { defineComponent, computed } from "@nuxtjs/composition-api";
|
||||
import DOMPurify from "dompurify";
|
||||
import { useScaledAmount } from "~/composables/recipes/use-scaled-amount";
|
||||
|
||||
@@ -39,7 +38,6 @@ export default defineComponent({
|
||||
},
|
||||
},
|
||||
setup(props) {
|
||||
const { i18n } = useContext();
|
||||
|
||||
function sanitizeHTML(rawHtml: string) {
|
||||
return DOMPurify.sanitize(rawHtml, {
|
||||
@@ -48,21 +46,15 @@ export default defineComponent({
|
||||
});
|
||||
}
|
||||
|
||||
const displayText = computed(() => {
|
||||
if (!(props.yieldQuantity || props.yield)) {
|
||||
return "";
|
||||
}
|
||||
|
||||
const { scaledAmountDisplay } = useScaledAmount(props.yieldQuantity, props.scale);
|
||||
|
||||
return i18n.t("recipe.yields-amount-with-text", {
|
||||
amount: scaledAmountDisplay,
|
||||
text: sanitizeHTML(props.yield),
|
||||
}) as string;
|
||||
const scaledAmount = computed(() => {
|
||||
const {scaledAmountDisplay} = useScaledAmount(props.yieldQuantity, props.scale);
|
||||
return scaledAmountDisplay;
|
||||
});
|
||||
const text = sanitizeHTML(props.yield);
|
||||
|
||||
return {
|
||||
displayText,
|
||||
scaledAmount,
|
||||
text,
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
:label="$t('shopping-list.note')"
|
||||
rows="1"
|
||||
auto-grow
|
||||
autofocus
|
||||
@keypress="handleNoteKeyPress"
|
||||
></v-textarea>
|
||||
</div>
|
||||
@@ -80,15 +81,14 @@
|
||||
<v-spacer />
|
||||
</div>
|
||||
</v-card-text>
|
||||
</v-card>
|
||||
<v-card-actions class="ma-0 pt-0 pb-1 justify-end">
|
||||
<BaseButtonGroup
|
||||
:buttons="[
|
||||
{
|
||||
...(allowDelete ? [{
|
||||
icon: $globals.icons.delete,
|
||||
text: $t('general.delete'),
|
||||
event: 'delete',
|
||||
},
|
||||
}] : []),
|
||||
{
|
||||
icon: $globals.icons.close,
|
||||
text: $t('general.cancel'),
|
||||
@@ -111,6 +111,7 @@
|
||||
@toggle-foods="listItem.isFood = !listItem.isFood"
|
||||
/>
|
||||
</v-card-actions>
|
||||
</v-card>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -139,6 +140,11 @@ export default defineComponent({
|
||||
type: Array as () => IngredientFood[],
|
||||
required: true,
|
||||
},
|
||||
allowDelete: {
|
||||
type: Boolean,
|
||||
required: false,
|
||||
default: true,
|
||||
},
|
||||
},
|
||||
setup(props, context) {
|
||||
const foodStore = useFoodStore();
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
"docs": "Dokumentasie",
|
||||
"download-log": "Laai loglêer af",
|
||||
"download-recipe-json": "Laaste geskraapde JSON",
|
||||
"github": "Github",
|
||||
"github": "GitHub",
|
||||
"log-lines": "Log lyne",
|
||||
"not-demo": "Nie Demonstrasie Nie",
|
||||
"portfolio": "Portefeulje",
|
||||
@@ -579,7 +579,6 @@
|
||||
"made-this": "Ek het dit gemaak",
|
||||
"how-did-it-turn-out": "Hoe het dit uitgedraai?",
|
||||
"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.",
|
||||
"message-key": "Boodskap sleutel",
|
||||
"parse": "Verwerk",
|
||||
@@ -647,7 +646,6 @@
|
||||
"nextStep": "Next step",
|
||||
"recipe-actions": "Recipe Actions",
|
||||
"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.",
|
||||
"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",
|
||||
"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.",
|
||||
"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",
|
||||
"irreversible-acknowledgment": "Ek verstaan dat hierdie aksie onomkeerbaar en vernietigend is en dataverlies kan veroorsaak",
|
||||
"restore-backup": "Herlaai back-up"
|
||||
@@ -1050,8 +1048,8 @@
|
||||
"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-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-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-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": "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",
|
||||
"source-food": "Bron voedsel",
|
||||
"target-food": "Teiken voedsel",
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -579,7 +579,6 @@
|
||||
"made-this": "Сготвих рецептата",
|
||||
"how-did-it-turn-out": "Как се получи?",
|
||||
"user-made-this": "{user} направи това",
|
||||
"last-made-date": "Последно приготвена на {date}",
|
||||
"api-extras-description": "Екстрите за рецепти са ключова характеристика на Mealie API. Те Ви позволяват да създавате персонализирани JSON двойки ключ/стойност в рамките на рецепта, за да ги препращате към други приложения. Можете да използвате тези ключове, за да предоставите информация за задействане на автоматизация или персонализирани съобщения, за препращане към желаното от Вас устройство.",
|
||||
"message-key": "Ключ на съобщението",
|
||||
"parse": "Анализирай",
|
||||
@@ -647,7 +646,6 @@
|
||||
"nextStep": "Следваща стъпка",
|
||||
"recipe-actions": "Recipe Actions",
|
||||
"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.",
|
||||
"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": "Възстановяване на резервно копие",
|
||||
"back-restore-description": "Възстановяването на това резервно копие ще презапише цялата текуща информация във Вашата база данни и директорията с данни, и ще ги замени със съдържанието от резервното копие. {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": "процес за резервно копие/възстановяване в документацията",
|
||||
"irreversible-acknowledgment": "Разбирам, че това действие е невъзвращаемо, разрушително и може да доведе до загуба на данни",
|
||||
"restore-backup": "Възстановяване на резервно копие"
|
||||
@@ -1050,8 +1048,8 @@
|
||||
"foods": {
|
||||
"merge-dialog-text": "Комбинирането на избраните храни ще обедини изходната храна и целевата храна в една единствена храна. Изходната храна ще бъде изтрита и всички препратки към изходната храна ще бъдат актуализирани, за да сочат към целевата храна.",
|
||||
"merge-food-example": "Обединяване на {food1} с {food2}",
|
||||
"seed-dialog-text": "Изтеглете базата данни с продукти на вашия местен език. Ще бъдат заредени 200+ продукта, които да използвате за организиране на вашата база данни. Имената на продуктите се превеждат от общността.",
|
||||
"seed-dialog-warning": "Вече имате някои елементи във Вашата база данни. Това действие няма да съгласува дубликати, ще трябва да ги управлявате ръчно.",
|
||||
"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": "You have already have some items in your database. This action will not reconcile duplicates, you will have to manage them manually.",
|
||||
"combine-food": "Комбинирай Храни",
|
||||
"source-food": "Изходна храна",
|
||||
"target-food": "Целева храна",
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
"docs": "Documentació",
|
||||
"download-log": "Descarregueu el registre",
|
||||
"download-recipe-json": "Últim JSON recuperat",
|
||||
"github": "Github",
|
||||
"github": "GitHub",
|
||||
"log-lines": "Registre Línies",
|
||||
"not-demo": "No Demo",
|
||||
"portfolio": "Projectes",
|
||||
@@ -579,7 +579,6 @@
|
||||
"made-this": "Ho he fet",
|
||||
"how-did-it-turn-out": "Com ha sortit?",
|
||||
"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.",
|
||||
"message-key": "Clau del missatge",
|
||||
"parse": "Analitzar",
|
||||
@@ -647,7 +646,6 @@
|
||||
"nextStep": "Següent pas",
|
||||
"recipe-actions": "Accions de la Recepta",
|
||||
"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",
|
||||
"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.",
|
||||
@@ -722,7 +720,7 @@
|
||||
"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ó.",
|
||||
"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ó",
|
||||
"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"
|
||||
@@ -1050,8 +1048,8 @@
|
||||
"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-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-warning": "Ja teniu algunes dades a la vostra base. Aquesta acció no tindrà en compte duplicats i haureu d'eliminar-los manualment.",
|
||||
"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": "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",
|
||||
"source-food": "Aliment d'Origen",
|
||||
"target-food": "Aliment de Destí",
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
"docs": "Dokumentace",
|
||||
"download-log": "Stáhnout log",
|
||||
"download-recipe-json": "Poslední scrapovaný JSON",
|
||||
"github": "Github",
|
||||
"github": "GitHub",
|
||||
"log-lines": "Řádky logů",
|
||||
"not-demo": "Není demo",
|
||||
"portfolio": "Portfolio",
|
||||
@@ -352,7 +352,7 @@
|
||||
"random-side": "Náhodná příloha",
|
||||
"this-rule-will-apply": "Toto pravidlo se použije {dayCriteria} {mealTypeCriteria}.",
|
||||
"to-all-days": "na všechny dny",
|
||||
"on-days": "on {0}s",
|
||||
"on-days": "každé {0}",
|
||||
"for-all-meal-types": "pro všechny druhy jídel",
|
||||
"for-type-meal-types": "pro {0} druhy jídel",
|
||||
"meal-plan-rules": "Pravidla tvůrce jídelníčků",
|
||||
@@ -547,7 +547,7 @@
|
||||
"failed-to-add-recipe-to-mealplan": "Přidání receptu do jídelníčku selhalo",
|
||||
"failed-to-add-to-list": "Přidání do seznamu se nezdařilo",
|
||||
"yield": "Úroda",
|
||||
"yields-amount-with-text": "Yields {amount} {text}",
|
||||
"yields-amount-with-text": "Pro {amount} {text}",
|
||||
"yield-text": "Yield Text",
|
||||
"quantity": "Množství",
|
||||
"choose-unit": "Vybrat jednotku",
|
||||
@@ -579,7 +579,6 @@
|
||||
"made-this": "Toto jsem uvařil",
|
||||
"how-did-it-turn-out": "Jak to dopadlo?",
|
||||
"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í.",
|
||||
"message-key": "Klíč zprávy",
|
||||
"parse": "Analyzovat",
|
||||
@@ -647,7 +646,6 @@
|
||||
"nextStep": "Další krok",
|
||||
"recipe-actions": "Akce receptu",
|
||||
"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í",
|
||||
"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.",
|
||||
@@ -678,8 +676,8 @@
|
||||
"max-missing-tools": "Maximální počet chybějících nástrojů",
|
||||
"selected-tools": "Vybrané nástroje",
|
||||
"other-filters": "Jiné filtry",
|
||||
"ready-to-make": "Ready to Make",
|
||||
"almost-ready-to-make": "Almost Ready to Make"
|
||||
"ready-to-make": "Připraveno",
|
||||
"almost-ready-to-make": "Téměř připraveno"
|
||||
},
|
||||
"search": {
|
||||
"advanced-search": "Pokročilé vyhledávání",
|
||||
@@ -722,7 +720,7 @@
|
||||
"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.",
|
||||
"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": "Pokud používáte PostgreSQL, prosím zkontrolujte {backup-restore-process} před obnovou.",
|
||||
"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",
|
||||
"restore-backup": "Obnovit zálohu"
|
||||
@@ -810,7 +808,7 @@
|
||||
"webhooks-caps": "WEBHOOKY",
|
||||
"webhooks": "Webhooky",
|
||||
"webhook-name": "Název webhooku",
|
||||
"description": "The webhooks defined below will be executed when a meal is defined for the day. At the scheduled time the webhooks will be sent with the data from the recipe that is scheduled for the day. Note that webhook execution is not exact. The webhooks are executed on a 5 minutes interval so the webhooks will be executed within 5 +/- minutes of the scheduled."
|
||||
"description": "Webhooks definované níže budou vykonány, když bude pro daný den definováno jídlo. V plánovaném čase budou webhooks odeslány s daty z receptu, který je naplánován na daný den. Vezměte prosím na vědomí, že vykonání webhooku není přesné. Webhooks jsou vykonávány v intervalech po 5 minutách, takže budou vykonány v rozmezí 5 +/- minut od plánovaného času."
|
||||
},
|
||||
"bug-report": "Chybové hlášení",
|
||||
"bug-report-information": "Použijte tyto informace k nahlášení chyby. Poskytnutí podrobností vaší instance vývojářům je nejlepší způsob, jak rychle vyřešit vaše problémy.",
|
||||
@@ -1269,7 +1267,7 @@
|
||||
"openai": "OpenAI",
|
||||
"show-individual-confidence": "Zobrazit individuální důvěru",
|
||||
"ingredient-text": "Text přísady",
|
||||
"average-confident": "{0} Confident",
|
||||
"average-confident": "{0} Důvěra",
|
||||
"try-an-example": "Vyzkoušejte příklad",
|
||||
"parser": "Analyzátor",
|
||||
"background-tasks": "Úlohy na pozadí",
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
"docs": "Dokumenter",
|
||||
"download-log": "Download log",
|
||||
"download-recipe-json": "Sidst skrabet JSON",
|
||||
"github": "Github",
|
||||
"github": "GitHub",
|
||||
"log-lines": "Log linjer",
|
||||
"not-demo": "Ikke demo",
|
||||
"portfolio": "Portefølje",
|
||||
@@ -30,7 +30,7 @@
|
||||
"code": "Kode",
|
||||
"file": "Fil",
|
||||
"image": "Billede",
|
||||
"new-asset": "Ny aktiv",
|
||||
"new-asset": "Nyt aktiv",
|
||||
"pdf": "PDF",
|
||||
"recipe": "Opskrift",
|
||||
"show-assets": "Vis ekstramateriale",
|
||||
@@ -71,13 +71,13 @@
|
||||
"apprise-url-skipped-if-blank": "Informations link (sprunget over hvis ladet være tomt)",
|
||||
"enable-notifier": "Aktiver Notifikationer",
|
||||
"what-events": "Hvilke begivenheder skal denne anmelder abonnere på?",
|
||||
"user-events": "Bruger Hændelser",
|
||||
"mealplan-events": "Måltidsplan Begivenheder",
|
||||
"user-events": "Brugerhændelser",
|
||||
"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",
|
||||
"shopping-list-events": "Indkøbsliste begivenheder",
|
||||
"cookbook-events": "Kogebogs Begivenheder",
|
||||
"tag-events": "Tag Begivenheder",
|
||||
"category-events": "Kategori Begivenheder",
|
||||
"shopping-list-events": "Indkøbslistebegivenheder",
|
||||
"cookbook-events": "Kogebogsbegivenheder",
|
||||
"tag-events": "Tagbegivenheder",
|
||||
"category-events": "Kategoribegivenheder",
|
||||
"when-a-new-user-joins-your-group": "Når en ny bruger slutter sig til din gruppe",
|
||||
"recipe-events": "Hændelser for opskrifter"
|
||||
},
|
||||
@@ -88,21 +88,21 @@
|
||||
"close": "Luk",
|
||||
"confirm": "Bekræft",
|
||||
"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!",
|
||||
"create": "Opret",
|
||||
"created": "Oprettet",
|
||||
"custom": "Brugerdefineret",
|
||||
"dashboard": "Instrumentbræt",
|
||||
"dashboard": "Overblik",
|
||||
"delete": "Slet",
|
||||
"disabled": "Deaktiveret",
|
||||
"download": "Hent",
|
||||
"duplicate": "Dublikér",
|
||||
"duplicate": "Kopier",
|
||||
"edit": "Rediger",
|
||||
"enabled": "Aktiveret",
|
||||
"exception": "Undtagelse",
|
||||
"exception": "Afvigelse",
|
||||
"failed-count": "Fejlet: {count}",
|
||||
"failure-uploading-file": "Fejl ved upload af fil",
|
||||
"failure-uploading-file": "Filupload fejlede",
|
||||
"favorites": "Favoritter",
|
||||
"field-required": "Felt påkrævet",
|
||||
"file-folder-not-found": "Fil/mappe ikke fundet",
|
||||
@@ -113,7 +113,7 @@
|
||||
"get": "Hent",
|
||||
"home": "Hjem",
|
||||
"image": "Billede",
|
||||
"image-upload-failed": "Upload af billede fejlede",
|
||||
"image-upload-failed": "Billedeupload fejlede",
|
||||
"import": "Importere",
|
||||
"json": "JSON",
|
||||
"keyword": "Nøgleord",
|
||||
@@ -134,7 +134,7 @@
|
||||
"options": "Valgmuligheder:",
|
||||
"plural-name": "Navn i flertal",
|
||||
"print": "Udskriv",
|
||||
"print-preferences": "Print indstillinger",
|
||||
"print-preferences": "Printindstillinger",
|
||||
"random": "Tilfældig",
|
||||
"rating": "Bedømmelse",
|
||||
"recent": "Seneste",
|
||||
@@ -150,7 +150,7 @@
|
||||
"shuffle": "Bland",
|
||||
"sort": "Sorter",
|
||||
"sort-ascending": "Sorter stigende",
|
||||
"sort-descending": "Sorter Faldende",
|
||||
"sort-descending": "Sorter faldende",
|
||||
"sort-alphabetically": "Alfabetisk",
|
||||
"status": "Status",
|
||||
"subject": "Emne",
|
||||
@@ -163,7 +163,7 @@
|
||||
"themes": "Temaer",
|
||||
"thursday": "Torsdag",
|
||||
"title": "Titel",
|
||||
"token": "Token",
|
||||
"token": "Nøgle",
|
||||
"tuesday": "Tirsdag",
|
||||
"type": "Type",
|
||||
"update": "Gem",
|
||||
@@ -207,7 +207,7 @@
|
||||
"selected-count": "Valgt: {count}",
|
||||
"export-all": "Eksportér alle",
|
||||
"refresh": "Opdater",
|
||||
"upload-file": "Upload Fil",
|
||||
"upload-file": "Upload fil",
|
||||
"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.",
|
||||
"clipboard-copy-failure": "Kopiering til udklipsholderen mislykkedes.",
|
||||
@@ -217,7 +217,7 @@
|
||||
"show-advanced": "Vis avanceret",
|
||||
"add-field": "Tilføj felt",
|
||||
"date-created": "Oprettet",
|
||||
"date-updated": "Dato opdateret"
|
||||
"date-updated": "Opdateret"
|
||||
},
|
||||
"group": {
|
||||
"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-name": "Gruppenavn",
|
||||
"group-not-found": "Gruppen blev ikke fundet",
|
||||
"group-token": "Gruppe Token",
|
||||
"group-token": "Gruppetoken",
|
||||
"group-with-value": "Gruppe: {groupID}",
|
||||
"groups": "Grupper",
|
||||
"manage-groups": "Administrer grupper",
|
||||
@@ -240,7 +240,7 @@
|
||||
"user-group-created": "Brugergruppe oprettet",
|
||||
"user-group-creation-failed": "Oprettelse af brugergruppe fejlede",
|
||||
"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."
|
||||
},
|
||||
"manage-members": "Administrer medlemmer",
|
||||
@@ -250,17 +250,17 @@
|
||||
"invite": "Invitér",
|
||||
"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": "Standard Opskrift Indstillinger",
|
||||
"group-preferences": "Gruppe Indstillinger",
|
||||
"private-group": "Privat Gruppe",
|
||||
"default-recipe-preferences": "Standard opskriftsindstillinger",
|
||||
"group-preferences": "Gruppeindstillinger",
|
||||
"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",
|
||||
"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",
|
||||
"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",
|
||||
"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-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",
|
||||
"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",
|
||||
@@ -272,8 +272,8 @@
|
||||
"group-recipe-preferences": "Gruppe Indstillinger for opskrifter",
|
||||
"report": "Rapport",
|
||||
"report-with-id": "Rapport ID: {id}",
|
||||
"group-management": "Gruppe Håndtering",
|
||||
"admin-group-management": "Administrationsgruppe Håndtering",
|
||||
"group-management": "Gruppeadministration",
|
||||
"admin-group-management": "Administratorgruppeadministration",
|
||||
"admin-group-management-text": "Ændringer i denne gruppe vil træde i kraft øjeblikkeligt.",
|
||||
"group-id-value": "Gruppe-ID: {0}",
|
||||
"total-households": "Husholdninger i Alt",
|
||||
@@ -282,30 +282,30 @@
|
||||
"household": {
|
||||
"household": "Husholdning",
|
||||
"households": "Husholdninger",
|
||||
"user-household": "Bruger Husholdning",
|
||||
"create-household": "Opret Husholdning",
|
||||
"household-name": "Husholdningens Navn",
|
||||
"user-household": "Husholdning",
|
||||
"create-household": "Opret husholdning",
|
||||
"household-name": "Husholdningens navn",
|
||||
"household-group": "Husholdnings Gruppe",
|
||||
"household-management": "Husholdnings Administration",
|
||||
"manage-households": "Administrer Husholdninger",
|
||||
"admin-household-management": "Admin Husholdnings Administration",
|
||||
"household-management": "Husholdningsadministration",
|
||||
"manage-households": "Administrer husholdninger",
|
||||
"admin-household-management": "Husholdningsadministration",
|
||||
"admin-household-management-text": "Ændringer ved denne husholdning vil træde i kraft øjeblikkeligt.",
|
||||
"household-id-value": "Husholdning Id: {0}",
|
||||
"private-household": "Privat Husholdning",
|
||||
"household-id-value": "Id: {0}",
|
||||
"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",
|
||||
"lock-recipe-edits-from-other-households": "Lås opskrift redigeringer 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": "Lås ændringer fra andre husholdninger",
|
||||
"lock-recipe-edits-from-other-households-description": "Når aktiveret kan kun husholdningens brugere ændre dens opskrifter",
|
||||
"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.",
|
||||
"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",
|
||||
"household-preferences": "Husholdnings Præferencer"
|
||||
"household-preferences": "Præferencer"
|
||||
},
|
||||
"meal-plan": {
|
||||
"create-a-new-meal-plan": "Opret en ny madplan",
|
||||
"update-this-meal-plan": "Opdater denne måltidsplan",
|
||||
"dinner-this-week": "Madplan denne uge",
|
||||
"dinner-today": "Madplan i dag",
|
||||
"create-a-new-meal-plan": "Opret madplan",
|
||||
"update-this-meal-plan": "Ret denne madplan",
|
||||
"dinner-this-week": "Denne uges madplan",
|
||||
"dinner-today": "Dagens madplan",
|
||||
"dinner-tonight": "AFTENSMAD I AFTEN",
|
||||
"edit-meal-plan": "Rediger madplan",
|
||||
"end-date": "Slutdato",
|
||||
@@ -313,7 +313,7 @@
|
||||
"main": "Hovedret",
|
||||
"meal-planner": "Madplanlægger",
|
||||
"meal-plans": "Madplan",
|
||||
"mealplan-categories": "MADPLANKATEGORIER",
|
||||
"mealplan-categories": "MADPLANSKATEGORIER",
|
||||
"mealplan-created": "Madplan oprettet",
|
||||
"mealplan-creation-failed": "Oprettelse af madplan fejlede",
|
||||
"mealplan-deleted": "Madplan slettet",
|
||||
@@ -322,10 +322,10 @@
|
||||
"mealplan-update-failed": "Ændring af madplanen fejlede",
|
||||
"mealplan-updated": "Madplanen blev ændret",
|
||||
"mealplan-households-description": "Hvis ingen husstand er valgt, kan opskrifter tilføjes fra enhver husstand",
|
||||
"any-category": "Enhver kategori",
|
||||
"any-tag": "Ethvert tag",
|
||||
"any-household": "Enhver husholdning",
|
||||
"no-meal-plan-defined-yet": "Ingen madplan er defineret",
|
||||
"any-category": "Alle kategorier",
|
||||
"any-tag": "Alle tags",
|
||||
"any-household": "Alle husholdninger",
|
||||
"no-meal-plan-defined-yet": "Ingen madplaner er oprettet endnu",
|
||||
"no-meal-planned-for-today": "Ingen ret er planlagt til i dag",
|
||||
"numberOfDays-hint": "Antal dage ved sideindlæsning",
|
||||
"numberOfDays-label": "Standarddage",
|
||||
@@ -334,7 +334,7 @@
|
||||
"quick-week": "Hurtig uge",
|
||||
"side": "Tilbehør",
|
||||
"sides": "Tilbehør",
|
||||
"start-date": "Start dato",
|
||||
"start-date": "Startdato",
|
||||
"rule-day": "Regler for dage",
|
||||
"meal-type": "Måltidstype",
|
||||
"breakfast": "Morgenmad",
|
||||
@@ -365,11 +365,11 @@
|
||||
"meal-plan-settings": "Indstillinger for madplanlægning"
|
||||
},
|
||||
"migration": {
|
||||
"migration-data-removed": "Migrationsdata fjernet",
|
||||
"new-migration": "Ny Migrering",
|
||||
"no-file-selected": "Ingen Fil Valgt",
|
||||
"no-migration-data-available": "Ingen migrationsdata er tilgængelig",
|
||||
"previous-migrations": "Tidligere Migrationer",
|
||||
"migration-data-removed": "Migreringsdata fjernet",
|
||||
"new-migration": "Ny migrering",
|
||||
"no-file-selected": "Ingen fil valgt",
|
||||
"no-migration-data-available": "Ingen migreringsdata er tilgængelig",
|
||||
"previous-migrations": "Tidligere migreringer",
|
||||
"recipe-migration": "Migrering af opskrifter",
|
||||
"chowdown": {
|
||||
"description": "Migrer data fra Chowdown",
|
||||
@@ -383,37 +383,37 @@
|
||||
},
|
||||
"copymethat": {
|
||||
"description-long": "Mealie kan importere opskrifter fra Copy Me That. Eksportere dine opskrifter i HTML-format, og derefter uploade .zip-filen nedenfor.",
|
||||
"title": "Copy Me That opskrifts håndtering"
|
||||
"title": "Copy Me That opskriftshåndtering"
|
||||
},
|
||||
"paprika": {
|
||||
"description-long": "Mealie kan importere opskrifter fra Paprika applikationen. Eksporter dine opskrifter fra paprika, omdøbe eksportudvidelsen til .zip og uploade den nedenfor.",
|
||||
"title": "Paprika Opskrifts Håndtering"
|
||||
"description-long": "Mealie kan importere opskrifter fra Paprika. Eksporter dine opskrifter fra paprika, omdøbe eksportudvidelsen til .zip og uploade den nedenfor.",
|
||||
"title": "Paprika Recipe Manager"
|
||||
},
|
||||
"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.",
|
||||
"title": "Mealie Pre v1.0"
|
||||
"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 før v1.0"
|
||||
},
|
||||
"tandoor": {
|
||||
"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-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.",
|
||||
"choose-migration-type": "Vælg Migreringstype",
|
||||
"choose-migration-type": "Vælg migreringstype",
|
||||
"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.",
|
||||
"chowdown-text": "Mealie understøtter chowdown repository fil formater. Download repositoriet som en .zip-fil og upload den nedenfor.",
|
||||
"recipe-1": "Opskrift 1",
|
||||
"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.",
|
||||
"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.",
|
||||
"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 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": {
|
||||
"title": "Planlæg at spise",
|
||||
"description-long": "Mealie kan importere opskrifter, der er markeret som \"Planlæg at spise\"."
|
||||
"title": "Plan to Eat",
|
||||
"description-long": "Mealie kan importere opskrifter fra Plan to Eat."
|
||||
},
|
||||
"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."
|
||||
},
|
||||
"recipekeeper": {
|
||||
@@ -422,21 +422,21 @@
|
||||
}
|
||||
},
|
||||
"new-recipe": {
|
||||
"bulk-add": "Bulk Tilføj",
|
||||
"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.",
|
||||
"bulk-add": "Tilføj flere",
|
||||
"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",
|
||||
"from-url": "Fra URL",
|
||||
"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",
|
||||
"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-url": "URL på opskrift",
|
||||
"recipe-html-or-json": "Opskrift HTML eller JSON",
|
||||
"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",
|
||||
"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-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",
|
||||
@@ -449,10 +449,10 @@
|
||||
"all-recipes": "Alle Opskrifter",
|
||||
"new-page-created": "Ny side blev oprettet",
|
||||
"page": "Side",
|
||||
"page-creation-failed": "Oprettelse af side fejlede",
|
||||
"page-creation-failed": "Sideoprettelse fejlede",
|
||||
"page-deleted": "Side slettet",
|
||||
"page-deletion-failed": "Sletning af side fejlede",
|
||||
"page-update-failed": "Opdatering af side fejlede",
|
||||
"page-update-failed": "Sideopdatering fejlede",
|
||||
"page-updated": "Side opdateret",
|
||||
"pages-update-failed": "Opdatering af sider fejlede",
|
||||
"pages-updated": "Sider opdateret",
|
||||
@@ -476,7 +476,7 @@
|
||||
"description": "Beskrivelse",
|
||||
"disable-amount": "Slå ingrediensmængder fra",
|
||||
"disable-comments": "Slå kommentarer fra",
|
||||
"duplicate": "Duplikér opskrift",
|
||||
"duplicate": "Kopier opskrift",
|
||||
"duplicate-name": "Navngiv opskrift",
|
||||
"edit-scale": "Rediger skalering",
|
||||
"fat-content": "Fedt",
|
||||
@@ -511,17 +511,17 @@
|
||||
"recipe-name": "Opskriftens navn",
|
||||
"recipe-settings": "Opskriftsindstillinger",
|
||||
"recipe-update-failed": "Opdatering af opskrift fejlede",
|
||||
"recipe-updated": "Opskrift opdateret",
|
||||
"recipe-updated": "Senest opdateret",
|
||||
"remove-from-favorites": "Fjern fra favoritter",
|
||||
"remove-section": "Fjern sektion",
|
||||
"saturated-fat-content": "Mættet fedt",
|
||||
"save-recipe-before-use": "Gem opskrift før brug",
|
||||
"section-title": "Sektionstitel",
|
||||
"servings": "Portioner",
|
||||
"serves-amount": "Serves {amount}",
|
||||
"serves-amount": "{amount} portioner",
|
||||
"share-recipe-message": "Jeg vil gerne dele min opskrift \"{0}\" med dig.",
|
||||
"show-nutrition-values": "Vis ernæringstabel",
|
||||
"sodium-content": "Natrium",
|
||||
"sodium-content": "Salt",
|
||||
"step-index": "Trin: {step}",
|
||||
"sugar-content": "Sukker",
|
||||
"title": "Titel",
|
||||
@@ -547,8 +547,8 @@
|
||||
"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",
|
||||
"yield": "Portioner",
|
||||
"yields-amount-with-text": "Yields {amount} {text}",
|
||||
"yield-text": "Yield Text",
|
||||
"yields-amount-with-text": "{amount} {text}",
|
||||
"yield-text": "Portionsenhed (eks. pers./stk.)",
|
||||
"quantity": "Antal",
|
||||
"choose-unit": "Vælg enhed",
|
||||
"press-enter-to-create": "Tryk enter for at oprette",
|
||||
@@ -557,7 +557,7 @@
|
||||
"toggle-section": "Sektion",
|
||||
"see-original-text": "Vis den oprindelige tekst",
|
||||
"original-text-with-value": "Oprindelig tekst: {originalText}",
|
||||
"ingredient-linker": "Ingrediens-Linker",
|
||||
"ingredient-linker": "Ingrediens-linker",
|
||||
"linked-to-other-step": "Linket til andet trin",
|
||||
"auto": "Automatisk",
|
||||
"cook-mode": "Tilberedningsvisning",
|
||||
@@ -579,7 +579,6 @@
|
||||
"made-this": "Jeg har lavet denne",
|
||||
"how-did-it-turn-out": "Hvordan blev det?",
|
||||
"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.",
|
||||
"message-key": "Beskednøgle",
|
||||
"parse": "Behandl data",
|
||||
@@ -588,7 +587,7 @@
|
||||
"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.",
|
||||
"parse-ingredients": "Fortolk ingredienser",
|
||||
"edit-markdown": "Rediger Markdown",
|
||||
"edit-markdown": "Rediger markdown",
|
||||
"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å",
|
||||
"looking-for-migrations": "Kigger du efter data migrering?",
|
||||
@@ -604,13 +603,13 @@
|
||||
"should-translate-description": "Oversæt opskriften til mit sprog",
|
||||
"please-wait-image-procesing": "Vent venligst, billedet behandles. Dette kan tage lidt tid.",
|
||||
"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.",
|
||||
"new-recipe-names-must-be-unique": "Opskriftsnavnet er allerede i brug",
|
||||
"scrape-recipe": "Scrape 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-have-a-lot-of-recipes": "Har du en masse opskrifter, du ønsker at scrappe på en gang?",
|
||||
"scrape-recipe-suggest-bulk-importer": "Prøv masse import",
|
||||
"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, samt tilføje den til din samling.",
|
||||
"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-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",
|
||||
"import-original-keywords-as-tags": "Importér originale nøgleord som mærker",
|
||||
@@ -637,9 +636,9 @@
|
||||
"recipe-debugger-use-openai-description": "Brug OpenAI til at fortolke resultaterne i stedet for at stole på scraper biblioteket. Når du opretter en opskrift via URL, gøres dette automatisk, hvis skraberbiblioteket fejler, men du kan teste det manuelt her.",
|
||||
"debug": "Fejlsøgning",
|
||||
"tree-view": "Træ visning",
|
||||
"recipe-servings": "Recipe Servings",
|
||||
"recipe-servings": "Opskrift Servinger",
|
||||
"recipe-yield": "Udbytte af opskrift",
|
||||
"recipe-yield-text": "Recipe Yield Text",
|
||||
"recipe-yield-text": "Portioner",
|
||||
"unit": "Enhed",
|
||||
"upload-image": "Upload billede",
|
||||
"screen-awake": "Hold skærmen tændt",
|
||||
@@ -647,11 +646,10 @@
|
||||
"nextStep": "Næste trin",
|
||||
"recipe-actions": "Opskriftshandlinger",
|
||||
"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": "Ingrediens- Parser",
|
||||
"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.",
|
||||
"ingredient-parser": "Ingrediensfortolker",
|
||||
"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.",
|
||||
"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",
|
||||
"brute-parser": "Brute Parser",
|
||||
"openai-parser": "OpenAI Parser",
|
||||
@@ -662,11 +660,11 @@
|
||||
"no-food": "Ingen fødevarer"
|
||||
},
|
||||
"reset-servings-count": "Nulstil antal serveringer",
|
||||
"not-linked-ingredients": "Additional Ingredients"
|
||||
"not-linked-ingredients": "Yderligere ingredienser"
|
||||
},
|
||||
"recipe-finder": {
|
||||
"recipe-finder": "Opskrift 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": "Opskriftssøger",
|
||||
"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",
|
||||
"no-ingredients-selected": "Ingen ingredienser valgt",
|
||||
"missing": "Mangler",
|
||||
@@ -675,8 +673,8 @@
|
||||
"include-ingredients-on-hand": "Inkluder ingredienser du allerede har",
|
||||
"include-tools-on-hand": "Inkluder værktøjer du allerede har",
|
||||
"max-missing-ingredients": "Maksimum Manglende Ingredienser",
|
||||
"max-missing-tools": "Max Missing Tools",
|
||||
"selected-tools": "Selected Tools",
|
||||
"max-missing-tools": "Maks. manglende redskaber",
|
||||
"selected-tools": "Valgte redskaber",
|
||||
"other-filters": "Andre filtre",
|
||||
"ready-to-make": "Klar til at lave",
|
||||
"almost-ready-to-make": "Næsten klar til at lave"
|
||||
@@ -695,7 +693,7 @@
|
||||
"search": "Søg",
|
||||
"search-mealie": "Søg Mealie (tryk /)",
|
||||
"search-placeholder": "Søg...",
|
||||
"tag-filter": "Tagfiler",
|
||||
"tag-filter": "Tagfilter",
|
||||
"search-hint": "Tryk '/'",
|
||||
"advanced": "Avanceret",
|
||||
"auto-search": "Automatisk søgning",
|
||||
@@ -715,15 +713,15 @@
|
||||
"delete-backup": "Slet backup",
|
||||
"error-creating-backup-see-log-file": "Der opstod en fejl under oprettelse af backuppen. Se log-filen",
|
||||
"full-backup": "Fuld backup",
|
||||
"import-summary": "Importer resumé",
|
||||
"import-summary": "Importresumé",
|
||||
"partial-backup": "Delvis 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.",
|
||||
"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.",
|
||||
"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.",
|
||||
"backup-restore-process-in-the-documentation": "backup/restore proces i dokumentationen",
|
||||
"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",
|
||||
"irreversible-acknowledgment": "Jeg forstår, at denne handling er irreversibel, destruktiv og kan forårsage tab af data",
|
||||
"restore-backup": "Gendan sikkerhedskopi"
|
||||
},
|
||||
@@ -743,10 +741,10 @@
|
||||
"show-recent": "Vis seneste opskrifter"
|
||||
},
|
||||
"language": "Sprog",
|
||||
"latest": "Seneste:",
|
||||
"latest": "Seneste",
|
||||
"local-api": "Lokal API",
|
||||
"locale-settings": "Lokale indstillinger",
|
||||
"migrations": "Migrationer",
|
||||
"migrations": "Migreringer",
|
||||
"new-page": "Ny side",
|
||||
"notify": "Notifikationer",
|
||||
"organize": "Organiser",
|
||||
@@ -805,12 +803,12 @@
|
||||
},
|
||||
"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>",
|
||||
"webhook-url": "Webhook adresse",
|
||||
"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 URL",
|
||||
"webhooks-caps": "WEBHOOKS",
|
||||
"webhooks": "Webhooks",
|
||||
"webhook-name": "Webhook navn",
|
||||
"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."
|
||||
"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 intervaler, så webhooks vil blive udført inden for 5 +/- minutter fra den planlagte tid."
|
||||
},
|
||||
"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.",
|
||||
@@ -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-success-text": "Påkrævede LDAP-variabler er alle angivet.",
|
||||
"build": "Build",
|
||||
"recipe-scraper-version": "Version på opskrift-indsamler",
|
||||
"oidc-ready": "OIDC er Klar",
|
||||
"recipe-scraper-version": "Version på opskriftsfortolker",
|
||||
"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-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-success-text": "Påkrævede OpenAI variabler er alle indstillet."
|
||||
},
|
||||
@@ -887,11 +885,11 @@
|
||||
"no-shopping-lists-found": "Ingen Indkøbslister fundet"
|
||||
},
|
||||
"sidebar": {
|
||||
"all-recipes": "Alle opskr.",
|
||||
"all-recipes": "Alle opskrifter",
|
||||
"backups": "Sikkerhedskopier",
|
||||
"categories": "Kategorier",
|
||||
"cookbooks": "Kogebøger",
|
||||
"dashboard": "Instrumentbræt",
|
||||
"dashboard": "Overblik",
|
||||
"home-page": "Forside",
|
||||
"manage-users": "Adm. brugere",
|
||||
"migrations": "Migrationer",
|
||||
@@ -932,23 +930,23 @@
|
||||
"tag": "Mærker"
|
||||
},
|
||||
"tool": {
|
||||
"tools": "Værktøjer",
|
||||
"on-hand": "Har Allerede",
|
||||
"create-a-tool": "Opret et værktøj",
|
||||
"tool-name": "Værktøjsnavn",
|
||||
"create-new-tool": "Opret et nyt værktøj",
|
||||
"tools": "Redskaber",
|
||||
"on-hand": "Har allerede",
|
||||
"create-a-tool": "Tilføj redskab",
|
||||
"tool-name": "Redskab",
|
||||
"create-new-tool": "Opret redskab",
|
||||
"on-hand-checkbox-label": "Vis som \"Har allerede\" (afkrydset)",
|
||||
"required-tools": "Nødvendige Værktøjer",
|
||||
"tool": "Værktøj"
|
||||
"required-tools": "Nødvendige redskaber",
|
||||
"tool": "Redskab"
|
||||
},
|
||||
"user": {
|
||||
"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-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-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",
|
||||
"create-link": "Link blev oprettet",
|
||||
"create-user": "Opret bruger",
|
||||
@@ -981,7 +979,7 @@
|
||||
"register": "Registrér",
|
||||
"reset-password": "Nulstil adgangskoden",
|
||||
"sign-in": "Log ind",
|
||||
"total-mealplans": "Antal Madplaner",
|
||||
"total-mealplans": "Antal madplaner",
|
||||
"total-users": "Antal brugere",
|
||||
"upload-photo": "Upload billede",
|
||||
"use-8-characters-or-more-for-your-password": "Adgangskode skal indeholde 8 tegn eller flere",
|
||||
@@ -999,8 +997,8 @@
|
||||
"users-header": "BRUGERE",
|
||||
"users": "Brugere",
|
||||
"user-not-found": "Brugeren kunne ikke findes",
|
||||
"webhook-time": "Webhook Tid",
|
||||
"webhooks-enabled": "Webhooks Aktiveret",
|
||||
"webhook-time": "Webhook tid",
|
||||
"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-delete-this-user": "Du har ikke rettigheder til at slette denne bruger",
|
||||
"enable-advanced-content": "Tillad avanceret indhold",
|
||||
@@ -1019,7 +1017,7 @@
|
||||
"very-strong": "Meget stærk"
|
||||
},
|
||||
"user-management": "Brugeradministration",
|
||||
"reset-locked-users": "Nulstil Låste Brugere",
|
||||
"reset-locked-users": "Nulstil låste brugere",
|
||||
"admin-user-creation": "Opret administratorbruger",
|
||||
"admin-user-management": "Håndter administratorbruger",
|
||||
"user-details": "Brugerdetaljer",
|
||||
@@ -1050,8 +1048,8 @@
|
||||
"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-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-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-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 undgå dubletter, så du må håndtere dem manuelt efterfølgende.",
|
||||
"combine-food": "Kombiner fødevarer",
|
||||
"source-food": "Kilde for fødevarer",
|
||||
"target-food": "Mål for fødevarer",
|
||||
@@ -1065,7 +1063,7 @@
|
||||
"on-hand-checkbox-label": "Ændring af dette flag ændrer markeringen, så denne fødevare ikke er markeret som standard, når du tilføjer en opskrift til en indkøbsliste."
|
||||
},
|
||||
"units": {
|
||||
"seed-dialog-text": "Opret standard enheder i dit sprog.",
|
||||
"seed-dialog-text": "Opret standardenheder i dit sprog.",
|
||||
"combine-unit-description": "Ved at kombinere de udvalgte enheder vil de to valgte enheder blive til en enkelt enhed. {source-unit-will-be-deleted} vil blive slettet, og alle henvisninger til denne vil blive opdateret til at pege på den anden enhed.",
|
||||
"combine-unit": "Kombiner enheder",
|
||||
"source-unit": "Kildeenhed",
|
||||
@@ -1094,7 +1092,7 @@
|
||||
"assign-label": "Tildel etiket"
|
||||
},
|
||||
"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?",
|
||||
"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.",
|
||||
@@ -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-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": "Eksport af Data",
|
||||
"data-exports": "Eksport af data",
|
||||
"tag": "Mærker",
|
||||
"categorize": "Kategorisér",
|
||||
"update-settings": "Opdatér indstillinger",
|
||||
"tag-recipes": "Tilføj mærker til opskrifter",
|
||||
"categorize-recipes": "Kategorisér Opskrifter",
|
||||
"export-recipes": "Eksportér Opskrifter",
|
||||
"delete-recipes": "Slet Opskrifter",
|
||||
"categorize-recipes": "Kategorisér opskrifter",
|
||||
"export-recipes": "Eksportér opskrifter",
|
||||
"delete-recipes": "Slet opskrifter",
|
||||
"source-unit-will-be-deleted": "Kildeenhed vil blive slettet"
|
||||
},
|
||||
"recipe-actions": {
|
||||
"recipe-actions-data": "Data for Opskriftshandlinger",
|
||||
"new-recipe-action": "Ny Opskriftshandling",
|
||||
"edit-recipe-action": "Rediger Opskriftshandling",
|
||||
"recipe-actions-data": "Opskriftshandlinger",
|
||||
"new-recipe-action": "Ny opskriftshandling",
|
||||
"edit-recipe-action": "Rediger opskriftshandling",
|
||||
"action-type": "Handlingstype"
|
||||
},
|
||||
"create-alias": "Opret alias",
|
||||
"manage-aliases": "Administrer Aliaser",
|
||||
"seed-data": "Opret standard data",
|
||||
"seed": "Frø",
|
||||
"manage-aliases": "Administrer aliaser",
|
||||
"seed-data": "Opret standarddata",
|
||||
"seed": "Kildedata",
|
||||
"data-management": "Datastyring",
|
||||
"data-management-description": "Vælg hvilket datasæt du ønsker at foretage ændringer til.",
|
||||
"select-data": "vælg data",
|
||||
@@ -1136,14 +1134,14 @@
|
||||
"category-data": "Kategoridata"
|
||||
},
|
||||
"tags": {
|
||||
"new-tag": "Nyt mærke",
|
||||
"edit-tag": "Rediger Mærke",
|
||||
"tag-data": "Mærke data"
|
||||
"new-tag": "Nyt tag",
|
||||
"edit-tag": "Rediger tag",
|
||||
"tag-data": "Tagoplysninger"
|
||||
},
|
||||
"tools": {
|
||||
"new-tool": "Nyt Værktøj",
|
||||
"edit-tool": "Redigér værktøjer",
|
||||
"tool-data": "Værktøjs Data"
|
||||
"new-tool": "Nyt redskab",
|
||||
"edit-tool": "Redigér redskaber",
|
||||
"tool-data": "Redskabsoplysninger"
|
||||
}
|
||||
},
|
||||
"user-registration": {
|
||||
@@ -1173,7 +1171,7 @@
|
||||
"recipe-share": {
|
||||
"expiration-date": "Udløbsdato",
|
||||
"share-recipe": "Del opskrift",
|
||||
"default-30-days": "Standard 30 Dage",
|
||||
"default-30-days": "Standard 30 dage",
|
||||
"expires-at": "Udløber den",
|
||||
"recipe-link-copied-message": "Link til opskrift er kopieret til udklipsholder"
|
||||
},
|
||||
@@ -1194,12 +1192,12 @@
|
||||
"demo_password": "Adgangskode: {password}"
|
||||
},
|
||||
"ocr-editor": {
|
||||
"ocr-editor": "Ocr redigering",
|
||||
"ocr-editor": "OCR redigering",
|
||||
"toolbar": "Værktøjslinje",
|
||||
"selection-mode": "Markeringstilstand",
|
||||
"pan-and-zoom-picture": "Panorer og zoom på billede",
|
||||
"split-text": "Opdel tekst",
|
||||
"preserve-line-breaks": "Bevar original linjeskift",
|
||||
"preserve-line-breaks": "Bevar oprindelige linjeskift",
|
||||
"split-by-block": "Opdelt efter tekstblok",
|
||||
"flatten": "Udjævn på trods af original formatering",
|
||||
"help": {
|
||||
@@ -1212,7 +1210,7 @@
|
||||
"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."
|
||||
},
|
||||
"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.",
|
||||
"split-text-mode": "Opdelt teksttilstand",
|
||||
"split-modes": {
|
||||
@@ -1230,7 +1228,7 @@
|
||||
"storage-details": "Lageroplysninger",
|
||||
"page-title": "Vedligeholdelse af webside",
|
||||
"summary-title": "Oversigt",
|
||||
"button-label-get-summary": "Hent Oversigt",
|
||||
"button-label-get-summary": "Hent oversigt",
|
||||
"button-label-open-details": "Detaljer",
|
||||
"info-description-data-dir-size": "Størrelse på datamappe",
|
||||
"info-description-log-file-size": "Størrelse på logfil",
|
||||
@@ -1245,18 +1243,18 @@
|
||||
},
|
||||
"action-delete-log-files-name": "Slet 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-temporary-files-name": "Slet midlertidige filer",
|
||||
"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",
|
||||
"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-irreversible": "irreversible",
|
||||
"logs-action-refresh": "Opdater logfiler",
|
||||
"logs-page-title": "Mealie logfiler",
|
||||
"logs-tail-lines-label": "Tail Lines"
|
||||
"logs-tail-lines-label": "Følg log"
|
||||
},
|
||||
"mainentance": {
|
||||
"actions-title": "Handlinger"
|
||||
@@ -1277,11 +1275,11 @@
|
||||
"no-logs-found": "Ingen logfiler fundet",
|
||||
"tasks": "Opgaver",
|
||||
"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",
|
||||
"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",
|
||||
"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",
|
||||
"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."
|
||||
@@ -1316,11 +1314,11 @@
|
||||
"group-settings": "Gruppeindstillinger",
|
||||
"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-settings": "Husholdnings Indstillinger",
|
||||
"household-settings-description": "Administrer dine husstandsindstillinger, såsom madplan og privatlivsindstillinger.",
|
||||
"cookbooks-description": "Administrer en samling af kategorier og generer sider for dem.",
|
||||
"household-settings": "Husholdningsindstillinger",
|
||||
"household-settings-description": "Administrer dine husholdningsindstillinger, såsom madplan og privatlivsindstillinger.",
|
||||
"cookbooks-description": "Administrer en samling af kategorier og opret sider til dem.",
|
||||
"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.",
|
||||
"notifiers": "Notifikationer",
|
||||
"notifiers-description": "Opsæt e-mail og push-notifikationer, der udløser på specifikke begivenheder.",
|
||||
@@ -1334,12 +1332,12 @@
|
||||
"preferences": "Indstillinger",
|
||||
"show-advanced-description": "Vis avancerede funktioner (API nøgler, Webhooks og Data Migrering)",
|
||||
"back-to-profile": "Tilbage til din profil",
|
||||
"looking-for-privacy-settings": "Leder du efter Privatlivsindstillinger?",
|
||||
"manage-your-api-tokens": "Håndtér API Tokens",
|
||||
"looking-for-privacy-settings": "Leder du efter privatlivsindstillinger?",
|
||||
"manage-your-api-tokens": "Håndtér API tokens",
|
||||
"manage-user-profile": "Administrer brugerprofil",
|
||||
"manage-cookbooks": "Administrer kogebøger",
|
||||
"manage-members": "Administrer medlemmer",
|
||||
"manage-webhooks": "Administrér Webhooks",
|
||||
"manage-webhooks": "Administrér webhooks",
|
||||
"manage-notifiers": "Administrer notifikationer",
|
||||
"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.",
|
||||
"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.",
|
||||
"require-all-categories": "Kræv Alle Kategorier",
|
||||
"require-all-tags": "Kræv Alle Mærker",
|
||||
"require-all-tools": "Kræv Alle Værktøjer",
|
||||
"require-all-categories": "Kræv alle kategorier",
|
||||
"require-all-tags": "Kræv alle tags",
|
||||
"require-all-tools": "Kræv alle redskaber",
|
||||
"cookbook-name": "Navn på kogebog",
|
||||
"cookbook-with-name": "Kogebog {0}",
|
||||
"household-cookbook-name": "{0} Kogebog {1}",
|
||||
"household-cookbook-name": "{0} kogebog {1}",
|
||||
"create-a-cookbook": "Opret en ny kogebog",
|
||||
"cookbook": "Kogebog"
|
||||
},
|
||||
|
||||
@@ -579,7 +579,6 @@
|
||||
"made-this": "Ich hab's gemacht",
|
||||
"how-did-it-turn-out": "Wie ist es geworden?",
|
||||
"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.",
|
||||
"message-key": "Nachrichten-Schlüssel",
|
||||
"parse": "Parsen",
|
||||
@@ -647,7 +646,6 @@
|
||||
"nextStep": "Nächster Schritt",
|
||||
"recipe-actions": "Rezept-Aktionen",
|
||||
"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",
|
||||
"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.",
|
||||
@@ -722,7 +720,7 @@
|
||||
"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.",
|
||||
"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",
|
||||
"irreversible-acknowledgment": "Ich verstehe, dass diese Maßnahme unumkehrbar und destruktiv ist und Datenverlust verursachen kann",
|
||||
"restore-backup": "Sicherung wiederherstellen"
|
||||
@@ -1050,8 +1048,8 @@
|
||||
"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-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-warning": "Du hast bereits einige Elemente in deiner Datenbank. Diese Aktion wird Duplikate nicht ausgleichen, du musst sie manuell verwalten.",
|
||||
"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": "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",
|
||||
"source-food": "Quell-Lebensmittel",
|
||||
"target-food": "Ziel-Lebensmittel",
|
||||
|
||||
@@ -15,9 +15,9 @@
|
||||
"docs": "Τεκμηρίωση",
|
||||
"download-log": "Λήψη αρχείου καταγραφής",
|
||||
"download-recipe-json": "Τελευταίο Scraped JSON",
|
||||
"github": "Github",
|
||||
"github": "GitHub",
|
||||
"log-lines": "Γραμμές καταγραφής",
|
||||
"not-demo": "Όχι επίδειξη",
|
||||
"not-demo": "Εκτός Επίδειξης",
|
||||
"portfolio": "Χαρτοφυλάκιο",
|
||||
"production": "Παραγωγή",
|
||||
"support": "Υποστήριξη",
|
||||
@@ -579,7 +579,6 @@
|
||||
"made-this": "Το έφτιαξα",
|
||||
"how-did-it-turn-out": "Ποιό ήταν το αποτέλεσμα;",
|
||||
"user-made-this": "Ο/η {user} το έφτιαξε αυτό",
|
||||
"last-made-date": "Τελευταία παρασκευή {date}",
|
||||
"api-extras-description": "Τα extras συνταγών αποτελούν βασικό χαρακτηριστικό του Mealie API. Σας επιτρέπουν να δημιουργήσετε προσαρμοσμένα ζεύγη κλειδιού/τιμής JSON μέσα σε μια συνταγή, να παραπέμψετε σε εφαρμογές τρίτων. Μπορείτε να χρησιμοποιήσετε αυτά τα κλειδιά για την παροχή πληροφοριών, για παράδειγμα πυροδότηση αυτοματισμών ή μετάδοση προσαρμοσμένων μηνυμάτων στη συσκευή που επιθυμείτε.",
|
||||
"message-key": "Κλειδί Μηνύματος",
|
||||
"parse": "Ανάλυση",
|
||||
@@ -647,7 +646,6 @@
|
||||
"nextStep": "Επόμενο βήμα",
|
||||
"recipe-actions": "Ενέργειες Συνταγής",
|
||||
"parser": {
|
||||
"experimental-alert-text": "Το Mealie χρησιμοποιεί επεξεργασία φυσικής γλώσσας για να αναλύσει και να δημιουργήσει μονάδες και αντικείμενα τροφίμων για τα συστατικά της συνταγής σας. Αυτή η λειτουργία είναι πειραματική και μπορεί να μην λειτουργεί πάντα όπως πρέπει. Αν προτιμάτε να μην χρησιμοποιείτε τα αναλυμένα αποτελέσματα, μπορείτε να επιλέξετε 'Ακυρο' και οι αλλαγές σας δεν θα αποθηκευτούν.",
|
||||
"ingredient-parser": "Αναλυτής Συστατικών",
|
||||
"explanation": "Για να χρησιμοποιήσετε τον αναλυτή συστατικών, κάντε κλικ στο πλήκτρο 'Ανάλυση Ολων' για να ξεκινήσετε τη διαδικασία. Μόλις τα αναλυμένα συστατικά είναι διαθέσιμα, μπορείτε να τα επανεξετάσετε και να βεβαιωθείτε ότι έχουν αναλυθεί σωστά. Η βαθμολογία εμπιστοσύνης του μοντέλου εμφανίζεται στα δεξιά του τίτλου αντικειμένου. Αυτό το σκορ είναι ένας μέσος όρος όλων των επιμέρους βαθμολογιών και μπορεί να μην είναι πάντα εντελώς ακριβής.",
|
||||
"alerts-explainer": "Θα εμφανίζονται ειδοποιήσεις αν βρεθεί ένα αντίστοιχο τρόφιμο ή μονάδα αλλά δεν υπάρχει στη βάση δεδομένων.",
|
||||
@@ -722,7 +720,7 @@
|
||||
"backup-restore": "Επαναφορά Αντιγράφου Ασφαλείας",
|
||||
"back-restore-description": "Η επαναφορά αυτού του αντιγράφου ασφαλείας θα αντικαταστήσει όλα τα τρέχοντα δεδομένα στη βάση δεδομένων σας και στον κατάλογο δεδομένων και θα τα αντικαταστήσει με τα περιεχόμενα αυτού του αντιγράφου ασφαλείας. {cannot-be-undone} Αν η αποκατάσταση γίνει με επιτυχία, θα αποσυνδεθείτε.",
|
||||
"cannot-be-undone": "Αυτή η ενέργεια δεν μπορεί να αναιρεθεί - χρησιμοποιήστε με προσοχή.",
|
||||
"postgresql-note": "Αν χρησιμοποιείτε το PostGreSQL, παρακαλώ ελέγξτε τη {backup-restore-process} πριν από την επαναφορά.",
|
||||
"postgresql-note": "Αν χρησιμοποιείτε το PostgreSQL, παρακαλώ ελέγξτε τη {backup-restore-process} πριν από την επαναφορά.",
|
||||
"backup-restore-process-in-the-documentation": "διαδικασία δημιουργίας αντιγράφων ασφαλείας/επαναφοράς στην τεκμηρίωση",
|
||||
"irreversible-acknowledgment": "Κατανοώ ότι αυτή η ενέργεια είναι μη αναστρέψιμη, καταστροφική και μπορεί να προκαλέσει απώλεια δεδομένων",
|
||||
"restore-backup": "Επαναφορά αντιγράφου ασφαλείας"
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
"docs": "Docs",
|
||||
"download-log": "Download Log",
|
||||
"download-recipe-json": "Last Scraped JSON",
|
||||
"github": "Github",
|
||||
"github": "GitHub",
|
||||
"log-lines": "Log Lines",
|
||||
"not-demo": "Not Demo",
|
||||
"portfolio": "Portfolio",
|
||||
@@ -298,7 +298,7 @@
|
||||
"household-recipe-preferences": "Household Recipe Preferences",
|
||||
"default-recipe-preferences-description": "These are the default settings when a new recipe is created in your household. These can be change for individual recipe sin the recipe settings menu.",
|
||||
"allow-users-outside-of-your-household-to-see-your-recipes": "Allow users outside your household to see your recipes",
|
||||
"allow-users-outside-of-your-household-to-see-your-recipes-description": "When enabled you can use a public share link to share specific recipes without authorizing the user. When disabled, you can only share recipes with users who are in your household or with a pre-generated private link",
|
||||
"allow-users-outside-of-your-household-to-see-your-recipes-description": "When enabled you can use a public share link to share specific recipes without authorising the user. When disabled, you can only share recipes with users who are in your household or with a pre-generated private link",
|
||||
"household-preferences": "Household Preferences"
|
||||
},
|
||||
"meal-plan": {
|
||||
@@ -386,7 +386,7 @@
|
||||
"title": "Copy Me That Recipe Manager"
|
||||
},
|
||||
"paprika": {
|
||||
"description-long": "Mealie can import recipes from the Paprika application. Export your recipes from paprika, rename the export extension to .zip and upload it below.",
|
||||
"description-long": "Mealie can import recipes from the Paprika application. Export your recipes from Paprika, rename the export extension to .zip and upload it below.",
|
||||
"title": "Paprika Recipe Manager"
|
||||
},
|
||||
"mealie-pre-v1": {
|
||||
@@ -406,11 +406,11 @@
|
||||
"chowdown-text": "Mealie natively supports the chowdown repository format. Download the code repository as a .zip file and upload it below.",
|
||||
"recipe-1": "Recipe 1",
|
||||
"recipe-2": "Recipe 2",
|
||||
"paprika-text": "Mealie can import recipes from the Paprika application. Export your recipes from paprika, rename the export extension to .zip and upload it below.",
|
||||
"paprika-text": "Mealie can import recipes from the Paprika application. Export your recipes from Paprika, rename the export extension to .zip and upload it below.",
|
||||
"mealie-text": "Mealie can import recipes from the Mealie application from a pre v1.0 release. Export your recipes from your old instance, and upload the zip file below. Note that only recipes can be imported from the export.",
|
||||
"plantoeat": {
|
||||
"title": "Plan to Eat",
|
||||
"description-long": "Mealie can import recipies from Plan to Eat."
|
||||
"description-long": "Mealie can import recipes from Plan to Eat."
|
||||
},
|
||||
"myrecipebox": {
|
||||
"title": "My Recipe Box",
|
||||
@@ -423,7 +423,7 @@
|
||||
},
|
||||
"new-recipe": {
|
||||
"bulk-add": "Bulk Add",
|
||||
"error-details": "Only websites containing ld+json or microdata can be imported by Mealie. Most major recipe websites support this data structure. If your site cannot be imported but there is json data in the log, please submit a github issue with the URL and data.",
|
||||
"error-details": "Only websites containing ld+json or microdata can be imported by Mealie. Most major recipe websites support this data structure. If your site cannot be imported but there is json data in the log, please submit a GitHub issue with the URL and data.",
|
||||
"error-title": "Looks Like We Couldn't Find Anything",
|
||||
"from-url": "Import a Recipe",
|
||||
"github-issues": "GitHub Issues",
|
||||
@@ -542,9 +542,9 @@
|
||||
"recipe-added-to-list": "Recipe added to list",
|
||||
"recipes-added-to-list": "Recipes added to list",
|
||||
"successfully-added-to-list": "Successfully added to list",
|
||||
"recipe-added-to-mealplan": "Recipe added to mealplan",
|
||||
"recipe-added-to-mealplan": "Recipe added to meal plan",
|
||||
"failed-to-add-recipes-to-list": "Failed to add recipe to list",
|
||||
"failed-to-add-recipe-to-mealplan": "Failed to add recipe to mealplan",
|
||||
"failed-to-add-recipe-to-mealplan": "Failed to add recipe to meal plan",
|
||||
"failed-to-add-to-list": "Failed to add to list",
|
||||
"yield": "Yield",
|
||||
"yields-amount-with-text": "Yields {amount} {text}",
|
||||
@@ -579,7 +579,6 @@
|
||||
"made-this": "I Made This",
|
||||
"how-did-it-turn-out": "How did it turn out?",
|
||||
"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.",
|
||||
"message-key": "Message Key",
|
||||
"parse": "Parse",
|
||||
@@ -647,10 +646,9 @@
|
||||
"nextStep": "Next step",
|
||||
"recipe-actions": "Recipe Actions",
|
||||
"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.",
|
||||
"alerts-explainer": "Alerts will be displayed if a matching foods or unit is found but does not exists in the database.",
|
||||
"alerts-explainer": "Alerts will be displayed if a matching food or unit is found but does not exist in the database.",
|
||||
"select-parser": "Select Parser",
|
||||
"natural-language-processor": "Natural Language Processor",
|
||||
"brute-parser": "Brute Parser",
|
||||
@@ -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.",
|
||||
"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",
|
||||
"irreversible-acknowledgment": "I understand that this action is irreversible, destructive and may cause data loss",
|
||||
"restore-backup": "Restore Backup"
|
||||
@@ -810,7 +808,7 @@
|
||||
"webhooks-caps": "WEBHOOKS",
|
||||
"webhooks": "Webhooks",
|
||||
"webhook-name": "Webhook Name",
|
||||
"description": "The webhooks defined below will be executed when a meal is defined for the day. At the scheduled time the webhooks will be sent with the data from the recipe that is scheduled for the day. Note that webhook execution is not exact. The webhooks are executed on a 5 minutes interval so the webhooks will be executed within 5 +/- minutes of the scheduled."
|
||||
"description": "The webhooks defined below will be executed when a meal is defined for the day. At the scheduled time the webhooks will be sent with the data from the recipe that is scheduled for the day. Note that webhook execution is not exact. The webhooks are executed on a 5 minutes interval so the webhooks will be executed within 5 +/- minutes of the schedule."
|
||||
},
|
||||
"bug-report": "Bug Report",
|
||||
"bug-report-information": "Use this information to report a bug. Providing details of your instance to developers is the best way to get your issues resolved quickly.",
|
||||
@@ -1031,10 +1029,10 @@
|
||||
"user-can-invite-other-to-group": "User can invite others to group",
|
||||
"user-can-manage-group": "User can manage group",
|
||||
"user-can-manage-household": "User can manage household",
|
||||
"user-can-organize-group-data": "User can organize group data",
|
||||
"user-can-organize-group-data": "User can organise group data",
|
||||
"enable-advanced-features": "Enable advanced features",
|
||||
"it-looks-like-this-is-your-first-time-logging-in": "It looks like this is your first time logging in.",
|
||||
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Don't want to see this anymore? Be sure to change your email in your user settings!",
|
||||
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Don't want to see this any more? Be sure to change your email in your user settings!",
|
||||
"forgot-password": "Forgot Password",
|
||||
"forgot-password-text": "Please enter your email address and we will send you a link to reset your password.",
|
||||
"changes-reflected-immediately": "Changes to this user will be reflected immediately."
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
"docs": "Docs",
|
||||
"download-log": "Download Log",
|
||||
"download-recipe-json": "Last Scraped JSON",
|
||||
"github": "Github",
|
||||
"github": "GitHub",
|
||||
"log-lines": "Log Lines",
|
||||
"not-demo": "Not Demo",
|
||||
"portfolio": "Portfolio",
|
||||
@@ -579,7 +579,6 @@
|
||||
"made-this": "I Made This",
|
||||
"how-did-it-turn-out": "How did it turn out?",
|
||||
"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.",
|
||||
"message-key": "Message Key",
|
||||
"parse": "Parse",
|
||||
@@ -647,7 +646,6 @@
|
||||
"nextStep": "Next step",
|
||||
"recipe-actions": "Recipe Actions",
|
||||
"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.",
|
||||
"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.",
|
||||
"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",
|
||||
"irreversible-acknowledgment": "I understand that this action is irreversible, destructive and may cause data loss",
|
||||
"restore-backup": "Restore Backup"
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
"docs": "Documentación",
|
||||
"download-log": "Descargar Log",
|
||||
"download-recipe-json": "Último JSON extraído",
|
||||
"github": "Github",
|
||||
"github": "GitHub",
|
||||
"log-lines": "Líneas de registro",
|
||||
"not-demo": "No Demo",
|
||||
"portfolio": "Portfolio",
|
||||
@@ -579,7 +579,6 @@
|
||||
"made-this": "Lo hice",
|
||||
"how-did-it-turn-out": "¿Cómo resultó 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.",
|
||||
"message-key": "Clave de mensaje",
|
||||
"parse": "Analizar",
|
||||
@@ -647,7 +646,6 @@
|
||||
"nextStep": "Siguiente paso",
|
||||
"recipe-actions": "Acciones de Receta",
|
||||
"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",
|
||||
"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.",
|
||||
@@ -722,7 +720,7 @@
|
||||
"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.",
|
||||
"cannot-be-undone": "Esta acción no se puede deshacer, use con precaución.",
|
||||
"postgresql-note": "Si estás usando PostGreSQL, por favor revisa el {backup-restore-process} antes de restaurar.",
|
||||
"postgresql-note": "Si estás usando PostgreSQL, por favor revisa {backup-restore-process} antes de restaurar.",
|
||||
"backup-restore-process-in-the-documentation": "copia de seguridad/proceso de restauración en la documentación",
|
||||
"irreversible-acknowledgment": "Entiendo que esta acción es irreversible, destructiva y puede causar pérdida de datos",
|
||||
"restore-backup": "Restaurar copia de seguridad"
|
||||
@@ -1050,8 +1048,8 @@
|
||||
"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-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-warning": "Ya tiene algunos elementos en tu base de datos. Esta acción no reconciliará duplicados, tendrá que gestionarlos manualmente.",
|
||||
"seed-dialog-text": "Rellena la base de datos con alimentos basados en tu idioma local. Esto creará más de 200 alimentos comunes que se pueden usar para organizar tu base de datos. Los alimentos son traducidos a través de un esfuerzo comunitario.",
|
||||
"seed-dialog-warning": "Ya tienes algunos elementos en tu base de datos. Esta acción no reconciliará los duplicados, tendrás que gestionarlos manualmente.",
|
||||
"combine-food": "Combinar Alimentos",
|
||||
"source-food": "Fuente de Alimento",
|
||||
"target-food": "Alimentos objetivo",
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
"docs": "Dokumentatsioon",
|
||||
"download-log": "Allalaadimiste logi",
|
||||
"download-recipe-json": "Viimati ekstraheeritud JSON",
|
||||
"github": "Github",
|
||||
"github": "GitHub",
|
||||
"log-lines": "Logiread",
|
||||
"not-demo": "Mitte-demo",
|
||||
"portfolio": "Portfoolio",
|
||||
@@ -579,7 +579,6 @@
|
||||
"made-this": "Olen seda valmistanud",
|
||||
"how-did-it-turn-out": "Kuidas tuli see välja?",
|
||||
"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.",
|
||||
"message-key": "Sõnumi võti",
|
||||
"parse": "Analüüsi",
|
||||
@@ -647,7 +646,6 @@
|
||||
"nextStep": "Järgmine samm",
|
||||
"recipe-actions": "Retsepti toimingud",
|
||||
"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",
|
||||
"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.",
|
||||
@@ -722,7 +720,7 @@
|
||||
"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.",
|
||||
"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",
|
||||
"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"
|
||||
@@ -1050,8 +1048,8 @@
|
||||
"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-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-warning": "Teie andmebaasis on juba mõned üksused. See funktsioon ei sobi duplikaatidega, peate neid käsitsi redigeerima.",
|
||||
"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": "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",
|
||||
"source-food": "Lähtetoid",
|
||||
"target-food": "Sihttoit",
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
"docs": "Docs",
|
||||
"download-log": "Latausloki",
|
||||
"download-recipe-json": "Viimeisin haettu JSON",
|
||||
"github": "Github",
|
||||
"github": "GitHub",
|
||||
"log-lines": "Lokirivit",
|
||||
"not-demo": "Ei esittelyversiotilassa",
|
||||
"portfolio": "Portfolio",
|
||||
@@ -579,7 +579,6 @@
|
||||
"made-this": "Tein tämän",
|
||||
"how-did-it-turn-out": "Miten se onnistui?",
|
||||
"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.",
|
||||
"message-key": "Viestiavain",
|
||||
"parse": "Jäsennä",
|
||||
@@ -647,7 +646,6 @@
|
||||
"nextStep": "Seuraava askel",
|
||||
"recipe-actions": "Reseptin toiminnot",
|
||||
"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ä",
|
||||
"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.",
|
||||
@@ -722,7 +720,7 @@
|
||||
"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.",
|
||||
"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",
|
||||
"irreversible-acknowledgment": "Ymmärrän, että tämä toiminta on peruuttamatonta ja voi aiheuttaa tietojen häviämistä",
|
||||
"restore-backup": "Palauta varmuuskopio"
|
||||
@@ -1050,8 +1048,8 @@
|
||||
"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-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-warning": "Sinulla on jo joitakin kohteita tietokannassasi. Tämä toiminto ei sovi yhteen kaksoiskappaleita, sinun täytyy muokata niitä manuaalisesti.",
|
||||
"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": "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",
|
||||
"source-food": "Ruuan alkuperä",
|
||||
"target-food": "Kohderuoka",
|
||||
|
||||
@@ -579,7 +579,6 @@
|
||||
"made-this": "Je l’ai cuisiné",
|
||||
"how-did-it-turn-out": "C’était bon ?",
|
||||
"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é.",
|
||||
"message-key": "Clé de message",
|
||||
"parse": "Analyser",
|
||||
@@ -647,7 +646,6 @@
|
||||
"nextStep": "Étape suivante",
|
||||
"recipe-actions": "Actions de recette",
|
||||
"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",
|
||||
"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.",
|
||||
@@ -722,7 +720,7 @@
|
||||
"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é.",
|
||||
"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",
|
||||
"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"
|
||||
@@ -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-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-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",
|
||||
"source-food": "Aliment source",
|
||||
"target-food": "Aliment cible",
|
||||
|
||||
@@ -579,7 +579,6 @@
|
||||
"made-this": "Je l’ai cuisiné",
|
||||
"how-did-it-turn-out": "C’était bon ?",
|
||||
"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é.",
|
||||
"message-key": "Clé de message",
|
||||
"parse": "Analyser",
|
||||
@@ -647,7 +646,6 @@
|
||||
"nextStep": "Étape suivante",
|
||||
"recipe-actions": "Actions de recette",
|
||||
"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",
|
||||
"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.",
|
||||
@@ -722,7 +720,7 @@
|
||||
"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é.",
|
||||
"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",
|
||||
"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"
|
||||
@@ -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-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-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",
|
||||
"source-food": "Aliment source",
|
||||
"target-food": "Aliment cible",
|
||||
|
||||
@@ -579,7 +579,6 @@
|
||||
"made-this": "Je l’ai cuisiné",
|
||||
"how-did-it-turn-out": "C’était bon ?",
|
||||
"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é.",
|
||||
"message-key": "Clé de message",
|
||||
"parse": "Analyser",
|
||||
@@ -647,7 +646,6 @@
|
||||
"nextStep": "Étape suivante",
|
||||
"recipe-actions": "Actions de recette",
|
||||
"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",
|
||||
"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.",
|
||||
@@ -722,7 +720,7 @@
|
||||
"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é.",
|
||||
"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",
|
||||
"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"
|
||||
@@ -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-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-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",
|
||||
"source-food": "Aliment source",
|
||||
"target-food": "Aliment cible",
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -15,7 +15,7 @@
|
||||
"docs": "תיעוד",
|
||||
"download-log": "הורדת לוגים",
|
||||
"download-recipe-json": "ה-JSON האחרון שנקרא",
|
||||
"github": "גיטהאב",
|
||||
"github": "GitHub",
|
||||
"log-lines": "שורות לוג",
|
||||
"not-demo": "לא בהדגמה",
|
||||
"portfolio": "תיק עבודות",
|
||||
@@ -579,7 +579,6 @@
|
||||
"made-this": "הכנתי את זה",
|
||||
"how-did-it-turn-out": "איך יצא?",
|
||||
"user-made-this": "{user} הכין את זה",
|
||||
"last-made-date": "נעשה לאחרונה ב{date}",
|
||||
"api-extras-description": "מתכונים נוספים הם יכולת מפתח של Mealie API. הם מאפשרים ליצור צמדי key/value בצורת JSON על מנת לקרוא אותם בתוכנת צד שלישית. תוכלו להשתמש בצמדים האלה כדי לספק מידע, לדוגמא להפעיל אוטומציות או הודעות מותאמות אישית למכשירים מסויימים.",
|
||||
"message-key": "מפתח הודעה",
|
||||
"parse": "ניתוח",
|
||||
@@ -647,7 +646,6 @@
|
||||
"nextStep": "השלב הבא",
|
||||
"recipe-actions": "פעולות במתכון",
|
||||
"parser": {
|
||||
"experimental-alert-text": "Mealie משתמשת בניתוח שפה טבעית כדי לפענח וליצור יחידות ופרטי מזון בשביל המצרכים למתכון שלך. תכונה זו היא ניסיונית ועלולה לא לעבוד כמצופה. אם ברצונך לא להשתמש בתוצאות, עליך לבחור 'בטל' והשינויים שלך לא יישמרו.",
|
||||
"ingredient-parser": "מפענח המרכיבים",
|
||||
"explanation": "לחיצה על 'פענח הכל' תתחיל את תהליך פענוח המרכיבים. יהיה ניתן לראות ולוודא את נכונות הפענוח כאשר הרכיבים יהיו זמינים. ציון רמת ביטחון המודל יוצג לצד כותרת הפריט. הציון הוא ממוצע הציונים של כל חלק, ולכן לא תמיד מדויק לגמרי.",
|
||||
"alerts-explainer": "תופיע התראה במידה ונמצא אוכל או יחידה מתאימים שאינם נמצאים בבסיס הנתונים.",
|
||||
@@ -722,7 +720,7 @@
|
||||
"backup-restore": "גיבוי / שחזור",
|
||||
"back-restore-description": "שחזור מגיבוי זה ידרוס את המידע הקיים במסד הנתונים ובספריות האתר ויחליף אותם בזה הקיים בגיבוי. {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": "תהליך גיבוי או שחזור במדריכים",
|
||||
"irreversible-acknowledgment": "אני מבין שהפעולה לא הפיכה, הרסנית ויכולה לגרום לאיבוד מידע",
|
||||
"restore-backup": "שחזר גיבוי"
|
||||
@@ -1050,8 +1048,8 @@
|
||||
"foods": {
|
||||
"merge-dialog-text": "צירוף של המאכלים שנבחרו יאחד את אוכל המקור ואוכל היעד לפריט אוכל אחד. אוכל המקור ימחק וכל ההפניות / הייחוסים אליו יעודכנו ויופנו לאוכל היעד.",
|
||||
"merge-food-example": "ממזג את {food1} לתוך {food2}",
|
||||
"seed-dialog-text": "אכלס את מסד הנתונים עם אוכל בהתבסס על השפה המקומית שלך. הפעולה תיצור +200 מאכלים נפוצים שיכולים לשמש לארגון מסד הנתונים. מאכלים מתורגמים על ידי מאמצי הקהילה.",
|
||||
"seed-dialog-warning": "מסד הנתונים שלך כבר מכיל מספר פריטים. פעולה זו אינה מטפלת בכפילויות, יהיה צורך לפתור זאת באופן ידני.",
|
||||
"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": "You have already have some items in your database. This action will not reconcile duplicates, you will have to manage them manually.",
|
||||
"combine-food": "שילוב אוכל",
|
||||
"source-food": "אוכל מקור",
|
||||
"target-food": "אוכל יעד",
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
"docs": "Dokumenti",
|
||||
"download-log": "Preuzmi zapisnik",
|
||||
"download-recipe-json": "Posljednji prikupljeni JSON",
|
||||
"github": "Github",
|
||||
"github": "GitHub",
|
||||
"log-lines": "Bilježi zapisnik",
|
||||
"not-demo": "Nije Demo",
|
||||
"portfolio": "Portfelj",
|
||||
@@ -579,7 +579,6 @@
|
||||
"made-this": "Napravio/la sam ovo",
|
||||
"how-did-it-turn-out": "Kako je ispalo?",
|
||||
"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.",
|
||||
"message-key": "Ključ poruke",
|
||||
"parse": "Razluči (parsiraj)",
|
||||
@@ -647,7 +646,6 @@
|
||||
"nextStep": "Next step",
|
||||
"recipe-actions": "Recipe Actions",
|
||||
"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.",
|
||||
"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",
|
||||
"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.",
|
||||
"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",
|
||||
"irreversible-acknowledgment": "Razumijem da je ova radnja nepovratna, destruktivna i može uzrokovati gubitak podataka",
|
||||
"restore-backup": "Vrati sigurnosnu kopiju"
|
||||
@@ -1050,8 +1048,8 @@
|
||||
"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-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-warning": "Već imate neke stavke u svojoj bazi podataka. Ova radnja neće pomiriti duplikate, morat ćete ih ručno korigirati.",
|
||||
"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": "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",
|
||||
"source-food": "Izvor Hrane",
|
||||
"target-food": "Ciljana Namirnica",
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
"docs": "Dokumentáció",
|
||||
"download-log": "Napló letöltése",
|
||||
"download-recipe-json": "Utoljára letöltött JSON",
|
||||
"github": "Github",
|
||||
"github": "GitHub",
|
||||
"log-lines": "Napló sorok",
|
||||
"not-demo": "Nem Demó",
|
||||
"portfolio": "Portfólió",
|
||||
@@ -579,7 +579,6 @@
|
||||
"made-this": "Elkészítettem ezt",
|
||||
"how-did-it-turn-out": "Hogyan sikerült?",
|
||||
"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.",
|
||||
"message-key": "Üzenetkulcs",
|
||||
"parse": "Előkészítés",
|
||||
@@ -647,7 +646,6 @@
|
||||
"nextStep": "Következő lépés",
|
||||
"recipe-actions": "Receptekkel kapcsolatos tevékenységek",
|
||||
"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ő",
|
||||
"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.",
|
||||
@@ -722,7 +720,7 @@
|
||||
"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.",
|
||||
"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",
|
||||
"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"
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
"docs": "Docs",
|
||||
"download-log": "Download Log",
|
||||
"download-recipe-json": "Last Scraped JSON",
|
||||
"github": "Github",
|
||||
"github": "GitHub",
|
||||
"log-lines": "Log Lines",
|
||||
"not-demo": "Not Demo",
|
||||
"portfolio": "Portfolio",
|
||||
@@ -45,24 +45,24 @@
|
||||
"category-filter": "Category Filter",
|
||||
"category-update-failed": "Category update failed",
|
||||
"category-updated": "Category updated",
|
||||
"uncategorized-count": "Uncategorized {count}",
|
||||
"create-a-category": "Create a Category",
|
||||
"category-name": "Category Name",
|
||||
"category": "Category"
|
||||
"uncategorized-count": "Óflokkað {count}",
|
||||
"create-a-category": "Búa til viðburð",
|
||||
"category-name": "Heiti flokks",
|
||||
"category": "Flokkur"
|
||||
},
|
||||
"events": {
|
||||
"apprise-url": "Apprise URL",
|
||||
"database": "Database",
|
||||
"delete-event": "Delete Event",
|
||||
"event-delete-confirmation": "Are you sure you want to delete this event?",
|
||||
"event-deleted": "Event Deleted",
|
||||
"event-updated": "Event Updated",
|
||||
"database": "",
|
||||
"delete-event": "Eyða viðburði",
|
||||
"event-delete-confirmation": "Ertu viss um að þú viljir eyða þessum viðburði?",
|
||||
"event-deleted": "Viðburði eytt",
|
||||
"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-version": "New version available!",
|
||||
"notification": "Notification",
|
||||
"refresh": "Refresh",
|
||||
"scheduled": "Scheduled",
|
||||
"something-went-wrong": "Something Went Wrong!",
|
||||
"new-version": "Ný útgáfa fáanleg!",
|
||||
"notification": "Tilkynning",
|
||||
"refresh": "Endurhlaða",
|
||||
"scheduled": "Áætlað",
|
||||
"something-went-wrong": "Eitthvað fór úrskeiðis!",
|
||||
"subscribed-events": "Subscribed Events",
|
||||
"test-message-sent": "Test Message Sent",
|
||||
"message-sent": "Message Sent",
|
||||
@@ -104,13 +104,13 @@
|
||||
"failed-count": "Failed: {count}",
|
||||
"failure-uploading-file": "Failure uploading file",
|
||||
"favorites": "Favorites",
|
||||
"field-required": "Field Required",
|
||||
"file-folder-not-found": "File/folder not found",
|
||||
"file-uploaded": "File uploaded",
|
||||
"filter": "Filter",
|
||||
"friday": "Friday",
|
||||
"general": "General",
|
||||
"get": "Get",
|
||||
"field-required": "Reitur nauðsynlegur",
|
||||
"file-folder-not-found": "Skrá/mappe finnst ekki",
|
||||
"file-uploaded": "Skrá",
|
||||
"filter": "Sía",
|
||||
"friday": "Föstudagur",
|
||||
"general": "Almennt",
|
||||
"get": "Sækja",
|
||||
"home": "Home",
|
||||
"image": "Image",
|
||||
"image-upload-failed": "Image upload failed",
|
||||
@@ -579,7 +579,6 @@
|
||||
"made-this": "I Made This",
|
||||
"how-did-it-turn-out": "How did it turn out?",
|
||||
"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.",
|
||||
"message-key": "Message Key",
|
||||
"parse": "Parse",
|
||||
@@ -647,7 +646,6 @@
|
||||
"nextStep": "Next step",
|
||||
"recipe-actions": "Recipe Actions",
|
||||
"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.",
|
||||
"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.",
|
||||
"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",
|
||||
"irreversible-acknowledgment": "I understand that this action is irreversible, destructive and may cause data loss",
|
||||
"restore-backup": "Restore Backup"
|
||||
|
||||
@@ -579,7 +579,6 @@
|
||||
"made-this": "L'Ho Preparato",
|
||||
"how-did-it-turn-out": "Come è venuto?",
|
||||
"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.",
|
||||
"message-key": "Chiave Messaggio",
|
||||
"parse": "Analizza",
|
||||
@@ -647,7 +646,6 @@
|
||||
"nextStep": "Passo successivo",
|
||||
"recipe-actions": "Azioni Ricetta",
|
||||
"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",
|
||||
"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.",
|
||||
@@ -722,7 +720,7 @@
|
||||
"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.",
|
||||
"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",
|
||||
"irreversible-acknowledgment": "Capisco che questa azione è irreversibile, distruttiva e può causare la perdita di dati",
|
||||
"restore-backup": "Ripristina Backup"
|
||||
@@ -1050,8 +1048,8 @@
|
||||
"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-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-warning": "Hai già alcuni elementi nel tuo database. Questa azione non riconcilierà i duplicati, dovrai gestirli manualmente.",
|
||||
"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": "Ci sono già alcuni elementi nel database. Questa azione non unificherà i duplicati, bisognerà gestirli manualmente.",
|
||||
"combine-food": "Combina Alimenti",
|
||||
"source-food": "Alimento di Origine",
|
||||
"target-food": "Alimento di Destinazione",
|
||||
|
||||
@@ -579,7 +579,6 @@
|
||||
"made-this": "これを作りました",
|
||||
"how-did-it-turn-out": "どうなりましたか?",
|
||||
"user-made-this": "{user} がこれを作りました",
|
||||
"last-made-date": "最後は {date} に作りました",
|
||||
"api-extras-description": "レシピの追加機能はMealie APIの主な機能です。 サードパーティアプリから参照するために、レシピ内にカスタムJSONキー/値のペアを作成することができます。 これらのキーを使用して情報を提供することができます。例えば、自動化をトリガーしたり、カスタムメッセージをお使いのデバイスにリレーするなどです。",
|
||||
"message-key": "メッセージキー",
|
||||
"parse": "解析",
|
||||
@@ -647,7 +646,6 @@
|
||||
"nextStep": "次のステップ",
|
||||
"recipe-actions": "レシピ操作",
|
||||
"parser": {
|
||||
"experimental-alert-text": "Mealieは、自然言語処理を使用して、レシピ成分のための単位や食品を解析し、作成します。 この機能は実験的であり、常に期待どおりに動作するとは限りません。 解析結果を使用したくない場合は、「キャンセル」を選択することができ、変更内容は保存されません。",
|
||||
"ingredient-parser": "Ingredient Parser",
|
||||
"explanation": "Ingredient Parserを使用するには、「すべて解析」ボタンをクリックしてプロセスを開始します。 処理された原材料が利用可能になったら、項目を確認し、それらが正しく解析されたことを確認できます。 アイテムタイトルの右側にモデルの信頼度が表示されます。 このスコアは、すべての個々のスコアの平均であり、常に完全に正確であるとは限りません。",
|
||||
"alerts-explainer": "一致する食品または単位が見つかってもデータベースに存在しない場合は、アラートが表示されます。",
|
||||
@@ -722,7 +720,7 @@
|
||||
"backup-restore": "バックアップと復元",
|
||||
"back-restore-description": "このバックアップを復元すると、データベースとデータディレクトリ内のすべての現在のデータが上書きされ、このバックアップの内容に置き換えられます。 {cannot-be-undone} 復元が成功するとログアウトされます。",
|
||||
"cannot-be-undone": "この操作は元に戻せません - 注意してください。",
|
||||
"postgresql-note": "PostGreSQLを使用している場合は、復元する前に {backup-restore-process} を確認してください。",
|
||||
"postgresql-note": "PostgreSQLを使用している場合は、復元する前に {backup-restore-process} を確認してください。",
|
||||
"backup-restore-process-in-the-documentation": "ドキュメント内のバックアップ/復元プロセス",
|
||||
"irreversible-acknowledgment": "このアクションは不可逆的で破壊的で、データ損失を引き起こす可能性があることを理解しています",
|
||||
"restore-backup": "バックアップから復元"
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
"docs": "문서",
|
||||
"download-log": "다운로드 기록",
|
||||
"download-recipe-json": "마지막으로 불러온 JSON",
|
||||
"github": "Github",
|
||||
"github": "GitHub",
|
||||
"log-lines": "로그 줄",
|
||||
"not-demo": "데모 아님",
|
||||
"portfolio": "포트폴리오",
|
||||
@@ -579,7 +579,6 @@
|
||||
"made-this": "I Made This",
|
||||
"how-did-it-turn-out": "How did it turn out?",
|
||||
"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.",
|
||||
"message-key": "Message Key",
|
||||
"parse": "Parse",
|
||||
@@ -647,7 +646,6 @@
|
||||
"nextStep": "다음 단계",
|
||||
"recipe-actions": "Recipe Actions",
|
||||
"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.",
|
||||
"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": "백업/복원",
|
||||
"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.",
|
||||
"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",
|
||||
"irreversible-acknowledgment": "I understand that this action is irreversible, destructive and may cause data loss",
|
||||
"restore-backup": "Restore Backup"
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
"docs": "Dokumentacija",
|
||||
"download-log": "Atsisiųsti žurnalą",
|
||||
"download-recipe-json": "Paskutinis nuskaitytas \"JSON\"",
|
||||
"github": "Github",
|
||||
"github": "GitHub",
|
||||
"log-lines": "Žurnalo eilutės",
|
||||
"not-demo": "Not Demo",
|
||||
"portfolio": "Darbai",
|
||||
@@ -579,7 +579,6 @@
|
||||
"made-this": "Aš tai gaminau",
|
||||
"how-did-it-turn-out": "Kaip tai pavyko?",
|
||||
"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.",
|
||||
"message-key": "Žinutės raktas",
|
||||
"parse": "Nuskaityti",
|
||||
@@ -647,7 +646,6 @@
|
||||
"nextStep": "Next step",
|
||||
"recipe-actions": "Recipe Actions",
|
||||
"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.",
|
||||
"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",
|
||||
"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.",
|
||||
"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",
|
||||
"irreversible-acknowledgment": "Suprantu, jog šis veiksmas bus neatstatomas, destruktyvus ir gali sukelti duomenų praradimus",
|
||||
"restore-backup": "Atkurti iš atsarginės kopijos"
|
||||
@@ -1050,8 +1048,8 @@
|
||||
"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-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-warning": "Kai kuriuos elementus jau turite savo duomenų bazėje. Šis veiksmas nesutvarkys dublikatų, turėsite juos tvarkyti rankiniu būdu.",
|
||||
"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": "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",
|
||||
"source-food": "Pirminis produktas",
|
||||
"target-food": "Antrinis produktas",
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
"docs": "Dokumentācija",
|
||||
"download-log": "Lejupielādēt žurnālu",
|
||||
"download-recipe-json": "Pēdējo reizi nokasītais JSON",
|
||||
"github": "Github",
|
||||
"github": "GitHub",
|
||||
"log-lines": "žurnāla līnijas",
|
||||
"not-demo": "Nav demo",
|
||||
"portfolio": "Portfelis",
|
||||
@@ -579,7 +579,6 @@
|
||||
"made-this": "Es to pagatavoju",
|
||||
"how-did-it-turn-out": "Kā tas izrādījās?",
|
||||
"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.",
|
||||
"message-key": "Ziņojuma atslēga",
|
||||
"parse": "Parsēšana",
|
||||
@@ -647,7 +646,6 @@
|
||||
"nextStep": "Nākamais solis",
|
||||
"recipe-actions": "Recepšu darbības",
|
||||
"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",
|
||||
"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.",
|
||||
@@ -722,7 +720,7 @@
|
||||
"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.",
|
||||
"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ā",
|
||||
"irreversible-acknowledgment": "Es saprotu, ka šī darbība ir neatgriezeniska, destruktīva un var izraisīt datu zudumu",
|
||||
"restore-backup": "Atjaunot backup"
|
||||
@@ -1050,8 +1048,8 @@
|
||||
"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-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-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-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": "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",
|
||||
"source-food": "Pārtikas avots",
|
||||
"target-food": "Mērķa pārtika",
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
"docs": "Documentatie",
|
||||
"download-log": "Logbestand downloaden",
|
||||
"download-recipe-json": "Laatst ingelezen JSON",
|
||||
"github": "Github",
|
||||
"github": "GitHub",
|
||||
"log-lines": "Logboekregels",
|
||||
"not-demo": "Geen demo",
|
||||
"portfolio": "Portfolio",
|
||||
@@ -579,7 +579,6 @@
|
||||
"made-this": "Ik heb dit gemaakt",
|
||||
"how-did-it-turn-out": "Hoe was je gerecht?",
|
||||
"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.",
|
||||
"message-key": "Berichtsleutel",
|
||||
"parse": "Ontleed",
|
||||
@@ -647,7 +646,6 @@
|
||||
"nextStep": "Volgende stap",
|
||||
"recipe-actions": "Acties met recepten ",
|
||||
"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",
|
||||
"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.",
|
||||
@@ -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-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-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",
|
||||
"source-food": "Bron-levensmiddelen",
|
||||
"target-food": "Doel-levensmiddel",
|
||||
|
||||
@@ -277,7 +277,7 @@
|
||||
"admin-group-management-text": "Endringer i denne gruppen vil gjenspeiles umiddelbart.",
|
||||
"group-id-value": "Gruppe-ID: {0}",
|
||||
"total-households": "Husholdninger totalt",
|
||||
"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": "Du må velge en gruppe før du kan velge en husholdning"
|
||||
},
|
||||
"household": {
|
||||
"household": "Husholdning",
|
||||
@@ -292,9 +292,9 @@
|
||||
"admin-household-management-text": "Endringer i denne husholdningen vil umiddelbart gjelde.",
|
||||
"household-id-value": "Husholdningens id: {0}",
|
||||
"private-household": "Privat husholdning",
|
||||
"private-household-description": "Setting your household to private will disable all public view options. This overrides any individual public view settings",
|
||||
"private-household-description": "Når du setter husholdningen din til privat, vil alle offentlige visningsalternativer tilbakestilles til standardverdiene. Dette overskriver envher individuell offentlig visningsinnstilling",
|
||||
"lock-recipe-edits-from-other-households": "Lås redigering av oppskrifter fra andre husholdninger",
|
||||
"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": "Når dette er aktivert kan bare brukere i husholdningen din redigere oppskrifter laget av husholdningen din",
|
||||
"household-recipe-preferences": "Husholdningenes oppskriftsinnstillinger",
|
||||
"default-recipe-preferences-description": "Dette er standardinnstillingene når en ny oppskrift blir opprettet i din husholdning. Disse kan endres for individuelle oppskrifter i oppskrifters innstillinger.",
|
||||
"allow-users-outside-of-your-household-to-see-your-recipes": "Tillat brukere utenfor din husholdning å se oppskriftene dine",
|
||||
@@ -321,7 +321,7 @@
|
||||
"mealplan-settings": "Innstillinger for måltidsplan",
|
||||
"mealplan-update-failed": "Oppdatering av måltidsplan mislyktes",
|
||||
"mealplan-updated": "Måltidsplan oppdatert",
|
||||
"mealplan-households-description": "If no household is selected, recipes can be added from any household",
|
||||
"mealplan-households-description": "Hvis ingen husholdning er valgt, kan oppskrifter legges til fra hvilken som helst husholdning",
|
||||
"any-category": "Enhver kategori",
|
||||
"any-tag": "Any Tag",
|
||||
"any-household": "Any Household",
|
||||
@@ -357,7 +357,7 @@
|
||||
"for-type-meal-types": "for {0} måltidstyper",
|
||||
"meal-plan-rules": "Regler for måltidsplan",
|
||||
"new-rule": "Ny regel",
|
||||
"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": "Du kan lage regler for automatisk valg av oppskrifter for måltidsplanene dine. Disse reglene brukes av serveren til å bestemme den tilfeldige oppskriften du kan velge mellom når du lager måltidsplaner. Merk at hvis regler har samme dag/type-begrensninger, vil regelfiltrene slås sammen. I praksis er det unødvendig å lage dupliserte regler, men det er mulig å gjøre det.",
|
||||
"new-rule-description": "Ved opprettelse av en ny regel for en måltidsplan kan du begrense regelen til å gjelde for en bestemt ukedag og/eller en bestemt type måltid. For å ta i bruk en regen alle dager eller alle måltider kan du sette regelen til \"Enhver\" som gjelder for alle mulige verdier for dag- og/eller måltidstyper.",
|
||||
"recipe-rules": "Regler for oppskrifter",
|
||||
"applies-to-all-days": "Gjelder for alle dager",
|
||||
@@ -432,7 +432,7 @@
|
||||
"paste-in-your-recipe-data-each-line-will-be-treated-as-an-item-in-a-list": "Lim inn oppskriftsdataene. Hver linje blir behandlet som et element i en liste",
|
||||
"recipe-markup-specification": "Spesifikasjon for oppskriftsmerking",
|
||||
"recipe-url": "Nettadresse til oppskrift",
|
||||
"recipe-html-or-json": "Recipe HTML or JSON",
|
||||
"recipe-html-or-json": "Oppskrift HTML eller JSON",
|
||||
"upload-a-recipe": "Last opp oppskrift",
|
||||
"upload-individual-zip-file": "Last opp en individuell .zip-fil eksportert fra en annen Mealie-instans.",
|
||||
"url-form-hint": "Kopier og lim inn en lenke fra nettstedet med favorittoppskriftene dine",
|
||||
@@ -499,7 +499,7 @@
|
||||
"object-key": "Objektnøkkel",
|
||||
"object-value": "Objektverdi",
|
||||
"original-url": "Nettadresse til oppskrift",
|
||||
"perform-time": "Koketid",
|
||||
"perform-time": "Passiv Tid",
|
||||
"prep-time": "Forberedelsestid",
|
||||
"protein-content": "Protein",
|
||||
"public-recipe": "Offentlig oppskrift",
|
||||
@@ -518,7 +518,7 @@
|
||||
"save-recipe-before-use": "Lagre oppskrift før bruk",
|
||||
"section-title": "Seksjonstittel",
|
||||
"servings": "Porsjoner",
|
||||
"serves-amount": "Serves {amount}",
|
||||
"serves-amount": "{amount} Porsjoner",
|
||||
"share-recipe-message": "Jeg ville dele min {0} oppskrift med deg.",
|
||||
"show-nutrition-values": "Vis ernæringsverdier",
|
||||
"sodium-content": "Natrium",
|
||||
@@ -548,7 +548,7 @@
|
||||
"failed-to-add-to-list": "Klarte ikke å legge til oppskrift i listen",
|
||||
"yield": "Gir",
|
||||
"yields-amount-with-text": "Gir {amount} {text}",
|
||||
"yield-text": "Yield Text",
|
||||
"yield-text": "Porsjonsenhet (eks. pers./stk.)",
|
||||
"quantity": "Antall",
|
||||
"choose-unit": "Velg enhet",
|
||||
"press-enter-to-create": "Trykk Enter for å opprette",
|
||||
@@ -579,7 +579,6 @@
|
||||
"made-this": "Jeg har laget dette",
|
||||
"how-did-it-turn-out": "Hvordan ble det?",
|
||||
"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.",
|
||||
"message-key": "Meldingsnøkkel",
|
||||
"parse": "Analyser",
|
||||
@@ -612,14 +611,14 @@
|
||||
"scrape-recipe-have-a-lot-of-recipes": "Har du mange oppskrifter du ønsker å skrape samtidig?",
|
||||
"scrape-recipe-suggest-bulk-importer": "Prøv masseimportering",
|
||||
"scrape-recipe-have-raw-html-or-json-data": "Have raw HTML or JSON data?",
|
||||
"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": "Du kan importere fra rådata direkte",
|
||||
"import-original-keywords-as-tags": "Importer originale søkeord som emneord",
|
||||
"stay-in-edit-mode": "Forbli i redigeringsmodus",
|
||||
"import-from-zip": "Importer fra zip-fil",
|
||||
"import-from-zip-description": "Importer en enkelt oppskrift som ble eksportert fra en annen Mealie-instans.",
|
||||
"import-from-html-or-json": "Import from HTML or 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.",
|
||||
"json-import-format-description-colon": "To import via JSON, it must be in valid format:",
|
||||
"import-from-html-or-json": "Importer fra HTML eller JSON",
|
||||
"import-from-html-or-json-description": "Importer én enkelt oppskrift fra rå HTML eller JSON. Dette er nyttig hvis du har en oppskrift fra et nettsted som Mealie ikke kan skrape på normal måte, eller fra en annen ekstern kilde.",
|
||||
"json-import-format-description-colon": "For å importere via JSON, må det være i gyldig format:",
|
||||
"json-editor": "JSON Editor",
|
||||
"zip-files-must-have-been-exported-from-mealie": ".zip-filer må ha blitt eksportert fra Mealie",
|
||||
"create-a-recipe-by-uploading-a-scan": "Opprett en oppskrift ved å laste opp en skanning.",
|
||||
@@ -639,7 +638,7 @@
|
||||
"tree-view": "Trevisning",
|
||||
"recipe-servings": "Oppskriftsporsjoner",
|
||||
"recipe-yield": "Utbytte av oppskrift",
|
||||
"recipe-yield-text": "Recipe Yield Text",
|
||||
"recipe-yield-text": "Oppskrift gir",
|
||||
"unit": "Enhet",
|
||||
"upload-image": "Last opp bilde",
|
||||
"screen-awake": "Hold skjermen på",
|
||||
@@ -647,7 +646,6 @@
|
||||
"nextStep": "Neste trinn",
|
||||
"recipe-actions": "Oppskriftshandlinger",
|
||||
"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",
|
||||
"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.",
|
||||
@@ -666,14 +664,14 @@
|
||||
},
|
||||
"recipe-finder": {
|
||||
"recipe-finder": "Oppskriftsfinner",
|
||||
"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øk etter oppskrifter basert på ingredienser du har for hånden. Du kan også filtrere på verktøy du har tilgjengelig, og angi maksimalt antall manglende ingredienser eller verktøy.",
|
||||
"selected-ingredients": "Velg ingredienser",
|
||||
"no-ingredients-selected": "Ingen ingredienser valgt",
|
||||
"missing": "Mangler",
|
||||
"no-recipes-found": "Ingen oppskrifter funnet",
|
||||
"no-recipes-found-description": "Try adding more ingredients to your search or adjusting your filters",
|
||||
"include-ingredients-on-hand": "Include Ingredients On Hand",
|
||||
"include-tools-on-hand": "Include Tools On Hand",
|
||||
"no-recipes-found-description": "Prøv å legge til flere ingredienser i søket eller juster filtrene dine",
|
||||
"include-ingredients-on-hand": "Inkluder ingredienser du har for hånden",
|
||||
"include-tools-on-hand": "Inkluder tilgjengelige verktøy",
|
||||
"max-missing-ingredients": "Maks antall manglende ingredienser",
|
||||
"max-missing-tools": "Maks antall manglende redskaper",
|
||||
"selected-tools": "Velg redskaper",
|
||||
@@ -690,7 +688,7 @@
|
||||
"or": "Eller",
|
||||
"has-any": "Har enhver",
|
||||
"has-all": "Har alle",
|
||||
"clear-selection": "Clear Selection",
|
||||
"clear-selection": "Tøm valg",
|
||||
"results": "Resultater",
|
||||
"search": "Søk",
|
||||
"search-mealie": "Søk i Mealie (trykk /)",
|
||||
@@ -1030,7 +1028,7 @@
|
||||
"administrator": "Administrator",
|
||||
"user-can-invite-other-to-group": "Bruker kan invitere andre til gruppe",
|
||||
"user-can-manage-group": "Brukeren kan administrere gruppe",
|
||||
"user-can-manage-household": "User can manage household",
|
||||
"user-can-manage-household": "Bruker kan administrere husholdningen",
|
||||
"user-can-organize-group-data": "Brukeren kan organisere gruppedata",
|
||||
"enable-advanced-features": "Aktiver avanserte funksjoner",
|
||||
"it-looks-like-this-is-your-first-time-logging-in": "Det ser ut som dette er første gang du logger på.",
|
||||
@@ -1050,8 +1048,8 @@
|
||||
"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-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-warning": "Du har allerede noen elementer i databasen din. Denne handlingen vil ikke forene duplikater, du må håndtere dem manuelt.",
|
||||
"seed-dialog-text": "Sett inn matvarer basert på ditt lokale språk i databasen. Dette vil lage 200+ vanlige matvarer som kan brukes til å organisere databasen din. Mat blir oversatt via fellesinnsats.",
|
||||
"seed-dialog-warning": "Du har allerede noen elementer i databasen din. Denne handlingen vil ikke slå sammen duplikater, du må håndtere dem manuelt.",
|
||||
"combine-food": "Kombiner matvarer",
|
||||
"source-food": "Kilde for matvare",
|
||||
"target-food": "Mål for matvare",
|
||||
@@ -1287,11 +1285,11 @@
|
||||
"manage-profile-or-get-invite-link": "Administrer din egen profil, eller hent en invitasjonslenke for å dele med andre."
|
||||
},
|
||||
"debug-openai-services": "Feilsøk OpenAI-tjenester",
|
||||
"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": "Bruk denne siden for å feilsøke OpenAI tjenester. Du kan teste din OpenAI tilkobling og se resultatene her. Hvis du har bildetjenester aktivert kan du også legge til et bilde.",
|
||||
"run-test": "Kjør test",
|
||||
"test-results": "Testresultater",
|
||||
"group-delete-note": "Groups with users or households cannot be deleted",
|
||||
"household-delete-note": "Households with users cannot be deleted"
|
||||
"group-delete-note": "Grupper med brukere eller husholdninger kan ikke slettes",
|
||||
"household-delete-note": "Husholdninger med brukere kan ikke slettes"
|
||||
},
|
||||
"profile": {
|
||||
"welcome-user": "Velkommen, {0}!",
|
||||
@@ -1345,9 +1343,9 @@
|
||||
},
|
||||
"cookbook": {
|
||||
"cookbooks": "Kokebøker",
|
||||
"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.",
|
||||
"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",
|
||||
"description": "Kokebøker er en annen måte å organisere oppskrifter på ved å lage tverrsnitt av oppskrifter, organisatorer og andre filtre. Oppretting av en kokebok vil legge til en oppføring i sidefeltet, og alle oppskriftene med de valgte filtrene vil vises i kokeboken.",
|
||||
"hide-cookbooks-from-other-households": "Skjul kokebøker fra andre husholdninger",
|
||||
"hide-cookbooks-from-other-households-description": "Når denne er aktivert, vil bare kokebøker fra husstanden din vises i sidefeltet",
|
||||
"public-cookbook": "Offentlig kokebok",
|
||||
"public-cookbook-description": "Offentlige kokebøker kan deles med ikke-Mealie-brukere og vil bli vist på din gruppeside.",
|
||||
"filter-options": "Filteralternativer",
|
||||
|
||||
@@ -579,7 +579,6 @@
|
||||
"made-this": "Ugotowałem to",
|
||||
"how-did-it-turn-out": "Jak się to udało?",
|
||||
"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ń.",
|
||||
"message-key": "Klucz Wiadomości",
|
||||
"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.",
|
||||
"debug": "Debuguj",
|
||||
"tree-view": "Widok drzewa",
|
||||
"recipe-servings": "Recipe Servings",
|
||||
"recipe-servings": "Ilość porcji",
|
||||
"recipe-yield": "Wydajność przepisu",
|
||||
"recipe-yield-text": "Recipe Yield Text",
|
||||
"recipe-yield-text": "Tekst pola przepisu",
|
||||
"unit": "Jednostka",
|
||||
"upload-image": "Prześlij obraz",
|
||||
"screen-awake": "Pozostaw ekran włączony",
|
||||
@@ -647,7 +646,6 @@
|
||||
"nextStep": "Następny krok",
|
||||
"recipe-actions": "Akcje przepisów",
|
||||
"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",
|
||||
"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.",
|
||||
@@ -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.",
|
||||
"selected-ingredients": "Wybrany składnik",
|
||||
"no-ingredients-selected": "Nie wybrano żadnych składników",
|
||||
"missing": "Missing",
|
||||
"missing": "Brakujący",
|
||||
"no-recipes-found": "Nie znaleziono przepisów",
|
||||
"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ą",
|
||||
@@ -678,8 +676,8 @@
|
||||
"max-missing-tools": "Maks. ilość brakujących przyborów kuchennych",
|
||||
"selected-tools": "Wybrane przybory kuchenne",
|
||||
"other-filters": "Inne filtry",
|
||||
"ready-to-make": "Ready to Make",
|
||||
"almost-ready-to-make": "Almost Ready to Make"
|
||||
"ready-to-make": "Gotowe do użycia",
|
||||
"almost-ready-to-make": "Prawie gotowe do użycia"
|
||||
},
|
||||
"search": {
|
||||
"advanced-search": "Wyszukiwanie zaawansowane",
|
||||
@@ -722,7 +720,7 @@
|
||||
"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.",
|
||||
"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",
|
||||
"irreversible-acknowledgment": "Rozumiem, że ta operacja jest nieodwracalna, destrukcyjna i może spowodować utratę danych",
|
||||
"restore-backup": "Przywróć kopie"
|
||||
@@ -1050,8 +1048,8 @@
|
||||
"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-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-warning": "Posiadasz już wartości w bazie. Rozwiązanie problemu z duplikatami leżeć będzie w gestii użytkownika.",
|
||||
"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": "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ść",
|
||||
"source-food": "Żywność Źródłowa",
|
||||
"target-food": "Żywność Docelowa",
|
||||
@@ -1115,9 +1113,9 @@
|
||||
"source-unit-will-be-deleted": "Jednostka źródłowa zostanie usunięta"
|
||||
},
|
||||
"recipe-actions": {
|
||||
"recipe-actions-data": "Recipe Actions Data",
|
||||
"recipe-actions-data": "Dane akcji przepisu",
|
||||
"new-recipe-action": "",
|
||||
"edit-recipe-action": "Edit Recipe Action",
|
||||
"edit-recipe-action": "Edycja akcji przepisu",
|
||||
"action-type": "Typ akcji"
|
||||
},
|
||||
"create-alias": "Utwórz alias",
|
||||
|
||||
@@ -579,7 +579,6 @@
|
||||
"made-this": "Eu Fiz Isso",
|
||||
"how-did-it-turn-out": "Como que ficou?",
|
||||
"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.",
|
||||
"message-key": "Chave de mensagem",
|
||||
"parse": "Analisar",
|
||||
@@ -647,7 +646,6 @@
|
||||
"nextStep": "Próximo passo",
|
||||
"recipe-actions": "Ações de Receita",
|
||||
"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",
|
||||
"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.",
|
||||
@@ -722,7 +720,7 @@
|
||||
"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.",
|
||||
"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",
|
||||
"irreversible-acknowledgment": "Eu entendo que esta ação é irreversível, destrutiva e pode causar perda de dados",
|
||||
"restore-backup": "Restaurar Backup"
|
||||
@@ -1050,8 +1048,8 @@
|
||||
"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-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-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-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": "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",
|
||||
"source-food": "Comida original",
|
||||
"target-food": "Comida alvo",
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
"docs": "Documentação",
|
||||
"download-log": "Transferir Log",
|
||||
"download-recipe-json": "Último JSON recuperado",
|
||||
"github": "Github",
|
||||
"github": "GitHub",
|
||||
"log-lines": "Linhas de registo",
|
||||
"not-demo": "Não Demonstração",
|
||||
"portfolio": "Portefólio",
|
||||
@@ -579,7 +579,6 @@
|
||||
"made-this": "Eu fiz isto",
|
||||
"how-did-it-turn-out": "Que tal ficou?",
|
||||
"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.",
|
||||
"message-key": "Chave de Mensagem",
|
||||
"parse": "Interpretar",
|
||||
@@ -647,7 +646,6 @@
|
||||
"nextStep": "Próximo passo",
|
||||
"recipe-actions": "Ações da Receita",
|
||||
"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",
|
||||
"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.",
|
||||
@@ -722,7 +720,7 @@
|
||||
"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.",
|
||||
"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",
|
||||
"irreversible-acknowledgment": "Eu entendo que esta ação é irreversível, destrutiva e pode causar perda de dados",
|
||||
"restore-backup": "Restaurar Backup"
|
||||
@@ -1050,8 +1048,8 @@
|
||||
"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-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-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-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": "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",
|
||||
"source-food": "Alimento de Origem",
|
||||
"target-food": "Alimento Alvo",
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
"category-update-failed": "Actualizarea categoriei a eșuat",
|
||||
"category-updated": "Categorie actualizată",
|
||||
"uncategorized-count": "Necategorizate {count}",
|
||||
"create-a-category": "Creați o categorie",
|
||||
"create-a-category": "Creează o categorie",
|
||||
"category-name": "Nume categorie",
|
||||
"category": "Categorie"
|
||||
},
|
||||
@@ -579,7 +579,6 @@
|
||||
"made-this": "Am făcut asta",
|
||||
"how-did-it-turn-out": "Cum a ieșit?",
|
||||
"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.",
|
||||
"message-key": "Cheie mesaj",
|
||||
"parse": "Parsează",
|
||||
@@ -647,7 +646,6 @@
|
||||
"nextStep": "Pasul următor",
|
||||
"recipe-actions": "Acțiuni rețetă",
|
||||
"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",
|
||||
"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.",
|
||||
@@ -722,7 +720,7 @@
|
||||
"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.",
|
||||
"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",
|
||||
"irreversible-acknowledgment": "Înțeleg că această acțiune este ireversibilă, distructivă și poate provoca pierderea datelor",
|
||||
"restore-backup": "Restaurează backup"
|
||||
@@ -1050,8 +1048,8 @@
|
||||
"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-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-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-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": "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",
|
||||
"source-food": "Sursa de mâncare",
|
||||
"target-food": "Mâncare țintită",
|
||||
|
||||
@@ -579,7 +579,6 @@
|
||||
"made-this": "Я сделал это",
|
||||
"how-did-it-turn-out": "Что получилось?",
|
||||
"user-made-this": "{user} сделал это",
|
||||
"last-made-date": "Последний раз сделано {date}",
|
||||
"api-extras-description": "Дополнения к рецептам являются ключевым элементом Mealie API. Они позволяют создавать пользовательские пары json ключ/значение в рецепте для ссылания на другие приложения. Вы можете использовать эти ключи, чтобы сохранить нужную информацию, например, для автоматизаций или уведомлений на ваши устройства.",
|
||||
"message-key": "Ключ сообщения",
|
||||
"parse": "Обработать",
|
||||
@@ -647,7 +646,6 @@
|
||||
"nextStep": "След. шаг",
|
||||
"recipe-actions": "Действия с рецептом",
|
||||
"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": "Разделитель ингредиентов",
|
||||
"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": "Оповещение появится если подходящие продукты или единица измерения найдены, но не занесены в базу данных.",
|
||||
@@ -722,7 +720,7 @@
|
||||
"backup-restore": "Восстановление резервной копии",
|
||||
"back-restore-description": "Восстановление этой резервной копии перезапишет все текущие данные в вашей базе данных и в каталоге данных и заменит их содержимым этой резервной копии. {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": "процесс резервного копирования/восстановления в документации",
|
||||
"irreversible-acknowledgment": "Я понимаю, что это действие является необратимым, разрушительным и может привести к потере данных",
|
||||
"restore-backup": "Восстановить резервную копию"
|
||||
@@ -1050,8 +1048,8 @@
|
||||
"foods": {
|
||||
"merge-dialog-text": "Сочетание выбранных продуктов позволит объединить первый и второй продукт в один. Первый продукт будет удалён, и все ссылки на него будут указывать на второй продукт.",
|
||||
"merge-food-example": "Объединение {food1} в {food2}",
|
||||
"seed-dialog-text": "Заполняет базу данных с продуктами на основе локального языка. Это добавит 200+ типичных продуктов, которые могут быть использованы для организации вашей базы данных. Продукты переводятся с помощью усилий сообщества.",
|
||||
"seed-dialog-warning": "У вас уже есть некоторые элементы в базе данных. Это действие не позволит удалить дубликаты, вам придется проверить их вручную.",
|
||||
"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": "You have already have some items in your database. This action will not reconcile duplicates, you will have to manage them manually.",
|
||||
"combine-food": "Объединить продукты",
|
||||
"source-food": "Первый продукт",
|
||||
"target-food": "Второй продукт",
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
"docs": "Dokumentácia",
|
||||
"download-log": "Záznam sťahovania",
|
||||
"download-recipe-json": "Posledný získaný JSON",
|
||||
"github": "Github",
|
||||
"github": "GitHub",
|
||||
"log-lines": "Riadky záznamu",
|
||||
"not-demo": "Nie Demo",
|
||||
"portfolio": "Portfólio",
|
||||
@@ -579,7 +579,6 @@
|
||||
"made-this": "Toto som uvaril",
|
||||
"how-did-it-turn-out": "Ako to dopadlo?",
|
||||
"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í.",
|
||||
"message-key": "Kľúč správy",
|
||||
"parse": "Analyzovať",
|
||||
@@ -647,7 +646,6 @@
|
||||
"nextStep": "Ďalší krok",
|
||||
"recipe-actions": "Akcie s receptom",
|
||||
"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í",
|
||||
"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.",
|
||||
@@ -722,7 +720,7 @@
|
||||
"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ý.",
|
||||
"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",
|
||||
"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"
|
||||
@@ -1050,8 +1048,8 @@
|
||||
"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-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-warning": "V databáze už máte nejaké položky. Táto akcia nezjednotí duplikáty, budete ich musieť spravovať manuálne.",
|
||||
"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": "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",
|
||||
"source-food": "Zdrojové jedlo",
|
||||
"target-food": "Cieľové jedlo",
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
"docs": "Dokumentacija",
|
||||
"download-log": "Prenesi dnevniške zapise",
|
||||
"download-recipe-json": "Zadnji prebran JSON",
|
||||
"github": "Github",
|
||||
"github": "GitHub",
|
||||
"log-lines": "Vrstice",
|
||||
"not-demo": "Ni testno",
|
||||
"portfolio": "Portfelj",
|
||||
@@ -579,7 +579,6 @@
|
||||
"made-this": "Naredil sem to",
|
||||
"how-did-it-turn-out": "Kako se je izkazalo?",
|
||||
"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.",
|
||||
"message-key": "Ključ sporočila",
|
||||
"parse": "Razloči",
|
||||
@@ -647,7 +646,6 @@
|
||||
"nextStep": "Naslednji korak",
|
||||
"recipe-actions": "Opravila na receptu",
|
||||
"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",
|
||||
"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.",
|
||||
@@ -722,7 +720,7 @@
|
||||
"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.",
|
||||
"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",
|
||||
"irreversible-acknowledgment": "Razumem, da tega ukaza ni mogoče razveljaviti in da lahko povzroči izgubo podatkov",
|
||||
"restore-backup": "Obnovi varnostno kopijo"
|
||||
@@ -1050,8 +1048,8 @@
|
||||
"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-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-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-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": "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",
|
||||
"source-food": "Izvorno živilo",
|
||||
"target-food": "Ciljno živilo",
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
"docs": "Документација",
|
||||
"download-log": "Преузми дневник евиденције",
|
||||
"download-recipe-json": "Последњи прикупљени JSON",
|
||||
"github": "Github",
|
||||
"github": "GitHub",
|
||||
"log-lines": "Log Lines",
|
||||
"not-demo": "Није демо",
|
||||
"portfolio": "Портфолио",
|
||||
@@ -579,7 +579,6 @@
|
||||
"made-this": "I Made This",
|
||||
"how-did-it-turn-out": "How did it turn out?",
|
||||
"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.",
|
||||
"message-key": "Message Key",
|
||||
"parse": "Parse",
|
||||
@@ -647,7 +646,6 @@
|
||||
"nextStep": "Next step",
|
||||
"recipe-actions": "Recipe Actions",
|
||||
"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.",
|
||||
"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.",
|
||||
"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",
|
||||
"irreversible-acknowledgment": "I understand that this action is irreversible, destructive and may cause data loss",
|
||||
"restore-backup": "Restore Backup"
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
"docs": "Dokumentation",
|
||||
"download-log": "Ladda ner logg",
|
||||
"download-recipe-json": "Senast hämtad JSON",
|
||||
"github": "Github",
|
||||
"github": "GitHub",
|
||||
"log-lines": "Loggrader",
|
||||
"not-demo": "Inte Demo",
|
||||
"portfolio": "Portfölj",
|
||||
@@ -45,7 +45,7 @@
|
||||
"category-filter": "Kategorifilter",
|
||||
"category-update-failed": "Kategori gick inte att uppdatera",
|
||||
"category-updated": "Kategori uppdaterad",
|
||||
"uncategorized-count": "Ingen Kategori {count}",
|
||||
"uncategorized-count": "Utan kategori {count}",
|
||||
"create-a-category": "Skapa kategori",
|
||||
"category-name": "Kategorinamn",
|
||||
"category": "Kategori"
|
||||
@@ -579,7 +579,6 @@
|
||||
"made-this": "Jag lagade den här",
|
||||
"how-did-it-turn-out": "Hur blev rätten?",
|
||||
"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.",
|
||||
"message-key": "Meddelandenyckel",
|
||||
"parse": "Läs in",
|
||||
@@ -647,7 +646,6 @@
|
||||
"nextStep": "Nästa steg",
|
||||
"recipe-actions": "Recept åtgärder",
|
||||
"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",
|
||||
"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.",
|
||||
@@ -722,7 +720,7 @@
|
||||
"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.",
|
||||
"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",
|
||||
"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"
|
||||
@@ -1050,8 +1048,8 @@
|
||||
"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-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-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-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": "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",
|
||||
"source-food": "Matens källa",
|
||||
"target-food": "Matens mål",
|
||||
|
||||
@@ -579,7 +579,6 @@
|
||||
"made-this": "Bunu ben yaptım",
|
||||
"how-did-it-turn-out": "Nasıl oldu?",
|
||||
"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.",
|
||||
"message-key": "İleti Anahtarı",
|
||||
"parse": "Ayrıştırma",
|
||||
@@ -647,7 +646,6 @@
|
||||
"nextStep": "Sonraki adım",
|
||||
"recipe-actions": "Tarif İşlemleri",
|
||||
"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ı",
|
||||
"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.",
|
||||
@@ -722,7 +720,7 @@
|
||||
"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.",
|
||||
"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",
|
||||
"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"
|
||||
@@ -1050,8 +1048,8 @@
|
||||
"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-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-warning": "Veritabanınızda zaten bazı öğeler var. Bu eylem kopyaları uzlaştırmaz; bunları manuel olarak yönetmeniz gerekir.",
|
||||
"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": "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",
|
||||
"source-food": "Kaynak Gıda",
|
||||
"target-food": "Hedef Gıda",
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
"api-docs": "Документація API",
|
||||
"api-port": "Порт API",
|
||||
"application-mode": "Режим додатку",
|
||||
"database-type": "Тип бази данних",
|
||||
"database-type": "Тип бази даних",
|
||||
"database-url": "URL-адреса бази даних",
|
||||
"default-group": "Групи за замовчуванням",
|
||||
"default-household": "Сімʼя за замовчуванням",
|
||||
@@ -15,7 +15,7 @@
|
||||
"docs": "Документація",
|
||||
"download-log": "Завантажити журнал",
|
||||
"download-recipe-json": "Останній зібраний JSON",
|
||||
"github": "Github",
|
||||
"github": "GitHub",
|
||||
"log-lines": "Журнал",
|
||||
"not-demo": "Не демо",
|
||||
"portfolio": "Портфоліо",
|
||||
@@ -190,7 +190,7 @@
|
||||
"a-name-is-required": "Необхідно вказати назву",
|
||||
"delete-with-name": "Видалити {name}",
|
||||
"confirm-delete-generic-with-name": "Ви дійсно хочете видалити {name}?",
|
||||
"confirm-delete-own-admin-account": "Зверніть увагу, що ви намагаєтеся видалити свій обліковий запис адміністратора! Цю дію неможливо скасувати і ви остаточно видалите ваш обліковий запис?",
|
||||
"confirm-delete-own-admin-account": "Зверніть увагу, що ви намагаєтеся видалити свій обліковий запис адміністратора! Цю дію неможливо скасувати й ви остаточно видалите ваш обліковий запис?",
|
||||
"organizer": "Організатор",
|
||||
"transfer": "Передача",
|
||||
"copy": "Скопіювати",
|
||||
@@ -200,7 +200,7 @@
|
||||
"learn-more": "Дізнатися більше",
|
||||
"this-feature-is-currently-inactive": "Ця функція наразі не активна",
|
||||
"clipboard-not-supported": "Буфер обміну не підтримується",
|
||||
"copied-to-clipboard": "Скопійовано до буферу обміну",
|
||||
"copied-to-clipboard": "Скопійовано до буфера обміну",
|
||||
"your-browser-does-not-support-clipboard": "Ваш браузер не підтримує буфер обміну",
|
||||
"copied-items-to-clipboard": "Жоден елемент не скопійовано в буфер обміну|Один елемент скопійовано в буфер обміну|Скопійовано {count} елементів в буфер обміну",
|
||||
"actions": "Дії",
|
||||
@@ -246,14 +246,14 @@
|
||||
"manage-members": "Керування Користувачами",
|
||||
"manage-members-description": "Керуйте дозволами учасників вашої сімʼї. {manage} дозволяє користувачеві отримати доступ до сторінки керування даними {invite} дозволяє користувачеві генерувати посилання запрошення для інших користувачів. Власники групи не можуть змінити власні дозволи.",
|
||||
"manage": "Керування",
|
||||
"manage-household": "Manage Household",
|
||||
"manage-household": "Керувати сімʼєю",
|
||||
"invite": "Запрошення",
|
||||
"looking-to-update-your-profile": "Бажаєте оновити свій профіль?",
|
||||
"default-recipe-preferences-description": "Це типові налаштування, коли створюється новий рецепт у вашій групі. Ці параметри можна змінити для окремих рецептів в меню налаштувань рецептів.",
|
||||
"default-recipe-preferences": "Параметри за умовчанням",
|
||||
"group-preferences": "Налаштування групи",
|
||||
"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-description": "Робить групові рецепти загальнодоступними за замовчуванням і дозволяє користувачам переглядати рецепти без входу в систему",
|
||||
"allow-users-outside-of-your-group-to-see-your-recipes": "Дозволити користувачам за межами вашої групи бачити ваші рецепти",
|
||||
@@ -277,7 +277,7 @@
|
||||
"admin-group-management-text": "Зміни до цієї групи будуть відображені негайно.",
|
||||
"group-id-value": "Id групи: {0}",
|
||||
"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": "Сімʼя",
|
||||
@@ -292,9 +292,9 @@
|
||||
"admin-household-management-text": "Зміни до цієї сімʼї будуть відображені негайно.",
|
||||
"household-id-value": "Ідентифікатор сімʼї: {0}",
|
||||
"private-household": "Приватна сімʼя",
|
||||
"private-household-description": "Setting your household to private will disable all public view options. This overrides any individual public view settings",
|
||||
"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",
|
||||
"private-household-description": "Якщо зробити сім'ю приватною, то всі налаштування публічного перегляду буде скинуто. Це замінить індивідуальні налаштування публічного перегляду",
|
||||
"lock-recipe-edits-from-other-households": "Заблокувати редагування рецептів іншими сім'ями",
|
||||
"lock-recipe-edits-from-other-households-description": "Якщо увімкнено, тільки члени вашої сім'ї зможуть редагувати рецепти, які були створені вашою сім'єю",
|
||||
"household-recipe-preferences": "Налаштування рецептів сімʼї",
|
||||
"default-recipe-preferences-description": "Це типові налаштування для нового рецепта у вашій сімʼї. Ці параметри можна змінити для окремих рецептів в меню налаштувань рецептів.",
|
||||
"allow-users-outside-of-your-household-to-see-your-recipes": "Дозволити користувачам за межами вашої сімʼї бачити ваші рецепти",
|
||||
@@ -321,10 +321,10 @@
|
||||
"mealplan-settings": "Налаштування плану харчування",
|
||||
"mealplan-update-failed": "Не вдалося оновити план харчування",
|
||||
"mealplan-updated": "План харчування оновлено",
|
||||
"mealplan-households-description": "If no household is selected, recipes can be added from any household",
|
||||
"mealplan-households-description": "Якщо жодної сім'ї не вибрано, рецепти можуть бути доданими з будь-якої сім'ї",
|
||||
"any-category": "Будь-яка категорія",
|
||||
"any-tag": "Будь-який тег",
|
||||
"any-household": "Any Household",
|
||||
"any-household": "Будь-яка сім'я",
|
||||
"no-meal-plan-defined-yet": "Не створено жодного плану харчування",
|
||||
"no-meal-planned-for-today": "Не заплановано харчування на сьогодні",
|
||||
"numberOfDays-hint": "Скільки днів завантажувати на сторінку",
|
||||
@@ -357,7 +357,7 @@
|
||||
"for-type-meal-types": "для {0} типів харчування",
|
||||
"meal-plan-rules": "Правила планів харчування",
|
||||
"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": "При створенні нового правила для плану харчування, ви можете обмежити правило на певний день тижня та/або певний тип їжі. Щоб застосувати правило до всіх днів або всіх типів їжі, ви можете встановити правило \"Будь-який\", що застосовуватиме його до всіх можливих значень для дня та/або типу їжі.",
|
||||
"recipe-rules": "Правила рецептів",
|
||||
"applies-to-all-days": "Застосовується до всіх днів",
|
||||
@@ -518,7 +518,7 @@
|
||||
"save-recipe-before-use": "Зберегти рецепт перед використанням",
|
||||
"section-title": "Назва розділу",
|
||||
"servings": "Порції",
|
||||
"serves-amount": "Serves {amount}",
|
||||
"serves-amount": "Порцій: {amount}",
|
||||
"share-recipe-message": "Я хотів би поділитися з тобою своїм рецептом {0}.",
|
||||
"show-nutrition-values": "Показати харчову цінність",
|
||||
"sodium-content": "Натрій",
|
||||
@@ -547,8 +547,8 @@
|
||||
"failed-to-add-recipe-to-mealplan": "Не вдалося додати рецепт до плану харчування",
|
||||
"failed-to-add-to-list": "Не вдалося додати до списку",
|
||||
"yield": "Вихід",
|
||||
"yields-amount-with-text": "Yields {amount} {text}",
|
||||
"yield-text": "Yield Text",
|
||||
"yields-amount-with-text": "Вийде: {amount} {text}",
|
||||
"yield-text": "Текст виходу",
|
||||
"quantity": "Кількість",
|
||||
"choose-unit": "Виберіть одиниці вимірювання",
|
||||
"press-enter-to-create": "Натисніть Enter, щоб створити",
|
||||
@@ -579,7 +579,6 @@
|
||||
"made-this": "Я це приготував",
|
||||
"how-did-it-turn-out": "Як вийшло?",
|
||||
"user-made-this": "{user} зробив це",
|
||||
"last-made-date": "Востаннє приготовано {date}",
|
||||
"api-extras-description": "Додатки в рецептах - ключова функція API Mealie. Вони дозволяють створювати користувацьку пару JSON ключів та значень в рецепті для сторонніх додатків. Це можна використовувати для автоматизації або для створення користувацьких повідомлень для сторонніх сервісів.",
|
||||
"message-key": "Ключ повідомлення",
|
||||
"parse": "Проаналізувати",
|
||||
@@ -647,7 +646,6 @@
|
||||
"nextStep": "Наступний крок",
|
||||
"recipe-actions": "Дії рецепту",
|
||||
"parser": {
|
||||
"experimental-alert-text": "Mealie використовує аналіз природної мови для аналізу та створення інгредієнтів та одиниць виміру. Це експериментальна функція і може не завжди працювати належним чином. Якщо ви не хочете використовувати результати аналізу виберіть \"Скасувати\", і зміни не будуть збережені.",
|
||||
"ingredient-parser": "Аналізатор інгредієнтів",
|
||||
"explanation": "Щоб використати аналізатор інгредієнтів, натисніть кнопку 'Аналізувати все', щоб запустити процес. Після того, як інгредієнти проаналізовані, ви можете їх переглянути та переконатися, що вони були проаналізовані правильно. Оцінка надійності аналізу відображена праворуч від назви елемента. Ця оцінка розраховується як середнє значення усіх індивідуальних оцінок і не завжди може бути абсолютно точним.",
|
||||
"alerts-explainer": "Оповіщення будуть відображатися, якщо знайдені продукти або одиниці знайдені яких не існує в базі даних.",
|
||||
@@ -662,24 +660,24 @@
|
||||
"no-food": "Немає їжі"
|
||||
},
|
||||
"reset-servings-count": "Скинути кількість порцій",
|
||||
"not-linked-ingredients": "Additional Ingredients"
|
||||
"not-linked-ingredients": "Додаткові продукти"
|
||||
},
|
||||
"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.",
|
||||
"selected-ingredients": "Selected Ingredients",
|
||||
"no-ingredients-selected": "No ingredients selected",
|
||||
"missing": "Missing",
|
||||
"no-recipes-found": "No recipes found",
|
||||
"no-recipes-found-description": "Try adding more ingredients to your search or adjusting your filters",
|
||||
"include-ingredients-on-hand": "Include Ingredients On Hand",
|
||||
"include-tools-on-hand": "Include Tools On Hand",
|
||||
"max-missing-ingredients": "Max Missing Ingredients",
|
||||
"max-missing-tools": "Max Missing Tools",
|
||||
"selected-tools": "Selected Tools",
|
||||
"other-filters": "Other Filters",
|
||||
"ready-to-make": "Ready to Make",
|
||||
"almost-ready-to-make": "Almost Ready to Make"
|
||||
"recipe-finder": "Шукач рецептів",
|
||||
"recipe-finder-description": "Пошук рецептів базується на продуктах, які ви маєте. Ви також можете фільтрувати за наявними інструментами та встановити максимальну кількість відсутніх продуктів або інструментів.",
|
||||
"selected-ingredients": "Вибрані продукти",
|
||||
"no-ingredients-selected": "Жодного продукту не вибрано",
|
||||
"missing": "Відсутні",
|
||||
"no-recipes-found": "Рецептів не знайдено",
|
||||
"no-recipes-found-description": "Спробуйте додати більше продуктів до пошукового списку або підлаштувати фільтри",
|
||||
"include-ingredients-on-hand": "Включити наявні продукти",
|
||||
"include-tools-on-hand": "Включити наявні інструменти",
|
||||
"max-missing-ingredients": "Максимум відсутніх продуктів",
|
||||
"max-missing-tools": "Максимум відсутніх інструментів",
|
||||
"selected-tools": "Вибрані інструменти",
|
||||
"other-filters": "Інші фільтри",
|
||||
"ready-to-make": "Готове до приготування",
|
||||
"almost-ready-to-make": "Майже готове до приготування"
|
||||
},
|
||||
"search": {
|
||||
"advanced-search": "Розширений пошук",
|
||||
@@ -722,7 +720,7 @@
|
||||
"backup-restore": "Відновлення з резервної копії",
|
||||
"back-restore-description": "Відновлення резервної копії перезапише всі дані вашої бази даних і в каталозі даних і замінить їх вміст вмістом цієї резервної копії. {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": "резервне копіювання/відновлення в документації",
|
||||
"irreversible-acknowledgment": "Я розумію, що ця дія незворотна, руйнівна і може спричинити втрату даних",
|
||||
"restore-backup": "Відновити з резервної копії"
|
||||
@@ -884,7 +882,7 @@
|
||||
"are-you-sure-you-want-to-check-all-items": "Ви впевнені, що хочете відмітити всі елементи?",
|
||||
"are-you-sure-you-want-to-uncheck-all-items": "Ви впевнені, що хочете зняти відмітку з усіх елементів?",
|
||||
"are-you-sure-you-want-to-delete-checked-items": "Ви впевнені, що хочете видалити всі відмічені елементи?",
|
||||
"no-shopping-lists-found": "No Shopping Lists Found"
|
||||
"no-shopping-lists-found": "Списків покупок не знайдено"
|
||||
},
|
||||
"sidebar": {
|
||||
"all-recipes": "Всі рецепти",
|
||||
@@ -1030,7 +1028,7 @@
|
||||
"administrator": "Адміністратор",
|
||||
"user-can-invite-other-to-group": "Користувач може запрошувати інших в групу",
|
||||
"user-can-manage-group": "Користувач може керувати групою",
|
||||
"user-can-manage-household": "User can manage household",
|
||||
"user-can-manage-household": "Користувач може управляти сім'єю",
|
||||
"user-can-organize-group-data": "Користувач може впорядковувати дані групи",
|
||||
"enable-advanced-features": "Увімкнути додаткові функції",
|
||||
"it-looks-like-this-is-your-first-time-logging-in": "Схоже, ви заходите вперше.",
|
||||
@@ -1050,8 +1048,8 @@
|
||||
"foods": {
|
||||
"merge-dialog-text": "Об'єднання вибраних продуктів об'єднає вихідний продукт та цільовий продукт до одного продукту. Вихідний продукт буде видалений і всі посилання на вихідний продукт будуть посилатися на цільовий продукт.",
|
||||
"merge-food-example": "Об'єднання {food1} в {food2}",
|
||||
"seed-dialog-text": "Заповнити базу даних інгредієнтами що відповідають мові. Це додасть 200+ розповсюджених інгредієнтів що можуть бути використані для організації бази даних. Назви перекладені громадськими зусиллями.",
|
||||
"seed-dialog-warning": "У вас вже є деякі елементи в базі даних. Ця дія не зможе об'єднати повторення, вам доведеться зробити це вручну.",
|
||||
"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": "You have already have some items in your database. This action will not reconcile duplicates, you will have to manage them manually.",
|
||||
"combine-food": "Об'єднати продукти",
|
||||
"source-food": "Вихідний продукт",
|
||||
"target-food": "Цільовий продукт",
|
||||
@@ -1290,13 +1288,13 @@
|
||||
"debug-openai-services-description": "Використовуйте цю сторінку, щоб налагодити служби OpenAI. Ви можете перевірити ваше з'єднання з OpenAI й побачити результати тут. Якщо ввімкнено служби зображень, ви також можете надати зображення.",
|
||||
"run-test": "Запустити перевірку",
|
||||
"test-results": "Результати перевірки",
|
||||
"group-delete-note": "Groups with users or households cannot be deleted",
|
||||
"household-delete-note": "Households with users cannot be deleted"
|
||||
"group-delete-note": "Не можна видалити групи з користувачами чи сім'ями в ній",
|
||||
"household-delete-note": "Не можна видалити сім'ю з користувачами в ній"
|
||||
},
|
||||
"profile": {
|
||||
"welcome-user": "👋 Ласкаво просимо, {0}!",
|
||||
"description": "Керування вашим профілем, рецептами та налаштуваннями групи.",
|
||||
"invite-link": "Invite Link",
|
||||
"invite-link": "Посилання-запрошення",
|
||||
"get-invite-link": "Отримати посилання-запрошення",
|
||||
"get-public-link": "Отримати публічне посилання",
|
||||
"account-summary": "Аккаунт",
|
||||
@@ -1345,9 +1343,9 @@
|
||||
},
|
||||
"cookbook": {
|
||||
"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.",
|
||||
"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",
|
||||
"description": "Кулінарні книги - це ще один спосіб організовувати рецепти за допомогою розділів та інших фільтрів. Нова кулінарна книга з'явиться на боковій панелі, і всі рецепти, які відповідають обраним фільтрам, будуть показуватися в кулінарній книзі.",
|
||||
"hide-cookbooks-from-other-households": "Приховати кулінарні книги від інших сімей",
|
||||
"hide-cookbooks-from-other-households-description": "Якщо вибрано, тільки кулінарні книги вашої сім'ї буде видно на боковій панелі",
|
||||
"public-cookbook": "Публічна кулінарна книга",
|
||||
"public-cookbook-description": "Публічними кулінарними книгами можна поділитися з будь-ким, і вони будуть відображатися на сторінці вашої групи.",
|
||||
"filter-options": "Параметри фільтра",
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
"docs": "Docs",
|
||||
"download-log": "Download Log",
|
||||
"download-recipe-json": "Last Scraped JSON",
|
||||
"github": "Github",
|
||||
"github": "GitHub",
|
||||
"log-lines": "Log Lines",
|
||||
"not-demo": "Not Demo",
|
||||
"portfolio": "Portfolio",
|
||||
@@ -579,7 +579,6 @@
|
||||
"made-this": "I Made This",
|
||||
"how-did-it-turn-out": "How did it turn out?",
|
||||
"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.",
|
||||
"message-key": "Message Key",
|
||||
"parse": "Parse",
|
||||
@@ -647,7 +646,6 @@
|
||||
"nextStep": "Next step",
|
||||
"recipe-actions": "Recipe Actions",
|
||||
"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.",
|
||||
"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.",
|
||||
"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",
|
||||
"irreversible-acknowledgment": "I understand that this action is irreversible, destructive and may cause data loss",
|
||||
"restore-backup": "Restore Backup"
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
"docs": "文档",
|
||||
"download-log": "下载日志",
|
||||
"download-recipe-json": "最后扫描的 JSON",
|
||||
"github": "Github",
|
||||
"github": "GitHub",
|
||||
"log-lines": "日志行",
|
||||
"not-demo": "非演示模式",
|
||||
"portfolio": "档案",
|
||||
@@ -127,7 +127,7 @@
|
||||
"monday": "周一",
|
||||
"name": "名称",
|
||||
"new": "新建",
|
||||
"never": "永不",
|
||||
"never": "尚无",
|
||||
"no": "否",
|
||||
"no-recipe-found": "未找到食谱",
|
||||
"ok": "好的",
|
||||
@@ -244,7 +244,7 @@
|
||||
"keep-my-recipes-private-description": "将您的群组和所有食谱默认设置为私人可见。您可以随时更改此设置"
|
||||
},
|
||||
"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-household": "Manage Household",
|
||||
"invite": "邀请",
|
||||
@@ -277,7 +277,7 @@
|
||||
"admin-group-management-text": "对本群组的更改将被立即应用。",
|
||||
"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",
|
||||
@@ -288,8 +288,8 @@
|
||||
"household-group": "Household Group",
|
||||
"household-management": "Household Management",
|
||||
"manage-households": "Manage Households",
|
||||
"admin-household-management": "Admin Household Management",
|
||||
"admin-household-management-text": "Changes to this household will be reflected immediately.",
|
||||
"admin-household-management": "家庭管理员选项",
|
||||
"admin-household-management-text": "对家庭的更改将立即生效。",
|
||||
"household-id-value": "Household Id: {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",
|
||||
@@ -579,7 +579,6 @@
|
||||
"made-this": "我做了这道菜",
|
||||
"how-did-it-turn-out": "成品怎么样?",
|
||||
"user-made-this": "{user}做了",
|
||||
"last-made-date": "上次制作于{date}",
|
||||
"api-extras-description": "食谱扩展是Mealie API的关键功能之一。它允许你在食谱中添加自定义JSON键值对,以供第三方程序使用。你可以利用这些键提供信息,实现更多功能,例如触发自动化,或转发自定义信息到指定的设备上。",
|
||||
"message-key": "键名",
|
||||
"parse": "自动解析",
|
||||
@@ -647,7 +646,6 @@
|
||||
"nextStep": "下一步",
|
||||
"recipe-actions": "食谱行为",
|
||||
"parser": {
|
||||
"experimental-alert-text": "Mealie使用自然语言处理解析食材,并生成对应的计量单位和食物条目。此项功能尚在试验阶段,并非每次都能达到预期效果。如果你不想使用解析结果,可以选择取消,此时修改将不会被保存。",
|
||||
"ingredient-parser": "食材解析器",
|
||||
"explanation": "若要使用食材解析器,请单击“全部解析”按钮。当解析结果出现时,你可以检查结果是否正确。解析模型的置信分数显示在条目名称的右侧。该分数是各项分数的平均值,且不总是准确的。",
|
||||
"alerts-explainer": "当匹配到食物或计量单位,而该结果不在数据库中时,会显示提醒。",
|
||||
@@ -722,7 +720,7 @@
|
||||
"backup-restore": "备份恢复",
|
||||
"back-restore-description": "恢复该备份将覆盖当前数据库和数据文件夹的数据。 {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": "文档中的备份/恢复流程",
|
||||
"irreversible-acknowledgment": "我已悉知该操作是不可逆的、有破坏性的,并可能造成数据丢失",
|
||||
"restore-backup": "恢复备份"
|
||||
@@ -1050,8 +1048,8 @@
|
||||
"foods": {
|
||||
"merge-dialog-text": "此操作将把“待合并食物”和“目标食物”合并为一个食物(即“目标食物”)。 “待合并食物”将会被删除 ,之前所有对“待合并食物”的引用都会指向“目标食物”。",
|
||||
"merge-food-example": "正在将{food1}合并到{food2}",
|
||||
"seed-dialog-text": "基于你的本地语言,将一些常见食物添加到数据库。(会有200多种常见食物被添加到你的数据库。食物名称由开源社区志愿者翻译。)",
|
||||
"seed-dialog-warning": "你的数据库中已经存在一些数据。此操作不会处理一些可能存在重复的条目,你需要手动管理它们。",
|
||||
"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": "You have already have some items in your database. This action will not reconcile duplicates, you will have to manage them manually.",
|
||||
"combine-food": "合并食品",
|
||||
"source-food": "待合并食物",
|
||||
"target-food": "目标食物",
|
||||
@@ -1307,7 +1305,7 @@
|
||||
"household-statistics-description": "Your Household Statistics provide some insight how you're using Mealie.",
|
||||
"storage-capacity": "总储存容量",
|
||||
"storage-capacity-description": "你的存储容量基于你上传的图片和资源计算得出。",
|
||||
"personal": "个人设置",
|
||||
"personal": "个人",
|
||||
"personal-description": "这些是你的个人设置。此处的更改不影响同组其他用户。",
|
||||
"user-settings": "个人资料",
|
||||
"user-settings-description": "管理偏好、更换密码或邮箱",
|
||||
|
||||
@@ -579,7 +579,6 @@
|
||||
"made-this": "I Made This",
|
||||
"how-did-it-turn-out": "How did it turn out?",
|
||||
"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.",
|
||||
"message-key": "Message Key",
|
||||
"parse": "Parse",
|
||||
@@ -647,7 +646,6 @@
|
||||
"nextStep": "Next step",
|
||||
"recipe-actions": "Recipe Actions",
|
||||
"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.",
|
||||
"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.",
|
||||
"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",
|
||||
"irreversible-acknowledgment": "I understand that this action is irreversible, destructive and may cause data loss",
|
||||
"restore-backup": "Restore Backup"
|
||||
|
||||
@@ -391,6 +391,11 @@ export interface CreateIngredientFoodAlias {
|
||||
name: string;
|
||||
[k: string]: unknown;
|
||||
}
|
||||
export interface ShoppingListAddRecipeParamsBulk {
|
||||
recipeIncrementQuantity?: number;
|
||||
recipeIngredients?: RecipeIngredient[] | null;
|
||||
recipeId: string;
|
||||
}
|
||||
export interface ShoppingListCreate {
|
||||
name?: string | null;
|
||||
extras?: {
|
||||
|
||||
@@ -291,6 +291,7 @@ export interface UserBase {
|
||||
id: string;
|
||||
username?: string | null;
|
||||
admin: boolean;
|
||||
fullName?: string | null;
|
||||
}
|
||||
export interface RecipeCategoryResponse {
|
||||
name: string;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { BaseCRUDAPI } from "../base/base-clients";
|
||||
import { RecipeIngredient } from "../types/recipe";
|
||||
import { ApiRequestInstance } from "~/lib/api/types/non-generated";
|
||||
import {
|
||||
ShoppingListAddRecipeParamsBulk,
|
||||
ShoppingListCreate,
|
||||
ShoppingListItemCreate,
|
||||
ShoppingListItemOut,
|
||||
@@ -16,7 +16,7 @@ const prefix = "/api";
|
||||
const routes = {
|
||||
shoppingLists: `${prefix}/households/shopping/lists`,
|
||||
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`,
|
||||
shoppingListIdUpdateLabelSettings: (id: string) => `${prefix}/households/shopping/lists/${id}/label-settings`,
|
||||
|
||||
@@ -29,8 +29,8 @@ export class ShoppingListsApi extends BaseCRUDAPI<ShoppingListCreate, ShoppingLi
|
||||
baseRoute = routes.shoppingLists;
|
||||
itemRoute = routes.shoppingListsId;
|
||||
|
||||
async addRecipe(itemId: string, recipeId: string, recipeIncrementQuantity = 1, recipeIngredients: RecipeIngredient[] | null = null) {
|
||||
return await this.requests.post(routes.shoppingListIdAddRecipe(itemId, recipeId), { recipeIncrementQuantity, recipeIngredients });
|
||||
async addRecipes(itemId: string, data: ShoppingListAddRecipeParamsBulk[]) {
|
||||
return await this.requests.post(routes.shoppingListIdAddRecipe(itemId), data);
|
||||
}
|
||||
|
||||
async removeRecipe(itemId: string, recipeId: string, recipeDecrementQuantity = 1) {
|
||||
|
||||
@@ -146,6 +146,8 @@ import {
|
||||
mdiFileCabinet,
|
||||
mdiSilverwareForkKnife,
|
||||
mdiCodeTags,
|
||||
mdiKnife,
|
||||
mdiCookie
|
||||
} from "@mdi/js";
|
||||
|
||||
export const icons = {
|
||||
@@ -271,6 +273,8 @@ export const icons = {
|
||||
windowClose: mdiWindowClose,
|
||||
zip: mdiFolderZipOutline,
|
||||
undo: mdiUndo,
|
||||
knfife: mdiKnife,
|
||||
bread: mdiCookie,
|
||||
|
||||
// Crud
|
||||
backArrow: mdiArrowLeftBoldOutline,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "mealie",
|
||||
"version": "2.5.0",
|
||||
"version": "2.8.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "nuxt",
|
||||
|
||||
@@ -1,13 +1,6 @@
|
||||
<template>
|
||||
<v-container v-if="recipe">
|
||||
<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')">
|
||||
<div class="mt-4">{{ $tc("recipe.parser.explanation") }}</div>
|
||||
|
||||
|
||||
@@ -151,6 +151,24 @@
|
||||
</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 -->
|
||||
<BaseDialog
|
||||
v-model="reorderLabelsDialog"
|
||||
@@ -177,23 +195,6 @@
|
||||
</v-card>
|
||||
</BaseDialog>
|
||||
|
||||
<!-- Create Item -->
|
||||
<div v-if="createEditorOpen">
|
||||
<ShoppingListItemEditor
|
||||
v-model="createListItemData"
|
||||
class="my-4"
|
||||
:labels="allLabels || []"
|
||||
:units="allUnits || []"
|
||||
:foods="allFoods || []"
|
||||
@delete="createEditorOpen = false"
|
||||
@cancel="createEditorOpen = false"
|
||||
@save="createListItem"
|
||||
/>
|
||||
</div>
|
||||
<div v-else class="mt-4 d-flex justify-end">
|
||||
<BaseButton create @click="createEditorOpen = true" > {{ $t('general.add') }} </BaseButton>
|
||||
</div>
|
||||
|
||||
<!-- Checked Items -->
|
||||
<div v-if="listItems.checked && listItems.checked.length > 0" class="mt-6">
|
||||
<div class="d-flex">
|
||||
@@ -833,7 +834,7 @@ export default defineComponent({
|
||||
|
||||
loadingCounter.value += 1;
|
||||
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;
|
||||
loadingCounter.value -= 1;
|
||||
|
||||
|
||||
@@ -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 contextlib import asynccontextmanager
|
||||
|
||||
@@ -115,6 +124,7 @@ register_debug_handler(app)
|
||||
|
||||
async def start_scheduler():
|
||||
SchedulerRegistry.register_daily(
|
||||
tasks.purge_expired_tokens,
|
||||
tasks.purge_group_registration,
|
||||
tasks.purge_password_reset_tokens,
|
||||
tasks.purge_group_data_exports,
|
||||
|
||||
@@ -43,3 +43,6 @@ def mealie_registered_exceptions(t: Translator) -> dict:
|
||||
|
||||
|
||||
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.config import get_app_settings
|
||||
from mealie.core.exceptions import MissingClaimException
|
||||
from mealie.core.security.providers.auth_provider import AuthProvider
|
||||
from mealie.db.models.users.users import AuthMethod
|
||||
from mealie.repos.all_repositories import get_repositories
|
||||
@@ -25,7 +26,7 @@ class OpenIDProvider(AuthProvider[UserInfo]):
|
||||
claims = self.data
|
||||
if not claims:
|
||||
self._logger.error("[OIDC] No claims in the id_token")
|
||||
return None
|
||||
raise MissingClaimException()
|
||||
|
||||
# Log all claims for debugging
|
||||
self._logger.debug("[OIDC] Received claims:")
|
||||
@@ -38,13 +39,13 @@ class OpenIDProvider(AuthProvider[UserInfo]):
|
||||
self.required_claims,
|
||||
claims.keys(),
|
||||
)
|
||||
return None
|
||||
raise MissingClaimException()
|
||||
|
||||
# Check for empty required claims
|
||||
for claim in self.required_claims:
|
||||
if not claims.get(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)
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@ from pydantic_settings import BaseSettings, SettingsConfigDict
|
||||
from mealie.core.settings.themes import Theme
|
||||
|
||||
from .db_providers import AbstractDBProvider, db_provider_factory
|
||||
from .static import PACKAGE_DIR
|
||||
|
||||
|
||||
class ScheduleTime(NamedTuple):
|
||||
@@ -109,7 +110,7 @@ class AppSettings(AppLoggingSettings):
|
||||
BASE_URL: str = "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`)"""
|
||||
|
||||
IS_DEMO: bool = False
|
||||
|
||||
@@ -5,4 +5,5 @@ from mealie import __version__
|
||||
APP_VERSION = __version__
|
||||
|
||||
CWD = Path(__file__).parent
|
||||
PACKAGE_DIR = CWD.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):
|
||||
try:
|
||||
func()
|
||||
except Exception as e:
|
||||
logger.error(f"Error calling '{func.__name__}': {e}")
|
||||
except Exception:
|
||||
logger.exception(f"Error calling '{func.__name__}'")
|
||||
|
||||
|
||||
def connect(session: orm.Session) -> bool:
|
||||
try:
|
||||
session.execute(text("SELECT 1"))
|
||||
return True
|
||||
except Exception as e:
|
||||
logger.error(f"Error connecting to database: {e}")
|
||||
except Exception:
|
||||
logger.exception("Error connecting to database")
|
||||
return False
|
||||
|
||||
|
||||
@@ -106,23 +106,27 @@ def main():
|
||||
if not os.path.isfile(alembic_cfg_path):
|
||||
raise Exception("Provided alembic config path doesn't exist")
|
||||
|
||||
run_fixes = False
|
||||
alembic_cfg = Config(alembic_cfg_path)
|
||||
if db_is_at_head(alembic_cfg):
|
||||
logger.debug("Migration not needed.")
|
||||
else:
|
||||
logger.info("Migration needed. Performing migration...")
|
||||
command.upgrade(alembic_cfg, "head")
|
||||
run_fixes = True
|
||||
|
||||
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;"))
|
||||
|
||||
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_slug_food_names(db))
|
||||
safe_try(lambda: fix_group_with_no_name(session))
|
||||
|
||||
if db.users.get_all():
|
||||
logger.debug("Database exists")
|
||||
else:
|
||||
logger.info("Database contains no users, initializing...")
|
||||
init_db(session)
|
||||
|
||||
@@ -18,7 +18,9 @@ class SqlAlchemyBase(DeclarativeBase):
|
||||
|
||||
@classmethod
|
||||
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:
|
||||
|
||||
@@ -23,8 +23,8 @@ class RecipeInstruction(SqlAlchemyBase):
|
||||
recipe_id: Mapped[GUID | None] = mapped_column(GUID, ForeignKey("recipes.id"), index=True)
|
||||
position: Mapped[int | None] = mapped_column(Integer, index=True)
|
||||
type: Mapped[str | None] = mapped_column(String, default="")
|
||||
title: Mapped[str | None] = mapped_column(String) # This is the section title!!!
|
||||
text: Mapped[str | None] = mapped_column(String, index=True)
|
||||
title: Mapped[str | None] = mapped_column(String) # This is the section title
|
||||
text: Mapped[str | None] = mapped_column(String)
|
||||
summary: Mapped[str | None] = mapped_column(String)
|
||||
|
||||
ingredient_references: Mapped[list[RecipeIngredientRefLink]] = orm.relationship(
|
||||
|
||||
@@ -14,8 +14,8 @@
|
||||
"serves": "Porce",
|
||||
"serving": "Porce",
|
||||
"servings": "Porcí",
|
||||
"yield": "Yield",
|
||||
"yields": "Yields"
|
||||
"yield": "Výnos",
|
||||
"yields": "Výnosy"
|
||||
}
|
||||
},
|
||||
"mealplan": {
|
||||
|
||||
@@ -10,12 +10,12 @@
|
||||
"step-text": "Du kan bruge markdown kode i beskrivelser og andre felter i opskrifter.\n\n**Tilføj et link**\n\n[Mit link](https://demo.mealie.io)\n"
|
||||
},
|
||||
"servings-text": {
|
||||
"makes": "Makes",
|
||||
"serves": "Serves",
|
||||
"makes": "Udgør",
|
||||
"serves": "Portioner",
|
||||
"serving": "Servering",
|
||||
"servings": "Portioner",
|
||||
"yield": "Yield",
|
||||
"yields": "Yields"
|
||||
"yield": "Portioner",
|
||||
"yields": "Portioner"
|
||||
}
|
||||
},
|
||||
"mealplan": {
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
"generic-updated": "{name} was updated",
|
||||
"generic-created-with-url": "{name} has been created, {url}",
|
||||
"generic-updated-with-url": "{name} has been updated, {url}",
|
||||
"generic-duplicated": "{name} has been duplicates",
|
||||
"generic-duplicated": "{name} has been duplicated",
|
||||
"generic-deleted": "{name} has been deleted"
|
||||
},
|
||||
"datetime": {
|
||||
@@ -51,7 +51,7 @@
|
||||
"hour": "hour|hours",
|
||||
"minute": "minute|minutes",
|
||||
"second": "second|seconds",
|
||||
"millisecond": "milliecond|milliseconds",
|
||||
"millisecond": "millisecond|milliseconds",
|
||||
"microsecond": "microsecond|microseconds"
|
||||
},
|
||||
"emails": {
|
||||
|
||||
@@ -11,11 +11,11 @@
|
||||
},
|
||||
"servings-text": {
|
||||
"makes": "Fait",
|
||||
"serves": "Pour",
|
||||
"serves": "Sert",
|
||||
"serving": "Portion",
|
||||
"servings": "Portions",
|
||||
"yield": "Quantité",
|
||||
"yields": "Produit"
|
||||
"yield": "Rendement",
|
||||
"yields": "Rendements"
|
||||
}
|
||||
},
|
||||
"mealplan": {
|
||||
|
||||
@@ -1,80 +1,80 @@
|
||||
{
|
||||
"generic": {
|
||||
"server-error": "An unexpected error occurred"
|
||||
"server-error": "Ocorreu un erro inesperado"
|
||||
},
|
||||
"recipe": {
|
||||
"unique-name-error": "Recipe names must be unique",
|
||||
"recipe-created": "Recipe Created",
|
||||
"unique-name-error": "Os nomes de receitas deven ser únicos",
|
||||
"recipe-created": "Receita creada",
|
||||
"recipe-defaults": {
|
||||
"ingredient-note": "1 Cup Flour",
|
||||
"step-text": "Recipe steps as well as other fields in the recipe page support markdown syntax.\n\n**Add a link**\n\n[My Link](https://demo.mealie.io)\n"
|
||||
"ingredient-note": "1 Cunca de Fariña",
|
||||
"step-text": "Os pasos da receita, como outros campos na páxina da receita, suportan a sintaxe markdown.\n\n**Adicionar un link**\n\n[Meu link](https://demo.mealie.io)\n"
|
||||
},
|
||||
"servings-text": {
|
||||
"makes": "Makes",
|
||||
"serves": "Serves",
|
||||
"serving": "Serving",
|
||||
"servings": "Servings",
|
||||
"yield": "Yield",
|
||||
"yields": "Yields"
|
||||
"makes": "Fai",
|
||||
"serves": "Serve",
|
||||
"serving": "Porción",
|
||||
"servings": "Porcións",
|
||||
"yield": "Rendimento",
|
||||
"yields": "Rendimentos"
|
||||
}
|
||||
},
|
||||
"mealplan": {
|
||||
"no-recipes-match-your-rules": "No recipes match your rules"
|
||||
"no-recipes-match-your-rules": "Nengunha receita corresponde às suas regras"
|
||||
},
|
||||
"user": {
|
||||
"user-updated": "User updated",
|
||||
"password-updated": "Password updated",
|
||||
"invalid-current-password": "Invalid current password",
|
||||
"ldap-update-password-unavailable": "Unable to update password, user is controlled by LDAP"
|
||||
"user-updated": "Usuario atualizado",
|
||||
"password-updated": "Seña atualizada",
|
||||
"invalid-current-password": "Seña atual inválida",
|
||||
"ldap-update-password-unavailable": "Imposível atualizar a seña, o usuario é controlado por LDAP"
|
||||
},
|
||||
"group": {
|
||||
"report-deleted": "Report deleted."
|
||||
"report-deleted": "Relatorio eliminado."
|
||||
},
|
||||
"exceptions": {
|
||||
"permission_denied": "You do not have permission to perform this action",
|
||||
"no-entry-found": "The requested resource was not found",
|
||||
"integrity-error": "Database integrity error",
|
||||
"username-conflict-error": "This username is already taken",
|
||||
"email-conflict-error": "This email is already in use"
|
||||
"permission_denied": "Non ten permisos para efetuar esta ación",
|
||||
"no-entry-found": "O recurso solicitado non foi encontrado",
|
||||
"integrity-error": "Erro de integridade da base de datos",
|
||||
"username-conflict-error": "Este nome de usuario xa está en uso",
|
||||
"email-conflict-error": "Este e-mail xa está a ser utilizado"
|
||||
},
|
||||
"notifications": {
|
||||
"generic-created": "{name} was created",
|
||||
"generic-updated": "{name} was updated",
|
||||
"generic-created-with-url": "{name} has been created, {url}",
|
||||
"generic-updated-with-url": "{name} has been updated, {url}",
|
||||
"generic-duplicated": "{name} has been duplicated",
|
||||
"generic-deleted": "{name} has been deleted"
|
||||
"generic-created": "{name} creado",
|
||||
"generic-updated": "{name} atualizado",
|
||||
"generic-created-with-url": "{name} foi creado, {url}",
|
||||
"generic-updated-with-url": "{name} foi atualizado, {url}",
|
||||
"generic-duplicated": "{name} foi duplicado",
|
||||
"generic-deleted": "{name} foi eliminado"
|
||||
},
|
||||
"datetime": {
|
||||
"year": "year|years",
|
||||
"day": "day|days",
|
||||
"hour": "hour|hours",
|
||||
"minute": "minute|minutes",
|
||||
"second": "second|seconds",
|
||||
"millisecond": "millisecond|milliseconds",
|
||||
"microsecond": "microsecond|microseconds"
|
||||
"year": "ano|anos",
|
||||
"day": "dia|dias",
|
||||
"hour": "hora|horas",
|
||||
"minute": "minuto|minutos",
|
||||
"second": "segundo|segundos",
|
||||
"millisecond": "milisegundo|milisegundos",
|
||||
"microsecond": "microsegundo|microsegundos"
|
||||
},
|
||||
"emails": {
|
||||
"password": {
|
||||
"subject": "Mealie Forgot Password",
|
||||
"header_text": "Forgot Password",
|
||||
"message_top": "You have requested to reset your password.",
|
||||
"message_bottom": "Please click the button above to reset your password.",
|
||||
"button_text": "Reset Password"
|
||||
"subject": "Mealie Esqueceuse da Seña",
|
||||
"header_text": "Esquecin a miña seña",
|
||||
"message_top": "Solicitou a reposición da sua seña.",
|
||||
"message_bottom": "Clique no boton acima para redefinir a sua seña.",
|
||||
"button_text": "Redefinir Seña"
|
||||
},
|
||||
"invitation": {
|
||||
"subject": "Invitation to join Mealie",
|
||||
"header_text": "You're Invited!",
|
||||
"message_top": "You have been invited to join Mealie.",
|
||||
"message_bottom": "Please click the button above to accept the invitation.",
|
||||
"button_text": "Accept Invitation"
|
||||
"subject": "Convite para aderirse ao Mealie",
|
||||
"header_text": "Está convidado!",
|
||||
"message_top": "Foi convidado para aderirse ao Mealie.",
|
||||
"message_bottom": "Clique no botón acima para aceptar o convite.",
|
||||
"button_text": "Aceptar Convite"
|
||||
},
|
||||
"test": {
|
||||
"subject": "Mealie Test Email",
|
||||
"header_text": "Test Email",
|
||||
"message_top": "This is a test email.",
|
||||
"message_bottom": "Please click the button above to test the email.",
|
||||
"button_text": "Open Mealie"
|
||||
"subject": "Email de Prova do Mealie",
|
||||
"header_text": "Email de Prova",
|
||||
"message_top": "Este é un email de prova.",
|
||||
"message_bottom": "Clique no botón acima para provar o email.",
|
||||
"button_text": "Abrir o Mealie"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"server-error": "Si è verificato un errore inaspettato"
|
||||
},
|
||||
"recipe": {
|
||||
"unique-name-error": "I nomi delle ricette devono essere unici",
|
||||
"unique-name-error": "I nomi delle ricette devono essere univoci",
|
||||
"recipe-created": "Ricetta Creata",
|
||||
"recipe-defaults": {
|
||||
"ingredient-note": "1 Tazza Di Farina",
|
||||
|
||||
@@ -14,8 +14,8 @@
|
||||
"serves": "Nok til",
|
||||
"serving": "porsjon",
|
||||
"servings": "porsjoner",
|
||||
"yield": "Yield",
|
||||
"yields": "Yields"
|
||||
"yield": "Gir",
|
||||
"yields": "Gir"
|
||||
}
|
||||
},
|
||||
"mealplan": {
|
||||
|
||||
@@ -4,18 +4,18 @@
|
||||
},
|
||||
"recipe": {
|
||||
"unique-name-error": "Nazwy przepisów muszą być unikatowe",
|
||||
"recipe-created": "Recipe Created",
|
||||
"recipe-created": "Utworzono przepis",
|
||||
"recipe-defaults": {
|
||||
"ingredient-note": "1 szklanka mąki",
|
||||
"step-text": "Kroki przepisu, jak również inne pola na stronie przepisu obsługują składnię markdown.\n\n**Dodaj link**\n\n[Mój link](https://demo.mealie.io)\n"
|
||||
},
|
||||
"servings-text": {
|
||||
"makes": "Makes",
|
||||
"serves": "Serves",
|
||||
"serving": "Serving",
|
||||
"servings": "Servings",
|
||||
"yield": "Yield",
|
||||
"yields": "Yields"
|
||||
"makes": "Daje",
|
||||
"serves": "Wystarcza dla",
|
||||
"serving": "Porcja",
|
||||
"servings": "Porcje",
|
||||
"yield": "Ilość",
|
||||
"yields": "Porcje"
|
||||
}
|
||||
},
|
||||
"mealplan": {
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user