Compare commits

...

111 Commits

Author SHA1 Message Date
renovate[bot]
6732fcd696 chore(deps): update dependency fastapi to v0.120.3 (#6465)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-31 11:08:41 -05:00
Hayden
5fcbfbf361 chore(l10n): New Crowdin updates (#6464) 2025-10-31 01:06:46 +05:45
Hayden
1318998bc9 chore(l10n): New Crowdin updates (#6462) 2025-10-30 12:59:57 +05:45
renovate[bot]
0947212271 chore(deps): update dependency fastapi to v0.120.2 (#6457) 2025-10-29 14:39:33 +00:00
renovate[bot]
92ac5c6253 chore(deps): update node.js to v24 (#6451) 2025-10-29 09:27:00 -05:00
renovate[bot]
5f96f4b47f chore(deps): update dependency fastapi to v0.120.1 (#6450)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-29 08:49:32 -05:00
renovate[bot]
dbcd430425 chore(deps): update dependency alembic to v1.17.1 (#6456)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-29 04:52:13 +00:00
renovate[bot]
4c9164594b chore(deps): update dependency python-dotenv to v1.2.1 (#6442)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-28 23:39:37 -05:00
renovate[bot]
e5a13f8b43 chore(deps): update dependency ingredient-parser-nlp to v2.4.0 (#6448)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-29 01:34:43 +00:00
github-actions[bot]
726ad10c7e chore(auto): Update pre-commit hooks (#6445)
Co-authored-by: boc-the-git <3479092+boc-the-git@users.noreply.github.com>
2025-10-29 01:22:51 +00:00
Hayden
df53310f2e chore(l10n): New Crowdin updates (#6455) 2025-10-28 22:12:48 +05:45
Hayden
82bf5c1bae chore(l10n): New Crowdin updates (#6446) 2025-10-28 10:32:51 +05:45
Hayden
c70a63f0ff chore(l10n): New Crowdin updates (#6444) 2025-10-27 12:16:52 +05:45
Hayden
14bfa6bcae chore(l10n): New Crowdin updates (#6441) 2025-10-26 09:52:59 -05:00
github-actions[bot]
adbafef157 chore(l10n): Crowdin locale sync (#6440)
Co-authored-by: GitHub Action <action@github.com>
2025-10-26 04:06:16 +00:00
Hayden
62d52f53e4 chore(l10n): New Crowdin updates (#6439) 2025-10-25 22:55:47 -05:00
Florian Fischer
4370319fec fix: Food seed only works for American English (#6204) (#6436)
Co-authored-by: Michael Genson <71845777+michael-genson@users.noreply.github.com>
2025-10-25 12:40:02 -05:00
Hayden
15908d190d chore(l10n): New Crowdin updates (#6435) 2025-10-25 10:07:21 -05:00
Hayden
fcb909e072 chore(l10n): New Crowdin updates (#6434) 2025-10-25 01:50:15 +00:00
Aurelien
8e532af4d9 fix: Heart and Ranking Stars overlap each other (#6359)
Co-authored-by: Michael Genson <71845777+michael-genson@users.noreply.github.com>
2025-10-24 17:35:07 -05:00
Richard vL
831cb6dd17 fix: Changed sorting icons (#6354)
Co-authored-by: Michael Genson <71845777+michael-genson@users.noreply.github.com>
2025-10-24 21:51:11 +00:00
Michael Genson
089bb24c0f fix: Make docs:gen consistent regardless of timestamp (again) (#6432) 2025-10-24 16:34:44 -05:00
Fernando Muñoz Paredes
107dfc34de fix: dash slug names (#5709)
Co-authored-by: Michael Genson <71845777+michael-genson@users.noreply.github.com>
2025-10-24 16:01:55 -05:00
renovate[bot]
144d4caea6 chore(deps): update dependency orjson to v3.11.4 (#6431)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-24 14:02:45 -05:00
renovate[bot]
b3db81b9a4 chore(deps): update dependency openai to v2.6.1 (#6429)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-24 18:29:53 +00:00
renovate[bot]
dc2bbdc494 fix(deps): update dependency fastapi to ^0.120.0 (#6426)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-24 13:17:47 -05:00
Hayden
8f17a08923 chore(l10n): New Crowdin updates (#6396) 2025-10-24 15:44:12 +00:00
renovate[bot]
f6209bff54 chore(deps): update node.js to 23c24e8 (#6424)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-24 15:31:16 +00:00
Michael Genson
33865285d1 fix: Use crossorigin: "use-credentials" with PWA manifest (#6430) 2025-10-24 10:20:04 -05:00
renovate[bot]
e226b9b1d5 fix(deps): update dependency vite to v7 [security] (#6412)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-24 14:55:04 +00:00
miah
201c63d1e4 feat: Improve shopping list label sections (#6345)
Co-authored-by: Michael Genson <71845777+michael-genson@users.noreply.github.com>
2025-10-24 09:43:55 -05:00
renovate[bot]
a242f567ad chore(deps): update dependency ruff to v0.14.2 (#6425)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-23 23:08:29 -05:00
renovate[bot]
67ead2e8a1 chore(deps): update node.js to a2a7dcc (#6422)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-22 13:54:33 +00:00
renovate[bot]
7b273b77e2 chore(deps): update node.js to 58644f2 (#6418)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-22 08:42:55 -05:00
renovate[bot]
b4cd095360 chore(deps): update dependency pylint to v4.0.2 (#6409)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-21 18:22:02 +00:00
renovate[bot]
a9bb27c782 chore(deps): update dependency fastapi to v0.119.1 (#6408)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-21 13:08:10 -05:00
renovate[bot]
9df1523911 fix(deps): update dependency uvicorn to ^0.38.0 (#6400)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-21 12:47:15 -05:00
renovate[bot]
0c8a1ae608 chore(deps): update dependency openai to v2.6.0 (#6398)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-21 17:26:57 +00:00
renovate[bot]
7d54404bf0 chore(deps): update dependency ruff to v0.14.1 (#6397)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-21 12:04:13 -05:00
github-actions[bot]
8bbe70d245 chore(auto): Update pre-commit hooks (#6407)
Co-authored-by: boc-the-git <3479092+boc-the-git@users.noreply.github.com>
2025-10-21 16:16:07 +00:00
renovate[bot]
6c87f7fe33 chore(deps): update dependency pydantic to v2.12.3 (#6377)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-21 11:04:10 -05:00
miah
7e168eb75b feat: Support User-Level Default Activities (#5125) 2025-10-15 21:30:08 -05:00
Hayden
64d481b4fc chore(l10n): New Crowdin updates (#6395) 2025-10-15 21:08:22 +00:00
renovate[bot]
a9926557bc fix(deps): update dependency pillow to v12 (#6394)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-15 15:55:25 -05:00
renovate[bot]
2a908c0dd2 chore(deps): update dependency coverage to v7.11.0 (#6392) 2025-10-15 14:50:55 -05:00
renovate[bot]
c64a0dc769 chore(deps): update dependency mkdocs-material to v9.6.22 (#6391) 2025-10-15 10:46:58 -05:00
renovate[bot]
7ce9c35ef5 chore(deps): update dependency pylint to v4.0.1 (#6389) 2025-10-15 13:17:11 +00:00
Hayden
0acca2021d chore(l10n): New Crowdin updates (#6388) 2025-10-15 08:05:19 -05:00
Michael Genson
5de0b48aa9 fix: Upgrade Pydantic and remove manual Postgres URL parsing (#6385) 2025-10-14 15:52:50 -05:00
Hayden
ffe199c083 chore(l10n): New Crowdin updates (#6384) 2025-10-14 20:25:34 +00:00
Michael Genson
215a18be42 fix: Check x-forwarded-proto header when determining auth cookie samesite attribute (#6383) 2025-10-14 12:38:03 -05:00
github-actions[bot]
a1b065e5d1 chore(auto): Update pre-commit hooks (#6370)
Co-authored-by: boc-the-git <3479092+boc-the-git@users.noreply.github.com>
2025-10-14 16:22:22 +00:00
Hayden
d660d89a1b chore(l10n): New Crowdin updates (#6381) 2025-10-14 10:22:03 -05:00
Hayden
ade1f797a9 chore(l10n): New Crowdin updates (#6376) 2025-10-13 19:45:53 +00:00
Ritoban Dutta
192872b9ec fix: Change 'Units' to 'Unit' in shopping list item editor (#6372) 2025-10-13 17:41:29 +00:00
renovate[bot]
25ebcb1a05 chore(deps): update dependency pylint to v4 (#6366)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-13 15:21:26 +00:00
Hayden
89d95ca5e1 chore(l10n): New Crowdin updates (#6371) 2025-10-13 10:09:53 -05:00
Hayden
b705652af3 chore(l10n): New Crowdin updates (#6367) 2025-10-12 14:28:54 -05:00
github-actions[bot]
b0c78de2da chore(l10n): Crowdin locale sync (#6364)
Co-authored-by: GitHub Action <action@github.com>
2025-10-12 04:15:09 +00:00
renovate[bot]
c4b1f9fd01 fix(deps): update dependency fastapi to ^0.119.0 (#6362)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-11 23:01:45 -05:00
renovate[bot]
2b0d8227f4 chore(deps): update dependency alembic to v1.17.0 (#6361)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-11 19:14:31 +00:00
Hayden
42517e9f8a chore(l10n): New Crowdin updates (#6357) 2025-10-11 14:01:21 -05:00
renovate[bot]
37c97c8aba chore(deps): update dependency python-ldap to v3.4.5 [security] (#6356)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-10 22:52:36 -05:00
Hayden
64d36a2608 chore(l10n): New Crowdin updates (#6353) 2025-10-10 12:49:24 -05:00
renovate[bot]
563defe074 chore(deps): update dependency sqlalchemy to v2.0.44 (#6352)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-10 12:14:59 -05:00
renovate[bot]
f5ffb760d3 chore(deps): update dependency psycopg2-binary to v2.9.11 (#6351)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-10 16:34:05 +00:00
renovate[bot]
3118a0c0cf fix(deps): update dependency aiofiles to v25 (#6344)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-10 11:19:52 -05:00
renovate[bot]
444beb68f9 chore(deps): update dependency rich to v14.2.0 (#6341)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-10 16:03:34 +00:00
renovate[bot]
49a97ebc0e chore(deps): update dependency fastapi to v0.118.3 (#6336)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-10 10:46:29 -05:00
renovate[bot]
6f682b742e chore(deps): update dependency pydantic to v2.12.0 (#6310)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-10 10:24:12 -05:00
Hayden
32d4d22bb8 chore(l10n): New Crowdin updates (#6347)
Co-authored-by: Michael Genson <71845777+michael-genson@users.noreply.github.com>
2025-10-10 05:33:04 +00:00
Dallin Miner
71d86489f4 feat: Add new migration for DVO Cook'n (#5085)
Co-authored-by: Michael Genson <71845777+michael-genson@users.noreply.github.com>
2025-10-10 00:22:51 -05:00
github-actions[bot]
a95eaf3d2e docs(auto): Update image tag, for release v3.3.2 (#6346)
Co-authored-by: michael-genson <71845777+michael-genson@users.noreply.github.com>
2025-10-10 04:14:06 +00:00
renovate[bot]
414af989e7 chore(deps): update dependency openai to v2.3.0 (#6330)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-09 23:02:07 -05:00
Michael Genson
b7b191a5ee fix: Truncate Long Passwords (>72 bytes) (#6335) 2025-10-09 23:46:06 +00:00
Hayden
5620370ade chore(l10n): New Crowdin updates (#6320) 2025-10-09 16:30:31 +00:00
renovate[bot]
d333d47e34 chore(deps): update dependency ruff to ^0.14.0 (#6334)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-07 18:49:52 +00:00
Brian Choromanski
b34b1c9be3 feat: Added url to current version release (#6308) 2025-10-07 09:31:55 +00:00
Michael Genson
8c5010148d fix: Translate log-out string (#6332) 2025-10-06 17:14:51 -05:00
Michael Genson
a17b0e329e fix: No Redirect On Valid Token (#6327) 2025-10-06 13:02:25 -05:00
Arsène Reymond
8ab69a7d7a fix: Remove unused next-auth dependency (#6328) 2025-10-06 12:43:13 -05:00
github-actions[bot]
f4ecf74b91 chore(auto): Update pre-commit hooks (#6324)
Co-authored-by: boc-the-git <3479092+boc-the-git@users.noreply.github.com>
2025-10-06 15:09:13 +00:00
renovate[bot]
ba9d816f64 chore(deps): update dependency pylint to v3.3.9 (#6321)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-06 09:57:17 -05:00
Michael Genson
6895b49543 fix: Re-write Nuxt auth backend and get rid of sidebase auth (#6322) 2025-10-05 20:43:38 -05:00
github-actions[bot]
fffe7b05e0 chore(l10n): Crowdin locale sync (#6318)
Co-authored-by: GitHub Action <action@github.com>
2025-10-05 02:56:21 +00:00
Hayden
1271e0e49b chore(l10n): New Crowdin updates (#6317) 2025-10-04 21:45:57 -05:00
Hayden
478054b724 chore(l10n): New Crowdin updates (#6313) 2025-10-04 11:30:21 -05:00
Hayden
57d259a7a3 chore(l10n): New Crowdin updates (#6309) 2025-10-04 21:34:09 +10:00
Hayden
a4a6d4dfb1 chore(l10n): New Crowdin updates (#6273) 2025-10-03 17:24:33 +00:00
github-actions[bot]
f7b4f79312 chore(l10n): Crowdin locale sync (#6268)
Co-authored-by: GitHub Action <action@github.com>
2025-10-03 17:03:14 +00:00
renovate[bot]
434d312f7c chore(deps): update dependency openai to v2.1.0 (#6302)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-03 11:50:06 -05:00
renovate[bot]
bda460b49e chore(deps): update dependency ruff to v0.13.3 (#6301)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-03 16:17:53 +00:00
renovate[bot]
d3e1c48655 chore(deps): update dependency authlib to v1.6.5 (#6299)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-03 11:05:13 -05:00
github-actions[bot]
b2a3430f2c docs(auto): Update image tag, for release v3.3.1 (#6300)
Co-authored-by: michael-genson <71845777+michael-genson@users.noreply.github.com>
2025-10-02 18:26:51 +00:00
renovate[bot]
3d792d9333 chore(deps): update dependency openai to v2.0.1 (#6296)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-02 17:22:38 +00:00
renovate[bot]
2e028d7e12 chore(deps): update node.js to 2bb201f (#6295)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-02 12:11:00 -05:00
Brian Choromanski
c63932e8b3 fix: Updated pwa orientation to any (#6298) 2025-10-01 20:51:15 -05:00
renovate[bot]
3ba2227bc7 chore(deps): update dependency mkdocs-material to v9.6.21 (#6293)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-01 04:45:41 +00:00
renovate[bot]
67af391c6b chore(deps): update dependency pillow-heif to v1.1.1 (#6291)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-09-30 23:33:14 -05:00
renovate[bot]
70ae0dac25 chore(deps): update node.js to d367fd3 (#6292)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-01 03:19:44 +00:00
renovate[bot]
e15a9c3c9f chore(deps): update dependency apprise to v1.9.5 (#6290)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-09-30 22:07:31 -05:00
renovate[bot]
9d40d60b3b fix(deps): update dependency openai to v2 (#6294)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-09-30 21:40:14 -05:00
renovate[bot]
e2760f7247 chore(deps): update dependency tzdata to v2025 (#6287) 2025-09-29 17:18:19 -05:00
Michael Genson
83bf21b947 fix: Restore recipe meta for non-logged-in users (#6286) 2025-09-29 10:33:18 -05:00
Michael Genson
d1824affff fix: Default to "0" qty when creating ingredients everywhere (#6285) 2025-09-29 10:19:37 -05:00
renovate[bot]
4827e1092f chore(deps): update dependency beautifulsoup4 to v4.14.2 (#6283)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-09-29 09:49:54 -05:00
github-actions[bot]
7db767b075 chore(auto): Update pre-commit hooks (#6282)
Co-authored-by: boc-the-git <3479092+boc-the-git@users.noreply.github.com>
2025-09-29 14:36:01 +00:00
renovate[bot]
afdd0b15dc fix(deps): update dependency fastapi to ^0.118.0 (#6281)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-09-29 09:24:37 -05:00
Michael Genson
37c9166a77 docs: Update TOKEN_TIME docs to include max (#6279) 2025-09-28 22:05:15 -05:00
github-actions[bot]
ba0b9d4cd9 docs(auto): Update image tag, for release v3.3.0 (#6267)
Co-authored-by: michael-genson <71845777+michael-genson@users.noreply.github.com>
2025-09-28 01:13:15 +00:00
renovate[bot]
9fd99a86b8 chore(deps): update dependency beautifulsoup4 to v4.14.0 (#6260)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-09-27 20:02:31 -05:00
195 changed files with 8445 additions and 7384 deletions

View File

@@ -77,7 +77,7 @@ jobs:
sed -i 's/:v[0-9]*.[0-9]*.[0-9]*/:v${{ env.VERSION_NUM }}/' docs/docs/documentation/getting-started/installation/sqlite.md
sed -i 's/:v[0-9]*.[0-9]*.[0-9]*/:v${{ env.VERSION_NUM }}/' docs/docs/documentation/getting-started/installation/postgres.md
sed -i 's/^version = "[^"]*"/version = "${{ env.VERSION_NUM }}"/' pyproject.toml
sed -i 's/^\s*"version": "[^"]*"/"version": "${{ env.VERSION_NUM }}"/' frontend/package.json
sed -i 's/\("version": "\)[^"]*"/\1${{ env.VERSION_NUM }}"/' frontend/package.json
- name: Create Pull Request
uses: peter-evans/create-pull-request@v6

View File

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

View File

@@ -1,7 +1,8 @@
import json
from datetime import UTC, datetime
from typing import Any
from fastapi import FastAPI
from freezegun import freeze_time
from mealie.app import app
from mealie.core.config import determine_data_dir
@@ -37,14 +38,43 @@ HTML_TEMPLATE = """<!-- Custom HTML site displayed as the Home chapter -->
"""
HTML_PATH = DATA_DIR.parent.parent.joinpath("docs/docs/overrides/api.html")
CONSTANT_DT = datetime(2025, 10, 24, 15, 53, 0, 0, tzinfo=UTC)
def normalize_timestamps(s: dict[str, Any]) -> dict[str, Any]:
field_format = s.get("format")
is_timestamp = field_format in ["date-time", "date", "time"]
has_default = s.get("default")
if not is_timestamp:
for k, v in s.items():
if isinstance(v, dict):
s[k] = normalize_timestamps(v)
elif isinstance(v, list):
s[k] = [normalize_timestamps(i) if isinstance(i, dict) else i for i in v]
return s
elif not has_default:
return s
if field_format == "date-time":
s["default"] = CONSTANT_DT.isoformat()
elif field_format == "date":
s["default"] = CONSTANT_DT.date().isoformat()
elif field_format == "time":
s["default"] = CONSTANT_DT.time().isoformat()
return s
def generate_api_docs(my_app: FastAPI):
openapi_schema = my_app.openapi()
openapi_schema = normalize_timestamps(openapi_schema)
with open(HTML_PATH, "w") as fd:
text = HTML_TEMPLATE.replace("MY_SPECIFIC_TEXT", json.dumps(my_app.openapi()))
text = HTML_TEMPLATE.replace("MY_SPECIFIC_TEXT", json.dumps(openapi_schema))
fd.write(text)
if __name__ == "__main__":
with freeze_time("2024-01-20T17:00:55Z"):
generate_api_docs(app)
generate_api_docs(app)

View File

@@ -1,7 +1,7 @@
###############################################
# Frontend Build
###############################################
FROM node:22@sha256:4973262386dc1cb70f7d6fc48a855027d8f12d2d3b1fe559b9db9a4fcb74668f \
FROM node:24@sha256:34af25027ee1b8bffd482ba995ec1e577fbd398db87beb4c60b80c2c9c025127 \
AS frontend-builder
WORKDIR /frontend

View File

@@ -22,6 +22,7 @@ Mealie supports importing recipes from a few other sources besides websites. Cur
- Recipe Keeper
- Copy Me That
- My Recipe Box
- DVO Cook'n X3
You can access these options on your installation at the `/group/migrations` page on your installation. If you'd like to see another source added, feel free to request so on Github.

View File

@@ -11,7 +11,7 @@
| DEFAULT_GROUP | Home | The default group for users |
| DEFAULT_HOUSEHOLD | Family | The default household for users in each group |
| BASE_URL | http://localhost:8080 | Used for Notifications |
| TOKEN_TIME | 48 | The time in hours that a login/auth token is valid |
| TOKEN_TIME | 48 | The time in hours that a login/auth token is valid. Must be <= 87600 (10 years, in hours). |
| API_PORT | 9000 | The port exposed by backend API. **Do not change this if you're running in Docker** |
| API_DOCS | True | Turns on/off access to the API documentation locally |
| TZ | UTC | Must be set to get correct date/time on the server |

View File

@@ -31,7 +31,7 @@ To deploy mealie on your local network, it is highly recommended to use Docker t
We've gone through a few versions of Mealie v1 deployment targets. We have settled on a single container deployment, and we've begun publishing the nightly container on github containers. If you're looking to move from the old nightly (split containers _or_ the omni image) to the new nightly, there are a few things you need to do:
1. Take a backup just in case!
2. Replace the image for the API container with `ghcr.io/mealie-recipes/mealie:v3.2.1`
2. Replace the image for the API container with `ghcr.io/mealie-recipes/mealie:v3.3.2`
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

View File

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

View File

@@ -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:v3.2.1 # (3)
image: ghcr.io/mealie-recipes/mealie:v3.3.2 # (3)
container_name: mealie
restart: always
ports:

View File

@@ -28,6 +28,7 @@ Mealie is a self hosted recipe manager and meal planner with a RestAPI backend a
- Copy Me That
- Paprika
- Tandoor Recipes
- DVO Cook'n X3
- Random Meal Plan generation
- Advanced rule configuration to fine tune random recipes

View File

File diff suppressed because one or more lines are too long

View File

@@ -49,7 +49,6 @@
>
<RecipeFavoriteBadge
v-if="isOwnGroup"
class="absolute"
:recipe-id="recipeId"
show-always
/>

View File

@@ -32,7 +32,7 @@
v-bind="props"
>
<v-icon :start="!$vuetify.display.xs">
{{ state.orderDirection === "asc" ? $globals.icons.sortAscending : $globals.icons.sortDescending }}
{{ state.orderDirection === "asc" ? $globals.icons.sortDescending : $globals.icons.sortAscending }}
</v-icon>
{{ $vuetify.display.xs ? null : sortText }}
</v-btn>
@@ -42,7 +42,7 @@
<v-list-item
slim
density="comfortable"
:prepend-icon="state.orderDirection === 'asc' ? $globals.icons.sortDescending : $globals.icons.sortAscending"
:prepend-icon="state.orderDirection === 'asc' ? $globals.icons.sortAscending : $globals.icons.sortDescending"
:title="state.orderDirection === 'asc' ? $t('general.sort-descending') : $t('general.sort-ascending')"
@click="toggleOrderDirection"
/>

View File

@@ -127,7 +127,7 @@ function addIngredient(ingredients: Array<string> | null = null) {
note: x,
unit: undefined,
food: undefined,
quantity: 1,
quantity: 0,
};
});
@@ -145,7 +145,7 @@ function addIngredient(ingredients: Array<string> | null = null) {
unit: undefined,
// @ts-expect-error - prop can be null-type by NoUndefinedField type forces it to be set
food: undefined,
quantity: 1,
quantity: 0,
});
}
}
@@ -159,7 +159,7 @@ function insertNewIngredient(dest: number) {
unit: undefined,
// @ts-expect-error - prop can be null-type by NoUndefinedField type forces it to be set
food: undefined,
quantity: 1,
quantity: 0,
});
}
</script>

View File

@@ -523,7 +523,7 @@ function insertNewIngredient(index: number) {
input: "",
confidence: {},
ingredient: {
quantity: 1.0,
quantity: 0,
referenceId: uuid4(),
},
} as ParsedIngredient;

View File

@@ -47,7 +47,7 @@
left
color="primary"
>
{{ $globals.icons.knfife }}
{{ $globals.icons.knife }}
</v-icon>
<p class="my-0">
<span class="font-weight-bold opacity-80">{{ validatePrepTime.name }}</span><br>{{ validatePrepTime.value }}

View File

@@ -10,7 +10,7 @@
v-model="listItem.unit"
v-model:item-id="listItem.unitId!"
:items="units"
:label="$t('general.units')"
:label="$t('recipe.unit')"
:icon="$globals.icons.units"
create
@create="createAssignUnit"

View File

@@ -128,7 +128,7 @@ export default defineNuxtComponent({
async function logout() {
try {
await $auth.signOut({ callbackUrl: "/login?direct=1" });
await $auth.signOut("/login?direct=1");
}
catch (e) {
console.error(e);

View File

@@ -0,0 +1,17 @@
<template>
<v-expansion-panels v-model="open">
<slot />
</v-expansion-panels>
</template>
<script setup lang="ts">
interface Props {
startOpen?: boolean;
}
const props = withDefaults(defineProps<Props>(), {
startOpen: false,
});
const open = ref(props.startOpen ? [0] : []);
</script>

View File

@@ -1,5 +1,5 @@
import { useToggle } from "@vueuse/core";
import type { ShoppingListOut, ShoppingListItemOut } from "~/lib/api/types/household";
import type { ShoppingListOut } from "~/lib/api/types/household";
/**
* Composable for managing shopping list label state and operations
@@ -36,14 +36,24 @@ export function useShoppingListLabels(shoppingList: Ref<ShoppingListOut | null>)
);
});
const labelColorByName = computed(() => {
const map: Record<string, string | undefined> = {};
shoppingList.value?.listItems?.forEach((item) => {
if (!item.label) return;
const labelName = item.label?.name || t("shopping-list.no-label");
map[labelName] = item.label.color;
});
return map;
});
watch(labelNames, initializeLabelOpenStates, { immediate: true });
function toggleShowLabel(key: string) {
labelOpenState.value[key] = !labelOpenState.value[key];
}
function getLabelColor(item: ShoppingListItemOut | null) {
return item?.label?.color;
function getLabelColor(label: string) {
return labelColorByName.value[label];
}
const presentLabels = computed(() => {

View File

@@ -0,0 +1,63 @@
import type { Activity, I18n, TranslationResult } from "~/lib/api/types/activity";
import { ActivityKey } from "~/lib/api/types/activity";
export const DEFAULT_ACTIVITY = "/g/home" as const;
type ActivityRegistry = {
recipes: Activity;
mealplanner: Activity;
shopping_list: Activity;
};
const selectableActivities: ActivityRegistry = {
recipes: {
key: ActivityKey.RECIPES,
route: groupSlug => groupSlug ? `/g/${groupSlug}` : DEFAULT_ACTIVITY,
label: i18n => i18n.t("general.recipes"),
},
mealplanner: {
key: ActivityKey.MEALPLANNER,
route: () => "/household/mealplan/planner/view",
label: i18n => i18n.t("meal-plan.meal-planner"),
},
shopping_list: {
key: ActivityKey.SHOPPING_LIST,
route: () => "/shopping-lists",
label: i18n => i18n.t("shopping-list.shopping-lists"),
},
};
function getDefaultActivityRoute(activityKey?: ActivityKey, groupSlug?: string): string {
if (!activityKey) {
return DEFAULT_ACTIVITY;
}
const route = selectableActivities[activityKey]?.route ?? (() => DEFAULT_ACTIVITY);
return route(groupSlug);
}
function getDefaultActivityLabels(i18n: I18n): TranslationResult[] {
return Object.values(selectableActivities).map(
({ label }) => label(i18n),
);
}
function getActivityKey(i18n: I18n, target: TranslationResult = ""): ActivityKey | undefined {
return Object.values(selectableActivities)
.find(({ label }) => label(i18n) === target)?.key;
}
function getActivityLabel(i18n: I18n, target?: ActivityKey): TranslationResult {
return Object.values(selectableActivities)
.find(({ key }) => key === target)
?.label(i18n) ?? "";
}
export default function useDefaultActivity() {
return {
selectableActivities,
getDefaultActivityRoute,
getDefaultActivityLabels,
getActivityKey,
getActivityLabel,
};
}

View File

@@ -21,7 +21,7 @@ export const LOCALES = [
{
name: "Українська (Ukrainian)",
value: "uk-UA",
progress: 44,
progress: 57,
dir: "ltr",
},
{
@@ -33,7 +33,7 @@ export const LOCALES = [
{
name: "Svenska (Swedish)",
value: "sv-SE",
progress: 52,
progress: 65,
dir: "ltr",
},
{
@@ -57,7 +57,7 @@ export const LOCALES = [
{
name: "Pусский (Russian)",
value: "ru-RU",
progress: 40,
progress: 44,
dir: "ltr",
},
{
@@ -75,25 +75,25 @@ export const LOCALES = [
{
name: "Português do Brasil (Brazilian Portuguese)",
value: "pt-BR",
progress: 45,
progress: 46,
dir: "ltr",
},
{
name: "Polski (Polish)",
value: "pl-PL",
progress: 42,
progress: 43,
dir: "ltr",
},
{
name: "Norsk (Norwegian)",
value: "no-NO",
progress: 39,
progress: 40,
dir: "ltr",
},
{
name: "Nederlands (Dutch)",
value: "nl-NL",
progress: 49,
progress: 52,
dir: "ltr",
},
{
@@ -123,19 +123,19 @@ export const LOCALES = [
{
name: "Italiano (Italian)",
value: "it-IT",
progress: 41,
progress: 46,
dir: "ltr",
},
{
name: "Íslenska (Icelandic)",
value: "is-IS",
progress: 3,
progress: 27,
dir: "ltr",
},
{
name: "Magyar (Hungarian)",
value: "hu-HU",
progress: 45,
progress: 46,
dir: "ltr",
},
{
@@ -147,7 +147,7 @@ export const LOCALES = [
{
name: "עברית (Hebrew)",
value: "he-IL",
progress: 73,
progress: 72,
dir: "rtl",
},
{
@@ -159,7 +159,7 @@ export const LOCALES = [
{
name: "Français (French)",
value: "fr-FR",
progress: 66,
progress: 67,
dir: "ltr",
},
{
@@ -171,25 +171,25 @@ export const LOCALES = [
{
name: "Belge (Belgian)",
value: "fr-BE",
progress: 41,
progress: 40,
dir: "ltr",
},
{
name: "Suomi (Finnish)",
value: "fi-FI",
progress: 37,
progress: 40,
dir: "ltr",
},
{
name: "Eesti (Estonian)",
value: "et-EE",
progress: 37,
progress: 36,
dir: "ltr",
},
{
name: "Español (Spanish)",
value: "es-ES",
progress: 42,
progress: 45,
dir: "ltr",
},
{
@@ -207,19 +207,19 @@ export const LOCALES = [
{
name: "Ελληνικά (Greek)",
value: "el-GR",
progress: 40,
progress: 41,
dir: "ltr",
},
{
name: "Deutsch (German)",
value: "de-DE",
progress: 78,
progress: 95,
dir: "ltr",
},
{
name: "Dansk (Danish)",
value: "da-DK",
progress: 40,
progress: 45,
dir: "ltr",
},
{
@@ -237,7 +237,7 @@ export const LOCALES = [
{
name: "Български (Bulgarian)",
value: "bg-BG",
progress: 44,
progress: 47,
dir: "ltr",
},
{

View File

@@ -1,4 +1,5 @@
import { useLocalStorage, useSessionStorage } from "@vueuse/core";
import { ActivityKey } from "~/lib/api/types/activity";
import type { RegisteredParser, TimelineEventType } from "~/lib/api/types/recipe";
import type { QueryFilterJSON } from "~/lib/api/types/response";
@@ -65,6 +66,10 @@ export interface UserRecipeCreatePreferences {
parseRecipe: boolean;
}
export interface UserActivityPreferences {
defaultActivity: ActivityKey;
}
export function useUserMealPlanPreferences(): Ref<UserMealPlanPreferences> {
const fromStorage = useLocalStorage(
"meal-planner-preferences",
@@ -115,6 +120,20 @@ export function useUserSortPreferences(): Ref<UserRecipePreferences> {
return fromStorage;
}
export function useUserActivityPreferences(): Ref<UserActivityPreferences> {
const fromStorage = useLocalStorage(
"activity-preferences",
{
defaultActivity: ActivityKey.RECIPES,
},
{ mergeDefaults: true },
// we cast to a Ref because by default it will return an optional type ref
// but since we pass defaults we know all properties are set.
) as Ref<UserActivityPreferences>;
return fromStorage;
}
export function useUserSearchQuerySession(): Ref<UserSearchQuery> {
const fromStorage = useSessionStorage(
"search-query",

View File

@@ -0,0 +1,151 @@
import { ref, computed } from "vue";
import type { UserOut } from "~/lib/api/types/user";
interface AuthData {
value: UserOut | null;
}
interface AuthStatus {
value: "loading" | "authenticated" | "unauthenticated";
}
interface AuthState {
data: AuthData;
status: AuthStatus;
signIn: (credentials: FormData, options?: { redirect?: boolean }) => Promise<void>;
signOut: (callbackUrl?: string) => Promise<void>;
refresh: () => Promise<void>;
getSession: () => Promise<void>;
setToken: (token: string | null) => void;
}
const authUser = ref<UserOut | null>(null);
const authStatus = ref<"loading" | "authenticated" | "unauthenticated">("loading");
export const useAuthBackend = function (): AuthState {
const { $axios } = useNuxtApp();
const router = useRouter();
const tokenName = useRuntimeConfig().public.AUTH_TOKEN;
const tokenCookie = useCookie(tokenName);
function setToken(token: string | null) {
tokenCookie.value = token;
}
function handleAuthError(error: any, redirect = false) {
// Only clear token on auth errors, not network errors
if (error?.response?.status === 401) {
setToken(null);
authUser.value = null;
authStatus.value = "unauthenticated";
if (redirect) {
router.push("/login");
}
}
}
async function getSession(): Promise<void> {
if (!tokenCookie.value) {
authUser.value = null;
authStatus.value = "unauthenticated";
return;
}
authStatus.value = "loading";
try {
const { data } = await $axios.get<UserOut>("/api/users/self");
authUser.value = data;
authStatus.value = "authenticated";
}
catch (error: any) {
console.error("Failed to fetch user session:", error);
handleAuthError(error);
authStatus.value = "unauthenticated";
}
}
async function signIn(credentials: FormData): Promise<void> {
authStatus.value = "loading";
try {
const response = await $axios.post("/api/auth/token", credentials, {
headers: {
"Content-Type": "multipart/form-data",
},
});
const { access_token } = response.data;
setToken(access_token);
await getSession();
}
catch (error) {
authStatus.value = "unauthenticated";
throw error;
}
}
async function signOut(callbackUrl: string = ""): Promise<void> {
try {
await $axios.post("/api/auth/logout");
}
catch (error) {
// Continue with logout even if API call fails
console.warn("Logout API call failed:", error);
}
finally {
setToken(null);
authUser.value = null;
authStatus.value = "unauthenticated";
await router.push(callbackUrl || "/login");
}
}
async function refresh(): Promise<void> {
if (!tokenCookie.value) return;
try {
const response = await $axios.get("/api/auth/refresh");
const { access_token } = response.data;
setToken(access_token);
await getSession();
}
catch (error: any) {
handleAuthError(error, true);
throw error;
}
}
// Auto-refresh user data periodically when authenticated
if (import.meta.client) {
let refreshInterval: NodeJS.Timeout | null = null;
watch(() => authStatus.value, (status) => {
if (status === "authenticated") {
refreshInterval = setInterval(() => {
if (tokenCookie.value) {
getSession().catch(() => {
// Ignore errors in background refresh
});
}
}, 5 * 60 * 1000); // 5 minutes
}
else {
// Clear interval when not authenticated
if (refreshInterval) {
clearInterval(refreshInterval);
refreshInterval = null;
}
}
}, { immediate: true });
}
return {
data: computed(() => authUser.value),
status: computed(() => authStatus.value),
signIn,
signOut,
refresh,
getSession,
setToken,
};
};

View File

@@ -1,9 +1,9 @@
import { ref, watch, computed } from "vue";
import { useAuthBackend } from "~/composables/useAuthBackend";
import type { UserOut } from "~/lib/api/types/user";
export const useMealieAuth = function () {
const auth = useAuth();
const { setToken } = useAuthState();
const auth = useAuthBackend();
const { $axios } = useNuxtApp();
// User Management
@@ -40,7 +40,7 @@ export const useMealieAuth = function () {
async function oauthSignIn() {
const params = new URLSearchParams(window.location.search);
const { data: token } = await $axios.get<{ access_token: string; token_type: "bearer" }>("/api/auth/oauth/callback", { params });
setToken(token.access_token);
auth.setToken(token.access_token);
await auth.getSession();
}
@@ -49,7 +49,6 @@ export const useMealieAuth = function () {
loggedIn,
signIn: auth.signIn,
signOut: auth.signOut,
signUp: auth.signUp,
refresh: auth.refresh,
oauthSignIn,
};

View File

@@ -399,6 +399,10 @@
"description-long": "Mealie kan resepte van Tandoor invoer. Voer jou data uit in die \"Standaardformaat\" en laai dan die .zip-lêer op.",
"title": "Tandoor resepte"
},
"cookn": {
"description-long": "Mealie can import recipes from DVO Cook'n X3. Export a cookbook or menu in the \"Cook'n\" format, rename the export extension to .zip, then upload the .zip below.",
"title": "DVO Cook'n X3"
},
"recipe-data-migrations": "Resep migrasie",
"recipe-data-migrations-explanation": "Jy kan resepte vanaf 'n ander program in Mealie invoer. Op hierdie manier kan jy vinnig aan die gang kom.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Coming from another application or an even older version of Mealie? Check out migrations and see if your data can be imported.",
@@ -1059,7 +1063,9 @@
"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!",
"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."
"changes-reflected-immediately": "Changes to this user will be reflected immediately.",
"default-activity": "Default Activity",
"default-activity-hint": "Select which page you'd like to navigate to upon logging in from this device"
},
"language-dialog": {
"translated": "vertaal",

View File

@@ -399,6 +399,10 @@
"description-long": "يمكن لميلي استيراد الوصفات من تندور. يجب تصدير بياناتك بالتنسيق \"الافتراضي\"، ثم يجب تحميل المِلَفّ المضغوط أدناه.",
"title": "وصفات تاندور"
},
"cookn": {
"description-long": "Mealie can import recipes from DVO Cook'n X3. Export a cookbook or menu in the \"Cook'n\" format, rename the export extension to .zip, then upload the .zip below.",
"title": "DVO Cook'n X3"
},
"recipe-data-migrations": "وصفة 2",
"recipe-data-migrations-explanation": "يمكن نقل الوصفات من تطبيق آخر مدعوم إلى ميلي. هذه طريقة رائعة للبدء مع ميلي.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "هل تأتي من تطبيق آخر أو حتى إصدار قديم من ميلي؟ يجب التحقق من عمليات الترحيل لمعرفة ما إذا كان يمكن استيراد بياناتك.",
@@ -1059,7 +1063,9 @@
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "لا تريد رؤية هذه الرسالة بعد الآن؟ تأكد من تغيير بريدك الإلكتروني في إعدادات المستخدم الخاصة بك!",
"forgot-password": "نسيت كلمة المرور",
"forgot-password-text": "الرجاء إدخال بريدك الإلكتروني وسنرسل لك رابطًا لإعادة تعيين كلمة المرور الخاصة بك.",
"changes-reflected-immediately": "التغييرات التي ستطرأ على هذا المستخدم ستنعكس على الفور."
"changes-reflected-immediately": "التغييرات التي ستطرأ على هذا المستخدم ستنعكس على الفور.",
"default-activity": "Default Activity",
"default-activity-hint": "Select which page you'd like to navigate to upon logging in from this device"
},
"language-dialog": {
"translated": "مترجم",

View File

@@ -10,14 +10,14 @@
"default-group": "Група по подразбиране",
"default-household": "Домакинство по подразбиране",
"demo": "Демо",
"demo-status": "Статус на Демото",
"demo-status": "Статус на версията",
"development": "Разработване",
"docs": "Документи",
"download-log": "Дневник на изтеглянията",
"download-recipe-json": "Последно обработен json файл",
"github": "GitHub",
"log-lines": "Редове от лога",
"not-demo": "Не е демо",
"not-demo": "Не е демоверсия",
"portfolio": "Портфолио",
"production": "Производствена среда",
"support": "Поддръжка",
@@ -97,11 +97,11 @@
"custom": "Персонализиран",
"dashboard": "Табло",
"delete": "Изтриване",
"disabled": "Деактивирано",
"disabled": "Изключено",
"download": "Изтегли",
"duplicate": "Дублиране",
"edit": "Редактирай",
"enabled": "Активиран",
"enabled": "Включено",
"exception": "Грешка",
"failed-count": "Неуспешни: {count}",
"failure-uploading-file": "Неуспешно качване на файл",
@@ -129,7 +129,7 @@
"monday": "Понеделник",
"name": "Име",
"new": "Нов",
"never": икога",
"never": яма данни",
"no": "Не",
"no-recipe-found": "Няма намерени рецепти",
"ok": "Добре",
@@ -147,7 +147,7 @@
"saturday": "Събота",
"save": "Запази",
"settings": "Настройки",
"share": "Сподели",
"share": "Споделяне",
"show-all": "Покажи всички",
"shuffle": "Разбъркано",
"sort": "Сортирай",
@@ -180,7 +180,7 @@
"back": "Назад",
"next": "Напред",
"start": "Начало",
"toggle-view": "Превключване на режим",
"toggle-view": "Смяна на изгледа",
"date": "Дата",
"id": "Id",
"owner": "Собственик",
@@ -340,7 +340,7 @@
"rule-day": "Ден от седмицата",
"meal-type": "Вид ястие",
"breakfast": "Закуска",
"lunch": "обяд",
"lunch": "Обяд",
"dinner": "Вечеря",
"type-any": "Всички",
"day-any": "Всички",
@@ -399,6 +399,10 @@
"description-long": "Mealie може да импортира рецепти от Tandoor. Експортирайте данните в стандартния формат и ги качете като .zip файл по-долу.",
"title": "Tandoor рецепти"
},
"cookn": {
"description-long": "Mealie може да импортира рецепти от DVO Cook'n X3. Експортирайте готварска книга или меню във формат \"Cook'n\", преименувайте разширението за експортиране на .zip и след това качете .zip файла по-долу.",
"title": "DVO Cook'n X3"
},
"recipe-data-migrations": "Миграция на данни на рецепти",
"recipe-data-migrations-explanation": "Рецептите могат да бъдат мигрирани от други приложения поддържани от Mealie. Това е добър начин да започнете използването си на Mealie.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Идваш от друго приложение или дори по-стара версия на Mealie? Провери миграциите и виж дали данните ти могат да бъдат импорторани.",
@@ -553,7 +557,7 @@
"yields-amount-with-text": "Порции {amount} {text}",
"yield-text": "Забележка",
"quantity": "Количество",
"choose-unit": "Избери единица",
"choose-unit": "Избери мерна единица",
"press-enter-to-create": "Натисните Enter за да създадете",
"choose-food": "Избери продукт",
"notes": "Бележки",
@@ -624,7 +628,7 @@
"scrape-recipe-you-can-import-from-raw-data-directly": "Можете да импортирате директно от сурови данни",
"import-original-keywords-as-tags": "Добави оригиналните ключови думи като етикети",
"stay-in-edit-mode": "Остани в режим на редакция",
"parse-recipe-ingredients-after-import": "Parse recipe ingredients after import",
"parse-recipe-ingredients-after-import": "Анализиране на съставките на рецептата след импортиране",
"import-from-zip": "Импортирай от Zip",
"import-from-zip-description": "Импортирай рецепта, която е била експортирана от друга инстанция на Mealie.",
"import-from-html-or-json": "Импортиране от HTML или JSON",
@@ -671,12 +675,12 @@
"this-unit-could-not-be-parsed-automatically": "Тази мерна единица не може да бъде анализирана автоматично",
"this-food-could-not-be-parsed-automatically": "Тази храна не може да бъде анализирана автоматично",
"no-food": "Не е зададен вид храна",
"review-parsed-ingredients": "Review parsed ingredients",
"confidence-score": "Confidence Score",
"ingredient-parser-description": "Your ingredients have been successfully parsed. Please review the ingredients we're not sure about.",
"ingredient-parser-final-review-description": "Once all ingredients have been reviewed, you'll have one more chance to review all ingredients before applying the changes to your recipe.",
"add-text-as-alias-for-item": "Add \"{text}\" as alias for {item}",
"delete-item": "Delete Item"
"review-parsed-ingredients": "Прегледайте анализираните съставки",
"confidence-score": "Индекс на доверие",
"ingredient-parser-description": "Съставките бяха успешно анализирани. Моля, прегледайте съставките, за които не сме сигурни.",
"ingredient-parser-final-review-description": "След като всички съставки бъдат прегледани, ще имате още една възможност да ги прегледате, преди да приложите промените към рецептата си.",
"add-text-as-alias-for-item": "Добавете „{text}“ като псевдоним за {item}",
"delete-item": "Изтриване"
},
"reset-servings-count": "Нулиране на броя на порциите",
"not-linked-ingredients": "Допълнителни съставки",
@@ -725,7 +729,7 @@
},
"settings": {
"add-a-new-theme": "Добавяне на нова тема",
"admin-settings": "Административни настройки",
"admin-settings": "Системни настройки",
"backup": {
"backup-created": "Архивът е създаден успешно",
"backup-created-at-response-export_path": "Резервно копие е създадено в {path}",
@@ -751,7 +755,7 @@
},
"backup-and-exports": "Резервни копия",
"change-password": "Смяна на парола",
"current": "Версия:",
"current": "Версия на приложението:",
"custom-pages": "Допълнителни страници",
"edit-page": "Редактиране на страница",
"events": "Събития",
@@ -864,7 +868,7 @@
"ldap-ready": "Използва LDAP",
"ldap-ready-error-text": "Не всички LDAP стойности са конфигурирани. Това може да бъде игнорирано, ако не използвате LDAP удостоверяване.",
"ldap-ready-success-text": "Задължителните LDAP променливи са зададени.",
"build": "Компилинирана версия",
"build": "GitHub версия",
"recipe-scraper-version": "Версия на скрепер на рецепти",
"oidc-ready": "Готов за OIDC",
"oidc-ready-error-text": "Не всички OIDC стойности са конфигурирани. Това може да бъде игнорирано, ако не използвате OIDC удостоверяване.",
@@ -1002,7 +1006,7 @@
"please-enter-password": "Моля, въведете новата си парола.",
"register": "Регистриране",
"reset-password": "Нулиране на паролата",
"sign-in": "Влизане",
"sign-in": "Вписване",
"total-mealplans": "Хранителни планове общо",
"total-users": "Общо потребители",
"upload-photo": "Качете снимка",
@@ -1059,7 +1063,9 @@
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Искате ли да виждате това по-често? Уверете се, че сте конфигурирали настройките си за email известяване правилно!",
"forgot-password": "Забравена Парола",
"forgot-password-text": "Въведете Вашият имейл адрес и ние ще ви изпратим линк, с който да промените Вашата парола.",
"changes-reflected-immediately": "Промените по този потребител ще бъдат отразени моментално."
"changes-reflected-immediately": "Промените по този потребител ще бъдат отразени моментално.",
"default-activity": "Default Activity",
"default-activity-hint": "Select which page you'd like to navigate to upon logging in from this device"
},
"language-dialog": {
"translated": "преведено",
@@ -1319,8 +1325,8 @@
"welcome-user": "👋 Добре дошъл(а), {0}!",
"description": "Настройки на профил, рецепти и настройки на групата.",
"invite-link": "Линк за Покана",
"get-invite-link": "Вземи линк за покана",
"get-public-link": "Вземи публичен линк",
"get-invite-link": "Създай линк за покана",
"get-public-link": "Създай публичен линк",
"account-summary": "Обобщение на акаунта",
"account-summary-description": "Обобщение на информацията за Вашата група.",
"group-statistics": "Статистики на групата",
@@ -1344,7 +1350,7 @@
"members": "Участници",
"members-description": "Вижте кой е във вашето домакинство и управлявайте техните разрешения.",
"webhooks-description": "Настройте webhooks, които се задействат в дните, в които имате планиран план за хранене.",
"notifiers": "Уведомители",
"notifiers": "Уведомления",
"notifiers-description": "Настройте имейл и push известия, които се задействат при конкретни събития.",
"manage-data": "Управление на данни",
"manage-data-description": "Управлявай данните в Mealie: Храни, Единици, Категории, Тагове и други.",
@@ -1362,7 +1368,7 @@
"manage-cookbooks": "Управление на готварските книги",
"manage-members": "Управление на потребителите",
"manage-webhooks": "Управление на Webhooks",
"manage-notifiers": "Управление на уведомители",
"manage-notifiers": "Настройки на уведомленията",
"manage-data-migrations": "Управление на миграцията на данни"
},
"cookbook": {

View File

@@ -399,6 +399,10 @@
"description-long": "Mealie pot importar les receptes de Tandoor. Exporta les dades en format \"Default\", i carrega el .zip a sota.",
"title": "Tandoor Recipes"
},
"cookn": {
"description-long": "Mealie can import recipes from DVO Cook'n X3. Export a cookbook or menu in the \"Cook'n\" format, rename the export extension to .zip, then upload the .zip below.",
"title": "DVO Cook'n X3"
},
"recipe-data-migrations": "Migració de receptes",
"recipe-data-migrations-explanation": "Les receptes es poden migrar des d'una altra aplicació suportada cap a Mealie. És una manera genial de començar a utilitzar el Mealie.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Véns d'una altra aplicació o una versió més antiga de Mealia? Fés un cop d'ull a migracions i mira si pots importar les teves dades.",
@@ -1059,7 +1063,9 @@
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "No vols tornar a veure això? Assegura't de canviar el teu correu electrònic a les configuracions del teu usuari!",
"forgot-password": "Contrasenya oblidada",
"forgot-password-text": "Introdueix siusplau la teva adreça de correu electrònic i t'enviarem un enllaç per restablir la teva contrassenya.",
"changes-reflected-immediately": "Els canvis en aquest usuari s'actualitzaran immediatament."
"changes-reflected-immediately": "Els canvis en aquest usuari s'actualitzaran immediatament.",
"default-activity": "Default Activity",
"default-activity-hint": "Select which page you'd like to navigate to upon logging in from this device"
},
"language-dialog": {
"translated": "traduït",

View File

@@ -399,6 +399,10 @@
"description-long": "Mealie může importovat recepty z Tandoor. Exportujte data ve výchozím formátu, poté nahrajte soubor ve formátu .zip.",
"title": "Recepty Tandoor"
},
"cookn": {
"description-long": "Mealie can import recipes from DVO Cook'n X3. Export a cookbook or menu in the \"Cook'n\" format, rename the export extension to .zip, then upload the .zip below.",
"title": "DVO Cook'n X3"
},
"recipe-data-migrations": "Migrace dat receptů",
"recipe-data-migrations-explanation": "Recepty mohou být migrovány z jiné podporované aplikace na Mealie. To je skvělý způsob, jak začít s Mealie.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Migrujete z jiné aplikace nebo starší verze Mealie? Podívejte se na migrace a zjistěte, zda lze vaše data importovat.",
@@ -1059,7 +1063,9 @@
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Už to nechcete vidět? Nezapomeňte si změnit svůj e-mail v uživatelském nastavení!",
"forgot-password": "Zapomenuté heslo",
"forgot-password-text": "Zadejte prosím svou e-mailovou adresu a my vám zašleme odkaz pro obnovení hesla.",
"changes-reflected-immediately": "Změny tohoto uživatele budou okamžitě zohledněny."
"changes-reflected-immediately": "Změny tohoto uživatele budou okamžitě zohledněny.",
"default-activity": "Default Activity",
"default-activity-hint": "Select which page you'd like to navigate to upon logging in from this device"
},
"language-dialog": {
"translated": "přeloženo",

View File

@@ -57,7 +57,7 @@
"event-delete-confirmation": "Er du sikker på, at du vil slette denne begivenhed?",
"event-deleted": "Hændelse slettet",
"event-updated": "Hændelse opdateret",
"new-notification-form-description": "Mealie bruger Apprise-biblioteket for at generere notifikationer. De giver mange muligheder for notifikationer til tjenester. Kig i deres wiki for en gennemgående guide til, hvordan en URL oprettes i din situation. Hvis muligt, kan valget af din type af notifikation omfatte flere ekstrafunktioner.",
"new-notification-form-description": "Mealie bruger Apprise biblioteket for at generere notifikationer. De giver mange muligheder for notifikationer til tjenester. Kig i deres wiki for en gennemgående guide til, hvordan en URL oprettes i din situation. Hvis muligt, kan valget af din type af notifikation omfatte flere ekstrafunktioner.",
"new-version": "Ny opdatering er tilgængelig!",
"notification": "Notifikation",
"refresh": "Opdater",
@@ -399,6 +399,10 @@
"description-long": "Mealie kan importere opskrifter fra Tandoor. Eksporter dine data i \"Standard\" format, og upload derefter Zip filen nedenfor.",
"title": "Tandoor Recipes"
},
"cookn": {
"description-long": "Mealie kan importere opskrifter fra DVO Cook'n X3. Eksportér en kogebog eller menu i \"Cook'n\" formatet, omdøb filtypen .dvo til .zip, og upload derefter .zip nedenfor.",
"title": "DVO Cook'n X3"
},
"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.",
@@ -624,7 +628,7 @@
"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",
"stay-in-edit-mode": "Bliv i redigeringstilstand",
"parse-recipe-ingredients-after-import": "Parse recipe ingredients after import",
"parse-recipe-ingredients-after-import": "Fortolk opskrift ingredienser efter import",
"import-from-zip": "Importer fra zip-fil",
"import-from-zip-description": "Importer en enkelt opskrift, der blev eksporteret fra en anden Mealie instans.",
"import-from-html-or-json": "Importer fra HTML eller JSON",
@@ -671,12 +675,12 @@
"this-unit-could-not-be-parsed-automatically": "Denne enhed kunne ikke fortolkes automatisk",
"this-food-could-not-be-parsed-automatically": "Denne fødevare kunne ikke fortolkes automatisk",
"no-food": "Ingen fødevarer",
"review-parsed-ingredients": "Review parsed ingredients",
"confidence-score": "Confidence Score",
"ingredient-parser-description": "Your ingredients have been successfully parsed. Please review the ingredients we're not sure about.",
"ingredient-parser-final-review-description": "Once all ingredients have been reviewed, you'll have one more chance to review all ingredients before applying the changes to your recipe.",
"add-text-as-alias-for-item": "Add \"{text}\" as alias for {item}",
"delete-item": "Delete Item"
"review-parsed-ingredients": "Gennemgå fortolkede ingredienser",
"confidence-score": "Tillidsscore",
"ingredient-parser-description": "Dine ingredienser er blevet fortolket. Gennemgå de ingredienser, vi ikke er sikker på.",
"ingredient-parser-final-review-description": "Når alle ingredienser er blevet gennemgået, har du endnu en chance for at gennemgå alle ingredienser, før du anvender ændringerne til din opskrift.",
"add-text-as-alias-for-item": "Tilføj \"{text}\" som alias for {item}",
"delete-item": "Slet Element"
},
"reset-servings-count": "Nulstil antal serveringer",
"not-linked-ingredients": "Yderligere ingredienser",
@@ -1059,7 +1063,9 @@
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Vil du ikke længere se dette? Sørg for at ændre din e-mail i dine brugerindstillinger!",
"forgot-password": "Glemt adgangskode",
"forgot-password-text": "Indtast venligst din e-mail-adresse. Vi sender dig en e-mail, så at du kan nulstille din adgangskode.",
"changes-reflected-immediately": "Ændringer til denne bruger vil have effekt med det samme."
"changes-reflected-immediately": "Ændringer til denne bruger vil have effekt med det samme.",
"default-activity": "",
"default-activity-hint": "Select which page you'd like to navigate to upon logging in from this device"
},
"language-dialog": {
"translated": "oversat",
@@ -1176,7 +1182,7 @@
"provide-registration-token-description": "Angiv venligst det registreringstoken, der er knyttet til den gruppe, du gerne vil deltage i. Du skal indhente dette fra et eksisterende gruppemedlem.",
"group-details": "Gruppeoplysninger",
"group-details-description": "Før du opretter en konto, skal du oprette en gruppe. Din gruppe vil kun indeholde dig, men du vil kunne invitere andre senere. Medlemmer i din gruppe kan dele madplaner, indkøbslister, opskrifter og meget mere!",
"use-seed-data": "Anved standard data",
"use-seed-data": "Anvend standard data",
"use-seed-data-description": "Mealie kommer med en samling af Fødevarer, Enheder, og Etiketter som kan blive brugt til at udfylde din gruppe med nyttig data til at organisere dine opskrifter. De er oversat til det sprog, du i øjeblikket har valgt. Du kan altid tilføje og ændre disse data senere.",
"account-details": "Kontodetaljer"
},

View File

@@ -47,7 +47,7 @@
"category-updated": "Kategorie aktualisiert",
"uncategorized-count": "Nicht kategorisiert {count}",
"create-a-category": "Eine Kategorie erstellen",
"category-name": "Name der Kategorie",
"category-name": "Kategoriename",
"category": "Kategorie"
},
"events": {
@@ -399,6 +399,10 @@
"description-long": "Mealie kann Rezepte von Tandoor importieren. Exportiere deine Daten im 'Default' Format und lade dann unten die .zip Datei hoch.",
"title": "Tandoor Rezepte"
},
"cookn": {
"description-long": "Mealie kann Rezepte von DVO Cook'n X3 importieren. Exportieren Sie ein Kochbuch oder ein Menü im \"Cook'n\"-Format, benennen Sie die Export-Erweiterung in .zip um, dann laden Sie die .zip unten hoch.",
"title": "DVO Cook'n X3"
},
"recipe-data-migrations": "Rezeptdatenmigration",
"recipe-data-migrations-explanation": "Rezepte können aus unterstützten Programmen nach Mealie migriert werden. Das ist eine gute Möglichkeit, um mit Mealie loszulegen.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Wechselst du von einer anderen Anwendung oder einer noch älteren Version von Mealie? Prüfe die Migrations-Optionen, vielleicht können deine Daten importiert werden.",
@@ -676,7 +680,7 @@
"ingredient-parser-description": "Deine Zutaten wurden erfolgreich geparst. Bitte überprüfe die Zutaten, bei denen wir uns nicht sicher sind.",
"ingredient-parser-final-review-description": "Sobald alle Zutaten überprüft wurden, kannst du nochmal alle Zutaten kontrollieren, bevor die Änderungen ins Rezept übernommen werden.",
"add-text-as-alias-for-item": "Füge \"{text}\" als Alias für {item} hinzu",
"delete-item": "Delete Item"
"delete-item": "Element löschen"
},
"reset-servings-count": "Portionen zurücksetzen",
"not-linked-ingredients": "Zusätzliche Zutaten",
@@ -1059,7 +1063,9 @@
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Möchtest du das hier nicht mehr sehen? Bitte ändere deine E-Mail in den Benutzereinstellungen!",
"forgot-password": "Passwort vergessen",
"forgot-password-text": "Bitte gib Deine E-Mail-Adresse ein. Wir werden Dir eine E-Mail zusenden, damit Du Dein Passwort zurücksetzen kannst.",
"changes-reflected-immediately": "Änderungen an diesem Benutzer sind sofort wirksam."
"changes-reflected-immediately": "Änderungen an diesem Benutzer sind sofort wirksam.",
"default-activity": "Standardaktivität",
"default-activity-hint": "Wählen Sie die Seite, auf die Sie navigieren möchten, wenn Sie sich von diesem Gerät aus anmelden"
},
"language-dialog": {
"translated": "übersetzt",

View File

@@ -1,6 +1,6 @@
{
"about": {
"about": "Σχετικά με",
"about": "Σχετικά",
"about-mealie": "Σχετικά με το Mealie",
"api-docs": "Τεκμηρίωση API",
"api-port": "Θύρα API",
@@ -14,7 +14,7 @@
"development": "Ανάπτυξη",
"docs": "Τεκμηρίωση",
"download-log": "Λήψη αρχείου καταγραφής",
"download-recipe-json": "Τελευταίο Scraped JSON",
"download-recipe-json": "Τελευταίο αντλημένο JSON",
"github": "GitHub",
"log-lines": "Γραμμές καταγραφής",
"not-demo": "Εκτός Επίδειξης",
@@ -27,7 +27,7 @@
},
"asset": {
"assets": "Στοιχεία",
"code": "Κώδικας",
"code": "Κωδικός",
"file": "Αρχείο",
"image": "Εικόνα",
"new-asset": "Νέο Στοιχείο",
@@ -38,15 +38,15 @@
},
"category": {
"categories": "Κατηγορίες",
"category-created": "Δημιουργήθηκε η κατηγορία",
"category-created": "Η κατηγορία δημιουργήθηκε",
"category-creation-failed": "Η δημιουργία κατηγορίας απέτυχε",
"category-deleted": "Κατηγορία Διαγράφηκε",
"category-deleted": "Η κατηγορία διαγράφηκε",
"category-deletion-failed": "Η διαγραφή κατηγορίας απέτυχε",
"category-filter": "Φίλτρο κατηγορίας",
"category-update-failed": "Η ενημέρωση της κατηγορίας απέτυχε",
"category-updated": "Η κατηγορία ενημερώθηκε",
"uncategorized-count": "Μη κατηγοριοποιημένο {count}",
"create-a-category": "Δημιουργήστε μια Κατηγορία",
"create-a-category": "Δημιουργία Κατηγορίας",
"category-name": "Όνομα Κατηγορίας",
"category": "Κατηγορία"
},
@@ -399,6 +399,10 @@
"description-long": "Το Mealie μπορεί να εισάγει συνταγές από το Tandoor. Εξαγάγετε τα δεδομένα σας στην \"Προεπιλεγμένη\" (default) μορφή, στη συνέχεια, ανεβάστε το .zip παρακάτω.",
"title": "Tandoor Recipes"
},
"cookn": {
"description-long": "Το Mealie μπορεί να εισάγει συνταγές από το DVO Cook'n X3. Κάντε εξαγωγή ενός βιβλίου μαγειρικής ή ενός μενού σε μορφή \"Cook'n\", αλλάξτε την επέκταση του εξαγόμενου αρχείου σε .zip και, στη συνέχεια, ανεβάστε το .zip παρακάτω.",
"title": "DVO Cook'n X3"
},
"recipe-data-migrations": "Μετεγκατάσταση Δεδομένων Συνταγής",
"recipe-data-migrations-explanation": "Συνταγές μπορούν να μετεγκατασταθούν από άλλη υποστηριζόμενη εφαρμογή στο Mealie. Αυτός είναι ένας πολύ καλός τρόπος για να ξεκινήσετε με Mealie.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Ερχόμενοι από άλλη εφαρμογή ή ακόμα και παλαιότερη έκδοση του Mealie; Ελέγξτε τις μετεγκαταστάσεις και δείτε αν τα δεδομένα σας μπορούν να εισαχθούν.",
@@ -676,7 +680,7 @@
"ingredient-parser-description": "Τα συστατικά σας έχουν αναλυθεί επιτυχώς. Παρακαλούμε ελέγξτε τα συστατικά για τα οποία δεν είμαστε σίγουροι.",
"ingredient-parser-final-review-description": "Μόλις εξεταστούν όλα τα συστατικά, θα έχετε μία ακόμη ευκαιρία να επανεξετάσετε όλα τα συστατικά πριν εφαρμόσετε τις αλλαγές στη συνταγή σας.",
"add-text-as-alias-for-item": "Προσθήκη \"{text}\" ως ψευδώνυμο για το {item}",
"delete-item": "Delete Item"
"delete-item": "Διαγραφή αντικειμένου"
},
"reset-servings-count": "Επαναφορά μέτρησης μερίδων",
"not-linked-ingredients": "Πρόσθετα συστατικά",
@@ -1059,7 +1063,9 @@
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Δεν θέλετε να το δείτε αυτό ξανά; Φροντίστε να αλλάξετε το email σας στις ρυθμίσεις χρήστη!",
"forgot-password": "Ξέχασα τον κωδικό πρόσβασης",
"forgot-password-text": "Παρακαλώ εισάγετε τη διεύθυνση email σας και θα σας στείλουμε έναν σύνδεσμο για να επαναφέρετε τον κωδικό πρόσβασής σας.",
"changes-reflected-immediately": "Οι αλλαγές σε αυτόν τον χρήστη θα αντικατοπτρίζονται αμέσως."
"changes-reflected-immediately": "Οι αλλαγές σε αυτόν τον χρήστη θα αντικατοπτρίζονται αμέσως.",
"default-activity": "Προεπιλεγμένη Δραστηριότητα",
"default-activity-hint": "Επιλέξτε σε ποια σελίδα θα θέλατε να μεταβείτε κατά τη σύνδεση από αυτήν τη συσκευή"
},
"language-dialog": {
"translated": "μεταφρασμένο",

View File

@@ -399,6 +399,10 @@
"description-long": "Mealie can import recipes from Tandoor. Export your data in the \"Default\" format, then upload the .zip below.",
"title": "Tandoor Recipes"
},
"cookn": {
"description-long": "Mealie can import recipes from DVO Cook'n X3. Export a cookbook or menu in the \"Cook'n\" format, rename the export extension to .zip, then upload the .zip below.",
"title": "DVO Cook'n X3"
},
"recipe-data-migrations": "Recipe Data Migrations",
"recipe-data-migrations-explanation": "Recipes can be migrated from another supported application to Mealie. This is a great way to get started with Mealie.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Coming from another application or an even older version of Mealie? Check out migrations and see if your data can be imported.",
@@ -1059,7 +1063,9 @@
"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."
"changes-reflected-immediately": "Changes to this user will be reflected immediately.",
"default-activity": "Default Activity",
"default-activity-hint": "Select which page you'd like to navigate to upon logging in from this device"
},
"language-dialog": {
"translated": "translated",

View File

@@ -399,6 +399,10 @@
"description-long": "Mealie can import recipes from Tandoor. Export your data in the \"Default\" format, then upload the .zip below.",
"title": "Tandoor Recipes"
},
"cookn": {
"description-long": "Mealie can import recipes from DVO Cook'n X3. Export a cookbook or menu in the \"Cook'n\" format, rename the export extension to .zip, then upload the .zip below.",
"title": "DVO Cook'n X3"
},
"recipe-data-migrations": "Recipe Data Migrations",
"recipe-data-migrations-explanation": "Recipes can be migrated from another supported application to Mealie. This is a great way to get started with Mealie.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Coming from another application or an even older version of Mealie? Check out migrations and see if your data can be imported.",
@@ -1059,7 +1063,9 @@
"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!",
"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."
"changes-reflected-immediately": "Changes to this user will be reflected immediately.",
"default-activity": "Default Activity",
"default-activity-hint": "Select which page you'd like to navigate to upon logging in from this device"
},
"language-dialog": {
"translated": "translated",

View File

@@ -18,7 +18,7 @@
"github": "GitHub",
"log-lines": "Líneas de registro",
"not-demo": "No Demo",
"portfolio": "Portfolio",
"portfolio": "Portafolio",
"production": "Producción",
"support": "Soporte",
"version": "Versión",
@@ -399,6 +399,10 @@
"description-long": "Mealie puede importar recetas de Tandoor. Exporta tus datos en el formato \"Por defecto\" y luego sube el archivo .zip.",
"title": "Recetas de Tandoor"
},
"cookn": {
"description-long": "Mealie can import recipes from DVO Cook'n X3. Export a cookbook or menu in the \"Cook'n\" format, rename the export extension to .zip, then upload the .zip below.",
"title": "DVO Cook'n X3"
},
"recipe-data-migrations": "Migración de recetas",
"recipe-data-migrations-explanation": "Las recetas pueden migrarse desde otra aplicación soportada a Mealie. Esta es una excelente manera de empezar con Mealie.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "¿Vienes de otra app o una versión previa de Mealie? Revisa migraciones para ver si tus datos pueden ser importados.",
@@ -561,7 +565,7 @@
"see-original-text": "Mostrar Texto Original",
"original-text-with-value": "Texto original: {originalText}",
"ingredient-linker": "Vincular ingredientes",
"unlinked": "Not linked yet",
"unlinked": "Aún no vinculado",
"linked-to-other-step": "Enlazado a otro paso",
"auto": "Auto",
"cook-mode": "Modo Cocinar",
@@ -624,7 +628,7 @@
"scrape-recipe-you-can-import-from-raw-data-directly": "Puede importar directamente desde datos brutos",
"import-original-keywords-as-tags": "Importar palabras clave originales como etiquetas",
"stay-in-edit-mode": "Permanecer en modo edición",
"parse-recipe-ingredients-after-import": "Parse recipe ingredients after import",
"parse-recipe-ingredients-after-import": "Analizar los ingredientes de la receta después de importarla",
"import-from-zip": "Importar desde zip",
"import-from-zip-description": "Importa una receta única que fue exportada desde otra instancia de Mealie.",
"import-from-html-or-json": "Importar desde HTML o JSON",
@@ -671,12 +675,12 @@
"this-unit-could-not-be-parsed-automatically": "Esta unidad no pudo ser procesada automáticamente",
"this-food-could-not-be-parsed-automatically": "Esta comida no pudo ser procesada automáticamente",
"no-food": "Sin Comida",
"review-parsed-ingredients": "Review parsed ingredients",
"confidence-score": "Confidence Score",
"ingredient-parser-description": "Your ingredients have been successfully parsed. Please review the ingredients we're not sure about.",
"ingredient-parser-final-review-description": "Once all ingredients have been reviewed, you'll have one more chance to review all ingredients before applying the changes to your recipe.",
"add-text-as-alias-for-item": "Add \"{text}\" as alias for {item}",
"delete-item": "Delete Item"
"review-parsed-ingredients": "Revisar los ingredientes analizados",
"confidence-score": "Puntuación de confianza",
"ingredient-parser-description": "Tus ingredientes se han analizado correctamente. Revisa los ingredientes que no nos convencen.",
"ingredient-parser-final-review-description": "Una vez que se hayan revisado todos los ingredientes, tendrás una oportunidad más de revisarlos todos antes de aplicar los cambios a tu receta.",
"add-text-as-alias-for-item": "Añadir \"{text}\" como alias para {item}",
"delete-item": "Borrar elemento"
},
"reset-servings-count": "Restablecer contador de porciones",
"not-linked-ingredients": "Ingredientes adicionales",
@@ -1059,7 +1063,9 @@
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "¿No quieres ver esto más? ¡Asegúrate de cambiar tu correo electrónico en tu configuración de usuario!",
"forgot-password": "Olvidé mi contraseña",
"forgot-password-text": "Por favor, introduce tu correo electrónico y te enviaremos un enlace para restablecer tu contraseña.",
"changes-reflected-immediately": "Los cambios en este grupo se reflejarán inmediatamente."
"changes-reflected-immediately": "Los cambios en este grupo se reflejarán inmediatamente.",
"default-activity": "Default Activity",
"default-activity-hint": "Select which page you'd like to navigate to upon logging in from this device"
},
"language-dialog": {
"translated": "traducido",

View File

@@ -399,6 +399,10 @@
"description-long": "Mealie saab importida retsepte Tandoor-ist. Ekspordi oma andmed \"Default\" formaadis ning lae .zip allolevasse kasti",
"title": "Tandoor-i retsptid"
},
"cookn": {
"description-long": "Mealie can import recipes from DVO Cook'n X3. Export a cookbook or menu in the \"Cook'n\" format, rename the export extension to .zip, then upload the .zip below.",
"title": "DVO Cook'n X3"
},
"recipe-data-migrations": "Retsepti andmete ületoomised",
"recipe-data-migrations-explanation": "Retsepte saab üle tuua teisest toetatud rakendusest Mealiesse. See on hea viis tegemaks algust Mealie-ga.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Tuled teisest rakendusest või hoopis vanemast Mealie versioonist? Uuri ületoomise võimalusi ning vaata kas su andmeid saab importida.",
@@ -1059,7 +1063,9 @@
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Ei taha enam seda näha? Ära unusta muuta oma email kasutaja seadetes",
"forgot-password": "Unustasid salasõna",
"forgot-password-text": "Sisestage oma meiliaadress, et saada e-kiri uue salasõna määramiseks.",
"changes-reflected-immediately": "Selle kasutaja muudatused on koheselt nähtaval"
"changes-reflected-immediately": "Selle kasutaja muudatused on koheselt nähtaval",
"default-activity": "Default Activity",
"default-activity-hint": "Select which page you'd like to navigate to upon logging in from this device"
},
"language-dialog": {
"translated": "tõlgitud",

View File

@@ -2,7 +2,7 @@
"about": {
"about": "Tietoja",
"about-mealie": "Tietoja Mealiestä",
"api-docs": "API Docs",
"api-docs": "API-dokumentit",
"api-port": "API-portti",
"application-mode": "Sovellustila",
"database-type": "Tietokannan tyyppi",
@@ -12,12 +12,12 @@
"demo": "Demo",
"demo-status": "Demon tila",
"development": "Kehitys",
"docs": "Docs",
"docs": "Dokumentit",
"download-log": "Latausloki",
"download-recipe-json": "Viimeisin haettu JSON",
"github": "GitHub",
"log-lines": "Lokirivit",
"not-demo": "Ei esittelytilassa",
"not-demo": "Ei demotilassa",
"portfolio": "Portfolio",
"production": "Tuotanto",
"support": "Tuki",
@@ -57,7 +57,7 @@
"event-delete-confirmation": "Oletko varma että haluat poistaa tämän tapahtuman?",
"event-deleted": "Tapahtuma poistettu",
"event-updated": "Tapahtuma päivitetty",
"new-notification-form-description": "Mealie käyttää Apprise-kirjastoa ilmoitusten luomiseen. Se tarjoaa monia ilmoituspalvelveluvaihtoehtoja. Lisää tietoa siitä, kuinka luoda URL palvelua varten, Apprisen wikistä. Joihinkin ilmoitustyyppeihin voi sisältyä lisäominaisuuksia.",
"new-notification-form-description": "Mealie käyttää Apprise-kirjastoa ilmoitusten luomiseen. Se tarjoaa monia ilmoituspalvelveluvaihtoehtoja. Lisää tietoa siitä, kuinka luoda URL palvelua varten, löydät Apprisen wikistä. Joihinkin ilmoitustyyppeihin voi sisältyä lisäominaisuuksia.",
"new-version": "Uusi versio saatavilla!",
"notification": "Ilmoitus",
"refresh": "Päivitä",
@@ -69,11 +69,11 @@
"new-notification": "Uusi ilmoitus",
"event-notifiers": "Tapahtumien ilmoitukset",
"apprise-url-skipped-if-blank": "Ilmoitusverkko-osoite (voi jättää tyhjäksi)",
"apprise-url-is-left-intentionally-blank": "Since Apprise URLs typically contain sensitive information, this field is left intentionally blank while editing. If you wish to update the URL, please enter the new one here, otherwise leave it blank to keep the current URL.",
"apprise-url-is-left-intentionally-blank": "Apprise URL-osoitteet sisältävät yleensä arkaluonteisia tietoja, joten tämä kenttä on tarkoituksellisesti tyhjä muokattaessa. Jos haluat päivittää URL-osoitteen, kirjoita uusi osoite tähän, muuten jätä se tyhjäksi pitääksesi nykyisen URL-osoitteen.",
"enable-notifier": "Ota ilmoittaja käyttöön",
"what-events": "Mistä tapahtumista tulisi ilmoittaa?",
"user-events": "Käyttäjän tapahtumat",
"mealplan-events": "Ateriasuunnitelman Tapahtumat",
"mealplan-events": "Ateriasuunnittelun tapahtumat",
"when-a-user-in-your-group-creates-a-new-mealplan": "Kun ryhmäsi käyttäjä tekee ateriasuunnitelman",
"shopping-list-events": "Ostoslistatapahtumat",
"cookbook-events": "Keittokirjatapahtumat",
@@ -81,7 +81,7 @@
"category-events": "Luokkatapahtumat",
"when-a-new-user-joins-your-group": "Kun ryhmääsi liittyy uusi jäsen",
"recipe-events": "Reseptitapahtumat",
"label-events": "Label Events"
"label-events": "Merkitse Tapahtumat"
},
"general": {
"add": "Lisää",
@@ -136,7 +136,7 @@
"options": "Valinnat:",
"plural-name": "Monikollinen nimi",
"print": "Tulosta",
"print-preferences": "Tulosta asetukset",
"print-preferences": "Tulostusasetukset",
"random": "Satunnainen",
"rating": "Arvio",
"recent": "Viimeisimmät",
@@ -399,6 +399,10 @@
"description-long": "Mealie voi tuoda reseptejä Tandoorista. Vie tietosi \"Oletus\" -muodossa ja lataa sitten .zip alla.",
"title": "Tandoor Recipes -sovellus"
},
"cookn": {
"description-long": "Mealie voi tuoda reseptejä DVO Cook'n X3:sta. Vie keittokirja tai valikko \"Cook'n\"-muodossa, nimeä tiedosto uudelleen .zip-muotoon ja lataa sitten Mealieen alta.",
"title": "DVO Cook'n X3"
},
"recipe-data-migrations": "Reseptien tietojen migraatiot",
"recipe-data-migrations-explanation": "Reseptit voidaan siirtää toisesta tuetusta sovelluksesta Mealie -sovellukseen. Tämä on hyvä tapa päästä alkuun Mealiella.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Olitko toisessa sovelluksessa tai Mealien aiemmassa versiossa? Tarkista, voidaanko tietosi siirtää.",
@@ -474,7 +478,7 @@
"comment": "Kommentti",
"comments": "Kommentit",
"delete-confirmation": "Haluatko varmasti poistaa reseptin?",
"admin-delete-confirmation": "You're about to delete a recipe that isn't yours using admin permissions. Are you sure?",
"admin-delete-confirmation": "Olet poistamassa reseptiä, joka ei ole sinun käyttäen järjestelmänvalvojan käyttöoikeuksia. Oletko varma?",
"delete-recipe": "Poista resepti",
"description": "Kuvaus",
"disable-amount": "Poista ainesosien määrät käytöstä",
@@ -561,7 +565,7 @@
"see-original-text": "Katso Alkuperäinen Teksti",
"original-text-with-value": "Alkuperäinen Teksti: {originalText}",
"ingredient-linker": "Ainesosan linkittäjä",
"unlinked": "Not linked yet",
"unlinked": "Ei vielä linkitetty",
"linked-to-other-step": "Linkitetty toiseen vaiheeseen",
"auto": "Automaattinen",
"cook-mode": "Kokkitila",
@@ -583,14 +587,14 @@
"made-this": "Tein tämän",
"how-did-it-turn-out": "Miten se onnistui?",
"user-made-this": "{user} teki tämän",
"added-to-timeline": "Added to timeline",
"failed-to-add-to-timeline": "Failed to add to timeline",
"failed-to-update-recipe": "Failed to update recipe",
"added-to-timeline-but-failed-to-add-image": "Added to timeline, but failed to add image",
"added-to-timeline": "Lisätty aikajanalle",
"failed-to-add-to-timeline": "Aikajanaan lisääminen epäonnistui",
"failed-to-update-recipe": "Reseptin päivitys epäonnistui",
"added-to-timeline-but-failed-to-add-image": "Lisätty aikajanaan, mutta kuvan lisääminen epäonnistui",
"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ä",
"ingredients-not-parsed-description": "It looks like your ingredients aren't parsed yet. Click the \"{parse}\" button below to parse your ingredients into structured foods.",
"ingredients-not-parsed-description": "Näyttää siltä, että ainesosat eivät ole vielä jäsenneltyjä. Klikkaa \"{parse}\" painiketta alla jäsentääksesi ainesosat strukturoiduiksi elintarvikkeiksi.",
"attach-images-hint": "Liitä kuvia vetämällä ja pudottamalla ne editoriin",
"drop-image": "Tuo kuva",
"enable-ingredient-amounts-to-use-this-feature": "Käytä ainesosan määriä käyttääksesi tätä ominaisuutta",
@@ -608,10 +612,10 @@
"create-recipe-from-an-image": "Luo resepti kuvasta",
"create-recipe-from-an-image-description": "Luo resepti tuomalla siitä kuva. Mealie pyrkii poimimaan tekstin kuvasta tekoälyllä ja luomaan siitä reseptin.",
"crop-and-rotate-the-image": "Rajaa ja kierrä kuvaa niin, että vain teksti näkyy, ja että se on oikein päin.",
"create-from-images": "Create from Images",
"create-from-images": "Luo resepti kuvasta",
"should-translate-description": "Käännä resepti kielelleni",
"please-wait-image-procesing": "Odota, että kuva käsitellään. Tämä voi kestää hetken.",
"please-wait-images-processing": "Please wait, the images are processing. This may take some time.",
"please-wait-images-processing": "Odota, että kuvat käsitellään. Tämä saattaa kestää jonkin aikaa.",
"bulk-url-import": "Massa tuonti URL-osoitteesta",
"debug-scraper": "Etsi ongelmia Scraperista",
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Luo resepti antamalla nimi. Kaikilla resepteillä on oltava yksilölliset nimet.",
@@ -624,7 +628,7 @@
"scrape-recipe-you-can-import-from-raw-data-directly": "Voit tuoda raakadatan suoraan",
"import-original-keywords-as-tags": "Tuo alkuperäiset avainsanat tunnisteiksi",
"stay-in-edit-mode": "Pysy muokkaustilassa",
"parse-recipe-ingredients-after-import": "Parse recipe ingredients after import",
"parse-recipe-ingredients-after-import": "Jäsennä reseptin ainesosat tuonnin jälkeen",
"import-from-zip": "Tuo zip-arkistosta",
"import-from-zip-description": "Tuo yksi resepti, joka on viety toisesta Mealie-asennuksesta.",
"import-from-html-or-json": "Tuo HTML- tai JSON-tiedostosta",
@@ -668,23 +672,23 @@
"no-unit": "Ei yksikköä",
"missing-unit": "Luo puuttuva yksikkö: {unit}",
"missing-food": "Luo puuttuva ruoka: {food}",
"this-unit-could-not-be-parsed-automatically": "This unit could not be parsed automatically",
"this-food-could-not-be-parsed-automatically": "This food could not be parsed automatically",
"this-unit-could-not-be-parsed-automatically": "Tätä yksikköä ei voitu jäsentää automaattisesti",
"this-food-could-not-be-parsed-automatically": "Tätä ruokaa ei voitu automaattisesti jäsentää",
"no-food": "Ei ruokaa",
"review-parsed-ingredients": "Review parsed ingredients",
"confidence-score": "Confidence Score",
"ingredient-parser-description": "Your ingredients have been successfully parsed. Please review the ingredients we're not sure about.",
"ingredient-parser-final-review-description": "Once all ingredients have been reviewed, you'll have one more chance to review all ingredients before applying the changes to your recipe.",
"add-text-as-alias-for-item": "Add \"{text}\" as alias for {item}",
"delete-item": "Delete Item"
"review-parsed-ingredients": "Tarkastele jäsennetyt ainesosat",
"confidence-score": "Varmuuspisteet",
"ingredient-parser-description": "Ainesosat on haettu onnistuneesti. Ole hyvä ja tarkista ainesosat joista emme ole varmoja.",
"ingredient-parser-final-review-description": "Kun kaikki ainesosat on tarkistettu, sinulla on vielä yksi mahdollisuus tarkistaa kaikki ainesosat ennen kuin muokkaat reseptiäsi.",
"add-text-as-alias-for-item": "",
"delete-item": "Poista kohde"
},
"reset-servings-count": "Palauta Annoksien Määrä",
"not-linked-ingredients": "Muut ainesosat",
"upload-another-image": "Upload another image",
"upload-images": "Upload images",
"upload-more-images": "Upload more images",
"set-as-cover-image": "Set as recipe cover image",
"cover-image": "Cover image"
"upload-another-image": "Lataa toinen kuva",
"upload-images": "Lataa kuva",
"upload-more-images": "Lataa lisää kuvia",
"set-as-cover-image": "Aseta reseptin kansikuvaksi",
"cover-image": "Kansikuva"
},
"recipe-finder": {
"recipe-finder": "Reseptin etsijä",
@@ -733,7 +737,7 @@
"restore-success": "Palautus onnistui",
"restore-fail": "Palautus epäonnistui. Tarkista palvelinloki saadaksesi lisätietoja",
"backup-tag": "Varmuuskopion tunniste",
"create-heading": "Create a Backup",
"create-heading": "Luo varmuuskopio",
"delete-backup": "Poista varmuuskopio",
"error-creating-backup-see-log-file": "Virhe varmuuskopiota luodessa. Katso lokitiedosto",
"full-backup": "Täysi varmuuskopiointi",
@@ -988,7 +992,7 @@
"login": "Kirjaudu",
"login-oidc": "Kirjaudu sisään käyttäen",
"or": "tai",
"logout": "Uloskirjaudu",
"logout": "Kirjaudu ulos",
"manage-users": "Käyttäjien hallinta",
"manage-users-description": "Luo ja hallitse käyttäjiä.",
"new-password": "Uusi salasana",
@@ -1059,7 +1063,9 @@
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Vaihda sähköpostisi asetuksista, jos et halua nähdä tätä enää.",
"forgot-password": "Unohditko salasanasi",
"forgot-password-text": "Syötä sähköpostiosoitteesi, niin voit muuttaa salasanaasi linkin kautta.",
"changes-reflected-immediately": "Muutokset tähän käyttäjään astuvat välittömästi voimaan."
"changes-reflected-immediately": "Muutokset tähän käyttäjään astuvat välittömästi voimaan.",
"default-activity": "Default Activity",
"default-activity-hint": "Select which page you'd like to navigate to upon logging in from this device"
},
"language-dialog": {
"translated": "käännetty",
@@ -1177,7 +1183,7 @@
"group-details": "Ryhmän tiedot",
"group-details-description": "Ennen kuin luot tilin, sinun on luotava ryhmä. Ryhmässäsi on vain sinä, mutta voit kutsua muita myöhemmin. Ryhmäsi jäsenet voivat jakaa ateriasuunnitelmia, ostoslistoja, reseptejä ja paljon muuta!",
"use-seed-data": "Käytä pohjatietoja",
"use-seed-data-description": "Mealie ships with a collection of Foods, Units, and Labels that can be used to populate your group with helpful data for organizing your recipes. These are translated into the language you currently have selected. You can always add to or modify this data later.",
"use-seed-data-description": "Mealie:ssa tulee mukana kokoelma valmiita Ruokia, Yksiköitä sekä Luokituksia, joita voidaan käyttää resepteissä sekä niiden lajittelussa. Ne on käännetty kielelle joka on tällä hetkellä valittuna. Voit aina lisätä tai muokata tätä dataa myöhemmin.",
"account-details": "Tilitiedot"
},
"validation": {

View File

@@ -399,6 +399,10 @@
"description-long": "Mealie peut importer des recettes à partir de Tandoor. Exportez vos données dans le format « Défaut », puis téléchargez le .zip ci-dessous.",
"title": "Recettes Tandoor"
},
"cookn": {
"description-long": "Mealie can import recipes from DVO Cook'n X3. Export a cookbook or menu in the \"Cook'n\" format, rename the export extension to .zip, then upload the .zip below.",
"title": "DVO Cook'n X3"
},
"recipe-data-migrations": "Migration des données de recettes",
"recipe-data-migrations-explanation": "Les recettes peuvent être migrées depuis une autre application prise en charge vers Mealie. C'est une excellente façon de commencer avec Mealie.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "En provenance dune autre application une dune version encore plus vieille de Mealie ? Regardez du côté des migrations pour voir si vos données peuvent être importées.",
@@ -676,7 +680,7 @@
"ingredient-parser-description": "Vos ingrédients ont été analysés avec succès. Veuillez vérifier les ingrédients dont nous ne sommes pas certains.",
"ingredient-parser-final-review-description": "Une fois que tous les ingrédients ont été analysés, vous aurez encore une chance de vérifier tous les ingrédients avant de les appliquer à votre recette.",
"add-text-as-alias-for-item": "Ajouter \"{text}\" comme alias pour {item}",
"delete-item": "Delete Item"
"delete-item": "Supprimer l'élément"
},
"reset-servings-count": "Réinitialiser le nombre de portions",
"not-linked-ingredients": "Ingrédients supplémentaires",
@@ -1059,7 +1063,9 @@
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Vous ne voulez plus voir cela ? Assurez-vous de changer votre adresse e-mail dans vos paramètres d'utilisateur !",
"forgot-password": "Mot de passe oublié",
"forgot-password-text": "Veuillez entrer votre adresse e-mail. Un e-mail vous sera envoyé afin de réinitialiser votre mot de passe.",
"changes-reflected-immediately": "Les changements apportés à cet utilisateur seront immédiatement pris en compte."
"changes-reflected-immediately": "Les changements apportés à cet utilisateur seront immédiatement pris en compte.",
"default-activity": "Default Activity",
"default-activity-hint": "Select which page you'd like to navigate to upon logging in from this device"
},
"language-dialog": {
"translated": "traduit",

View File

@@ -399,6 +399,10 @@
"description-long": "Mealie peut importer des recettes à partir de Tandoor. Exportez vos données dans le format « Défaut », puis téléchargez le .zip ci-dessous.",
"title": "Recettes Tandoor"
},
"cookn": {
"description-long": "Mealie can import recipes from DVO Cook'n X3. Export a cookbook or menu in the \"Cook'n\" format, rename the export extension to .zip, then upload the .zip below.",
"title": "DVO Cook'n X3"
},
"recipe-data-migrations": "Migration des données de recettes",
"recipe-data-migrations-explanation": "Les recettes peuvent être migrées depuis une autre application prise en charge vers Mealie. C'est une excellente façon de commencer avec Mealie.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "En provenance dune autre application une dune version encore plus vieille de Mealie ? Regardez du côté des migrations pour voir si vos données peuvent être importées.",
@@ -676,7 +680,7 @@
"ingredient-parser-description": "Vos ingrédients ont été analysés avec succès. Veuillez vérifier les ingrédients dont nous ne sommes pas certains.",
"ingredient-parser-final-review-description": "Une fois que tous les ingrédients ont été analysés, vous aurez encore une chance de vérifier tous les ingrédients avant de les appliquer à votre recette.",
"add-text-as-alias-for-item": "Ajouter \"{text}\" comme alias pour {item}",
"delete-item": "Delete Item"
"delete-item": "Supprimer l'élément"
},
"reset-servings-count": "Réinitialiser le nombre de portions",
"not-linked-ingredients": "Ingrédients supplémentaires",
@@ -1059,7 +1063,9 @@
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Vous ne voulez plus voir cela? Assurez-vous de changer votre adresse courriel dans vos paramètres d'utilisateur!",
"forgot-password": "Mot de passe oublié",
"forgot-password-text": "Veuillez entrer votre adresse e-mail. Un e-mail vous sera envoyé afin de réinitialiser votre mot de passe.",
"changes-reflected-immediately": "Les changements apportés à cet utilisateur seront immédiatement pris en compte."
"changes-reflected-immediately": "Les changements apportés à cet utilisateur seront immédiatement pris en compte.",
"default-activity": "Default Activity",
"default-activity-hint": "Select which page you'd like to navigate to upon logging in from this device"
},
"language-dialog": {
"translated": "traduit",

View File

@@ -399,6 +399,10 @@
"description-long": "Mealie peut importer des recettes à partir de Tandoor. Exportez vos données dans le format « Défaut », puis téléchargez le .zip ci-dessous.",
"title": "Recettes Tandoor"
},
"cookn": {
"description-long": "Mealie can import recipes from DVO Cook'n X3. Export a cookbook or menu in the \"Cook'n\" format, rename the export extension to .zip, then upload the .zip below.",
"title": "DVO Cook'n X3"
},
"recipe-data-migrations": "Migration des données de recettes",
"recipe-data-migrations-explanation": "Les recettes peuvent être migrées depuis une autre application prise en charge vers Mealie. C'est une excellente façon de commencer avec Mealie.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "En provenance dune autre application une dune version encore plus vieille de Mealie ? Regardez du côté des migrations pour voir si vos données peuvent être importées.",
@@ -1059,7 +1063,9 @@
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Vous ne voulez plus voir cela ? Assurez-vous de changer votre adresse e-mail dans vos paramètres d'utilisateur !",
"forgot-password": "Mot de passe oublié",
"forgot-password-text": "Veuillez entrer votre adresse e-mail. Un e-mail vous sera envoyé afin de réinitialiser votre mot de passe.",
"changes-reflected-immediately": "Les changements apportés à cet utilisateur seront immédiatement pris en compte."
"changes-reflected-immediately": "Les changements apportés à cet utilisateur seront immédiatement pris en compte.",
"default-activity": "Activité par défaut",
"default-activity-hint": "Select which page you'd like to navigate to upon logging in from this device"
},
"language-dialog": {
"translated": "traduit",

View File

@@ -399,6 +399,10 @@
"description-long": "O Mealie pode importar receitas do Tandoor. Exporte os seus datos no formato \"Padrón\" e despois cargue o . zip abaixo.",
"title": "Receitas do Tandoor"
},
"cookn": {
"description-long": "Mealie can import recipes from DVO Cook'n X3. Export a cookbook or menu in the \"Cook'n\" format, rename the export extension to .zip, then upload the .zip below.",
"title": "DVO Cook'n X3"
},
"recipe-data-migrations": "Migracións de Datos de Receita",
"recipe-data-migrations-explanation": "As receitas poden ser migradas desde outra aplicación compatível a Mealie. Esta é unha boa forma de comezar a usar o Mealie.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Ven de outra aplicación ou de unha versión ainda mais antiga do Mealie? Verifique as migracións e vexa se os seus datos poden ser importados.",
@@ -1059,7 +1063,9 @@
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Non quer voltar a ver isto? Non se esqueza de alterar o seu email nas suas definicións de usuario!",
"forgot-password": "Esquecin a miña seña",
"forgot-password-text": "Por favor, dixite o seu enderezo de email para enviarmos un link para redefinir a sua seña.",
"changes-reflected-immediately": "As alteracións deste usuario serán aplicadas imediatamente."
"changes-reflected-immediately": "As alteracións deste usuario serán aplicadas imediatamente.",
"default-activity": "Default Activity",
"default-activity-hint": "Select which page you'd like to navigate to upon logging in from this device"
},
"language-dialog": {
"translated": "traducido",

View File

@@ -399,6 +399,10 @@
"description-long": "Mealie יכול לייבא מתכונים מ-Tandoor, תייצא את המתכון בפורמט הדיפולטיבי ולאחר מכן העלאה אותם בחזרה בפורמט zip.",
"title": "מתכוני Tandoor"
},
"cookn": {
"description-long": "Mealie can import recipes from DVO Cook'n X3. Export a cookbook or menu in the \"Cook'n\" format, rename the export extension to .zip, then upload the .zip below.",
"title": "DVO Cook'n X3"
},
"recipe-data-migrations": "מגרציית מידע מתכונים",
"recipe-data-migrations-explanation": "ניתן לייבא מתכונים מאפליקציות תומכות אחרות אל Mealie. זו דרך מעולה להתחיל במילי.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "הגעת מתוכנה אחרת או גרסה ישנה יותר של Mealie? מומלץ לבדוק מיגרציות ולראות אם ניתן לייבא את המידע שלך.",
@@ -1059,7 +1063,9 @@
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "לא רוצה לראות את זה יותר? ניתן לשנות את המייל שלך בהגדרות המשתמש!",
"forgot-password": "שכחתי סיסמא",
"forgot-password-text": "נא לספק כתובת דוא\"ל. אנו נשלח לך הודעת דוא\"ל לצורך איפוס הסיסמה שלך.",
"changes-reflected-immediately": "שינויים למשתמש זה ישתקפו מיידית."
"changes-reflected-immediately": "שינויים למשתמש זה ישתקפו מיידית.",
"default-activity": "Default Activity",
"default-activity-hint": "Select which page you'd like to navigate to upon logging in from this device"
},
"language-dialog": {
"translated": "תורגם",

View File

@@ -399,6 +399,10 @@
"description-long": "Mealie može inportirati recepte iz Tandoor-a. Izvezite Vaše recepte u uobičajnom formatu, pa učitajte .zip ispod.",
"title": "Tandoor Recepti"
},
"cookn": {
"description-long": "Mealie can import recipes from DVO Cook'n X3. Export a cookbook or menu in the \"Cook'n\" format, rename the export extension to .zip, then upload the .zip below.",
"title": "DVO Cook'n X3"
},
"recipe-data-migrations": "Migracije Podataka Recepata",
"recipe-data-migrations-explanation": "Recepti se mogu prenijeti s druge podržane aplikacije na Mealie. To je sjajan način za započetak korištenja Mealieja.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Coming from another application or an even older version of Mealie? Check out migrations and see if your data can be imported.",
@@ -1059,7 +1063,9 @@
"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!",
"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."
"changes-reflected-immediately": "Changes to this user will be reflected immediately.",
"default-activity": "Default Activity",
"default-activity-hint": "Select which page you'd like to navigate to upon logging in from this device"
},
"language-dialog": {
"translated": "prevedeno",

View File

@@ -399,6 +399,10 @@
"description-long": "Mealie képes recepteket importálni a Tandoorból. Exportálja adatait az \"Alapértelmezett\" formátumban, majd töltse fel a .zip fájlt lentebb.",
"title": "Tandoor receptek"
},
"cookn": {
"description-long": "Mealie képes importálni a DVO Cook'n X3 receptjeit. Exportáljon egy szakácskönyvet vagy menüt „Cook'n” formátumban, nevezze át az exportált fájl kiterjesztését .zip-re, majd töltse fel az alábbi .zip fájlt.",
"title": "DVO Cook'n X3"
},
"recipe-data-migrations": "Receptadatok migrációja",
"recipe-data-migrations-explanation": "A receptek átemelhetők más támogatott alkalmazásból Mealie-be. Ez egy remek módja a Mealie használatának elkezdésére.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "A Mealie egy másik verzióját használtad vagy valami teljesen más applikációt? Nézd meg az adat importálási lehetőségeinket.",
@@ -676,7 +680,7 @@
"ingredient-parser-description": "Sikeresen feldolgoztuk a hozzávalókat. Kérljük, nézze át azokat, amelyekben nem vagyunk teljesen biztosak.",
"ingredient-parser-final-review-description": "Miután az összes hozzávalót átnézte, még egyszer átnézheti az összes hozzávalót, mielőtt a változtatásokat átvezeti a receptbe.",
"add-text-as-alias-for-item": "Adja hozzá a „{text}” nevet {item} aliasaként",
"delete-item": "Delete Item"
"delete-item": "Elem törlése"
},
"reset-servings-count": "Adagok számának visszaállítása",
"not-linked-ingredients": "Kiegészítő hozzávalók",
@@ -1059,7 +1063,9 @@
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Nem akarja ezt többé látni? Mindenképpen változtassa meg az e-mail címét a felhasználói beállítások között!",
"forgot-password": "Elfelejtett jelszó",
"forgot-password-text": "Írja be e-mail címét és mi küldünk egy linket a jelszó visszaállításához.",
"changes-reflected-immediately": "Ehhez a felhasználóhoz tartozó változtatások azonnal megjelennek."
"changes-reflected-immediately": "Ehhez a felhasználóhoz tartozó változtatások azonnal megjelennek.",
"default-activity": "Alapértelmezett tevékenység",
"default-activity-hint": "Válassza ki, melyik oldalra szeretne navigálni, amikor bejelentkezik erről az eszközről"
},
"language-dialog": {
"translated": "lefordítva",
@@ -1273,7 +1279,7 @@
"action-clean-temporary-files-description": "Minden fájl és mappa eltávolítása a .temp könyvtárból",
"action-clean-images-name": "Képek tisztítása",
"action-clean-images-description": "Minden nem .webp kiterjesztésű kép eltávolítása",
"actions-description": "A karbantartási műveletek {destructive_in_bold} és óvatosan használandók. Ezen műveletek bármelyikének végrehajtása {irreversible_in_bold}.",
"actions-description": "A karbantartási műveletek {destructive_in_bold} jellegűek, ezért óvatosan kell alkalmazni őket. Ezen műveletek végrehajtása {irreversible_in_bold}.",
"actions-description-destructive": "romboló",
"actions-description-irreversible": "visszafordíthatatlan",
"logs-action-refresh": "Logok frissítése",

View File

File diff suppressed because it is too large Load Diff

View File

@@ -399,6 +399,10 @@
"description-long": "Mealie può importare ricette da Tandoor. Esporta i tuoi dati nel formato \"Predefinito\", quindi carica il file .zip sottostante.",
"title": "Ricette Del Tandoore"
},
"cookn": {
"description-long": "Mealie può importare ricette da DVO Cook'n X3. Per esportare un ricettario o un menu nel formato \"Cook'n\", rinominare l'estensione di esportazione in .zip, quindi caricare il file .zip qui sotto.",
"title": "DVO Cook'n X3"
},
"recipe-data-migrations": "Migrazione Dati Ricetta",
"recipe-data-migrations-explanation": "Le ricette possono essere migrate da un'altra applicazione supportata da Mealie. Questo è un ottimo modo per iniziare con Mealie.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Arrivi da un'altra applicazione o da una versione più vecchia di Mealie? Scopri le migrazioni e scopri se i tuoi dati possono essere importati.",
@@ -1059,7 +1063,9 @@
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Non vuoi più vederlo? Assicurati di modificare la tua email nelle impostazioni utente!",
"forgot-password": "Password Dimenticata",
"forgot-password-text": "Inserisci il tuo indirizzo email e ti invieremo un collegamento per reimpostare la tua password.",
"changes-reflected-immediately": "Le modifiche a questo utente diventeranno immediatamente effettive."
"changes-reflected-immediately": "Le modifiche a questo utente diventeranno immediatamente effettive.",
"default-activity": "Attività Predefinita",
"default-activity-hint": "Seleziona a quale pagina vuoi navigare al momento dell'accesso da questo dispositivo"
},
"language-dialog": {
"translated": "tradotto",

View File

@@ -399,6 +399,10 @@
"description-long": "MealieはTandoorからレシピをインポートすることができます。「デフォルト」形式でデータをエクスポートし、以下に.zipをアップロードしてください。",
"title": "Tandoor Recipes"
},
"cookn": {
"description-long": "Mealie can import recipes from DVO Cook'n X3. Export a cookbook or menu in the \"Cook'n\" format, rename the export extension to .zip, then upload the .zip below.",
"title": "DVO Cook'n X3"
},
"recipe-data-migrations": "レシピの移行",
"recipe-data-migrations-explanation": "レシピは、サポートされている別のアプリケーションからMealieに移行できます。これはMealieを始めるのに最適な方法です。",
"coming-from-another-application-or-an-even-older-version-of-mealie": "別のアプリケーションもしくは古いバージョンのMealieからですか移行をチェックして、データをインポートできるかどうかを確認してください。",
@@ -1059,7 +1063,9 @@
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "これ以上表示したくないですか?ユーザー設定でメールアドレスを変更してください!",
"forgot-password": "パスワードを忘れた",
"forgot-password-text": "メールアドレスを入力すると、パスワードをリセットするためのリンクが送信されます。",
"changes-reflected-immediately": "このユーザーへの変更はすぐに反映されます。"
"changes-reflected-immediately": "このユーザーへの変更はすぐに反映されます。",
"default-activity": "Default Activity",
"default-activity-hint": "Select which page you'd like to navigate to upon logging in from this device"
},
"language-dialog": {
"translated": "翻訳済み",

View File

@@ -399,6 +399,10 @@
"description-long": "Mealie can import recipes from Tandoor. Export your data in the \"Default\" format, then upload the .zip below.",
"title": "Tandoor Recipes"
},
"cookn": {
"description-long": "Mealie can import recipes from DVO Cook'n X3. Export a cookbook or menu in the \"Cook'n\" format, rename the export extension to .zip, then upload the .zip below.",
"title": "DVO Cook'n X3"
},
"recipe-data-migrations": "Recipe Data Migrations",
"recipe-data-migrations-explanation": "Recipes can be migrated from another supported application to Mealie. This is a great way to get started with Mealie.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Coming from another application or an even older version of Mealie? Check out migrations and see if your data can be imported.",
@@ -1059,7 +1063,9 @@
"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!",
"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."
"changes-reflected-immediately": "Changes to this user will be reflected immediately.",
"default-activity": "Default Activity",
"default-activity-hint": "Select which page you'd like to navigate to upon logging in from this device"
},
"language-dialog": {
"translated": "translated",

View File

@@ -399,6 +399,10 @@
"description-long": "Mealie gali importuoti receptus iš \"Tandoor\". Eksportuokite savo duomenis \"Default\" formatu ir įkelkite .ZIP failą žemiau.",
"title": "\"Tandoor\" receptai"
},
"cookn": {
"description-long": "Mealie can import recipes from DVO Cook'n X3. Export a cookbook or menu in the \"Cook'n\" format, rename the export extension to .zip, then upload the .zip below.",
"title": "DVO Cook'n X3"
},
"recipe-data-migrations": "Receptų duomenų migracijos",
"recipe-data-migrations-explanation": "Receptai gali būti importuojami į Mealie iš kitų palaikomų sistemų. Tai - puikus būdas pradėti naudotis Mealie.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Coming from another application or an even older version of Mealie? Check out migrations and see if your data can be imported.",
@@ -1059,7 +1063,9 @@
"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!",
"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."
"changes-reflected-immediately": "Changes to this user will be reflected immediately.",
"default-activity": "Default Activity",
"default-activity-hint": "Select which page you'd like to navigate to upon logging in from this device"
},
"language-dialog": {
"translated": "išversta",

View File

@@ -399,6 +399,10 @@
"description-long": "Mealie var importēt receptes no Tandoor. Eksportējiet savus datus formātā “Noklusējums”, pēc tam augšupielādējiet zemāk esošu.zip.",
"title": "Tandoor receptes"
},
"cookn": {
"description-long": "Mealie can import recipes from DVO Cook'n X3. Export a cookbook or menu in the \"Cook'n\" format, rename the export extension to .zip, then upload the .zip below.",
"title": "DVO Cook'n X3"
},
"recipe-data-migrations": "Recepšu datu migrācija",
"recipe-data-migrations-explanation": "Receptes var migrēt no citas atbalstītas lietojumprogrammas uz Mealie. Tas ir lielisks veids, kā sākt darbu ar Mealie.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Vai nāk no citas lietojumprogrammas vai vēl vecākas Mealie versijas? Pārbaudiet migrācijas un pārbaudiet, vai jūsu datus var importēt.",
@@ -1059,7 +1063,9 @@
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Vai nevēlaties to vairs redzēt? Noteikti mainiet savu e-pastu lietotāja iestatījumos!",
"forgot-password": "Aizmirsāt paroli",
"forgot-password-text": "Lūdzu, ievadiet savu e-pasta adresi, un mēs jums nosūtīsim saiti, lai atiestatītu jūsu paroli.",
"changes-reflected-immediately": "Izmaiņas šim lietotājam tiks atspoguļotas nekavējoties."
"changes-reflected-immediately": "Izmaiņas šim lietotājam tiks atspoguļotas nekavējoties.",
"default-activity": "Default Activity",
"default-activity-hint": "Select which page you'd like to navigate to upon logging in from this device"
},
"language-dialog": {
"translated": "tulkots",

View File

@@ -399,6 +399,10 @@
"description-long": "Mealie kan recepten importeren van Tandoor. Exporteer je gegevens in het \"Standaardformaat\" (\"Default\") en upload het .zip bestand hieronder.",
"title": "Tandoor-recepten"
},
"cookn": {
"description-long": "Mealie kan recepten importeren van DVO Cook'n X3. Exporteer een cookboek of menu in het \"Cook'n\" formaat. Verander de naam van de export extensie naar .zip. En upload daarna de .zip.",
"title": "DVO Cook'n X3"
},
"recipe-data-migrations": "Receptmigratie",
"recipe-data-migrations-explanation": "Je kunt recepten van een ander programma importeren in Mealie. Zo kun je snel aan de slag.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Kom je van een andere toepassing of een oudere versie van Mealie? Kijk eens naar de migraties. Misschien kunnen we je gegevens importeren.",
@@ -1059,7 +1063,9 @@
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Wil je dit niet meer zien? Verander dan je e-mailadres in je gebruikersinstellingen!",
"forgot-password": "Wachtwoord vergeten",
"forgot-password-text": "Voer je e-mailadres in, dan sturen we je een link om het wachtwoord te herstellen.",
"changes-reflected-immediately": "Wijzigingen in deze groep zijn meteen zichtbaar."
"changes-reflected-immediately": "Wijzigingen in deze groep zijn meteen zichtbaar.",
"default-activity": "Standaard activiteit",
"default-activity-hint": "Kies de pagina waar u naar toe wilt, na inloggen op dit apparaat"
},
"language-dialog": {
"translated": "vertaald",

View File

@@ -69,7 +69,7 @@
"new-notification": "Nytt varsel",
"event-notifiers": "Hendelsesvarsler",
"apprise-url-skipped-if-blank": "Apprise-URL (hoppes over hvis tom)",
"apprise-url-is-left-intentionally-blank": "Since Apprise URLs typically contain sensitive information, this field is left intentionally blank while editing. If you wish to update the URL, please enter the new one here, otherwise leave it blank to keep the current URL.",
"apprise-url-is-left-intentionally-blank": "Siden Apprise URL-er vanligvis inneholder sensitiv informasjon, må dette feltet ikke være tomt mens du redigerer. Hvis du vil oppdatere URL, skriv inn den nye her, ellers la den være tom for å beholde den gjeldende URL.",
"enable-notifier": "Aktiver varslingsagenten",
"what-events": "Hvilke hendelser skal denne varslingsagenten abonnere på?",
"user-events": "Brukerhendelser",
@@ -81,7 +81,7 @@
"category-events": "Kategorihendelser",
"when-a-new-user-joins-your-group": "Når en ny bruker blir med i gruppen din",
"recipe-events": "Oppskriftshendelser",
"label-events": "Label Events"
"label-events": "Merk hendelser"
},
"general": {
"add": "Legg til",
@@ -399,6 +399,10 @@
"description-long": "Mealie kan importere oppskrifter fra Tandoor. Eksporter dataene i \"Standard\"-formatet, last deretter opp zip-filen nedenfor.",
"title": "Tandoor Recipes"
},
"cookn": {
"description-long": "Mealie can import recipes from DVO Cook'n X3. Export a cookbook or menu in the \"Cook'n\" format, rename the export extension to .zip, then upload the .zip below.",
"title": "DVO Cook'n X3"
},
"recipe-data-migrations": "Overføring av oppskrifter",
"recipe-data-migrations-explanation": "Oppskrifter kan overføres fra et annet støttet program til Mealie. Dette er en flott måte å komme i gang med Mealie på.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Kommer du fra en annen applikasjon eller en enda eldre versjon av Mealie? Sjekk ut overføringer og se om dine data kan importeres.",
@@ -561,7 +565,7 @@
"see-original-text": "Se opprinnelig tekst",
"original-text-with-value": "Opprinnelig tekst: {originalText}",
"ingredient-linker": "Tilknytt ingredienser",
"unlinked": "Not linked yet",
"unlinked": "Ingen lenke enda",
"linked-to-other-step": "Tilknyttet et annet steg",
"auto": "Automatisk",
"cook-mode": "Tilberedelsesmodus",
@@ -590,7 +594,7 @@
"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",
"ingredients-not-parsed-description": "It looks like your ingredients aren't parsed yet. Click the \"{parse}\" button below to parse your ingredients into structured foods.",
"ingredients-not-parsed-description": "Det ser ut som ingridensene ikke har blitt analysert enda. Klikk\"{parse}\"-knappen under for å analysere ingrediensese som strukturert matvarer.",
"attach-images-hint": "Fest bilder ved å dra og slippe dem inn i redigereringsverktøyet",
"drop-image": "Slipp bilde",
"enable-ingredient-amounts-to-use-this-feature": "Aktiver ingrediensmengder for å bruke denne funksjonen",
@@ -624,7 +628,7 @@
"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",
"parse-recipe-ingredients-after-import": "Parse recipe ingredients after import",
"parse-recipe-ingredients-after-import": "Analyser oppskriftens ingredienser etter at importen er fullført",
"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": "Importer fra HTML eller JSON",
@@ -668,15 +672,15 @@
"no-unit": "Ingen enhet",
"missing-unit": "Opprett manglende enhet: {unit}",
"missing-food": "Opprett manglende mat: {food}",
"this-unit-could-not-be-parsed-automatically": "This unit could not be parsed automatically",
"this-unit-could-not-be-parsed-automatically": "Denne enheten kunne ikke analyseres automatisk",
"this-food-could-not-be-parsed-automatically": "Denne maten kunne ikke leses automatisk",
"no-food": "Ingen matvarer",
"review-parsed-ingredients": "Review parsed ingredients",
"confidence-score": "Confidence Score",
"ingredient-parser-description": "Your ingredients have been successfully parsed. Please review the ingredients we're not sure about.",
"ingredient-parser-final-review-description": "Once all ingredients have been reviewed, you'll have one more chance to review all ingredients before applying the changes to your recipe.",
"add-text-as-alias-for-item": "Add \"{text}\" as alias for {item}",
"delete-item": "Delete Item"
"review-parsed-ingredients": "Gjennomgå de analyserte ingrediensene",
"confidence-score": "Tillit score",
"ingredient-parser-description": "Ingrediensene har blitt analysert. Venligst gjennomgå ingrediensene vi ikke er sikkre på.",
"ingredient-parser-final-review-description": "Når alle ingredienser er gjennomgått, har du en siste sjanse til å gjennomgå alle ingrediensene før du tar i bruk endringene på oppskriften din.",
"add-text-as-alias-for-item": "Legg til \"{text}\" som kallenavn for {item}",
"delete-item": "Slett gjenstanden"
},
"reset-servings-count": "Nullstill antall porsjoner",
"not-linked-ingredients": "Tilleggsingredienser",
@@ -1059,7 +1063,9 @@
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Ønsker du ikke å se dette lenger? Sørg for å endre e-posten din i brukerinnstillingene dine!",
"forgot-password": "Glemt passord",
"forgot-password-text": "Skriv inn e-postadressen din. Vi sender deg en e-post slik at du kan tilbakestille passordet ditt.",
"changes-reflected-immediately": "Endringer på denne brukeren gjenspeiles umiddelbart."
"changes-reflected-immediately": "Endringer på denne brukeren gjenspeiles umiddelbart.",
"default-activity": "Default Activity",
"default-activity-hint": "Select which page you'd like to navigate to upon logging in from this device"
},
"language-dialog": {
"translated": "oversatt",
@@ -1177,7 +1183,7 @@
"group-details": "Gruppedetaljer",
"group-details-description": "Før du oppretter en konto må du opprette en gruppe. Gruppen din vil bare inneholde deg, men du vil kunne invitere andre senere. Medlemmer i gruppen din kan dele måltider, handlelister, oppskrifter med mer!",
"use-seed-data": "Bruk tilføringsdata",
"use-seed-data-description": "Mealie ships with a collection of Foods, Units, and Labels that can be used to populate your group with helpful data for organizing your recipes. These are translated into the language you currently have selected. You can always add to or modify this data later.",
"use-seed-data-description": "Mealie leveres med en kolleksjon av matvarer, enheter og etiketter, som can bli brukt til å utfylle gruppen med hjelpsom data for organisering av oppskrifter. Disse er oversatt over til språket du har valgt. Du kan alltid legge til eller modifisere denne dataen senere.",
"account-details": "Kontodetaljer"
},
"validation": {

View File

@@ -399,6 +399,10 @@
"description-long": "Mealie może zaimportować przepisy z Tandoor. Wyeksportuj swoje przepisy w formacie HTML, a następnie prześlij plik .zip poniżej.",
"title": "Przepisy Tandoor"
},
"cookn": {
"description-long": "Mealie can import recipes from DVO Cook'n X3. Export a cookbook or menu in the \"Cook'n\" format, rename the export extension to .zip, then upload the .zip below.",
"title": "DVO Cook'n X3"
},
"recipe-data-migrations": "Migracja danych przepisów",
"recipe-data-migrations-explanation": "Receptury mogą być przeniesione z innej wspieranej aplikacji na Mealie. To świetny sposób na rozpoczęcie z Mealie.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Przechodzisz z innej aplikacji, bądź starszej wersji Mealie? Sprawdź dostępne migracje i zobacz czy dane mogą zostać zaimportowane.",
@@ -624,7 +628,7 @@
"scrape-recipe-you-can-import-from-raw-data-directly": "Możesz zaimportować bezpośrednio z surowych danych",
"import-original-keywords-as-tags": "Importuj oryginalne słowa kluczowe jako tagi",
"stay-in-edit-mode": "Pozostań w trybie edycji",
"parse-recipe-ingredients-after-import": "Parse recipe ingredients after import",
"parse-recipe-ingredients-after-import": "Analizuj składniki receptury po zaimportowaniu",
"import-from-zip": "Importuj z pliku Zip",
"import-from-zip-description": "Importuj pojedynczy przepis, który został wyeksportowany z innej instancji Mealie.",
"import-from-html-or-json": "Importuj z HTML lub JSON",
@@ -671,12 +675,12 @@
"this-unit-could-not-be-parsed-automatically": "Nie można przetworzyć tej jednostki automatycznie",
"this-food-could-not-be-parsed-automatically": "Nie można przetworzyć tego jedzenia automatycznie",
"no-food": "Brak potrawy",
"review-parsed-ingredients": "Review parsed ingredients",
"confidence-score": "Confidence Score",
"review-parsed-ingredients": "Przejrzyj przeanalizowane składniki",
"confidence-score": "Wskaźnik pewności",
"ingredient-parser-description": "Your ingredients have been successfully parsed. Please review the ingredients we're not sure about.",
"ingredient-parser-final-review-description": "Once all ingredients have been reviewed, you'll have one more chance to review all ingredients before applying the changes to your recipe.",
"add-text-as-alias-for-item": "Add \"{text}\" as alias for {item}",
"delete-item": "Delete Item"
"delete-item": "Usuń przedmiot"
},
"reset-servings-count": "Zresetuj liczbę porcji",
"not-linked-ingredients": "Dodatkowe składniki",
@@ -1059,7 +1063,9 @@
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Nie chcesz już tego widzieć? Pamiętaj, aby zmienić swój adres e-mail w ustawieniach użytkownika!",
"forgot-password": "Nie pamiętam hasła",
"forgot-password-text": "Podaj adres e-mail konta, do którego chcesz odzyskać hasło.",
"changes-reflected-immediately": "Zmiany dla tego użytkownika będą zastosowane natychmiastowo."
"changes-reflected-immediately": "Zmiany dla tego użytkownika będą zastosowane natychmiastowo.",
"default-activity": "Default Activity",
"default-activity-hint": "Select which page you'd like to navigate to upon logging in from this device"
},
"language-dialog": {
"translated": "przetłumaczone",

View File

@@ -399,6 +399,10 @@
"description-long": "Mealie pode importar receitas do Tandoor. Exporte seus dados no formato \"Padrão\" e faça o upload do arquivo .zip abaixo.",
"title": "Receitas do Tandoor"
},
"cookn": {
"description-long": "Mealie can import recipes from DVO Cook'n X3. Export a cookbook or menu in the \"Cook'n\" format, rename the export extension to .zip, then upload the .zip below.",
"title": "DVO Cook'n X3"
},
"recipe-data-migrations": "Migrações de Dados de Receita",
"recipe-data-migrations-explanation": "Receitas podem ser migradas de outro aplicativo suportado para o Mealie. Esta é uma ótima maneira de começar com Mealie.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Vindo de outra aplicação ou de uma versão mais antiga do Mealie? Confira as migrações e veja se seus dados podem ser importados.",
@@ -671,12 +675,12 @@
"this-unit-could-not-be-parsed-automatically": "Esta unidade não pôde ser analisada automaticamente",
"this-food-could-not-be-parsed-automatically": "Este alimento não pôde ser analisado automaticamente",
"no-food": "Sem Comida",
"review-parsed-ingredients": "Review parsed ingredients",
"confidence-score": "Confidence Score",
"ingredient-parser-description": "Your ingredients have been successfully parsed. Please review the ingredients we're not sure about.",
"ingredient-parser-final-review-description": "Once all ingredients have been reviewed, you'll have one more chance to review all ingredients before applying the changes to your recipe.",
"add-text-as-alias-for-item": "Add \"{text}\" as alias for {item}",
"delete-item": "Delete Item"
"review-parsed-ingredients": "Revisar ingredientes analisados",
"confidence-score": "Nota de Confiança",
"ingredient-parser-description": "Seus ingredientes foram analisados com sucesso. Por favor, verifique os ingredientes que não temos certeza.",
"ingredient-parser-final-review-description": "Depois que todos os ingredientes forem revisados, você terá mais uma chance de revisar todos os ingredientes antes de aplicar as mudanças em sua receita.",
"add-text-as-alias-for-item": "Adicionar \"{text}\" como apelido para {item}",
"delete-item": "Excluir item"
},
"reset-servings-count": "Redefinir Contagem de Porções",
"not-linked-ingredients": "Ingredientes adicionais",
@@ -1059,7 +1063,9 @@
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Não quer mais ver isto? Não se esqueça de alterar seu e-mail nas configurações do seu usuário!",
"forgot-password": "Esqueci minha senha",
"forgot-password-text": "Digite seu endereço de e-mail e enviaremos um link para redefinir sua senha.",
"changes-reflected-immediately": "As alterações deste usuário serão refletidas imediatamente."
"changes-reflected-immediately": "As alterações deste usuário serão refletidas imediatamente.",
"default-activity": "Default Activity",
"default-activity-hint": "Select which page you'd like to navigate to upon logging in from this device"
},
"language-dialog": {
"translated": "traduzido",

View File

@@ -399,6 +399,10 @@
"description-long": "O Mealie pode importar receitas a partir da Tandoor. Exporte os seus dados no formato \"Padrão\" e faça o upload do .zip abaixo.",
"title": "Receitas do Tandoor"
},
"cookn": {
"description-long": "Mealie can import recipes from DVO Cook'n X3. Export a cookbook or menu in the \"Cook'n\" format, rename the export extension to .zip, then upload the .zip below.",
"title": "DVO Cook'n X3"
},
"recipe-data-migrations": "Migrações de dados de receita",
"recipe-data-migrations-explanation": "Podem ser migradas receitas de outra aplicação suportada para o Mealie. Esta é uma ótima maneira de começar com o Mealie.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Vem de outra aplicação ou de uma versão ainda mais antiga do Mealie? Consulte as migrações e veja se os seus dados podem ser importados.",
@@ -1059,7 +1063,9 @@
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Não quer voltar a ver isto? Não se esqueça de alterar o seu email nas suas definições de utilizador!",
"forgot-password": "Esqueceu-se da palavra-passe",
"forgot-password-text": "Por favor, digite o seu endereço de email para enviarmos um link para redefinir a sua palavra-passe.",
"changes-reflected-immediately": "As alterações a este utilizador serão aplicadas imediatamente."
"changes-reflected-immediately": "As alterações a este utilizador serão aplicadas imediatamente.",
"default-activity": "Default Activity",
"default-activity-hint": "Select which page you'd like to navigate to upon logging in from this device"
},
"language-dialog": {
"translated": "traduzido",

View File

@@ -399,6 +399,10 @@
"description-long": "Mealie poate importa rețete din Tandoor. Exportă datele în formatul \"Implicit\", apoi încarcă fișierul de tip \".ZIP\" folosind câmpul de mai jos.",
"title": "Rețete Tandoor"
},
"cookn": {
"description-long": "Mealie can import recipes from DVO Cook'n X3. Export a cookbook or menu in the \"Cook'n\" format, rename the export extension to .zip, then upload the .zip below.",
"title": "DVO Cook'n X3"
},
"recipe-data-migrations": "Migrarea datelor rețetelor",
"recipe-data-migrations-explanation": "Rețetele pot fi migrate de la o altă aplicație ce este suportată de Mealie. Acesta este un mod excelent de a începe să folosiți Mealie.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Veniți dintr-o altă aplicație sau o versiune și mai veche a Mealie? Uitați-vă la migrări și vedeți dacă datele dvs. pot fi importate.",
@@ -1059,7 +1063,9 @@
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Nu mai vrei să vezi acest lucru? Asigură-te că îți schimbi adresa de e-mail în setările de utilizator!",
"forgot-password": "Recuperare parola",
"forgot-password-text": "Va rugam introduceti adresa de e-mail pentru a va trimite un link de resetare parola.",
"changes-reflected-immediately": "Modificările aduse acestui utilizator vor fi reflectate imediat."
"changes-reflected-immediately": "Modificările aduse acestui utilizator vor fi reflectate imediat.",
"default-activity": "Default Activity",
"default-activity-hint": "Select which page you'd like to navigate to upon logging in from this device"
},
"language-dialog": {
"translated": "tradus",

View File

@@ -14,7 +14,7 @@
"development": "В разработке",
"docs": "Справка",
"download-log": "Скачать журнал",
"download-recipe-json": "Последний распаршенный JSON",
"download-recipe-json": "Последний извлеченный JSON",
"github": "GitHub",
"log-lines": "Строки журнала",
"not-demo": "Не демо",
@@ -51,7 +51,7 @@
"category": "Категория"
},
"events": {
"apprise-url": "Apprise URL",
"apprise-url": "Apprise URL-адрес",
"database": "База данных",
"delete-event": "Удалить событие",
"event-delete-confirmation": "Вы уверены, что хотите удалить данное событие?",
@@ -399,6 +399,10 @@
"description-long": "Mealie может импортировать рецепты из Tandoor. Экспортируйте ваши данные в формате «По умолчанию», затем загрузите .zip ниже.",
"title": "Рецепты Tandoor"
},
"cookn": {
"description-long": "Mealie может импортировать рецепты из DVO Cook'n X3. Экспортируйте книгу рецептов или меню в формате \"Cook'n\", переименуйте расширение файла экспорта в .zip, затем загрузите .zip ниже.",
"title": "DVO Cook'n X3"
},
"recipe-data-migrations": "Перенос данных рецептов",
"recipe-data-migrations-explanation": "Рецепты могут быть перенесены из другого поддерживаемого приложения в Mealie. Это отличный способ начать работу с Mealie.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Переходите из другого приложения или с более поздней версии Mealie? Проверьте \"миграции\", чтобы убедиться, что ваши данные могут быть перенесены.",
@@ -521,7 +525,7 @@
"save-recipe-before-use": "Сохранить рецепт перед использованием",
"section-title": "Название раздела",
"servings": "Порций",
"serves-amount": "Серверов {amount}",
"serves-amount": "Порции {amount}",
"share-recipe-message": "Я хотел(а) поделиться с тобой моим рецептом {0}.",
"show-nutrition-values": "Показать пищевую ценность",
"sodium-content": "Соль",
@@ -1059,7 +1063,9 @@
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Больше не хотите видеть это сообщение? Не забудьте изменить адрес электронной почты в настройках пользователя!",
"forgot-password": "Забыли Пароль",
"forgot-password-text": "Введите адрес вашей почты, и мы отправим на неё ссылку для сброса пароля.",
"changes-reflected-immediately": "Изменения в этом пользователе будут отражены немедленно."
"changes-reflected-immediately": "Изменения в этом пользователе будут отражены немедленно.",
"default-activity": "Действие по умолчанию",
"default-activity-hint": "Выберите, на какую страницу вы хотели бы перейти при входе в систему с этого устройства"
},
"language-dialog": {
"translated": "переведено",

View File

@@ -399,6 +399,10 @@
"description-long": "Mealie dokáže importovať recepty z Tandoor. Exportujte recepty v prednastavenom formáte a zip-súbor nahrajte nižšie.",
"title": "Tandoor recepty"
},
"cookn": {
"description-long": "Mealie can import recipes from DVO Cook'n X3. Export a cookbook or menu in the \"Cook'n\" format, rename the export extension to .zip, then upload the .zip below.",
"title": "DVO Cook'n X3"
},
"recipe-data-migrations": "Migrácie dát receptov",
"recipe-data-migrations-explanation": "Recepty je možné prenášať do Mealie z inej podporovanej aplikácie. Je to výborný spôsob ako začať s používaním Mealie.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Prichádzate z inej aplikácie alebo dokonca staršej verzie Mealie? Pozrite si možnosti migrácie a zistite, či je možné importovať vaše pôvodné dáta.",
@@ -549,7 +553,7 @@
"failed-to-add-recipes-to-list": "Pridanie receptu do zoznamu zlyhalo",
"failed-to-add-recipe-to-mealplan": "Pridanie receptu do stravovacieho plánu zlyhalo",
"failed-to-add-to-list": "Pridanie do zoznamu zlyhalo",
"yield": "Počet porcií",
"yield": "Množstvo",
"yields-amount-with-text": "Pre {amount} {text}",
"yield-text": "Jednotka množstva",
"quantity": "Množstvo",
@@ -590,7 +594,7 @@
"api-extras-description": "API dolnky receptov sú kľúčovou funkcionalitou Mealie API. Umožňujú použí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ť",
"ingredients-not-parsed-description": "",
"ingredients-not-parsed-description": "Zdá sa, že vaše suroviny neboli zatiaľ analyzované. Kliknite na tlačidlo \"{parse}\" nižšie, aby ste rozložili ingrediencie do štrukturovaných potravín.",
"attach-images-hint": "Pridaj obrázky ich potiahnutím a pustením na editor",
"drop-image": "Odstrániť obrázok",
"enable-ingredient-amounts-to-use-this-feature": "Povoľ množstvám prísad využívať túto vlastnosť",
@@ -624,7 +628,7 @@
"scrape-recipe-you-can-import-from-raw-data-directly": "Môžete importovať priamo nespracované údaje",
"import-original-keywords-as-tags": "Importovať pôvodné kľúčové slová ako štítky",
"stay-in-edit-mode": "Zostať v režime editovania",
"parse-recipe-ingredients-after-import": "Parse recipe ingredients after import",
"parse-recipe-ingredients-after-import": "Analyzovať ingrediencie po importe",
"import-from-zip": "Importovať zo Zip-súboru",
"import-from-zip-description": "Importovať recept exportovaný z inej Mealie inštalácie.",
"import-from-html-or-json": "Importovať z HTML alebo JSONu",
@@ -671,12 +675,12 @@
"this-unit-could-not-be-parsed-automatically": "Túto jednotku nebolo možné parsovať automaticky",
"this-food-could-not-be-parsed-automatically": "Toto jedlo nebolo možné parsovať automaticky",
"no-food": "Žiadne suroviny",
"review-parsed-ingredients": "Review parsed ingredients",
"confidence-score": "Confidence Score",
"ingredient-parser-description": "Your ingredients have been successfully parsed. Please review the ingredients we're not sure about.",
"ingredient-parser-final-review-description": "Once all ingredients have been reviewed, you'll have one more chance to review all ingredients before applying the changes to your recipe.",
"add-text-as-alias-for-item": "Add \"{text}\" as alias for {item}",
"delete-item": "Delete Item"
"review-parsed-ingredients": "Skontrolovať analyzované ingrediencie",
"confidence-score": "Skóre istoty",
"ingredient-parser-description": "Vaše ingrediencie boli úspešne zanalyzované. Prosím prekontrolujte ingrediencie pri ktorých nemáme istotu.",
"ingredient-parser-final-review-description": "Keď skontrolujete všetky ingrediencie, budete mať ešte jednu možnosť skontrolovať ich pred tým než uložíte zmeny vo svojom recepte.",
"add-text-as-alias-for-item": "Pridať \"{text}\" ako alias pre {item}",
"delete-item": "Zmazať položku"
},
"reset-servings-count": "Resetovať počet porcií",
"not-linked-ingredients": "Ďalšie suroviny",
@@ -1059,7 +1063,9 @@
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Želáte si, aby sa vám toto už viackrát nezobrazovalo? Zmeňte si prosím váš e-mail v nastaveniach používateľa!",
"forgot-password": "Zabudnuté heslo",
"forgot-password-text": "Prosím zadajte svoju e-mailovú adresu a my vám zašleme odkaz, ktorý vám umožní heslo obnoviť.",
"changes-reflected-immediately": "Zmeny týkajúce sa tohto používateľa budú vykonané okamžite."
"changes-reflected-immediately": "Zmeny týkajúce sa tohto používateľa budú vykonané okamžite.",
"default-activity": "Default Activity",
"default-activity-hint": "Select which page you'd like to navigate to upon logging in from this device"
},
"language-dialog": {
"translated": "preložené",
@@ -1072,7 +1078,7 @@
"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": "Naplňte databázu potravinami vo vašom jazyku. Tým vytvoríte viac ako 200 bežných potravín, ktoré môžete použiť na organizovanie vašej databáze. Potraviny sú preložené vďaka úsiliu komunity.",
"seed-dialog-text": "Naplňte databázu potravinami vo vašom jazyku. Tým vytvoríte viac ako 2700 bežných potravín, ktoré môžete použiť na organizovanie vašej databáze. Potraviny sú preložené vďaka úsiliu komunity.",
"seed-dialog-warning": "V databáze už máte nejaké údaje. Táto akcia neodstráni duplicitné položky, budete ich musieť odstrániť ručne.",
"combine-food": "Kombinované jedlo",
"source-food": "Zdrojové jedlo",
@@ -1177,7 +1183,7 @@
"group-details": "Podrobnosti o skupine",
"group-details-description": "Pred vytvorením účtu musíte vytvoriť skupinu. Vaša skupina bude obsahovať iba vás, ale neskôr budete môcť pozvať ostatných. Členovia vašej skupiny môžu zdieľať stravovacie plány, nákupné zoznamy, recepty a ďalšie!",
"use-seed-data": "Použiť predvolené dáta",
"use-seed-data-description": "Mealie sa dodáva so zbierkou ingrediencií, jednotiek a označení. Môžete ich použiť vo vašej skupine pre lepšiu organizáciu vašich receptov. Tieto sú preložené do jazyka, ktorý ste si práve zvolili. Tieto dáta môžete kedykoľvek doplniť alebo zmeniť.",
"use-seed-data-description": "Mealie sa dodáva so zbierkou potravín, jednotiek a označení, ktorými môžete naplniť vašu skupinu užitočnými dátami pre lepšiu organizáciu vašich receptov. Tieto sú preložené do jazyka, ktorý ste si práve zvolili. Tieto dáta môžete kedykoľvek doplniť alebo zmeniť.",
"account-details": "Detaily účtu"
},
"validation": {
@@ -1347,7 +1353,7 @@
"notifiers": "Notifikátory",
"notifiers-description": "Nastaviť e-mail a push notifikácie, ktoré sa spúšťajú pri špecifických udalostiach.",
"manage-data": "Spravovať dáta",
"manage-data-description": "Spravujte svoje údaje, jedlá, jednotky, kategórie, štítky a ďalšie.",
"manage-data-description": "Spravujte svoje údaje, potraviny, jednotky, kategórie, štítky a ďalšie.",
"data-migrations": "Migrácie dát",
"data-migrations-description": "Migrujte svoje existujúce údaje z iných aplikácií, ako sú Nextcloud Recipes a Chowdown.",
"email-sent": "E-mail Odoslaný",

View File

@@ -399,6 +399,10 @@
"description-long": "Mealie lahko uvozi recepte iz aplikacije Tandoor. Izvozi podatke v \"Default\" formatu, nato spodaj naloži .zip datoteko.",
"title": "Tandoor recepti"
},
"cookn": {
"description-long": "Mealie lahko uvozi recepte iz DVO Cook'n X3. Izvozite kuharsko knjigo ali jedilnik v formatu »Cook'n«, preimenujte izvozno končnico v .zip in nato naložite spodnjo datoteko .zip.",
"title": "DVO Cook'n X3"
},
"recipe-data-migrations": "Migracije receptov",
"recipe-data-migrations-explanation": "Recepte lahko migriraš iz drugih podprtih aplikacij v Mealie. To je super način za čim hitrejši začetek z Mealie.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Prihajaš iz druge aplijacije ali celo starejše verzije Mealie aplikacije? Poglej podprte migracije in preveri, če lahko uvoziš svoje podatke.",
@@ -624,7 +628,7 @@
"scrape-recipe-you-can-import-from-raw-data-directly": "Uvoziš lahko neposredno iz surovih podatkov",
"import-original-keywords-as-tags": "Uvozi izvorne ključne besede kot značke",
"stay-in-edit-mode": "Urejaj naprej",
"parse-recipe-ingredients-after-import": "Parse recipe ingredients after import",
"parse-recipe-ingredients-after-import": "Razčlenitev sestavin recepta po uvozu",
"import-from-zip": "Uvozi z Zip",
"import-from-zip-description": "Uvozi posamezen recept, ki je bil izvožen iz druge instance Mealie aplikacije.",
"import-from-html-or-json": "Uvozi iz HTML ali JSON",
@@ -671,12 +675,12 @@
"this-unit-could-not-be-parsed-automatically": "Te enote ni bilo mogoče samodejno razčleniti",
"this-food-could-not-be-parsed-automatically": "Te hrane ni bilo mogoče samodejno razčleniti",
"no-food": "Ni živila",
"review-parsed-ingredients": "Review parsed ingredients",
"confidence-score": "Confidence Score",
"ingredient-parser-description": "Your ingredients have been successfully parsed. Please review the ingredients we're not sure about.",
"ingredient-parser-final-review-description": "Once all ingredients have been reviewed, you'll have one more chance to review all ingredients before applying the changes to your recipe.",
"add-text-as-alias-for-item": "Add \"{text}\" as alias for {item}",
"delete-item": "Delete Item"
"review-parsed-ingredients": "Pregled razčlenjenih sestavin",
"confidence-score": "Stopnja zaupanja",
"ingredient-parser-description": "Vaše sestavine so bile uspešno razčlenjene. Prosimo, preglejte sestavine, glede katerih nismo prepričani.",
"ingredient-parser-final-review-description": "Ko bodo vse sestavine pregledane, boste imeli še eno priložnost, da jih pregledate, preden spremembe uveljavite v svojem receptu.",
"add-text-as-alias-for-item": "Dodaj \"{text}\" kot vzdevek za {item}",
"delete-item": "Izbriši element"
},
"reset-servings-count": "Ponastavi števec obrokov",
"not-linked-ingredients": "Dodatne sestavine",
@@ -1059,7 +1063,9 @@
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Ne želiš več videti tega sporočila? Spremeni svoj email v uporabiških nastavitvah!",
"forgot-password": "Ste pozabili geslo",
"forgot-password-text": "Vnesi svoj email naslov, poslali ti bomo povezavo za ponastavitev gesla.",
"changes-reflected-immediately": "Spremembe na tem uporabniku se poznajo takoj."
"changes-reflected-immediately": "Spremembe na tem uporabniku se poznajo takoj.",
"default-activity": "Privzeta dejavnost",
"default-activity-hint": "Izberite, na katero stran želite priti ob prijavi iz te naprave"
},
"language-dialog": {
"translated": "prevedeno",

View File

@@ -399,6 +399,10 @@
"description-long": "Mealie can import recipes from Tandoor. Export your data in the \"Default\" format, then upload the .zip below.",
"title": "Tandoor Recipes"
},
"cookn": {
"description-long": "Mealie can import recipes from DVO Cook'n X3. Export a cookbook or menu in the \"Cook'n\" format, rename the export extension to .zip, then upload the .zip below.",
"title": "DVO Cook'n X3"
},
"recipe-data-migrations": "Recipe Data Migrations",
"recipe-data-migrations-explanation": "Recipes can be migrated from another supported application to Mealie. This is a great way to get started with Mealie.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Coming from another application or an even older version of Mealie? Check out migrations and see if your data can be imported.",
@@ -1059,7 +1063,9 @@
"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!",
"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."
"changes-reflected-immediately": "Changes to this user will be reflected immediately.",
"default-activity": "Default Activity",
"default-activity-hint": "Select which page you'd like to navigate to upon logging in from this device"
},
"language-dialog": {
"translated": "translated",

View File

@@ -69,7 +69,7 @@
"new-notification": "Ny avisering",
"event-notifiers": "Händelseavisering",
"apprise-url-skipped-if-blank": "Apprise-URL (hoppa över om tom)",
"apprise-url-is-left-intentionally-blank": "Since Apprise URLs typically contain sensitive information, this field is left intentionally blank while editing. If you wish to update the URL, please enter the new one here, otherwise leave it blank to keep the current URL.",
"apprise-url-is-left-intentionally-blank": "Eftersom Apprise URL:er vanligtvis innehåller känslig information lämnas detta fält medvetet tomt vid redigering. Om du vill uppdatera webbadressen, ange det nya här, annars lämna det tomt för att behålla den aktuella webbadressen.",
"enable-notifier": "Aktivera avisering",
"what-events": "Vilka händelser ska denna avisering prenumerera på?",
"user-events": "Användarhändelser",
@@ -81,7 +81,7 @@
"category-events": "Kategorihändelser",
"when-a-new-user-joins-your-group": "När en ny användare går med i din grupp",
"recipe-events": "Recepthändelser",
"label-events": "Label Events"
"label-events": "Etiketthändelser"
},
"general": {
"add": "Lägg till",
@@ -399,6 +399,10 @@
"description-long": "Mealie kan importera recept från Tandoor. Exportera dina data i \"Standard\"-format, ladda sedan upp .zip nedan.",
"title": "Tandoor-recept"
},
"cookn": {
"description-long": "Mealie kan importera recept från DVO Cook'n X3. Exportera en kokbok eller meny i \"Cook'n\" format, byt namn på exporttillägget till .zip, sedan ladda upp .zip nedan.",
"title": "DVO Cook'n X3"
},
"recipe-data-migrations": "Migrering av receptdata",
"recipe-data-migrations-explanation": "Recept kan migreras från en annan applikation som stöds till Mealie. Detta är ett bra sätt att komma igång med Mealie.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Kommer från en annan app, program eller tidigare version av Mealie? Kika på migrationer och se om din data kan bli importerad.",
@@ -561,7 +565,7 @@
"see-original-text": "Visa originaltext",
"original-text-with-value": "Originaltext: {originalText}",
"ingredient-linker": "Länka ingredienser",
"unlinked": "Not linked yet",
"unlinked": "Ännu inte länkad",
"linked-to-other-step": "Kopplat till annat steg",
"auto": "Auto",
"cook-mode": "Matlagningsläge",
@@ -624,7 +628,7 @@
"scrape-recipe-you-can-import-from-raw-data-directly": "Du kan importera från rådata direkt",
"import-original-keywords-as-tags": "Importera ursprungliga sökord som taggar",
"stay-in-edit-mode": "Stanna kvar i redigeringsläge",
"parse-recipe-ingredients-after-import": "Parse recipe ingredients after import",
"parse-recipe-ingredients-after-import": "Tolka receptingredienser efter import",
"import-from-zip": "Importera från zip",
"import-from-zip-description": "Importera ett enstaka recept som exporterades från en annan Mealie-instans.",
"import-from-html-or-json": "Importera från HTML eller JSON",
@@ -671,12 +675,12 @@
"this-unit-could-not-be-parsed-automatically": "Enheten kunde inte översättas automatiskt",
"this-food-could-not-be-parsed-automatically": "Maten kunde inte översättas automatiskt",
"no-food": "Ingen mat",
"review-parsed-ingredients": "Review parsed ingredients",
"confidence-score": "Confidence Score",
"ingredient-parser-description": "Your ingredients have been successfully parsed. Please review the ingredients we're not sure about.",
"ingredient-parser-final-review-description": "Once all ingredients have been reviewed, you'll have one more chance to review all ingredients before applying the changes to your recipe.",
"add-text-as-alias-for-item": "Add \"{text}\" as alias for {item}",
"delete-item": "Delete Item"
"review-parsed-ingredients": "Granska tolkade ingredienser",
"confidence-score": "Konfidenspoäng",
"ingredient-parser-description": "Dina ingredienser har blivit tolkade. Se över ingredienserna vi inte är säkra på.",
"ingredient-parser-final-review-description": "När alla ingredienser har granskats har du ytterligare en chans att granska alla ingredienser innan du tillämpar ändringarna i ditt recept.",
"add-text-as-alias-for-item": "Lägg till \"{text}\" som alias för {item}",
"delete-item": "Radera objekt"
},
"reset-servings-count": "Nollställ antal portioner",
"not-linked-ingredients": "Ytterligare ingredienser",
@@ -1059,7 +1063,9 @@
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Vill du inte se detta längre? Se till att ändra din e-post i dina användarinställningar!",
"forgot-password": "Glömt lösenord",
"forgot-password-text": "Ange din e-postadress så skickar vi dig en länk för att återställa ditt lösenord.",
"changes-reflected-immediately": "Ändringar av denna användare kommer att ske omedelbart."
"changes-reflected-immediately": "Ändringar av denna användare kommer att ske omedelbart.",
"default-activity": "Default Activity",
"default-activity-hint": "Select which page you'd like to navigate to upon logging in from this device"
},
"language-dialog": {
"translated": "översatt",
@@ -1177,7 +1183,7 @@
"group-details": "Gruppuppgifter",
"group-details-description": "Innan du skapar ett konto måste du skapa en grupp. Din grupp kommer bara att innehålla dig, men du kommer att kunna bjuda in andra senare. Medlemmarna i din grupp kan dela måltidsplaner, inköpslistor, recept och mycket mer!",
"use-seed-data": "Använd exempeldata",
"use-seed-data-description": "Mealie ships with a collection of Foods, Units, and Labels that can be used to populate your group with helpful data for organizing your recipes. These are translated into the language you currently have selected. You can always add to or modify this data later.",
"use-seed-data-description": "Mealie kommer med en samling av ingridienser, enheter och etiketter som kan användas för att fylla din grupp med användbara data för att organisera dina recept. Dessa översätts till det språk du just nu har valt. Du kan alltid lägga till eller ändra dessa data senare.",
"account-details": "Kontouppgifter"
},
"validation": {

View File

@@ -399,6 +399,10 @@
"description-long": "Mealie, Tandoor'dan tarifleri içe aktarabilir. Verilerinizi \"Varsayılan\" biçimde dışa aktarın, ardından aşağıdaki .zip dosyasını yükleyin.",
"title": "Tandoor Tarifleri"
},
"cookn": {
"description-long": "Mealie can import recipes from DVO Cook'n X3. Export a cookbook or menu in the \"Cook'n\" format, rename the export extension to .zip, then upload the .zip below.",
"title": "DVO Cook'n X3"
},
"recipe-data-migrations": "Tarif Verilerini Taşı",
"recipe-data-migrations-explanation": "Tarifler desteklenen başka bir uygulamadan Mealie'ye taşınabilir. Bu Mealie kullanmaya başlamak için mükemmel bir yöntemdir.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Başka bir uygulamadan mı yoksa Mealie'nin daha eski bir sürümünden mi geliyorsunuz? Taşıma işlemlerine göz atın ve verilerinizin içe aktarılıp aktarılamayacağını görün.",
@@ -1059,7 +1063,9 @@
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Artık bunu görmek istemiyor musunuz? Kullanıcı ayarlarınızda e-postanızı değiştirmeyi unutmayın!",
"forgot-password": "Şifreni mi Unuttun?",
"forgot-password-text": "Lütfen e-posta adresinizi girin, size şifrenizi sıfırlamanız için bir bağlantı göndereceğiz.",
"changes-reflected-immediately": "Bu kullanıcıda yapılan değişiklikler hemen yansıtılacaktır."
"changes-reflected-immediately": "Bu kullanıcıda yapılan değişiklikler hemen yansıtılacaktır.",
"default-activity": "Default Activity",
"default-activity-hint": "Select which page you'd like to navigate to upon logging in from this device"
},
"language-dialog": {
"translated": "çevirilmiş",

View File

@@ -399,6 +399,10 @@
"description-long": "Mealie може імпортувати рецепти з Tandoor. Експортуйте свої дані в формат \"Default\", а потім завантажте .zip нижче.",
"title": "Tandoor Recipes"
},
"cookn": {
"description-long": "Mealie може імпортувати рецепти з DVO Cook'n X3. Експортуйте кулінарну книгу або меню у форматі «Cook'n», перейменуйте розширення експорту на .zip, а потім завантажте файл .zip нижче.",
"title": "DVO Cook'n X3"
},
"recipe-data-migrations": "Міграція рецептів",
"recipe-data-migrations-explanation": "Рецепти можна мігрувати з іншого застосунку до Mealie. Це чудовий спосіб розпочати роботу з Mealie.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Використовуєте іншу програму або іще старішу версію Mealie? Перевірте документацію з міграції та подивіться, чи можуть Ваші дані бути імпортовані.",
@@ -1059,7 +1063,9 @@
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Більше не хочете це бачити? Обов'язково змініть адресу електронної пошти в налаштуваннях користувача!",
"forgot-password": "Нагадати пароль",
"forgot-password-text": "Будь ласка, введіть адресу вашої електронної пошти й вам надійде повідомлення, щоб відновити пароль.",
"changes-reflected-immediately": "Зміни для цього користувача будуть негайно відображені."
"changes-reflected-immediately": "Зміни для цього користувача будуть негайно відображені.",
"default-activity": "Дія за замовчуванням",
"default-activity-hint": "Виберіть, на яку сторінку ви хочете перейти після входу з цього пристрою"
},
"language-dialog": {
"translated": "перекладено",

View File

@@ -399,6 +399,10 @@
"description-long": "Mealie can import recipes from Tandoor. Export your data in the \"Default\" format, then upload the .zip below.",
"title": "Tandoor Recipes"
},
"cookn": {
"description-long": "Mealie can import recipes from DVO Cook'n X3. Export a cookbook or menu in the \"Cook'n\" format, rename the export extension to .zip, then upload the .zip below.",
"title": "DVO Cook'n X3"
},
"recipe-data-migrations": "Recipe Data Migrations",
"recipe-data-migrations-explanation": "Recipes can be migrated from another supported application to Mealie. This is a great way to get started with Mealie.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Coming from another application or an even older version of Mealie? Check out migrations and see if your data can be imported.",
@@ -1059,7 +1063,9 @@
"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!",
"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."
"changes-reflected-immediately": "Changes to this user will be reflected immediately.",
"default-activity": "Default Activity",
"default-activity-hint": "Select which page you'd like to navigate to upon logging in from this device"
},
"language-dialog": {
"translated": "translated",

View File

@@ -399,6 +399,10 @@
"description-long": "Mealie支持从Tandoor中导入食谱。在Tandoor中以“默认”格式导出数据并在下方上传zip文件。",
"title": "Tandoor食谱"
},
"cookn": {
"description-long": "Mealie can import recipes from DVO Cook'n X3. Export a cookbook or menu in the \"Cook'n\" format, rename the export extension to .zip, then upload the .zip below.",
"title": "DVO Cook'n X3"
},
"recipe-data-migrations": "食谱数据迁移",
"recipe-data-migrations-explanation": "你可以从受支持的应用中将食谱迁移至Mealie这是上手Mealie的好方法。",
"coming-from-another-application-or-an-even-older-version-of-mealie": "之前使用其他食谱应用或是旧版本Mealie吗检查迁移设置来确认你的原有数据是否可以导入。",
@@ -1059,7 +1063,9 @@
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "不想再看到这条消息了吗?请务必在用户设置中更改你的邮箱!",
"forgot-password": "忘记密码",
"forgot-password-text": "请输入你的邮箱地址,我们会发给你重置密码的链接。",
"changes-reflected-immediately": "对用户的更改将立即生效。"
"changes-reflected-immediately": "对用户的更改将立即生效。",
"default-activity": "Default Activity",
"default-activity-hint": "Select which page you'd like to navigate to upon logging in from this device"
},
"language-dialog": {
"translated": "已翻译",

View File

@@ -399,6 +399,10 @@
"description-long": "Mealie can import recipes from Tandoor. Export your data in the \"Default\" format, then upload the .zip below.",
"title": "Tandoor Recipes"
},
"cookn": {
"description-long": "Mealie can import recipes from DVO Cook'n X3. Export a cookbook or menu in the \"Cook'n\" format, rename the export extension to .zip, then upload the .zip below.",
"title": "DVO Cook'n X3"
},
"recipe-data-migrations": "Recipe Data Migrations",
"recipe-data-migrations-explanation": "Recipes can be migrated from another supported application to Mealie. This is a great way to get started with Mealie.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Coming from another application or an even older version of Mealie? Check out migrations and see if your data can be imported.",
@@ -1059,7 +1063,9 @@
"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!",
"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."
"changes-reflected-immediately": "Changes to this user will be reflected immediately.",
"default-activity": "Default Activity",
"default-activity-hint": "Select which page you'd like to navigate to upon logging in from this device"
},
"language-dialog": {
"translated": "translated",

View File

@@ -0,0 +1,18 @@
export type I18n = ReturnType<typeof useI18n>;
export type TRoute = string;
export type TranslationResult = string;
export type ActivityRoute = (groupSlug?: string) => TRoute;
export type ActivityLabel = (i18n: I18n) => TranslationResult;
export type Activity = {
key: ActivityKey;
route: ActivityRoute;
label: ActivityLabel;
};
export const enum ActivityKey {
RECIPES = "recipes",
MEALPLANNER = "mealplanner",
SHOPPING_LIST = "shopping_list",
}

View File

@@ -14,7 +14,8 @@ export type SupportedMigrations =
| "tandoor"
| "plantoeat"
| "myrecipebox"
| "recipekeeper";
| "recipekeeper"
| "cookn";
export interface CreateGroupPreferences {
privateGroup?: boolean;

View File

@@ -1,159 +1,159 @@
import {
mdiAccount,
mdiSilverwareVariant,
mdiPlus,
mdiPlusCircle,
mdiDelete,
mdiContentSave,
mdiContentSaveEdit,
mdiSquareEditOutline,
mdiClose,
mdiTagArrowUpOutline,
mdiTagArrowRight,
mdiTagMultipleOutline,
mdiShapeOutline,
mdiBookOutline,
mdiAccountCog,
mdiAccountGroup,
mdiSlotMachine,
mdiHome,
mdiHomeAccount,
mdiMagnify,
mdiPotSteamOutline,
mdiTranslate,
mdiClockTimeFourOutline,
mdiImport,
mdiEmail,
mdiLock,
mdiEye,
mdiDrag,
mdiEyeOff,
mdiCalendarMinus,
mdiAlertOutline,
mdiCalendar,
mdiDiceMultiple,
mdiAccountPlusOutline,
mdiAlert,
mdiAlertCircle,
mdiDotsVertical,
mdiPrinter,
mdiPrinterPosCog,
mdiShareVariant,
mdiChevronDown,
mdiHeart,
mdiHeartOutline,
mdiDotsHorizontal,
mdiAlertOutline,
mdiApi,
mdiArrowLeftBold,
mdiArrowLeftBoldOutline,
mdiArrowRightBold,
mdiArrowRightBoldOutline,
mdiBackupRestore,
mdiBeakerOutline,
mdiBellAlert,
mdiBellPlus,
mdiBookOpenPageVariant,
mdiBookOutline,
mdiBowlMixOutline,
mdiBroom,
mdiCalendar,
mdiCalendarMinus,
mdiCalendarMultiselect,
mdiCalendarToday,
mdiCalendarWeek,
mdiCalendarWeekBegin,
mdiCartCheck,
mdiChartLine,
mdiCheck,
mdiCheckBold,
mdiCheckboxBlankOutline,
mdiCheckboxMarkedCircle,
mdiCheckboxOutline,
mdiChefHat,
mdiChevronDown,
mdiChevronRight,
mdiClipboardCheck,
mdiClockTimeFourOutline,
mdiClose,
mdiCloudUpload,
mdiCodeJson,
mdiCodeTags,
mdiCog,
mdiCommentTextMultiple,
mdiCommentTextMultipleOutline,
mdiContentCopy,
mdiContentDuplicate,
mdiContentSave,
mdiContentSaveEdit,
mdiCookie,
mdiCursorMove,
mdiDatabase,
mdiDelete,
mdiDesktopTowerMonitor,
mdiDevTo,
mdiDiceMultiple,
mdiDockBottom,
mdiDockLeft,
mdiDockRight,
mdiDockTop,
mdiDocker,
mdiDotsHorizontal,
mdiDotsVertical,
mdiDownload,
mdiDrag,
mdiEmail,
mdiEye,
mdiEyeOff,
mdiFile,
mdiFilePdfBox,
mdiFileCabinet,
mdiFileImage,
mdiCodeJson,
mdiCog,
mdiFilePdfBox,
mdiFileSign,
mdiFilter,
mdiFlipHorizontal,
mdiFlipVertical,
mdiFolderOutline,
mdiFolderZipOutline,
mdiFood,
mdiFoodApple,
mdiFormSelect,
mdiFormatColorFill,
mdiFormatListChecks,
mdiGithub,
mdiHeart,
mdiHeartOutline,
mdiHelpCircleOutline,
mdiHome,
mdiHomeAccount,
mdiImport,
mdiInformation,
mdiInformationOutline,
mdiInformationVariant,
mdiKnife,
mdiLink,
mdiLinkVariant,
mdiLinkVariantPlus,
mdiLock,
mdiLogout,
mdiMagnify,
mdiMenu,
mdiMessageText,
mdiMinus,
mdiNewBox,
mdiNotificationClearAll,
mdiOpenInNew,
mdiOrderAlphabeticalAscending,
mdiPageLayoutBody,
mdiPlus,
mdiPlusCircle,
mdiPotSteamOutline,
mdiPrinter,
mdiPrinterPosCog,
mdiRefresh,
mdiRefreshCircle,
mdiRobot,
mdiRotateLeft,
mdiRotateRight,
mdiSelectionDrag,
mdiShapeOutline,
mdiShareVariant,
mdiShuffleVariant,
mdiSilverwareForkKnife,
mdiSilverwareVariant,
mdiSlotMachine,
mdiSort,
mdiSortAscending,
mdiSortDescending,
mdiSortAlphabeticalAscending,
mdiSortAlphabeticalDescending,
mdiSortCalendarAscending,
mdiSortCalendarDescending,
mdiSortClockAscending,
mdiSortClockDescending,
mdiOrderAlphabeticalAscending,
mdiSortReverseVariant,
mdiSortVariant,
mdiSquareEditOutline,
mdiStar,
mdiNewBox,
mdiShuffleVariant,
mdiAlert,
mdiCheckboxMarkedCircle,
mdiInformation,
mdiInformationOutline,
mdiInformationVariant,
mdiBellAlert,
mdiRefreshCircle,
mdiMenu,
mdiWeatherSunny,
mdiWeatherNight,
mdiLink,
mdiRobot,
mdiLinkVariant,
mdiViewModule,
mdiViewDashboard,
mdiTools,
mdiCalendarWeek,
mdiCalendarToday,
mdiCalendarMultiselect,
mdiFormatListChecks,
mdiLogout,
mdiContentCopy,
mdiClipboardCheck,
mdiCloudUpload,
mdiDatabase,
mdiGithub,
mdiFolderOutline,
mdiApi,
mdiTableEdit,
mdiTagArrowRight,
mdiTagArrowUpOutline,
mdiTagMultipleOutline,
mdiTestTube,
mdiDevTo,
mdiBackupRestore,
mdiNotificationClearAll,
mdiFood,
mdiWebhook,
mdiFilter,
mdiAccountPlusOutline,
mdiDesktopTowerMonitor,
mdiFormatColorFill,
mdiFormSelect,
mdiPageLayoutBody,
mdiCalendarWeekBegin,
mdiOpenInNew,
mdiCheck,
mdiCheckBold,
mdiBroom,
mdiCartCheck,
mdiArrowLeftBold,
mdiMinus,
mdiWindowClose,
mdiFolderZipOutline,
mdiFoodApple,
mdiBeakerOutline,
mdiArrowLeftBoldOutline,
mdiArrowRightBoldOutline,
mdiTimerSand,
mdiRefresh,
mdiArrowRightBold,
mdiChevronRight,
mdiBowlMixOutline,
mdiWrench,
mdiChartLine,
mdiHelpCircleOutline,
mdiDocker,
mdiUndo,
mdiSelectionDrag,
mdiCursorMove,
mdiText,
mdiTextBoxOutline,
mdiTimelineText,
mdiMessageText,
mdiChefHat,
mdiContentDuplicate,
mdiDockLeft,
mdiDockRight,
mdiDockTop,
mdiDockBottom,
mdiCheckboxOutline,
mdiFlipHorizontal,
mdiFlipVertical,
mdiRotateLeft,
mdiRotateRight,
mdiBookOpenPageVariant,
mdiFileCabinet,
mdiSilverwareForkKnife,
mdiCodeTags,
mdiKnife,
mdiCookie,
mdiBellPlus,
mdiLinkVariantPlus,
mdiTableEdit,
mdiFileSign,
mdiTimerSand,
mdiTools,
mdiTranslate,
mdiUndo,
mdiViewDashboard,
mdiViewModule,
mdiWeatherNight,
mdiWeatherSunny,
mdiWebhook,
mdiWindowClose,
mdiWrench,
} from "@mdi/js";
export const icons = {
@@ -205,6 +205,7 @@ export const icons = {
database: mdiDatabase,
desktopTowerMonitor: mdiDesktopTowerMonitor,
devTo: mdiDevTo,
knife: mdiKnife,
diceMultiple: mdiDiceMultiple,
dockTop: mdiDockTop,
dockBottom: mdiDockBottom,
@@ -261,8 +262,8 @@ export const icons = {
shuffleVariant: mdiShuffleVariant,
silverwareForkKnife: mdiSilverwareForkKnife,
sort: mdiSort,
sortAscending: mdiSortAscending,
sortDescending: mdiSortDescending,
sortAscending: mdiSortVariant,
sortDescending: mdiSortReverseVariant,
sortAlphabeticalAscending: mdiSortAlphabeticalAscending,
sortAlphabeticalDescending: mdiSortAlphabeticalDescending,
sortCalendarAscending: mdiSortCalendarAscending,
@@ -284,7 +285,6 @@ export const icons = {
windowClose: mdiWindowClose,
zip: mdiFolderZipOutline,
undo: mdiUndo,
knfife: mdiKnife,
bread: mdiCookie,
fileSign: mdiFileSign,

View File

@@ -9,7 +9,6 @@ export default defineNuxtConfig({
modules: [
"@vite-pwa/nuxt",
"@nuxtjs/i18n",
"@sidebase/nuxt-auth",
"@nuxt/fonts",
"vuetify-nuxt-module",
"@nuxt/eslint",
@@ -51,11 +50,11 @@ export default defineNuxtConfig({
},
],
link: [
{ "rel": "icon", "type": "image/x-icon", "href": "/favicon.ico", "data-n-head": "ssr" },
{ "rel": "shortcut icon", "type": "image/png", "href": "/icons/icon-x64.png", "data-n-head": "ssr" },
{ "rel": "apple-touch-icon", "type": "image/png", "href": "/icons/apple-touch-icon.png", "data-n-head": "ssr" },
{ "rel": "mask-icon", "href": "/icons/safari-pinned-tab.svg", "data-n-head": "ssr" },
{ "rel": "manifest", "href": "/manifest.webmanifest", "data-n-head": "ssr" },
{ rel: "icon", type: "image/x-icon", href: "/favicon.ico" },
{ rel: "shortcut icon", type: "image/png", href: "/icons/icon-x64.png" },
{ rel: "apple-touch-icon", type: "image/png", href: "/icons/apple-touch-icon.png" },
{ rel: "mask-icon", href: "/icons/safari-pinned-tab.svg" },
{ rel: "manifest", href: "/manifest.webmanifest", crossorigin: "use-credentials" },
],
},
@@ -126,29 +125,6 @@ export default defineNuxtConfig({
baseURL: process.env.SUB_PATH || "",
},
auth: {
isEnabled: true,
// disableServerSideAuth: true,
originEnvKey: "AUTH_ORIGIN",
baseURL: "/api",
provider: {
type: "local",
endpoints: {
signIn: { path: "/auth/token", method: "post" },
signOut: { path: "/auth/logout", method: "post" },
getSession: { path: "/users/self", method: "get" },
},
token: {
signInResponseTokenPointer: "/access_token",
type: "Bearer",
cookieName: AUTH_TOKEN,
},
pages: {
login: "/login",
},
},
},
// eslint rules
eslint: {
config: {
@@ -269,7 +245,7 @@ export default defineNuxtConfig({
"browser",
"window-controls-overlay",
],
orientation: "portrait-primary",
orientation: "any",
categories: ["food", "lifestyle"],
prefer_related_applications: false,
handle_links: "preferred",

View File

@@ -1,6 +1,6 @@
{
"name": "mealie",
"version": "3.2.1",
"version": "3.3.2",
"private": true,
"scripts": {
"dev": "nuxt dev",
@@ -21,7 +21,6 @@
"@mdi/js": "^7.4.47",
"@nuxt/fonts": "^0.11.4",
"@nuxtjs/i18n": "^9.2.1",
"@sidebase/nuxt-auth": "^1.1.0",
"@vite-pwa/nuxt": "^0.10.6",
"@vueuse/core": "^12.7.0",
"axios": "^1.8.1",
@@ -30,9 +29,8 @@
"isomorphic-dompurify": "^2.28.0",
"json-editor-vue": "^0.18.1",
"marked": "^15.0.12",
"next-auth": "~4.24.0",
"nuxt": "^3.19.2",
"vite": "^6.2.0",
"vite": "^7.0.0",
"vue-advanced-cropper": "^2.8.9",
"vue-draggable-plus": "^0.6.0",
"vuetify": "^3.9.7",

View File

@@ -1,6 +1,6 @@
<script setup lang="ts">
definePageMeta({
middleware: ["sidebase-auth", "admin-only"],
middleware: ["admin-only"],
});
</script>

View File

@@ -244,6 +244,7 @@ import UserRegistrationForm from "~/components/Domain/User/UserRegistrationForm.
definePageMeta({
layout: "blank",
middleware: ["admin-only"],
});
// ================================================================
@@ -264,13 +265,6 @@ useSeoMeta({
title: i18n.t("admin.setup.first-time-setup"),
});
if (!$auth.loggedIn.value) {
router.push("/login");
}
else if (!$auth.user.value?.admin) {
router.push(groupSlug.value ? `/g/${groupSlug.value}` : "/login");
}
enum Pages {
LANDING = 0,
USER_INFO = 1,

View File

@@ -194,6 +194,16 @@
</a>
</v-list-item-subtitle>
</template>
<template v-else-if="property.slot === 'version' && property.value !== 'develop' && property.value !== 'nightly'">
<v-list-item-subtitle>
<a
target="_blank"
:href="`https://github.com/mealie-recipes/mealie/releases/tag/${property.value}`"
>
{{ property.value }}
</a>
</v-list-item-subtitle>
</template>
<template v-else>
<v-list-item-subtitle>
{{ property.value }}
@@ -400,6 +410,7 @@ export default defineNuxtComponent({
rawAppInfo.value.versionLatest = data.versionLatest;
const prettyInfo = [
{
slot: "version",
name: i18n.t("about.version"),
icon: $globals.icons.information,
value: data.version,

View File

@@ -145,7 +145,7 @@ import { useCookbookPreferences } from "~/composables/use-users/preferences";
export default defineNuxtComponent({
components: { CookbookEditor, VueDraggable },
middleware: ["sidebase-auth", "group-only"],
middleware: ["group-only"],
setup() {
const dialogStates = reactive({
create: false,

View File

@@ -19,20 +19,21 @@ import type { Recipe } from "~/lib/api/types/recipe";
const $auth = useMealieAuth();
const { isOwnGroup } = useLoggedInState();
const route = useRoute();
const title = ref(route.meta?.title ?? "");
const title = ref(route.meta?.title as string || "");
useSeoMeta({ title });
const router = useRouter();
const slug = route.params.slug as string;
const recipe = ref<Recipe | null>(null);
if (isOwnGroup.value) {
function loadRecipe() {
const { recipe: data } = useRecipe(slug);
watch(data, (value) => {
recipe.value = value;
});
}
else {
async function loadPublicRecipe() {
const groupSlug = computed(() => route.params.groupSlug as string || $auth.user.value?.groupSlug || "");
const api = usePublicExploreApi(groupSlug.value);
const { data } = await useAsyncData(useAsyncKey(), async () => {
@@ -47,6 +48,13 @@ else {
recipe.value = data.value;
}
if (isOwnGroup.value) {
loadRecipe();
}
else {
onMounted(loadPublicRecipe);
}
whenever(
() => recipe.value,
() => {

View File

@@ -49,7 +49,7 @@ import AdvancedOnly from "~/components/global/AdvancedOnly.vue";
export default defineNuxtComponent({
components: { AdvancedOnly },
middleware: ["sidebase-auth", "group-only"],
middleware: ["group-only"],
setup() {
const i18n = useI18n();
const $auth = useMealieAuth();

View File

@@ -23,7 +23,7 @@ export default defineNuxtComponent({
components: {
RecipeOrganizerPage,
},
middleware: ["sidebase-auth", "group-only"],
middleware: ["group-only"],
setup() {
const { store, actions } = useCategoryStore();
const i18n = useI18n();

View File

@@ -23,7 +23,7 @@ export default defineNuxtComponent({
components: {
RecipeOrganizerPage,
},
middleware: ["sidebase-auth", "group-only"],
middleware: ["group-only"],
setup() {
const { store, actions } = useTagStore();
const i18n = useI18n();

View File

@@ -36,7 +36,7 @@ import RecipeTimeline from "~/components/Domain/Recipe/RecipeTimeline.vue";
export default defineNuxtComponent({
components: { RecipeTimeline },
middleware: ["sidebase-auth", "group-only"],
middleware: ["group-only"],
setup() {
const i18n = useI18n();
const api = useUserApi();

View File

@@ -28,7 +28,7 @@ export default defineNuxtComponent({
components: {
RecipeOrganizerPage,
},
middleware: ["sidebase-auth", "group-only"],
middleware: ["group-only"],
setup() {
const $auth = useMealieAuth();
const toolStore = useToolStore();

View File

@@ -25,7 +25,7 @@ const router = useRouter();
const recipeId = route.params.id as string;
const api = usePublicApi();
const title = ref(route.meta?.title ?? "");
const title = ref(route.meta?.title as string ?? "");
useSeoMeta({
title,
});

View File

@@ -36,7 +36,7 @@
<script lang="ts">
export default defineNuxtComponent({
middleware: ["sidebase-auth", "can-organize-only"],
middleware: ["can-organize-only"],
setup() {
const i18n = useI18n();
const buttonLookup: { [key: string]: string } = {

View File

@@ -57,11 +57,12 @@
variant="outlined"
offset
>
<template #item="{ item }">
<v-list-item-title> {{ item.raw.name }} </v-list-item-title>
<v-list-item-subtitle>
{{ item.raw.progress }}% {{ $t("language-dialog.translated") }}
</v-list-item-subtitle>
<template #item="{ item, props }">
<v-list-item v-bind="props">
<v-list-item-subtitle>
{{ item.raw.progress }}% {{ $t("language-dialog.translated") }}
</v-list-item-subtitle>
</v-list-item>
</template>
</v-autocomplete>

View File

@@ -116,11 +116,12 @@
variant="outlined"
offset
>
<template #item="{ item }">
<v-list-item-title> {{ item.raw.name }} </v-list-item-title>
<v-list-item-subtitle>
{{ item.raw.progress }}% {{ $t("language-dialog.translated") }}
</v-list-item-subtitle>
<template #item="{ item, props }">
<v-list-item v-bind="props">
<v-list-item-subtitle>
{{ item.raw.progress }}% {{ $t("language-dialog.translated") }}
</v-list-item-subtitle>
</v-list-item>
</template>
</v-autocomplete>

View File

@@ -231,11 +231,12 @@
variant="outlined"
offset
>
<template #item="{ item }">
<v-list-item-title> {{ item.raw.name }} </v-list-item-title>
<v-list-item-subtitle>
{{ item.raw.progress }}% {{ $t("language-dialog.translated") }}
</v-list-item-subtitle>
<template #item="{ item, props }">
<v-list-item v-bind="props">
<v-list-item-subtitle>
{{ item.raw.progress }}% {{ $t("language-dialog.translated") }}
</v-list-item-subtitle>
</v-list-item>
</template>
</v-autocomplete>

View File

@@ -47,7 +47,7 @@
import { useGroupSelf } from "~/composables/use-groups";
export default defineNuxtComponent({
middleware: ["sidebase-auth", "can-manage-only"],
middleware: ["can-manage-only"],
setup() {
const { group, actions: groupActions } = useGroupSelf();
const i18n = useI18n();

View File

@@ -124,10 +124,11 @@ const MIGRATIONS = {
plantoeat: "plantoeat",
recipekeeper: "recipekeeper",
tandoor: "tandoor",
cookn: "cookn",
};
export default defineNuxtComponent({
middleware: ["sidebase-auth", "advanced-only"],
middleware: ["advanced-only"],
setup() {
const i18n = useI18n();
const { $globals } = useNuxtApp();
@@ -185,6 +186,10 @@ export default defineNuxtComponent({
text: i18n.t("migration.tandoor.title"),
value: MIGRATIONS.tandoor,
},
{
text: i18n.t("migration.cookn.title"),
value: MIGRATIONS.cookn,
},
];
const _content: Record<string, MigrationContent> = {
[MIGRATIONS.mealie]: {
@@ -398,6 +403,34 @@ export default defineNuxtComponent({
},
],
},
[MIGRATIONS.cookn]: {
text: i18n.t("migration.cookn.description-long"),
acceptedFileType: ".zip",
tree: [
{
icon: $globals.icons.zip,
title: "cookn.zip",
children: [
{ title: "temp_brand.dsv", icon: $globals.icons.codeJson },
{ title: "temp_chapter_desc.dsv", icon: $globals.icons.codeJson },
{ title: "temp_chapter.dsv", icon: $globals.icons.codeJson },
{ title: "temp_cookBook_desc.dsv", icon: $globals.icons.codeJson },
{ title: "temp_cookBook.dsv", icon: $globals.icons.codeJson },
{ title: "temp_food_brand.dsv", icon: $globals.icons.codeJson },
{ title: "temp_food_group.dsv", icon: $globals.icons.codeJson },
{ title: "temp_food.dsv", icon: $globals.icons.codeJson },
{ title: "temp_ingredient.dsv", icon: $globals.icons.codeJson },
{ title: "temp_media.dsv", icon: $globals.icons.codeJson },
{ title: "temp_nutrient.dsv", icon: $globals.icons.codeJson },
{ title: "temp_recipe_desc.dsv", icon: $globals.icons.codeJson },
{ title: "temp_recipe.dsv", icon: $globals.icons.codeJson },
{ title: "temp_unit_equivalent.dsv", icon: $globals.icons.codeJson },
{ title: "temp_unit.dsv", icon: $globals.icons.codeJson },
{ title: "images", icon: $globals.icons.fileImage },
],
},
],
},
};
function addIdToNode(counter: number, node: TreeNode): number {

View File

@@ -52,7 +52,6 @@ import { useUserApi } from "~/composables/api";
import type { ReportOut } from "~/lib/api/types/reports";
export default defineNuxtComponent({
middleware: "sidebase-auth",
setup() {
const route = useRoute();
const id = route.params.id as string;

View File

@@ -43,7 +43,7 @@ export default defineNuxtComponent({
components: {
HouseholdPreferencesEditor,
},
middleware: ["sidebase-auth", "can-manage-household-only"],
middleware: ["can-manage-household-only"],
setup() {
const { household, actions: householdActions } = useHouseholdSelf();
const i18n = useI18n();

View File

@@ -75,7 +75,6 @@ import { useMealplans } from "~/composables/use-group-mealplan";
import { useUserMealPlanPreferences } from "~/composables/use-users/preferences";
export default defineNuxtComponent({
middleware: ["sidebase-auth"],
setup() {
const route = useRoute();
const router = useRouter();

View File

@@ -183,7 +183,6 @@ export default defineNuxtComponent({
GroupMealPlanRuleForm,
RecipeChips,
},
middleware: ["sidebase-auth"],
props: {
modelValue: {
type: Boolean,

View File

@@ -124,7 +124,6 @@ export default defineNuxtComponent({
components: {
UserAvatar,
},
middleware: ["sidebase-auth"],
setup() {
const $auth = useMealieAuth();
const api = useUserApi();

View File

@@ -199,7 +199,7 @@ interface OptionSection {
}
export default defineNuxtComponent({
middleware: ["sidebase-auth", "advanced-only"],
middleware: ["advanced-only"],
setup() {
const api = useUserApi();
const i18n = useI18n();

View File

@@ -75,7 +75,7 @@ import { alert } from "~/composables/use-toast";
export default defineNuxtComponent({
components: { GroupWebhookEditor },
middleware: ["sidebase-auth", "advanced-only"],
middleware: ["advanced-only"],
setup() {
const i18n = useI18n();
const { actions, webhooks } = useGroupWebhooks();

View File

@@ -3,6 +3,8 @@
</template>
<script lang="ts">
import useDefaultActivity from "~/composables/use-default-activity";
import { useUserActivityPreferences } from "~/composables/use-users/preferences";
import { useAsyncKey } from "~/composables/use-utils";
import type { AppInfo, AppStartupInfo } from "~/lib/api/types/admin";
@@ -15,6 +17,8 @@ export default defineNuxtComponent({
const $auth = useMealieAuth();
const { $axios } = useNuxtApp();
const router = useRouter();
const activityPreferences = useUserActivityPreferences();
const { getDefaultActivityRoute } = useDefaultActivity();
const groupSlug = computed(() => $auth.user.value?.groupSlug);
async function redirectPublicUserToDefaultGroup() {
@@ -32,9 +36,16 @@ export default defineNuxtComponent({
const data = await $axios.get<AppStartupInfo>("/api/app/about/startup-info");
const isDemo = data.data.isDemo;
const isFirstLogin = data.data.isFirstLogin;
const defaultActivityRoute = getDefaultActivityRoute(
activityPreferences.value.defaultActivity,
groupSlug.value,
);
if (!isDemo && isFirstLogin && $auth.user.value?.admin) {
router.push("/admin/setup");
}
else if (defaultActivityRoute) {
router.push(defaultActivityRoute);
}
else {
router.push(`/g/${groupSlug.value}`);
}

View File

@@ -217,6 +217,7 @@ import { usePasswordField } from "~/composables/use-passwords";
import { alert } from "~/composables/use-toast";
import { useAsyncKey } from "~/composables/use-utils";
import type { AppStartupInfo } from "~/lib/api/types/admin";
import { useUserActivityPreferences } from "~/composables/use-users/preferences";
export default defineNuxtComponent({
setup() {
@@ -233,6 +234,8 @@ export default defineNuxtComponent({
const groupSlug = computed(() => $auth.user.value?.groupSlug);
const isDemo = ref(false);
const isFirstLogin = ref(false);
const activityPreferences = useUserActivityPreferences();
const { getDefaultActivityRoute } = useDefaultActivity();
useSeoMeta({
title: i18n.t("user.login"),
@@ -253,9 +256,16 @@ export default defineNuxtComponent({
whenever(
() => loggedIn.value && groupSlug.value,
() => {
const defaultActivityRoute = getDefaultActivityRoute(
activityPreferences.value.defaultActivity,
groupSlug.value,
);
if (!isDemo.value && isFirstLogin.value && $auth.user.value?.admin) {
router.push("/admin/setup");
}
else if (defaultActivityRoute) {
router.push(defaultActivityRoute);
}
else {
router.push(`/g/${groupSlug.value || ""}`);
}
@@ -304,7 +314,6 @@ export default defineNuxtComponent({
oidcLoggingIn.value = true;
try {
await $auth.oauthSignIn();
window.location.href = "/"; // Reload the app to get the new user
}
catch (error) {
await router.replace("/login?direct=1");
@@ -330,8 +339,7 @@ export default defineNuxtComponent({
formData.append("remember_me", String(form.remember));
try {
await $auth.signIn(formData, { redirect: false });
window.location.href = "/"; // Reload the app to get the new user
await $auth.signIn(formData);
}
catch (error) {
console.log(error);

View File

@@ -36,6 +36,34 @@
</v-card-text>
</BaseDialog>
<!-- Reorder Labels -->
<BaseDialog
v-model="reorderLabelsDialog"
:icon="$globals.icons.tagArrowUp"
:title="$t('shopping-list.reorder-labels')"
:submit-icon="$globals.icons.save"
:submit-text="$t('general.save')"
can-submit
@submit="saveLabelOrder"
@close="cancelLabelOrder"
>
<v-card height="fit-content" max-height="70vh" style="overflow-y: auto;">
<VueDraggable
v-if="localLabels"
v-model="localLabels"
handle=".handle"
:delay="250"
:delay-on-touch-only="true"
class="my-2"
@update:model-value="updateLabelOrder"
>
<div v-for="(labelSetting, index) in localLabels" :key="labelSetting.id">
<MultiPurposeLabelSection v-model="localLabels[index]" use-color />
</div>
</VueDraggable>
</v-card>
</BaseDialog>
<BasePageTitle divider>
<template #header>
<v-container class="px-0">
@@ -127,10 +155,7 @@
/>
<!-- Viewer -->
<section
v-if="!edit"
class="py-2"
>
<section v-if="!edit" class="py-2 d-flex flex-column ga-4">
<!-- Create Item -->
<div v-if="createEditorOpen">
<ShoppingListItemEditor
@@ -154,27 +179,15 @@
</BaseButton>
</div>
<div
v-for="(value, key) in itemsByLabel"
:key="key"
class="pb-4"
>
<v-btn
:color="getLabelColor(value[0]) ? getLabelColor(value[0]) : '#959595'"
:style="{
'color': getTextColor(getLabelColor(value[0])),
'letter-spacing': 'normal',
}"
@click="toggleShowLabel(key.toString())"
>
<v-icon>
{{ labelOpenState[key] ? $globals.icons.chevronDown : $globals.icons.chevronRight }}
</v-icon>
{{ key }}
</v-btn>
<v-divider />
<v-expand-transition>
<div v-if="labelOpenState[key]">
<BaseExpansionPanels v-for="(value, key) in itemsByLabel" :key="key" :v-model="0" start-open>
<v-expansion-panel class="shopping-list-section">
<v-expansion-panel-title
:color="getLabelColor(key)"
class="body-1 font-weight-bold section-title"
>
{{ key }}
</v-expansion-panel-title>
<v-expansion-panel-text eager>
<VueDraggable
:model-value="value"
handle=".handle"
@@ -184,107 +197,53 @@
@end="loadingCounter -= 1"
@update:model-value="updateIndexUncheckedByLabel(key.toString(), $event)"
>
<v-lazy
<ShoppingListItem
v-for="(item, index) in value"
:key="item.id"
class="ml-2 my-2"
>
<ShoppingListItem
v-model="value[index]"
:labels="allLabels || []"
:units="allUnits || []"
:foods="allFoods || []"
:recipes="recipeMap"
@checked="saveListItem"
@save="saveListItem"
@delete="deleteListItem(item)"
/>
</v-lazy>
</VueDraggable>
</div>
</v-expand-transition>
</div>
<!-- Reorder Labels -->
<BaseDialog
v-model="reorderLabelsDialog"
:icon="$globals.icons.tagArrowUp"
:title="$t('shopping-list.reorder-labels')"
:submit-icon="$globals.icons.save"
:submit-text="$t('general.save')"
can-submit
@submit="saveLabelOrder"
@close="cancelLabelOrder"
>
<v-card
height="fit-content"
max-height="70vh"
style="overflow-y: auto;"
>
<VueDraggable
v-if="localLabels"
v-model="localLabels"
handle=".handle"
:delay="250"
:delay-on-touch-only="true"
class="my-2"
@update:model-value="updateLabelOrder"
>
<div
v-for="(labelSetting, index) in localLabels"
:key="labelSetting.id"
>
<MultiPurposeLabelSection
v-model="localLabels[index]"
use-color
v-model="value[index]"
class="ml-2 my-2 w-auto"
:labels="allLabels || []"
:units="allUnits || []"
:foods="allFoods || []"
:recipes="recipeMap"
@checked="saveListItem"
@save="saveListItem"
@delete="deleteListItem(item)"
/>
</div>
</VueDraggable>
</v-card>
</BaseDialog>
</VueDraggable>
</v-expansion-panel-text>
</v-expansion-panel>
</BaseExpansionPanels>
<!-- Checked Items -->
<div
v-if="listItems.checked && listItems.checked.length > 0"
class="mt-6"
>
<div class="d-flex">
<div class="flex-grow-1">
<button @click="toggleShowChecked()">
<span>
<v-icon>
{{ showChecked ? $globals.icons.chevronDown : $globals.icons.chevronRight }}
</v-icon>
</span>
{{ $t('shopping-list.items-checked-count', listItems.checked ? listItems.checked.length : 0) }}
</button>
</div>
<div class="justify-end mt-n2">
<BaseButtonGroup
:buttons="[
{
icon: $globals.icons.checkboxBlankOutline,
text: $t('shopping-list.uncheck-all-items'),
event: 'uncheck',
},
{
icon: $globals.icons.delete,
text: $t('shopping-list.delete-checked'),
event: 'delete',
},
]"
@uncheck="openUncheckAll"
@delete="openDeleteChecked"
/>
</div>
</div>
<v-divider class="my-4" />
<v-expand-transition>
<div v-if="showChecked">
<div
v-for="(item, idx) in listItems.checked"
:key="item.id"
>
<v-expansion-panels flat>
<v-expansion-panel v-if="listItems.checked && listItems.checked.length > 0">
<v-expansion-panel-title class="border-solid border-thin py-1">
<div class="d-flex align-center flex-0-1-100">
<div class="flex-1-0">
{{ $t('shopping-list.items-checked-count', listItems.checked ? listItems.checked.length : 0) }}
</div>
<div class="justify-end">
<BaseButtonGroup
:buttons="[
{
icon: $globals.icons.checkboxBlankOutline,
text: $t('shopping-list.uncheck-all-items'),
event: 'uncheck',
},
{
icon: $globals.icons.delete,
text: $t('shopping-list.delete-checked'),
event: 'delete',
},
]"
@uncheck="openUncheckAll"
@delete="openDeleteChecked"
/>
</div>
</div>
</v-expansion-panel-title>
<v-expansion-panel-text eager>
<div v-for="(item, idx) in listItems.checked" :key="item.id">
<ShoppingListItem
v-model="listItems.checked[idx]"
class="strike-through-note"
@@ -296,14 +255,15 @@
@delete="deleteListItem(item)"
/>
</div>
</div>
</v-expand-transition>
</div>
</v-expansion-panel-text>
</v-expansion-panel>
</v-expansion-panels>
</section>
<!-- Recipe References -->
<v-lazy
v-if="shoppingList.recipeReferences && shoppingList.recipeReferences.length > 0"
class="mt-6"
>
<section>
<div>
@@ -316,7 +276,7 @@
? shoppingList.recipeReferences.length
: 0) }}
</div>
<v-divider class="my-4" />
<v-divider />
<RecipeList
:recipes="recipeList"
show-description
@@ -367,14 +327,14 @@
<script lang="ts">
import { VueDraggable } from "vue-draggable-plus";
import RecipeList from "~/components/Domain/Recipe/RecipeList.vue";
import MultiPurposeLabelSection from "~/components/Domain/ShoppingList/MultiPurposeLabelSection.vue";
import ShoppingListItem from "~/components/Domain/ShoppingList/ShoppingListItem.vue";
import RecipeList from "~/components/Domain/Recipe/RecipeList.vue";
import ShoppingListItemEditor from "~/components/Domain/ShoppingList/ShoppingListItemEditor.vue";
import { useFoodStore, useLabelStore, useUnitStore } from "~/composables/store";
import { useShoppingListPreferences } from "~/composables/use-users/preferences";
import { getTextColor } from "~/composables/use-text-color";
import { useShoppingListPage } from "~/composables/shopping-list-page/use-shopping-list-page";
import { useFoodStore, useLabelStore, useUnitStore } from "~/composables/store";
import { getTextColor } from "~/composables/use-text-color";
import { useShoppingListPreferences } from "~/composables/use-users/preferences";
export default defineNuxtComponent({
components: {
@@ -417,8 +377,19 @@ export default defineNuxtComponent({
});
</script>
<style scoped>
<style>
.number-input-container {
max-width: 50px;
}
.shopping-list-section {
.section-title {
font-size: 1rem;
min-height: 48px !important;
}
.v-expansion-panel-text__wrapper {
padding: 0;
}
}
</style>

View File

@@ -131,7 +131,6 @@ import { useShoppingListPreferences } from "~/composables/use-users/preferences"
import type { UserOut } from "~/lib/api/types/user";
export default defineNuxtComponent({
middleware: "sidebase-auth",
setup() {
const $auth = useMealieAuth();
const i18n = useI18n();

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