Compare commits

..

277 Commits

Author SHA1 Message Date
Kuchenpirat
df4fd7ed7f fix: build pull request image only if source is in mealie repo 2025-04-08 18:44:31 +02:00
renovate[bot]
dc1ec4e69a fix(deps): update dependency openai to v1.71.0 (#5322)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-07 18:24:14 -05:00
github-actions[bot]
55af4082e7 chore(auto): Update pre-commit hooks (#5320)
Co-authored-by: boc-the-git <3479092+boc-the-git@users.noreply.github.com>
Co-authored-by: Michael Genson <71845777+michael-genson@users.noreply.github.com>
2025-04-07 15:14:50 +00:00
renovate[bot]
8b059121d1 fix(deps): update dependency lxml to v5.3.2 (#5318)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-07 10:04:04 -05:00
renovate[bot]
5bf3ba0cc2 chore(deps): update dependency ruff to v0.11.4 (#5317)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-04 18:44:17 +00:00
renovate[bot]
d4a1c7f756 fix(deps): update dependency rapidfuzz to v3.13.0 (#5314)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-03 22:49:36 -05:00
renovate[bot]
a06046cf5d fix(deps): update dependency authlib to v1.5.2 (#5308)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-03 13:50:49 -05:00
renovate[bot]
f8c4112c39 fix(deps): update dependency openai to v1.70.0 (#5300)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-03 13:36:25 -05:00
renovate[bot]
e118d24261 fix(deps): update dependency pydantic to v2.11.2 (#5312)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-03 18:17:28 +00:00
renovate[bot]
8f3772ed01 chore(deps): update dependency ruff to v0.11.3 (#5311)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-03 13:04:00 -05:00
Hayden
007d249c20 chore(l10n): New Crowdin updates (#5301) 2025-04-01 13:46:57 +00:00
renovate[bot]
24be42ee88 chore(deps): update dependency mkdocs-material to v9.6.11 (#5304)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-01 08:35:20 -05:00
Hayden
0d605e20fc chore(l10n): New Crowdin updates (#5281) 2025-03-31 18:36:46 +00:00
renovate[bot]
cbfb649d96 chore(deps): update dependency coverage to v7.8.0 (#5297)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-31 01:21:49 +00:00
renovate[bot]
b1341b9102 fix(deps): update dependency apprise to v1.9.3 (#5295)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-31 01:10:46 +00:00
renovate[bot]
6be67a1a98 chore(deps): update dependency rich to v14 (#5294)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-31 00:59:29 +00:00
renovate[bot]
62d2dd1c0d chore(deps): update dependency mkdocs-material to v9.6.10 (#5293)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-30 19:46:11 -05:00
renovate[bot]
5c890f3d0e fix(deps): update dependency alembic to v1.15.2 (#5289)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-30 22:00:49 +00:00
renovate[bot]
d071215f06 fix(deps): update dependency pydantic to v2.11.1 (#5285)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-30 16:49:16 -05:00
renovate[bot]
e5b2ef49b2 fix(deps): update dependency openai to v1.69.0 (#5284)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-30 16:31:47 -05:00
renovate[bot]
766968b97d fix(deps): update dependency sqlalchemy to v2.0.40 (#5283)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-30 20:45:01 +00:00
renovate[bot]
ec0e31f8ec fix(deps): update dependency typing-extensions to v4.13.0 (#5278)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-30 20:30:10 +00:00
renovate[bot]
c911a3190e fix(deps): update dependency python-dotenv to v1.1.0 (#5275)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-30 20:12:34 +00:00
renovate[bot]
c4baf50ae3 chore(deps): update dependency pytest-asyncio to ^0.26.0 (#5274)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-30 19:56:14 +00:00
renovate[bot]
30382b36cb fix(deps): update dependency orjson to v3.10.16 (#5270)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-30 19:35:10 +00:00
renovate[bot]
6b181c122f chore(deps): update dependency coverage to v7.7.1 (#5260)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-30 19:14:33 +00:00
renovate[bot]
54bb39af55 chore(deps): update dependency pylint to v3.3.6 (#5251)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-30 13:52:20 -05:00
Kuchenpirat
b994d27b0c dev: add pull request image build workflow (#5235) 2025-03-30 18:38:01 +00:00
Michael Genson
07cd98c125 fix: Pre-download NLTK during Docker build (#5290) 2025-03-30 09:22:58 +02:00
Hayden
1c6b35a53c chore(l10n): New Crowdin updates (#5262)
Co-authored-by: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com>
2025-03-26 13:56:10 +00:00
Kuchenpirat
7c05d58f26 fix: remove unmaintained ios shortcut (#5280) 2025-03-26 08:36:58 -05:00
github-actions[bot]
6ecba01eb6 chore(auto): Update pre-commit hooks (#5269)
Co-authored-by: boc-the-git <3479092+boc-the-git@users.noreply.github.com>
2025-03-24 13:55:08 +00:00
renovate[bot]
a39f8cdb90 fix(deps): update dependency fastapi to v0.115.12 (#5268)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-24 08:44:05 -05:00
Kuchenpirat
18ebc3de5f fix: update admin scripts paths in docs (#5263) 2025-03-22 10:09:55 -05:00
renovate[bot]
ead4d4c95e chore(deps): update dependency ruff to v0.11.2 (#5258)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-21 15:39:27 +00:00
Hayden
6ae4e67c84 chore(l10n): New Crowdin updates (#5252) 2025-03-21 15:29:07 +00:00
renovate[bot]
e77247441c fix(deps): update dependency openai to v1.68.2 (#5259)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-21 16:18:19 +01:00
renovate[bot]
d55e48cbe0 chore(deps): update dependency ruff to v0.11.1 (#5253)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-21 12:22:58 +01:00
renovate[bot]
94170e3e6c fix(deps): update dependency openai to v1.68.0 (#5254)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-21 11:27:53 +01:00
Hayden
e0e619df5a chore(l10n): New Crowdin updates (#5250) 2025-03-20 13:41:31 +01:00
Hayden
8469aae7ab chore(l10n): New Crowdin updates (#5248) 2025-03-20 12:19:16 +01:00
renovate[bot]
94dd6eab81 fix(deps): update dependency openai to v1.67.0 (#5247)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-20 08:57:23 +01:00
Hayden
8c25bdb62d chore(l10n): New Crowdin updates (#5246) 2025-03-20 08:40:19 +01:00
Hayden
cbbc07cda9 chore(l10n): New Crowdin updates (#5245) 2025-03-19 17:38:30 +00:00
Hayden
6fc9ece191 chore(l10n): New Crowdin updates (#5243) 2025-03-19 17:21:21 +00:00
Kuchenpirat
cd6ccf099b fix: spelling of github (#5244) 2025-03-19 17:08:25 +00:00
renovate[bot]
4f7ee33f1b chore(deps): update dependency pre-commit to v4.2.0 (#5238)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-19 15:45:24 +00:00
github-actions[bot]
9bfee56bd5 docs(auto): Update image tag, for release v2.8.0 (#5236)
Co-authored-by: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com>
2025-03-19 15:34:57 +00:00
renovate[bot]
e5da33e38e chore(deps): update dependency coverage to v7.7.0 (#5227)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-19 08:40:53 -05:00
renovate[bot]
2748db781f fix(deps): update dependency pillow-heif to ^0.22.0 (#5219)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-19 13:27:44 +00:00
renovate[bot]
d9bbf8de30 fix(deps): update dependency sqlalchemy to v2.0.39 (#5204)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-19 13:15:24 +00:00
renovate[bot]
c29f651a36 fix(deps): update dependency openai to v1.66.5 (#5197)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-19 13:03:55 +00:00
renovate[bot]
5e217fc269 fix(deps): update dependency alembic to v1.15.1 (#5178)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-19 07:46:15 -05:00
Michael Genson
0f58ac5b47 fix: "NOT IN" doesn't apply filter properly (#5154) 2025-03-18 18:07:26 +00:00
Hayden
2deb9c276c chore(l10n): New Crowdin updates (#5185)
Co-authored-by: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com>
2025-03-18 16:46:08 +00:00
Michael Genson
f46760755d chore: Bump Ruff to 0.11.0 (#5233) 2025-03-18 15:52:30 +01:00
github-actions[bot]
eca2ba36c8 chore(auto): Update pre-commit hooks (#5229)
Co-authored-by: boc-the-git <3479092+boc-the-git@users.noreply.github.com>
Co-authored-by: Michael Genson <71845777+michael-genson@users.noreply.github.com>
2025-03-17 13:14:37 +00:00
renovate[bot]
cdd8e3aca9 chore(deps): update dependency mkdocs-material to v9.6.9 (#5209)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-17 11:44:15 +00:00
Carter
d724f408cc feat: OIDC: Call userinfo if no claims found in id token (#5228)
Co-authored-by: Michael Genson <71845777+michael-genson@users.noreply.github.com>
2025-03-17 03:05:20 +00:00
Alexandre Boutoille
3b1a6280d6 fix: PostgreSQL capitalization (#5220) 2025-03-16 12:36:32 -05:00
Hayden
974d848ee2 fix: Revert "feat: Update seeding to use new foods list format - round 2" (#5208) 2025-03-12 23:27:18 -05:00
Cameronwyatt
72668e2881 feat: Update seeding to use new foods list format - round 2 (#5189) 2025-03-13 00:30:03 +00:00
Marco H
9e47ade475 docs: faq.md: fix paths to scripts (#5201) 2025-03-11 12:39:09 +00:00
Michael Genson
ad59e653da fix: Case Insensitive Query Filters (#5162) 2025-03-10 10:56:12 +00:00
github-actions[bot]
4ecfd8ec78 chore(auto): Update pre-commit hooks (#5200)
Co-authored-by: boc-the-git <3479092+boc-the-git@users.noreply.github.com>
Co-authored-by: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com>
2025-03-10 09:23:57 +00:00
renovate[bot]
e254dda368 chore(deps): update dependency pylint to v3.3.5 (#5194)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-10 10:13:08 +01:00
Bryce Chidester
7de47004e9 docs: Re-add missing environment variable documentation (#5199) 2025-03-09 21:51:17 +00:00
renovate[bot]
28cc6b8d1e fix(deps): update dependency recipe-scrapers to v15.6.0 (#5198)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-09 15:08:14 -05:00
renovate[bot]
21278cd7fe chore(deps): update dependency ruff to v0.9.10 (#5188)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-07 12:01:47 -06:00
Michael Genson
9a469fe4fd fix: Filter out null chars from OpenAI response (#5187) 2025-03-07 17:34:32 +01:00
Hayden
98472ff471 chore(l10n): New Crowdin updates (#5179) 2025-03-06 18:13:33 +00:00
renovate[bot]
e2b5f4d08c fix(deps): update dependency openai to v1.65.4 (#5182)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-06 13:56:47 +00:00
renovate[bot]
232ad8410c fix(deps): update dependency jinja2 to v3.1.6 [security] (#5183)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-06 07:45:12 -06:00
renovate[bot]
c65bd14d74 fix(deps): update dependency openai to v1.65.3 (#5180)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-04 18:03:26 -06:00
Hayden
774b3123a2 chore(l10n): New Crowdin updates (#5176) 2025-03-04 12:18:39 +01:00
Hayden
40818722ab chore(l10n): New Crowdin updates (#5175) 2025-03-03 17:21:25 -06:00
Hayden
9cf40f89ea chore(l10n): New Crowdin updates (#5174) 2025-03-03 21:50:07 +01:00
Eric Hoffmann
a758406719 fix: Use recipe-parsers nutrients function for nutrition parsing (#5165) 2025-03-03 14:00:17 +00:00
github-actions[bot]
8b3ff9b099 chore(auto): Update pre-commit hooks (#5167)
Co-authored-by: boc-the-git <3479092+boc-the-git@users.noreply.github.com>
2025-03-03 10:37:55 +00:00
renovate[bot]
c4b26fef8c chore(deps): update dependency mkdocs-material to v9.6.7 (#5163)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-03 10:26:53 +00:00
Hayden
ba8b94232a chore(l10n): New Crowdin updates (#5161) 2025-03-03 10:16:34 +00:00
Eric Hoffmann
5f766a8c3f dev: chown commandhistory to correct user during devcontainer creation (#5166) 2025-03-03 05:23:52 +00:00
renovate[bot]
46d28bd96b chore(deps): update dependency pytest to v8.3.5 (#5158)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-02 14:23:02 -06:00
renovate[bot]
d483da6c4c fix(deps): update dependency rapidfuzz to v3.12.2 (#5159)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-02 18:55:55 +00:00
Hayden
a6fd50b1ba chore(l10n): New Crowdin updates (#5149) 2025-03-02 12:47:57 +00:00
renovate[bot]
000ec9475a fix(deps): update dependency fastapi to v0.115.11 (#5150)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-01 22:56:41 +00:00
renovate[bot]
25adfe1a48 fix(deps): update dependency openai to v1.65.2 (#5147)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-01 16:45:44 -06:00
renovate[bot]
6381ac4c7f chore(deps): update dependency mkdocs-material to v9.6.6 (#5141)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-01 15:53:00 +00:00
renovate[bot]
c636a4f73e fix(deps): update dependency fastapi to v0.115.10 (#5139)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-01 09:42:24 -06:00
Hayden
38ab8aa48d chore(l10n): New Crowdin updates (#5145) 2025-03-01 16:30:09 +01:00
Hayden
17f64a5cfa chore(l10n): New Crowdin updates (#5142) 2025-03-01 13:59:55 +01:00
renovate[bot]
d11bdaf235 fix(deps): update dependency authlib to v1.5.1 (#5138)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-28 16:02:49 +00:00
Michael Genson
cfba2fff7e fix(deps): update dependency ingredient-parser-nlp to v2 (#5137) 2025-02-28 15:51:36 +00:00
Hayden
61ae6b3e32 chore(l10n): New Crowdin updates (#5135) 2025-02-28 15:31:54 +00:00
Michael Genson
9c4afb57b8 chore: Renovate Ignore Python Upgrades (#5134) 2025-02-28 14:40:44 +00:00
Michael Genson
b12aea8272 feat: Migrate from CRF++ to Ingredient Parser (a Python package) (#5061) 2025-02-28 15:17:28 +01:00
Hayden
ec1a9d78ac chore(l10n): New Crowdin updates (#5131) 2025-02-28 13:18:28 +00:00
renovate[bot]
8250e793b8 fix(deps): update dependency bcrypt to v4.3.0 (#5127)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-28 13:12:26 +01:00
github-actions[bot]
f3310ddba6 docs(auto): Update image tag, for release v2.7.1 (#5129)
Co-authored-by: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com>
2025-02-28 11:17:24 +00:00
renovate[bot]
d573a9ea5d chore(deps): update dependency ruff to v0.9.9 (#5130)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-28 12:07:53 +01:00
Michael Genson
d24a518bac fix: Remove br encoding from scraper (#5115)
Co-authored-by: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com>
2025-02-28 09:41:31 +00:00
renovate[bot]
46b821d832 fix(deps): update dependency fastapi to v0.115.9 (#5122)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-27 23:48:45 +00:00
renovate[bot]
637bb30e13 chore(deps): update dependency ruff to v0.9.8 (#5112)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-27 23:38:37 +00:00
renovate[bot]
b930ebfb20 fix(deps): update dependency openai to v1.65.1 (#5123)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-27 17:28:11 -06:00
github-actions[bot]
5e2c40731c docs(auto): Update image tag, for release v2.7.0 (#5111)
Co-authored-by: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com>
2025-02-27 16:33:35 +00:00
renovate[bot]
54ae810acc fix(deps): update dependency pydantic-settings to v2.8.1 (#5108)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-27 17:23:50 +01:00
Michael Genson
716c85cc3b fix: Bulk Add Recipes to Shopping List (#5054) 2025-02-27 13:58:40 +00:00
Kuchenpirat
3d1b76bcad fix: update recipe time row direction on small screens (#5107) 2025-02-27 07:48:29 -06:00
Hayden
4843a9a74a chore(l10n): New Crowdin updates (#5106) 2025-02-27 08:12:19 +01:00
Hayden
12aec943dc chore(l10n): New Crowdin updates (#5105) 2025-02-26 17:46:57 +00:00
Kuchenpirat
3b0d6050a2 feat: redesign recipe info card (#5026)
Co-authored-by: Michael Genson <71845777+michael-genson@users.noreply.github.com>
2025-02-26 16:07:12 +00:00
renovate[bot]
3fd3661206 fix(deps): update dependency authlib to v1.5.0 (#5103)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-25 07:54:59 -06:00
Michael Genson
df8dd3fe4a fix: Invalidate Expired Shared Links (#5065) 2025-02-25 13:01:32 +00:00
Chip
a2c6b3f69b docs: Add additional information and tips to Backup & Restore Usage Documentation Page & Shopping List (#4843)
Co-authored-by: boc-the-git <3479092+boc-the-git@users.noreply.github.com>
Co-authored-by: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com>
2025-02-25 12:50:44 +00:00
renovate[bot]
c01593e918 fix(deps): update dependency beautifulsoup4 to v4.13.3 (#5090)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-25 12:59:22 +01:00
Michael Genson
48484e5b1a feat: Better Scraping/More User Agents (#5091) 2025-02-25 10:57:05 +00:00
Hayden
173e8792a6 chore(l10n): New Crowdin updates (#5102) 2025-02-25 11:46:37 +01:00
Hayden
28047d9b58 chore(l10n): New Crowdin updates (#5101) 2025-02-25 09:51:24 +01:00
Hayden
82393b0cd1 chore(l10n): New Crowdin updates (#5100) 2025-02-24 21:13:21 +00:00
Hayden
eea9a6ae16 chore(l10n): New Crowdin updates (#5099) 2025-02-24 17:08:51 +01:00
Hayden
ca05c25b61 chore(l10n): New Crowdin updates (#5098) 2025-02-24 14:42:03 +00:00
github-actions[bot]
af912ebefb chore(auto): Update pre-commit hooks (#5069)
Co-authored-by: boc-the-git <3479092+boc-the-git@users.noreply.github.com>
Co-authored-by: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com>
2025-02-24 14:07:49 +00:00
renovate[bot]
e6b46b21d9 chore(deps): update dependency ruff to v0.9.7 (#5079)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-24 14:58:10 +01:00
miah
a41f8b31f1 feat: Improve Shopping List UI (#4608)
Co-authored-by: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com>
2025-02-24 08:41:04 +00:00
Michael Genson
6271b33b1b fix: Only run migration data fixes on migrations (#5038) 2025-02-24 08:29:12 +00:00
renovate[bot]
09234e3bf0 fix(deps): update dependency openai to v1.64.0 (#5092)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-24 08:06:07 +00:00
Hayden
9f467b702e chore(l10n): New Crowdin updates (#5093) 2025-02-24 08:55:36 +01:00
renovate[bot]
6c156e0e14 fix(deps): update dependency pydantic-settings to v2.8.0 (#5086)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-22 10:52:20 -06:00
renovate[bot]
10818ab0ba fix(deps): update dependency recipe-scrapers to v15.5.1 (#5089)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-22 16:22:27 +00:00
renovate[bot]
0778919134 fix(deps): update dependency recipe-scrapers to v15.5.0 (#5087)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-22 10:11:59 -06:00
Hayden
fb8746e7b8 chore(l10n): New Crowdin updates (#5080) 2025-02-20 20:44:12 +01:00
renovate[bot]
c82d08c0d9 chore(deps): update dependency mkdocs-material to v9.6.5 (#5078)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-19 21:18:47 -06:00
Hayden
be1dc69be6 chore(l10n): New Crowdin updates (#5073) 2025-02-19 22:35:43 +00:00
renovate[bot]
8ea932ef7c chore(deps): update dependency mkdocs-material to v9.6.4 (#5051)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-18 10:27:52 +00:00
renovate[bot]
70a6bc4769 fix(deps): update dependency lxml to v5.3.1 (#5048)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-18 10:17:29 +00:00
renovate[bot]
c765401ac5 fix(deps): update dependency openai to v1.63.2 (#5070)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-18 21:06:59 +11:00
Michael Genson
3b12a62fc6 fix(deps): update dependency openai to v1.63.0 (#5067) 2025-02-16 21:24:59 +01:00
renovate[bot]
c351cf7bd5 chore(deps): update dependency coverage to v7.6.12 (#5042)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-16 13:45:03 -06:00
RMI78
aea5eb3419 feat: support _FILE suffix for docker secrets (again) (#4958)
Co-authored-by: Michael Genson <71845777+michael-genson@users.noreply.github.com>
2025-02-16 10:59:50 -06:00
Michael Genson
cb9008bb5c fix: shorten indexes to fix issues with index limits (#5045) 2025-02-11 15:54:32 +00:00
renovate[bot]
3534e445d8 chore(deps): update dependency ruff to v0.9.6 (#5049)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-11 09:44:49 -06:00
Michael Chisholm
c0ab7673ba dev: Create a Python package, build Docker images from it (#4551)
Co-authored-by: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com>
Co-authored-by: Michael Genson <71845777+michael-genson@users.noreply.github.com>
Co-authored-by: Hayden <64056131+hay-kot@users.noreply.github.com>
2025-02-11 09:28:40 -06:00
github-actions[bot]
abf73e08ec chore(auto): Update pre-commit hooks (#5047)
Co-authored-by: boc-the-git <3479092+boc-the-git@users.noreply.github.com>
Co-authored-by: Michael Genson <71845777+michael-genson@users.noreply.github.com>
2025-02-10 13:29:35 +00:00
Hayden
c4df8f0611 chore(l10n): New Crowdin updates (#5046) 2025-02-10 11:06:55 +02:00
renovate[bot]
b28eefab77 fix(deps): update dependency sqlalchemy to v2.0.38 (#5030)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-08 08:11:00 -06:00
renovate[bot]
6f3a139efd chore(deps): update dependency ruff to v0.9.5 (#5029)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-08 11:17:13 +00:00
renovate[bot]
790f4a9b9a chore(deps): update dependency mkdocs-material to v9.6.3 (#5031)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-08 22:07:12 +11:00
Michael Genson
c7c87068bf chore: Remove Warnings (#5039) 2025-02-07 23:42:43 +01:00
renovate[bot]
f48dafd855 fix(deps): update dependency pydantic to v2.10.6 (#4940)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-07 13:51:27 -06:00
Hayden
273f628acd chore(l10n): New Crowdin updates (#5032) 2025-02-07 14:58:28 +01:00
github-actions[bot]
a8653ea904 docs(auto): Update image tag, for release v2.6.0 (#5022)
Co-authored-by: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com>
2025-02-06 08:38:46 +00:00
renovate[bot]
0093627adb fix(deps): update dependency beautifulsoup4 to v4.13.3 (#5009)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-06 09:29:10 +01:00
renovate[bot]
2d73c703cb fix(deps): update dependency openai to v1.61.1 (#5020)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-05 21:40:03 +00:00
Hayden
10315fe8f7 chore(l10n): New Crowdin updates (#5021)
Co-authored-by: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com>
2025-02-05 21:29:56 +00:00
renovate[bot]
1f7d5a57af chore(deps): update dependency mypy to v1.15.0 (#5017)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-05 14:21:39 +01:00
Hayden
6d22df7b95 chore(l10n): New Crowdin updates (#5018) 2025-02-05 11:16:20 +01:00
Hayden
f5ddcdf193 chore(l10n): New Crowdin updates (#5016) 2025-02-04 17:36:45 +01:00
renovate[bot]
36f6917308 chore(deps): update dependency mkdocs-material to v9.6.2 (#5011)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-03 18:34:00 +01:00
github-actions[bot]
53b5df92ae chore(auto): Update pre-commit hooks (#5008)
Co-authored-by: boc-the-git <3479092+boc-the-git@users.noreply.github.com>
Co-authored-by: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com>
2025-02-03 11:31:16 +00:00
renovate[bot]
736352af5f chore(deps): update dependency mkdocs-material to v9.6.1 (#4992)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-03 12:21:36 +01:00
renovate[bot]
41940b8003 fix(deps): update dependency openai to v1.61.0 (#4995)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-01 09:15:42 +01:00
Hayden
641d24aa1e fix: revert "feat: Add new labels and foods for en-US language" (#4996) 2025-01-31 22:46:57 -06:00
Cameronwyatt
fb08a11ffe feat: Add new labels and foods for en-US language
Update all locale seeding files and seeding logic to parse the new format Only add new labels, units, and foods during seeding (checking against existing names)
2025-02-01 02:17:43 +00:00
renovate[bot]
ba26378abc fix(deps): update dependency rapidfuzz to v3.12.1 (#4990)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-30 19:27:58 -06:00
Hayden
2a4b0d3d8b chore(l10n): New Crowdin updates (#4991) 2025-01-30 18:52:37 -06:00
renovate[bot]
af4b3fa83d fix(deps): update dependency fastapi to v0.115.8 (#4989)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-30 17:40:55 -06:00
renovate[bot]
564012c53d fix(deps): update dependency authlib to v1.4.1 (#4971)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-30 22:55:14 +00:00
renovate[bot]
2316a3fef9 chore(deps): update dependency ruff to v0.9.4 (#4988)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-30 16:43:59 -06:00
PancakeZik
a52fda72d6 fix: Fixed LastMade recipes sorting order (#4980)
Co-authored-by: Michael Genson <71845777+michael-genson@users.noreply.github.com>
2025-01-30 10:33:58 +01:00
Michael Genson
cb05adeb48 fix: Remove API Tokens from User APIs (#4985) 2025-01-29 19:52:12 +00:00
Felix Schneider
f2eadd2908 fix: Ensure bring api docs are shown (PR 4920) (#4948)
Co-authored-by: Hayden <64056131+hay-kot@users.noreply.github.com>
2025-01-29 12:10:18 -06:00
renovate[bot]
4229061377 chore(deps): update dependency pytest-asyncio to v0.25.3 (#4972)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-29 10:08:12 +01:00
renovate[bot]
970ed1da7b chore(deps): update dependency pylint to v3.3.4 (#4970)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-29 09:11:18 +01:00
Hayden
dd9d9b85c1 chore(l10n): New Crowdin updates (#4975) 2025-01-29 08:15:16 +01:00
Hayden
6001d679e7 chore(l10n): New Crowdin updates (#4968)
Co-authored-by: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com>
2025-01-28 07:41:25 +00:00
renovate[bot]
02cf53340b fix(deps): update dependency openai to v1.60.2 (#4967)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-28 08:31:55 +01:00
github-actions[bot]
95042f1d40 chore(auto): Update pre-commit hooks (#4965)
Co-authored-by: boc-the-git <3479092+boc-the-git@users.noreply.github.com>
Co-authored-by: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com>
2025-01-27 08:01:18 +00:00
Michael Genson
34245687a5 feat: Add Servings/Yield to Recipe Actions (#4952)
Co-authored-by: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com>
2025-01-27 07:37:09 +00:00
Hayden
7e5c750231 chore(l10n): New Crowdin updates (#4953) 2025-01-27 08:19:45 +01:00
Cody
93c2df41c3 feat: Shopping list UI overhaul - three dot menu (#4415)
Co-authored-by: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com>
2025-01-26 14:04:40 +00:00
James Elliott
1e69577d12 docs: update oidcv2 authelia link (#4942)
Co-authored-by: Michael Genson <71845777+michael-genson@users.noreply.github.com>
2025-01-25 01:48:34 +00:00
renovate[bot]
cbafc28fa1 fix(deps): update dependency openai to v1.60.1 (#4941)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-24 22:59:56 +01:00
renovate[bot]
8622e19502 chore(deps): update dependency ruff to v0.9.3 (#4939)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-23 15:14:55 -06:00
Hayden
2fee1778ed chore(l10n): New Crowdin updates (#4938) 2025-01-23 21:42:22 +01:00
renovate[bot]
2284ecb226 fix(deps): update dependency fastapi to v0.115.7 (#4935)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-23 11:22:02 -06:00
github-actions[bot]
2716260473 docs(auto): Update image tag, for release v2.5.0 (#4933)
Co-authored-by: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com>
2025-01-22 21:00:40 +00:00
Hayden
0b89ab1a95 chore(l10n): New Crowdin updates (#4934) 2025-01-22 14:51:47 -06:00
renovate[bot]
d2ced50fcc fix(deps): update dependency openai to v1.60.0 (#4932)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-22 17:47:55 +01:00
Kuchenpirat
bf616f9db5 fix: prevent users from updating their own household privileges (#4928)
Co-authored-by: Michael Genson <71845777+michael-genson@users.noreply.github.com>
2025-01-22 16:06:41 +00:00
Kuchenpirat
8cd2da0abb fix: prevent recipe sharing from different group (#4929) 2025-01-22 09:51:29 -06:00
Hayden
c74ba0eca1 chore(l10n): New Crowdin updates (#4926) 2025-01-21 20:29:01 +00:00
Felix Schneider
17bed60399 docs: Add community guide for integrating the Mealie-Bring-API (#4920) 2025-01-21 16:44:01 +00:00
renovate[bot]
7a2f91eb32 chore(deps): update dependency pre-commit to v4.1.0 (#4922)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-21 10:53:32 +01:00
Chip
9b36d08948 docs: Add to FAQ: When / how to use Linked Ingredients (#4897)
Co-authored-by: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com>
2025-01-20 16:29:15 +00:00
renovate[bot]
5105c42abe fix(deps): update dependency openai to v1.59.9 (#4919)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-20 16:09:30 +00:00
github-actions[bot]
b040778c53 chore(auto): Update pre-commit hooks (#4917)
Co-authored-by: boc-the-git <3479092+boc-the-git@users.noreply.github.com>
2025-01-20 15:58:29 +00:00
Michael Genson
0d96ec3858 fix: Show All Recipes in Cookbook Regardless of Sort (#4908)
Co-authored-by: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com>
2025-01-20 13:01:34 +00:00
renovate[bot]
c096605fc9 fix(deps): update dependency orjson to v3.10.15 (#4911)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-19 20:25:39 -06:00
renovate[bot]
96615b17c9 fix(deps): update dependency alembic to v1.14.1 (#4915)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-20 01:24:06 +00:00
renovate[bot]
689f31a4da fix(deps): update dependency openai to v1.59.8 (#4909)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-18 09:28:41 -06:00
renovate[bot]
f89e038769 chore(deps): update dependency mkdocs-material to v9.5.50 (#4910)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-18 00:17:13 -06:00
Hayden
c979df1372 chore(l10n): New Crowdin updates (#4906) 2025-01-16 16:57:52 +01:00
renovate[bot]
2b124e7951 chore(deps): update dependency ruff to v0.9.2 (#4905)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-16 09:12:13 -06:00
Borriborri
07bbda808f fix: PWA - Allow CORS and add UseCredentials to nuxt.config.js (#4902)
Co-authored-by: Michael Genson <71845777+michael-genson@users.noreply.github.com>
2025-01-15 21:20:29 +00:00
renovate[bot]
04eeaa5acf fix(deps): update dependency aniso8601 to v10 (#4874)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-15 15:10:44 -06:00
John Corser
6097ff2a34 feat: add delete option to three dots menu (#4842)
Co-authored-by: John Corser <xss@amazon.com>
Co-authored-by: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com>
2025-01-15 16:49:21 +00:00
Hayden
b5dfaf12f1 chore(l10n): New Crowdin updates (#4900) 2025-01-15 15:59:16 +00:00
Kuchenpirat
b8266db218 docs: remove titles from within individual FAQs (#4899) 2025-01-15 09:49:14 -06:00
renovate[bot]
67fe739b52 fix(deps): update dependency recipe-scrapers to v15.4.0 (#4898)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-15 00:16:07 +00:00
gpotter@gmail.com
203218a3d5 fix: Refresh recipe section when clicking card tag chip (#4810)
Co-authored-by: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com>
2025-01-14 18:18:16 +01:00
Shlok Sheth
4b992afc67 fix: Recipe comments display a username/id rather than … (#4726)
Co-authored-by: Kuchenpirat <jojow@gmx.net>
Co-authored-by: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com>
2025-01-14 16:00:23 +00:00
Hayden
376c14be9a chore(l10n): New Crowdin updates (#4896) 2025-01-14 15:50:47 +00:00
Kuchenpirat
5e734548a2 docs: move faq into details / spoilers (#4891) 2025-01-14 09:40:51 -06:00
Nate Hamm
aed93ce1f4 fix: Preserve orientation when converting to .webp (#4803)
Co-authored-by: Hayden <64056131+hay-kot@users.noreply.github.com>
2025-01-14 04:56:07 +00:00
renovate[bot]
d7f460be0f chore(deps): update dependency ruff to v0.9.1 (#4889)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-13 17:45:56 +01:00
Michael Genson
e9892aba89 feat: Move "on hand" and "last made" to household (#4616)
Co-authored-by: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com>
2025-01-13 17:19:49 +01:00
renovate[bot]
e565b919df fix(deps): update dependency openai to v1.59.7 (#4890)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-13 16:57:35 +01:00
renovate[bot]
2c2de1e95b chore(deps): update dependency ruff to ^0.9.0 (#4871)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Michael Genson <71845777+michael-genson@users.noreply.github.com>
Co-authored-by: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com>
2025-01-13 15:43:55 +00:00
github-actions[bot]
ea0bec2336 chore(auto): Update pre-commit hooks (#4886)
Co-authored-by: boc-the-git <3479092+boc-the-git@users.noreply.github.com>
Co-authored-by: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com>
2025-01-13 15:31:42 +00:00
Chip
7f99e2fc36 docs: Fix Spelling Errors on Nutritional Values (#4888) 2025-01-13 15:19:27 +00:00
Chip
2e13f33eb1 docs: Update FAQ to include Nutritional Values and enabling per recipe / household (#4887)
Co-authored-by: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com>
2025-01-13 14:39:42 +01:00
Hayden
dde93e78c9 chore(l10n): New Crowdin updates (#4882) 2025-01-12 17:49:18 +01:00
Hayden
e50299e7ce chore(l10n): New Crowdin updates (#4877) 2025-01-11 18:19:37 +01:00
renovate[bot]
2be4bd1f7c fix(deps): update dependency sqlalchemy to v2.0.37 (#4873)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-11 10:58:59 +00:00
renovate[bot]
398b41ed23 fix(deps): update dependency openai to v1.59.6 (#4872)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-11 21:48:47 +11:00
Hayden
25bd742903 chore(l10n): New Crowdin updates (#4875) 2025-01-10 23:07:46 +01:00
renovate[bot]
9918d36a1a chore(deps): update dependency pytest-asyncio to v0.25.2 (#4863)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-09 11:55:33 -06:00
renovate[bot]
357e45c264 fix(deps): update dependency pydantic to v2.10.5 (#4870)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-09 16:40:18 +00:00
renovate[bot]
bfa3a3e826 fix(deps): update dependency apprise to v1.9.2 (#4867)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-09 16:27:41 +00:00
Hayden
b45f54150b chore(l10n): New Crowdin updates (#4869) 2025-01-09 10:15:06 -06:00
renovate[bot]
b5e1debabc fix(deps): update dependency orjson to v3.10.14 (#4865)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-08 18:28:22 +00:00
renovate[bot]
406ff384c9 fix(deps): update dependency openai to v1.59.5 (#4864)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-08 12:16:04 -06:00
Hayden
a12e4fd5bb chore(l10n): New Crowdin updates (#4862) 2025-01-08 14:04:20 +00:00
renovate[bot]
d48d2c24af fix(deps): update dependency pydantic-settings to v2.7.1 (#4805)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-07 16:03:37 -06:00
Kuchenpirat
0f7c1d6a14 fix: remove kitchen timer (#4857) 2025-01-07 19:19:30 +00:00
Kuchenpirat
22f306a384 feat: add make_admin script (#4853) 2025-01-07 17:38:01 +00:00
Kuchenpirat
688d07a5c8 fix: remove edit scale icon when not scalable (#4849) 2025-01-07 17:26:36 +00:00
Kuchenpirat
d3c6106566 dev: remove PR type from PR description (#4847) 2025-01-07 11:16:12 -06:00
renovate[bot]
4d21900dff fix(deps): update dependency openai to v1.59.4 (#4855)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-07 17:08:56 +01:00
gpotter@gmail.com
795c2cf575 fix: Allow scraping calories as number (#4854)
Co-authored-by: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com>
2025-01-07 15:55:59 +00:00
Hayden
eafb7b9ffc chore(l10n): New Crowdin updates (#4852) 2025-01-07 13:48:27 +00:00
github-actions[bot]
d0508f7ca4 docs(auto): Update image tag, for release v2.4.2 (#4845)
Co-authored-by: boc-the-git <3479092+boc-the-git@users.noreply.github.com>
2025-01-07 09:02:06 +00:00
renovate[bot]
f2e1289ab0 fix(deps): update dependency pillow to v11.1.0 (#4814)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-07 19:51:07 +11:00
github-actions[bot]
92ab103b3a chore(auto): Update pre-commit hooks (#4838)
Co-authored-by: boc-the-git <3479092+boc-the-git@users.noreply.github.com>
2025-01-06 16:01:38 +00:00
Hayden
dec67f6ef9 chore(l10n): New Crowdin updates (#4840) 2025-01-06 16:13:32 +01:00
Kuchenpirat
932473d0ff fix: RecipeActionMenu location (#4835) 2025-01-06 03:04:38 +00:00
David Pearson
288bb65d67 fix: Autocomplete Accessibility on Login form (#4837) 2025-01-05 21:28:19 +00:00
renovate[bot]
cb1dbe34fa chore(deps): update dependency ruff to v0.8.6 (#4816)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-05 21:41:54 +01:00
renovate[bot]
4a14403274 chore(deps): update dependency pytest-asyncio to v0.25.1 (#4813)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-05 21:21:44 +01:00
Hayden
df04b23c88 chore(l10n): New Crowdin updates (#4831) 2025-01-05 20:20:47 +01:00
renovate[bot]
a6b413b431 fix(deps): update dependency openai to v1.59.3 (#4826)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-05 13:06:41 +01:00
Hayden
041d7d81fa chore(l10n): New Crowdin updates (#4827) 2025-01-04 15:11:20 +01:00
renovate[bot]
02197677b7 fix(deps): update dependency openai to v1.59.2 (#4823)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-03 20:59:35 +01:00
Hayden
0636816167 chore(l10n): New Crowdin updates (#4821) 2025-01-03 16:55:42 +01:00
Hayden
8b31257617 chore(l10n): New Crowdin updates (#4815) 2025-01-02 14:34:50 +01:00
Hayden
825914a4bd chore(l10n): New Crowdin updates (#4801) 2024-12-30 20:18:11 -06:00
renovate[bot]
fb5f13991a fix(deps): update dependency orjson to v3.10.13 (#4791)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-30 17:40:53 -06:00
VTerret
72b0f11b72 fix: 3892 missing parameter documentation (#4577)
Co-authored-by: vterret <vterret@wps.webhelp.com>
2024-12-30 23:18:58 +00:00
Nate Hamm
78ab232516 fix: SyntaxWarning for Escape Characters in String Literals (#4792) 2024-12-30 21:31:02 +00:00
Dan Webb
716c5c1d87 chore: Add OIDC debug logging (#4658)
Signed-off-by: Dan Webb <dan.webb@damacus.io>
2024-12-30 21:20:15 +00:00
renovate[bot]
5d33694bc6 chore(deps): update dependency mypy to v1.14.1 (#4797)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-30 12:16:09 -06:00
Hayden
23a85f51d2 chore(l10n): New Crowdin updates (#4787) 2024-12-28 16:17:34 +00:00
Hayden
43b4e4b028 chore(l10n): New Crowdin updates (#4784) 2024-12-27 17:29:26 +01:00
renovate[bot]
251544b2c5 chore(deps): update dependency coverage to v7.6.10 (#4781)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-26 15:53:57 -06:00
Hayden
c0b531030f chore(l10n): New Crowdin updates (#4774) 2024-12-25 05:04:31 +00:00
github-actions[bot]
f7b78783ec chore(auto): Update pre-commit hooks (#4769)
Co-authored-by: boc-the-git <3479092+boc-the-git@users.noreply.github.com>
2024-12-24 05:13:54 +00:00
renovate[bot]
bca80dcc53 chore(deps): update dependency pylint to v3.3.3 (#4772)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-23 23:02:53 -06:00
Hayden
9e25e58378 chore(l10n): New Crowdin updates (#4764) 2024-12-22 17:39:41 +01:00
renovate[bot]
4c4e12a794 fix(deps): update dependency jinja2 to v3.1.5 (#4760)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-21 17:25:01 -06:00
Hayden
a3f0506ba3 chore(l10n): New Crowdin updates (#4759) 2024-12-21 16:34:18 +00:00
renovate[bot]
f46e730eb5 chore(deps): update dependency mypy to v1.14.0 (#4753)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-20 14:48:20 -06:00
Hayden
a2e54aaefc chore(l10n): New Crowdin updates (#4754) 2024-12-20 10:43:11 -06:00
renovate[bot]
2855171fda fix(deps): update dependency authlib to v1.4.0 (#4752)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-20 10:01:02 -06:00
Hayden
209e932482 chore(l10n): New Crowdin updates (#4751)
Co-authored-by: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com>
2024-12-19 17:48:30 +00:00
renovate[bot]
f31c8f4dac chore(deps): update dependency ruff to v0.8.4 (#4750)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-19 10:52:04 -06:00
github-actions[bot]
999b19d148 docs(auto): Update image tag, for release v2.4.1 (#4746)
Co-authored-by: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com>
2024-12-18 21:29:01 +00:00
renovate[bot]
7d061d428f fix(deps): update dependency pydantic to v2.10.4 (#4747)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-18 15:17:50 -06:00
321 changed files with 17759 additions and 13125 deletions

View File

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

View File

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

View File

@@ -20,20 +20,6 @@
-->
## What type of PR is this?
_(REQUIRED)_
<!--
Delete any of the following that do not apply:
-->
- feature
- bug
- documentation
- cleanup
- dev (Internal development)
## What this PR does / why we need it:
_(REQUIRED)_

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

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

View File

@@ -18,11 +18,18 @@ jobs:
cache-dependency-path: ./tests/e2e/yarn.lock
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Retrieve Python package
uses: actions/download-artifact@v4
with:
name: backend-dist
path: dist
- name: Build Image
uses: docker/build-push-action@v5
with:
file: ./docker/Dockerfile
context: .
build-contexts: |
packages=dist
push: false
load: true
tags: mealie:e2e

View File

@@ -18,13 +18,19 @@ concurrency:
jobs:
backend-tests:
name: "Backend Server Tests"
uses: ./.github/workflows/partial-backend.yml
uses: ./.github/workflows/test-backend.yml
frontend-tests:
name: "Frontend and End-to-End Tests"
uses: ./.github/workflows/partial-frontend.yml
name: "Frontend Tests"
uses: ./.github/workflows/test-frontend.yml
build-release:
build-package:
name: Build Package
uses: ./.github/workflows/build-package.yml
with:
tag: nightly
publish:
permissions:
contents: read
packages: write
@@ -35,10 +41,11 @@ jobs:
id-token: write
name: Build Tagged Release
if: github.repository == 'mealie-recipes/mealie'
uses: ./.github/workflows/partial-builder.yml
uses: ./.github/workflows/publish.yml
needs:
- frontend-tests
- backend-tests
- build-package
with:
tag: nightly
secrets:
@@ -49,7 +56,7 @@ jobs:
name: Notify Discord
if: github.repository == 'mealie-recipes/mealie'
needs:
- build-release
- publish
runs-on: ubuntu-latest
steps:
- name: Discord notification

View File

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

View File

@@ -16,20 +16,16 @@ jobs:
backend-tests:
name: "Backend Server Tests"
uses: ./.github/workflows/partial-backend.yml
uses: ./.github/workflows/test-backend.yml
frontend-tests:
name: "Frontend and End-to-End Tests"
uses: ./.github/workflows/partial-frontend.yml
name: "Frontend Tests"
uses: ./.github/workflows/test-frontend.yml
container-scanning:
name: "Trivy Container Scanning"
uses: ./.github/workflows/partial-trivy-container-scanning.yml
end-to-end:
name: "End-to-End Tests"
uses: ./.github/workflows/e2e.yml
code-ql:
name: "CodeQL"
uses: ./.github/workflows/codeql.yml
@@ -37,3 +33,33 @@ jobs:
actions: read
contents: read
security-events: write
build-package:
name: "Build Python package"
uses: ./.github/workflows/build-package.yml
with:
tag: e2e
end-to-end:
name: "End-to-End Tests"
needs: build-package
uses: ./.github/workflows/e2e.yml
publish-image:
name: "Publish PR Image"
if: contains(github.event.pull_request.labels.*.name, 'build-image') && github.repository == 'mealie-recipes/mealie'
permissions:
contents: read
packages: write
# The id-token write permission is needed to connect to Depot.dev
# as part of the partial-builder.yml action. It needs to be declared
# in the parent action, as noted here:
# https://github.com/orgs/community/discussions/76409#discussioncomment-8131390
id-token: write
needs: build-package
uses: ./.github/workflows/publish.yml
with:
tag: pr-${{ github.event.pull_request.number }}
secrets:
DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}

View File

@@ -7,13 +7,19 @@ on:
jobs:
backend-tests:
name: "Backend Server Tests"
uses: ./.github/workflows/partial-backend.yml
uses: ./.github/workflows/test-backend.yml
frontend-tests:
name: "Frontend and End-to-End Tests"
uses: ./.github/workflows/partial-frontend.yml
name: "Frontend Tests"
uses: ./.github/workflows/test-frontend.yml
build-release:
build-package:
name: Build Package
uses: ./.github/workflows/build-package.yml
with:
tag: release
publish:
permissions:
contents: read
packages: write
@@ -23,10 +29,11 @@ jobs:
# https://github.com/orgs/community/discussions/76409#discussioncomment-8131390
id-token: write
name: Build Tagged Release
uses: ./.github/workflows/partial-builder.yml
uses: ./.github/workflows/publish.yml
needs:
- backend-tests
- frontend-tests
- build-package
with:
tag: ${{ github.event.release.tag_name }}
tags: |
@@ -39,7 +46,7 @@ jobs:
notify-discord:
name: Notify Discord
needs:
- build-release
- publish
runs-on: ubuntu-latest
steps:
- name: Discord notification
@@ -52,7 +59,7 @@ jobs:
update-image-tags:
name: Update image tag in sample docker-compose files
needs:
- build-release
- publish
runs-on: ubuntu-latest
permissions:
contents: write

View File

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

View File

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

7
.gitignore vendored
View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,8 @@
!!! info
This guide was submitted by a community member. Find something wrong? Submit a PR to get it fixed!
Mealie supports adding the ingredients of a recipe to your [Bring](https://www.getbring.com/) shopping list, as you can
see [here](https://docs.mealie.io/documentation/getting-started/features/#recipe-actions).
However, for this to work, your Mealie instance needs to be exposed to the open Internet so that the Bring servers can access its information. If you don't want your server to be publicly accessible for security reasons, you can use the [Mealie-Bring-API](https://github.com/felixschndr/mealie-bring-api) written by a community member. This integration is entirely local and does not require any service to be exposed to the Internet.
This is a small web server that runs locally next to your Mealie instance, and instead of Bring pulling the data from you, it pushes the data to Bring. [Check out the project](https://github.com/felixschndr/mealie-bring-api) for more information and installation instructions.

View File

@@ -1,82 +0,0 @@
# Using iOS Shortcuts with Mealie
!!! info
This guide was submitted by a community member. Find something wrong? Submit a PR to get it fixed!
Don't know what an iOS shortcut is? Neither did I! Experienced iOS users may already be familiar with this utility but for the uninitiated, here is the official Apple explanation:
> A shortcut is a quick way to get one or more tasks done with your apps. The Shortcuts app lets you create your own shortcuts with multiple steps. For example, build a “Surf Time” shortcut that grabs the surf report, gives an ETA to the beach, and launches your surf music playlist.
Basically it is a visual scripting language that lets a user build an automation in a guided fashion. The automation can be [shared with anyone](https://www.icloud.com/shortcuts/94aa272af5ff4d2c8fe5e13a946f89a9) but if it is a user creation, you'll have to jump through a few hoops to make an untrusted automation work on your device.
## Setup Video
The following YouTube video walks through setting up the shortcut in 3 minutes for those who prefer following along visually.
<iframe width="560" height="315" src="https://www.youtube.com/embed/XZk6S1MVUrE?si=HGH07RbK-Ip_1qFz" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
## Guide
### Prerequisites
Before setting up the shortcut, make sure you have the following information ready and easily accessable on your Apple device.
1. The URL of your Mealie instance
2. An API Key for your user
3. A Gemini API Key from [Google AI Studio](https://makersuite.google.com)
!!! note
A Gemini API Key is not required for importing URLs from Safari or your Camera, however you will not be able to take a photo of a recipe and import it without a Gemini key.
Google AI Studio is currently only available in [certain countries and languages](https://ai.google.dev/available_regions). Most notably it is not currently available in Europe.
### Setup
On the Apple device you wish to add the shortcut to, click on [this link](https://www.icloud.com/shortcuts/94aa272af5ff4d2c8fe5e13a946f89a9) to begin the setup of the shortcut.
![screenshot](../../assets/img/ios/setup.png)
Next, you need to replace `url` and `port` with the information for your Mealie instance.
If you have a domain that you use (e.g. `https://mealie.example.com`), put that here. If you just run local, then you need to put in your Mealie instance IP and the port you use (e.g. the default is `9925`).
![screenshot](../../assets/img/ios/url.png)
Next, you need to replace `MEALIE_API_KEY` with your API token.
![screenshot](../../assets/img/ios/api.png)
Finally, replace `GEMINI_API_KEY` with the one you got from [Google AI Studio](https://makersuite.google.com)
![screenshot](../../assets/img/ios/gemini.png)
You may wish to [add the shortcut to your home screen](https://support.apple.com/guide/shortcuts/add-a-shortcut-to-the-home-screen-apd735880972/ios) for easier access.
## Features
- Share a website from Safari with Mealie to import via URL.
- Share a recipe photo from photos to perform OCR and import a physical recipe.
- Trigger the shortcut and take a photo of a physical recipe to import.
- Trigger the shortcut to select a photo from your Photos app to import.
- Trigger the shortcut to take a picture of a URL (like on the bottom of a printed recipe) to import.
## Troubleshooting
Sometimes Gemini will not be able to parse a recipe, and you will get an error. Users have found success with a combination of the following:
1. #### Try Again
Sometimes Gemini returns the wrong information which causes the import to fail. Often, trying again will be successful.
2. #### Photo Quality
Make sure there is no large glare or shadow over the picture, and you have all the text in frame.
3. #### Edit the Photo
Users have found success by cropping the picture to just the recipe card, adding a "mono" filter, and cranking up the exposure before importing.
## History
User [brasilikum](https://github.com/brasilikum) opened an issue on the main repo about how they had created an [iOS shortcut](https://github.com/mealie-recipes/mealie/issues/103) for interested users.
This original method broke after the transition to version 1.X and an issue was raised on [Github](https://github.com/mealie-recipes/mealie/issues/2092) GitHub user [Zippyy](https://github.com/zippyy) has helped to create a working shortcut for version 1.X.
When OCR was removed from Mealie, GitHub user [hunterjm](https://github.com/zippyy) created a new shortcut that uses Apple's built-in OCR and Google Gemini to enhance and replace that functionality.

View File

@@ -10,7 +10,7 @@
Mealie supports 3rd party authentication via [OpenID Connect (OIDC)](https://openid.net/connect/), an identity layer built on top of OAuth2. OIDC is supported by many Identity Providers (IdP), including:
- [Authentik](https://goauthentik.io/integrations/sources/oauth/#openid-connect)
- [Authelia](https://www.authelia.com/configuration/identity-providers/open-id-connect/)
- [Authelia](https://www.authelia.com/integration/openid-connect/mealie/)
- [Keycloak](https://www.keycloak.org/docs/latest/securing_apps/#_oidc)
- [Okta](https://www.okta.com/openid-connect/)

View File

@@ -1,164 +1,308 @@
# Frequently Asked Questions
## How do I enable "smart" ingredient handling?
## Features and Functionality
You might have noticed that scaling up a recipe or making a shopping list doesn't by default handle the ingredients in a way you might expect. Depending on your settings, scaling up might yield things like `2 1 cup broth` instead of `2 cup broth`. And, making shopping lists from recipes that have shared ingredients can yield multiple lines of the same ingredient. **But**, Mealie has a mechanism to intelligently handle ingredients and make your day better. How?
### Set up your Foods and Units
Do the following just **once**. Doing this applies to your whole group, so be careful.
??? question "How do I enable 'smart' ingredient handling?"
1. Click on your name in the upper left corner to get to your settings
2. In the bottom right, select `Manage Data`
3. In the Management page, make sure that a little orange button says `Foods`
4. If your Foods database is empty, click `Seed` and choose your language. You should end up with a list of foods. (Wait a bit for seeding to happen, and try not to seed more than once or you will have duplicates)
5. Click the little orange `Foods` button and now choose `Units`.
6. Click `Seed` and choose your language. You should end up with a list of units (e.g. `tablespoon`)
### How do I enable "smart" ingredient handling?
Initial seeding of Units is pretty complete, but there are many Foods in the world. You'll probably find that you need to add Foods to the database during parsing for the first several recipes. Once you have a well-populated Food database, there are API routes to parse ingredients automatically in bulk. But this is not a good idea without a very complete set of Foods.
You might have noticed that scaling up a recipe or making a shopping list doesn't by default handle the ingredients in a way you might expect. Depending on your settings, scaling up might yield things like `2 1 cup broth` instead of `2 cup broth`. And, making shopping lists from recipes that have shared ingredients can yield multiple lines of the same ingredient. **But**, Mealie has a mechanism to intelligently handle ingredients and make your day better. How?
### Set up Recipes to use Foods and Units
Do the following for each recipe you want to intelligently handle ingredients.
<p style="font-size: 0.75rem; font-weight: 500;">Set up your Foods and Units</p>
Do the following just **once**. Doing this applies to your whole group, so be careful.
1. Go to a recipe
2. Click the Edit button/icon
3. Click the Recipe Settings gear and deselect `Disable Ingredient Amounts`
4. Save
5. The ingredients should now look a little weird (`1 1 cup broth` and so on)
6. Click the Edit button/icon again
7. Scroll to the ingredients and you should see new fields for Amount, Unit, Food, and Note. The Note in particular will contain the original text of the Recipe.
8. Click `Parse` and you will be taken to the ingredient parsing page.
9. Choose your parser. The `Natural Language Parser` works very well, but you can also use the `Brute Parser`, or the `OpenAI Parser` if you've [enabled OpenAI support](./installation/backend-config.md#openai).
10. Click `Parse All`, and your ingredients should be separated out into Units and Foods based on your seeding in Step 1 above.
11. For ingredients where the Unit or Food was not found, you can click a button to accept an automatically suggested Food to add to the database. Or, manually enter the Unit/Food and hit `Enter` (or click `Create`) to add it to the database
12. When done, click `Save All` and you will be taken back to the recipe. Now the Unit and Food fields of the recipe should be filled out.
1. Click on your name in the upper left corner to get to your settings
2. In the bottom right, select `Manage Data`
3. In the Management page, make sure that a little orange button says `Foods`
4. If your Foods database is empty, click `Seed` and choose your language. You should end up with a list of foods. (Wait a bit for seeding to happen, and try not to seed more than once or you will have duplicates)
5. Click the little orange `Foods` button and now choose `Units`.
6. Click `Seed` and choose your language. You should end up with a list of units (e.g. `tablespoon`)
Scaling up this recipe or adding it to a Shopping List will now smartly take care of ingredient amounts and duplicate combinations.
Initial seeding of Units is pretty complete, but there are many Foods in the world. You'll probably find that you need to add Foods to the database during parsing for the first several recipes. Once you have a well-populated Food database, there are API routes to parse ingredients automatically in bulk. But this is not a good idea without a very complete set of Foods.
## Is it safe to upgrade Mealie?
<p style="font-size: 0.75rem; font-weight: 500;">Set up Recipes to use Foods and Units</p>
Yes. If you are using the v1 branches (including beta), you can upgrade to the latest version of Mealie without performing a site Export/Restore. This process was required in previous versions of Mealie, however we've automated the database migration process to make it easier to upgrade. Note that if you were using the v0.5.x version, you CANNOT upgrade to the latest version automatically. You must follow the migration instructions in the documentation.
Do the following for each recipe you want to intelligently handle ingredients.
- [Migration From v0.5.x](./migrating-to-mealie-v1.md)
1. Go to a recipe
2. Click the Edit button/icon
3. Click the Recipe Settings gear and deselect `Disable Ingredient Amounts`
4. Save
5. The ingredients should now look a little weird (`1 1 cup broth` and so on)
6. Click the Edit button/icon again
7. Scroll to the ingredients and you should see new fields for Amount, Unit, Food, and Note. The Note in particular will contain the original text of the Recipe.
8. Click `Parse` and you will be taken to the ingredient parsing page.
9. Choose your parser. The `Natural Language Parser` works very well, but you can also use the `Brute Parser`, or the `OpenAI Parser` if you've [enabled OpenAI support](./installation/backend-config.md#openai).
10. Click `Parse All`, and your ingredients should be separated out into Units and Foods based on your seeding in Step 1 above.
11. For ingredients where the Unit or Food was not found, you can click a button to accept an automatically suggested Food to add to the database. Or, manually enter the Unit/Food and hit `Enter` (or click `Create`) to add it to the database
12. When done, click `Save All` and you will be taken back to the recipe. Now the Unit and Food fields of the recipe should be filled out.
## How can I change the theme?
You can change the theme by settings the environment variables.
- [Backend Config - Themeing](./installation/backend-config.md#themeing)
## How can I change the login session timeout?
Login session can be configured by setting the `TOKEN_TIME` variable on the backend container.
- [Backend Config](./installation/backend-config.md)
## Can I serve Mealie on a subpath?
No. Due to limitations from the JavaScript Framework, Mealie doesn't support serving Mealie on a subpath.
## Can I install Mealie without docker?
Yes, you can install Mealie on your local machine. HOWEVER, it is recommended that you don't. Managing non-system versions of python, node, and npm is a pain. Moreover, updating and upgrading your system with this configuration is unsupported and will likely require manual interventions.
## What is fuzzy search and how do I use it?
Mealie can use fuzzy search, which is robust to minor typos. For example, searching for "brocolli" will still find your recipe for "broccoli soup". But fuzzy search is only functional on a Postgres database backend. To enable fuzzy search you will need to migrate to Postgres:
1. Backup your database and download the .zip file (same as when [migrating](./migrating-to-mealie-v1.md))
2. Set up a [Postgres](./installation/postgres.md) instance of Mealie
3. Upload the backup .zip and click to apply it (as as migration)
## How can I attach an image or video to a Recipe?
Mealie's Recipe Steps and other fields support markdown syntax and therefore support images and videos. To attach an image to the recipe, you can upload it as an asset and use the provided copy button to generate the html image tag required to render the image. For videos, Mealie provides no way to host videos. You'll need to host your videos with another provider and embed them in your recipe. Generally, the video provider will provide a link to the video and the html tag required to render the video. For example, YouTube provides the following link that works inside a step. You can adjust the width and height attributes as necessary to ensure a fit.
```html
<iframe width="560" height="315" src="https://www.youtube.com/embed/nAUwKeO93bY" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
```
## How can I unlock my account?
If your account has been locked by bad password attempts, you can use an administrator account to unlock another account. Alternatively, you can unlock all accounts via a script within the container.
```shell
docker exec -it mealie bash
python /app/mealie/scripts/reset_locked_users.py
```
## How can I change my password?
You can change your password by going to the user profile page and clicking the "Change Password" button. Alternatively you can use the following script to change your password via the CLI if you are locked out of your account.
```shell
docker exec -it mealie bash
python /app/mealie/scripts/change_password.py
```
## I can't log in with external auth. How can I change my authentication method?
Follow the [steps above](#how-can-i-change-my-password) for changing your password. You will be prompted if you would like to switch your authentication method back to local auth so you can log in again.
## How do private groups, households, and recipes work?
Managing private groups and recipes can be confusing. The following diagram and notes should help explain how they work to determine if a recipe can be shared publicly.
- Private links that are generated from the recipe page using the `Share` button bypass all group and recipe permissions
- Private groups block all access to recipes, including those that are public, except as noted above.
- Private households, similar to private groups, block all access to recipes, except as noted above.
- Households with "Allow users outside of your group to see your recipes" disabled block all access to recipes, except as noted above.
- Private recipes block all access to the recipe from public links. This does not affect Private Links.
```mermaid
stateDiagram-v2
r1: Request Access
p1: Using Private Link?
p2: Is Group Private?
p3: Is Household Private?
p4: Is Recipe Private?
s1: Deny Access
n1: Allow Access
Scaling up this recipe or adding it to a Shopping List will now smartly take care of ingredient amounts and duplicate combinations.
r1 --> p1
p1 --> p2: No
p1 --> n1: Yes
??? question "How do I enable Nutritional Values?"
p2 --> s1: Yes
p2 --> p3: No
### How do I enable Nutritional Values?
p3 --> s1: Yes
p3 --> p4: No
Mealie can store Nutritional Information for Recipes. Please note that the values you enter are static for the recipe and no scaling is being done when changing Servings / Yield.
p4 --> s1: Yes
p4 --> n1: No
```
Do the following to enable Nutritional Values on individual Recipes, or to modify your Household Recipe Preferences
For more information on public access, check out the [Permissions and Public Access guide](./usage/permissions-and-public-access.md). For more information on groups vs. households, check out the [Groups and Households](./features.md#groups-and-households) section in the Features guide.
**Show Nutritional Values on a Single Recipe**
## Can I use fail2ban with Mealie?
Yes, Mealie is configured to properly forward external IP addresses into the `mealie.log` logfile. Note that due to restrictions in docker, IP address forwarding only works on Linux.
1. Go to a recipe
2. Click the Edit button/icon
3. Click the Recipe Settings gear and select `Show Nutritional Values`
4. Scroll down to manually fill out the Nutritional Values
5. Save
Your fail2ban usage should look like the following:
```
Use datepattern : %d-%b-%y %H:%M:%S : Day-MON-Year2 24hour:Minute:Second
Use failregex line : ^ERROR:\s+Incorrect username or password from <HOST>
```
**Show Nutritional Values by default**
## Why an API?
An API allows integration into applications like [Home Assistant](https://www.home-assistant.io/) that can act as notification engines to provide custom notifications based on Meal Plan data to remind you to defrost the chicken, marinate the steak, or start the CrockPot. Additionally, you can access nearly any backend service via the API giving you total control to extend the application. To explore the API spin up your server and navigate to http://yourserver.com/docs for interactive API documentation.
1. Click your username in the top left
2. Click the 'Household Settings' button
3. Under 'Household Recipe Preferences', click to select 'Show nutrition information'
4. Click 'Update'
## Why a database?
Some users of static-site generator applications like ChowDown have expressed concerns about their data being stuck in a database. Considering this is a new project, it is a valid concern to be worried about your data. Mealie specifically addresses this concern by providing automatic daily backups that export your data in json, plain-text markdown files, and/or custom Jinja2 templates. **This puts you in control of how your data is represented** when exported from Mealie, which means you can easily migrate to any other service provided Mealie doesn't work for you.
As to why we need a database?
??? question "Why Link Ingredients to a Recipe Step?"
- **Developer Experience:** Without a database, a lot of the work to maintain your data is taken on by the developer instead of a battle-tested platform for storing data.
- **Multi User Support:** With a solid database as backend storage for your data, Mealie can better support multi-user sites and avoid read/write access errors when multiple actions are taken at the same time.
### Why Link Ingredients to a Recipe Step?
## Why is there no "Keep Screen Alive" button when I access a recipe?
You've perhaps visited the Mealie Demo and noticed that it had a "Keep Screen Alive" button, but it doesn't show up in your own Mealie instance.
There are typically two possible reasons for this:
1. You're accessing your Mealie instance without using HTTPS. The Wake Lock API is only available if HTTPS is used. Read more here: https://developer.mozilla.org/en-US/docs/Web/API/Screen_Wake_Lock_API
2. You're accessing your Mealie instance on a browser which doesn't support the API. You can test this here: https://vueuse.org/core/useWakeLock/#demo
Mealie allows you to link ingredients to specific steps in a recipe, ensuring you know exactly when to add each ingredient during the cooking process.
Solving the above points will most likely resolve your issues. However, if you're still having problems, you are welcome to create an issue. Just remember to add that you've tried the above two options first in your description.
**Link Ingredients to Steps in a Recipe**
1. Go to a recipe
2. Click the Edit button/icon
3. Scroll down to the step you want to link ingredients to
4. Click the ellipsis button next to the step and click 'Link Ingredients'
5. Check off the Ingredient(s) that you want to link to that step
6. Optionally, click 'Next step' to continue linking remaining ingredients to steps, or click 'Save' to Finish
7. Click 'Save' on the Recipe
You can optionally link the same ingredient to multiple steps, which is useful for prepping an ingredient in one step and using it in another.
??? question "What is fuzzy search and how do I use it?"
### What is fuzzy search and how do I use it?
Mealie can use fuzzy search, which is robust to minor typos. For example, searching for "brocolli" will still find your recipe for "broccoli soup". But fuzzy search is only functional on a Postgres database backend. To enable fuzzy search you will need to migrate to Postgres:
1. Backup your database and download the .zip file (same as when [migrating](./migrating-to-mealie-v1.md))
2. Set up a [Postgres](./installation/postgres.md) instance of Mealie
3. Upload the backup .zip and click to apply it (as as migration)
??? question "How can I attach an image or video to a Recipe?"
### How can I attach an image or video to a Recipe?
Mealie's Recipe Steps and other fields support markdown syntax and therefore support images and videos. To attach an image to the recipe, you can upload it as an asset and use the provided copy button to generate the html image tag required to render the image. For videos, Mealie provides no way to host videos. You'll need to host your videos with another provider and embed them in your recipe. Generally, the video provider will provide a link to the video and the html tag required to render the video. For example, YouTube provides the following link that works inside a step. You can adjust the width and height attributes as necessary to ensure a fit.
```html
<iframe width="560" height="315" src="https://www.youtube.com/embed/nAUwKeO93bY" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
```
## Customization and Configuration
??? question "How can I change the theme?"
### How can I change the theme?
You can change the theme by settings the environment variables.
- [Backend Config - Themeing](./installation/backend-config.md#themeing)
??? question "How can I change the login session timeout?"
### How can I change the login session timeout?
Login session can be configured by setting the `TOKEN_TIME` variable on the backend container.
- [Backend Config](./installation/backend-config.md)
??? question "Can I serve Mealie on a subpath?"
### Can I serve Mealie on a subpath?
No. Due to limitations from the JavaScript Framework, Mealie doesn't support serving Mealie on a subpath.
??? question "Can I install Mealie without docker?"
### Can I install Mealie without docker?
Yes, you can install Mealie on your local machine. HOWEVER, it is recommended that you don't. Managing non-system versions of python, node, and npm is a pain. Moreover, updating and upgrading your system with this configuration is unsupported and will likely require manual interventions.
## Account Management
??? question "How can I unlock my account?"
### How can I unlock my account?
If your account has been locked by bad password attempts, you can use an administrator account to unlock another account. Alternatively, you can unlock all accounts via a script within the container.
```shell
docker exec -it mealie bash
python /opt/mealie/lib64/python3.12/site-packages/mealie/scripts/reset_locked_users.py
```
??? question "How can I reset admin privileges for my account?"
### How can I reset admin privileges for my account?
If you've lost admin privileges and no other admin can restore them, you can use the Command Line Interface (CLI) to grant admin access.
```shell
docker exec -it mealie bash
python /opt/mealie/lib64/python3.12/site-packages/mealie/scripts/make_admin.py
```
??? question "How can I change my password?"
### How can I change my password?
You can change your password by going to the user profile page and clicking the "Change Password" button. Alternatively you can use the following script to change your password via the CLI if you are locked out of your account.
```shell
docker exec -it mealie bash
python /opt/mealie/lib64/python3.12/site-packages/mealie/scripts/change_password.py
```
??? question "I can't log in with external auth. How can I change my authentication method?"
### I can't log in with external auth. How can I change my authentication method?
Follow the [steps above](#how-can-i-change-my-password) for changing your password. You will be prompted if you would like to switch your authentication method back to local auth so you can log in again.
## Collaboration and Privacy
??? question "How do private groups, households, and recipes work?"
### How do private groups, households, and recipes work?
Managing private groups and recipes can be confusing. The following diagram and notes should help explain how they work to determine if a recipe can be shared publicly.
- Private links that are generated from the recipe page using the `Share` button bypass all group and recipe permissions
- Private groups block all access to recipes, including those that are public, except as noted above.
- Private households, similar to private groups, block all access to recipes, except as noted above.
- Households with "Allow users outside of your group to see your recipes" disabled block all access to recipes, except as noted above.
- Private recipes block all access to the recipe from public links. This does not affect Private Links.
```mermaid
stateDiagram-v2
r1: Request Access
p1: Using Private Link?
p2: Is Group Private?
p3: Is Household Private?
p4: Is Recipe Private?
s1: Deny Access
n1: Allow Access
r1 --> p1
p1 --> p2: No
p1 --> n1: Yes
p2 --> s1: Yes
p2 --> p3: No
p3 --> s1: Yes
p3 --> p4: No
p4 --> s1: Yes
p4 --> n1: No
```
For more information on public access, check out the [Permissions and Public Access guide](./usage/permissions-and-public-access.md). For more information on groups vs. households, check out the [Groups and Households](./features.md#groups-and-households) section in the Features guide.
## Security and Maintenance
??? question "How can I use Mealie externally?"
### How can I use Mealie externally
Exposing Mealie or any service to the internet can pose significant security risks. Before proceeding, carefully evaluate the potential impacts on your system. Due to the unique nature of each network, we cannot provide specific steps for your setup.
There is a community guide available for one way to potentially set this up, and you could reach out on Discord for further discussion on what may be best for your network.
??? question "Can I use fail2ban with Mealie?"
### Can I use fail2ban with Mealie?
Yes, Mealie is configured to properly forward external IP addresses into the `mealie.log` logfile. Note that due to restrictions in docker, IP address forwarding only works on Linux.
Your fail2ban usage should look like the following:
```
Use datepattern : %d-%b-%y %H:%M:%S : Day-MON-Year2 24hour:Minute:Second
Use failregex line : ^ERROR:\s+Incorrect username or password from <HOST>
```
??? question "Is it safe to upgrade Mealie?"
### Is it safe to upgrade Mealie?
Yes. If you are using the v1 branches (including beta), you can upgrade to the latest version of Mealie without performing a site Export/Restore. This process was required in previous versions of Mealie, however we've automated the database migration process to make it easier to upgrade. Note that if you were using the v0.5.x version, you CANNOT upgrade to the latest version automatically. You must follow the migration instructions in the documentation.
- [Migration From v0.5.x](./migrating-to-mealie-v1.md)
## Technical Considerations
??? question "Why setup Email?"
### Why setup Email?
Mealie uses email to send account invites and password resets. If you don't use these features, you don't need to set up email. There are also other methods to perform these actions that do not require the setup of Email.
Email settings can be adjusted via environment variables on the backend container:
- [Backend Config](./installation/backend-config.md)
Note that many email providers (e.g., Gmail, Outlook) are disabling SMTP Auth and requiring Modern Auth, which Mealie currently does not support. You may need to use an SMTP relay or third-party SMTP provider, such as SMTP2GO.
??? question "Why an API?"
### Why an API?
An API allows integration into applications like [Home Assistant](https://www.home-assistant.io/) that can act as notification engines to provide custom notifications based on Meal Plan data to remind you to defrost the chicken, marinate the steak, or start the CrockPot. Additionally, you can access nearly any backend service via the API giving you total control to extend the application. To explore the API spin up your server and navigate to http://yourserver.com/docs for interactive API documentation.
??? question "Why a database?"
### Why a database?
Some users of static-site generator applications like ChowDown have expressed concerns about their data being stuck in a database. Considering this is a new project, it is a valid concern to be worried about your data. Mealie specifically addresses this concern by providing automatic daily backups that export your data in json, plain-text markdown files, and/or custom Jinja2 templates. **This puts you in control of how your data is represented** when exported from Mealie, which means you can easily migrate to any other service provided Mealie doesn't work for you.
As to why we need a database?
- **Developer Experience:** Without a database, a lot of the work to maintain your data is taken on by the developer instead of a battle-tested platform for storing data.
- **Multi User Support:** With a solid database as backend storage for your data, Mealie can better support multi-user sites and avoid read/write access errors when multiple actions are taken at the same time.
## Usability
??? question "Why is there no 'Keep Screen Alive' button when I access a recipe?"
### Why is there no "Keep Screen Alive" button when I access a recipe?
You've perhaps visited the Mealie Demo and noticed that it had a "Keep Screen Alive" button, but it doesn't show up in your own Mealie instance.
There are typically two possible reasons for this:
1. You're accessing your Mealie instance without using HTTPS. The Wake Lock API is only available if HTTPS is used. Read more here: https://developer.mozilla.org/en-US/docs/Web/API/Screen_Wake_Lock_API
2. You're accessing your Mealie instance on a browser which doesn't support the API. You can test this here: https://vueuse.org/core/useWakeLock/#demo
Solving the above points will most likely resolve your issues. However, if you're still having problems, you are welcome to create an issue. Just remember to add that you've tried the above two options first in your description.

View File

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

View File

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

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:v2.4.0`
2. Replace the image for the API container with `ghcr.io/mealie-recipes/mealie:v2.8.0`
3. Take the external port from the frontend container and set that as the port mapped to port `9000` on the new container. The frontend is now served on port 9000 from the new container, so it will need to be mapped for you to have access.
4. Restart the container

View File

@@ -7,7 +7,7 @@ PostgreSQL might be considered if you need to support many concurrent users. In
```yaml
services:
mealie:
image: ghcr.io/mealie-recipes/mealie:v2.4.0 # (3)
image: ghcr.io/mealie-recipes/mealie:v2.8.0 # (3)
container_name: mealie
restart: always
ports:
@@ -45,6 +45,7 @@ services:
environment:
POSTGRES_PASSWORD: mealie
POSTGRES_USER: mealie
PGUSER: mealie
healthcheck:
test: ["CMD", "pg_isready"]
interval: 30s

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:v2.4.0 # (3)
image: ghcr.io/mealie-recipes/mealie:v2.8.0 # (3)
container_name: mealie
restart: always
ports:

View File

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

File diff suppressed because one or more lines are too long

View File

@@ -48,6 +48,7 @@ markdown_extensions:
- name: mermaid
class: mermaid
format: !!python/name:pymdownx.superfences.fence_code_format
- pymdownx.details
extra_css:
- assets/stylesheets/custom.css
extra_javascript:
@@ -84,12 +85,13 @@ nav:
- OpenID Connect: "documentation/getting-started/authentication/oidc-v2.md"
- Community Guides:
- Bring API without internet exposure: "documentation/community-guide/bring-api.md"
- Automate Backups with n8n: "documentation/community-guide/n8n-backup-automation.md"
- Bulk Url Import: "documentation/community-guide/bulk-url-import.md"
- Home Assistant: "documentation/community-guide/home-assistant.md"
- Import Bookmarklet: "documentation/community-guide/import-recipe-bookmarklet.md"
- iOS Shortcuts: "documentation/community-guide/ios.md"
- Reverse Proxy (SWAG): "documentation/community-guide/swag.md"
- Home Assistant: "documentation/community-guide/home-assistant.md"
- Bulk Url Import: "documentation/community-guide/bulk-url-import.md"
- Import Bookmarklet: "documentation/community-guide/import-recipe-bookmarklet.md"
- Automate Backups with n8n: "documentation/community-guide/n8n-backup-automation.md"
- API Reference: "api/redoc.md"
@@ -97,6 +99,7 @@ nav:
- Non-Code: "contributors/non-coders.md"
- Translating: "contributors/translating.md"
- Developers Guide:
- Building Packages: "contributors/developers-guide/building-packages.md"
- Code Contributions: "contributors/developers-guide/code-contributions.md"
- Dev Getting Started: "contributors/developers-guide/starting-dev-server.md"
- Database Changes: "contributors/developers-guide/database-changes.md"

View File

@@ -104,9 +104,12 @@
}
const response = await actions.updateOne(editTarget.value);
// if name changed, redirect to new slug
if (response?.slug && book.value?.slug !== response?.slug) {
// if name changed, redirect to new slug
router.push(`/g/${route.value.params.groupSlug}/cookbooks/${response?.slug}`);
} else {
// otherwise reload the page, since the recipe criteria changed
router.go(0);
}
dialogStates.edit = false;
editTarget.value = null;

View File

@@ -34,12 +34,6 @@
</v-tooltip>
</div>
<RecipeTimerMenu
fab
color="info"
class="ml-1"
/>
<RecipeContextMenu
show-print
:menu-top="false"
@@ -53,7 +47,6 @@
:recipe-id="recipe.id"
:recipe-scale="recipeScale"
:use-items="{
delete: false,
edit: false,
download: loggedIn,
duplicate: loggedIn,
@@ -63,6 +56,7 @@
printPreferences: true,
share: loggedIn,
recipeActions: true,
delete: loggedIn,
}"
class="ml-1"
@print="$emit('print')"
@@ -88,7 +82,6 @@
import { defineComponent, ref, useContext } from "@nuxtjs/composition-api";
import RecipeContextMenu from "./RecipeContextMenu.vue";
import RecipeFavoriteBadge from "./RecipeFavoriteBadge.vue";
import RecipeTimerMenu from "./RecipeTimerMenu.vue";
import RecipeTimelineBadge from "./RecipeTimelineBadge.vue";
import { Recipe } from "~/lib/api/types/recipe";
@@ -98,7 +91,7 @@ const CLOSE_EVENT = "close";
const JSON_EVENT = "json";
export default defineComponent({
components: { RecipeContextMenu, RecipeFavoriteBadge, RecipeTimerMenu, RecipeTimelineBadge },
components: { RecipeContextMenu, RecipeFavoriteBadge, RecipeTimelineBadge },
props: {
recipe: {
required: true,

View File

@@ -7,7 +7,7 @@
:elevation="hover ? 12 : 2"
:to="recipeRoute"
:min-height="imageHeight + 75"
@click="$emit('click')"
@click.self="$emit('click')"
>
<RecipeCardImage
:icon-size="imageHeight"
@@ -39,7 +39,7 @@
<RecipeRating class="pb-1" :value="rating" :recipe-id="recipeId" :slug="slug" :small="true" />
<v-spacer></v-spacer>
<RecipeChips :truncate="true" :items="tags" :title="false" :limit="2" :small="true" url-prefix="tags" />
<RecipeChips :truncate="true" :items="tags" :title="false" :limit="2" :small="true" url-prefix="tags" v-on="$listeners" />
<!-- If we're not logged-in, no items display, so we hide this menu -->
<RecipeContextMenu

View File

@@ -38,7 +38,7 @@
<SafeMarkdown :source="description" />
</v-list-item-subtitle>
<div class="d-flex flex-wrap justify-start ma-0">
<RecipeChips :truncate="true" :items="tags" :title="false" :limit="2" :small="true" url-prefix="tags" />
<RecipeChips :truncate="true" :items="tags" :title="false" :limit="2" :small="true" url-prefix="tags" v-on="$listeners" />
</div>
<div class="d-flex flex-wrap justify-end align-center">
<slot name="actions">

View File

@@ -82,6 +82,8 @@
:image="recipe.image"
:tags="recipe.tags"
:recipe-id="recipe.id"
v-on="$listeners"
/>
</v-lazy>
</v-col>
@@ -105,6 +107,8 @@
:image="recipe.image"
:tags="recipe.tags"
:recipe-id="recipe.id"
v-on="$listeners"
/>
</v-lazy>
</v-col>
@@ -215,27 +219,34 @@ export default defineComponent({
const router = useRouter();
const queryFilter = computed(() => {
const orderBy = props.query?.orderBy || preferences.value.orderBy;
const orderByFilter = preferences.value.filterNull && orderBy ? `${orderBy} IS NOT NULL` : null;
return props.query.queryFilter || null;
if (props.query.queryFilter && orderByFilter) {
return `(${props.query.queryFilter}) AND ${orderByFilter}`;
} else if (props.query.queryFilter) {
return props.query.queryFilter;
} else {
return orderByFilter;
}
// TODO: allow user to filter out null values when ordering by a value that may be null (such as lastMade)
// const orderBy = props.query?.orderBy || preferences.value.orderBy;
// const orderByFilter = preferences.value.filterNull && orderBy ? `${orderBy} IS NOT NULL` : null;
// if (props.query.queryFilter && orderByFilter) {
// return `(${props.query.queryFilter}) AND ${orderByFilter}`;
// } else if (props.query.queryFilter) {
// return props.query.queryFilter;
// } else {
// return orderByFilter;
// }
});
async function fetchRecipes(pageCount = 1) {
const orderDir = props.query?.orderDirection || preferences.value.orderDirection;
const orderByNullPosition = props.query?.orderByNullPosition || orderDir === "asc" ? "first" : "last";
return await fetchMore(
page.value,
perPage * pageCount,
props.query?.orderBy || preferences.value.orderBy,
props.query?.orderDirection || preferences.value.orderDirection,
orderDir,
orderByNullPosition,
props.query,
// we use a computed queryFilter to filter out recipes that have a null value for the property we're sorting by
queryFilter.value
queryFilter.value,
);
}
@@ -296,6 +307,7 @@ export default defineComponent({
}, useAsyncKey());
}, 500);
function sortRecipes(sortType: string) {
if (state.sortLoading || loading.value) {
return;

View File

@@ -9,7 +9,8 @@
color="accent"
:small="small"
dark
:to="`${baseRecipeRoute}?${urlPrefix}=${category.id}`"
@click.prevent="() => $emit('item-selected', category, urlPrefix)"
>
{{ truncateText(category.name) }}
</v-chip>

View File

@@ -276,7 +276,7 @@ export default defineComponent({
delete: {
title: i18n.tc("general.delete"),
icon: $globals.icons.delete,
color: "error",
color: undefined,
event: "delete",
isPublic: false,
},
@@ -371,7 +371,7 @@ export default defineComponent({
const groupRecipeActionsStore = useGroupRecipeActions();
async function executeRecipeAction(action: GroupRecipeActionOut) {
const response = await groupRecipeActionsStore.execute(action, props.recipe);
const response = await groupRecipeActionsStore.execute(action, props.recipe, props.recipeScale);
if (action.actionType === "post") {
if (!response?.error) {
@@ -383,7 +383,10 @@ export default defineComponent({
}
async function deleteRecipe() {
await api.recipes.deleteOne(props.slug);
const { data } = await api.recipes.deleteOne(props.slug);
if (data?.slug) {
router.push(`/g/${groupSlug.value}`);
}
context.emit("delete", props.slug);
}

View File

@@ -23,13 +23,13 @@
<a :href="`/g/${groupSlug}/r/${item.slug}`" style="color: inherit; text-decoration: inherit; " @click="$emit('click')">{{ item.name }}</a>
</template>
<template #item.tags="{ item }">
<RecipeChip small :items="item.tags" :is-category="false" url-prefix="tags" />
<RecipeChip small :items="item.tags" :is-category="false" url-prefix="tags" @item-selected="filterItems" />
</template>
<template #item.recipeCategory="{ item }">
<RecipeChip small :items="item.recipeCategory" />
<RecipeChip small :items="item.recipeCategory" @item-selected="filterItems" />
</template>
<template #item.tools="{ item }">
<RecipeChip small :items="item.tools" url-prefix="tools" />
<RecipeChip small :items="item.tools" url-prefix="tools" @item-selected="filterItems" />
</template>
<template #item.userId="{ item }">
<v-list-item class="justify-start">
@@ -48,12 +48,13 @@
</template>
<script lang="ts">
import { computed, defineComponent, onMounted, ref, useContext } from "@nuxtjs/composition-api";
import { computed, defineComponent, onMounted, ref, useContext, useRouter } from "@nuxtjs/composition-api";
import UserAvatar from "../User/UserAvatar.vue";
import RecipeChip from "./RecipeChips.vue";
import { Recipe } from "~/lib/api/types/recipe";
import { Recipe, RecipeCategory, RecipeTool } from "~/lib/api/types/recipe";
import { useUserApi } from "~/composables/api";
import { UserSummary } from "~/lib/api/types/user";
import { RecipeTag } from "~/lib/api/types/household";
const INPUT_EVENT = "input";
@@ -106,7 +107,7 @@ export default defineComponent({
setup(props, context) {
const { $auth, i18n } = useContext();
const groupSlug = $auth.user?.groupSlug;
const router = useRouter();
function setValue(value: Recipe[]) {
context.emit(INPUT_EVENT, value);
}
@@ -167,6 +168,13 @@ export default defineComponent({
}
}
function filterItems(item: RecipeTag | RecipeCategory | RecipeTool, itemType: string) {
if (!groupSlug || !item.id) {
return;
}
router.push(`/g/${groupSlug}?${itemType}=${item.id}`);
}
onMounted(() => {
refreshMembers();
});
@@ -186,6 +194,7 @@ export default defineComponent({
formatDate,
members,
getMember,
filterItems,
};
},

View File

@@ -138,8 +138,8 @@ import RecipeIngredientListItem from "./RecipeIngredientListItem.vue";
import { useUserApi } from "~/composables/api";
import { alert } from "~/composables/use-toast";
import { useShoppingListPreferences } from "~/composables/use-users/preferences";
import { ShoppingListSummary } from "~/lib/api/types/household";
import { Recipe, RecipeIngredient } from "~/lib/api/types/recipe";
import { RecipeIngredient, ShoppingListAddRecipeParamsBulk, ShoppingListSummary } from "~/lib/api/types/household";
import { Recipe } from "~/lib/api/types/recipe";
export interface RecipeWithScale extends Recipe {
scale: number;
@@ -204,6 +204,10 @@ export default defineComponent({
shoppingListShowAllToggled: false,
});
const userHousehold = computed(() => {
return $auth.user?.householdSlug || "";
});
const shoppingListChoices = computed(() => {
return props.shoppingLists.filter((list) => preferences.value.viewAllLists || list.userId === $auth.user?.id);
});
@@ -248,8 +252,9 @@ export default defineComponent({
}
const shoppingListIngredients: ShoppingListIngredient[] = recipe.recipeIngredient.map((ing) => {
const householdsWithFood = (ing.food?.householdsWithIngredientFood || []);
return {
checked: !ing.food?.onHand,
checked: !householdsWithFood.includes(userHousehold.value),
ingredient: ing,
disableAmount: recipe.settings?.disableAmount || false,
}
@@ -276,7 +281,8 @@ export default defineComponent({
}
// Store the on-hand ingredients for later
if (ing.ingredient.food?.onHand) {
const householdsWithFood = (ing.ingredient.food?.householdsWithIngredientFood || []);
if (householdsWithFood.includes(userHousehold.value)) {
onHandIngs.push(ing);
return sections;
}
@@ -336,12 +342,12 @@ export default defineComponent({
}
async function addRecipesToList() {
const promises: Promise<any>[] = [];
recipeIngredientSections.value.forEach((section) => {
if (!selectedShoppingList.value) {
return;
}
if (!selectedShoppingList.value) {
return;
}
const recipeData: ShoppingListAddRecipeParamsBulk[] = [];
recipeIngredientSections.value.forEach((section) => {
const ingredients: RecipeIngredient[] = [];
section.ingredientSections.forEach((ingSection) => {
ingSection.ingredients.forEach((ing) => {
@@ -355,24 +361,18 @@ export default defineComponent({
return;
}
promises.push(api.shopping.lists.addRecipe(
selectedShoppingList.value.id,
section.recipeId,
section.recipeScale,
ingredients,
));
recipeData.push(
{
recipeId: section.recipeId,
recipeIncrementQuantity: section.recipeScale,
recipeIngredients: ingredients,
}
);
});
let success = true;
const results = await Promise.allSettled(promises);
results.forEach((result) => {
if (result.status === "rejected") {
success = false;
}
})
success ? alert.success(i18n.tc("recipe.successfully-added-to-list"))
: alert.error(i18n.tc("failed-to-add-recipes-to-list"))
const { error } = await api.shopping.lists.addRecipes(selectedShoppingList.value.id, recipeData);
error ? alert.error(i18n.tc("recipe.failed-to-add-recipes-to-list"))
: alert.success(i18n.tc("recipe.successfully-added-to-list"));
state.shoppingListDialog = false;
state.shoppingListIngredientDialog = false;

View File

@@ -138,6 +138,7 @@
:title="$tc('general.recipes')"
:recipes="recipes"
:query="passedQueryWithSeed"
@item-selected="filterItems"
@replaceRecipes="replaceRecipes"
@appendRecipes="appendRecipes"
/>
@@ -387,6 +388,19 @@ export default defineComponent({
}
)
function filterItems(item: RecipeCategory | RecipeTag | RecipeTool, urlPrefix: string) {
if (urlPrefix === "categories") {
const result = categories.store.value.filter((category) => (category.id as string).includes(item.id as string));
selectedCategories.value = result as NoUndefinedField<RecipeTag>[];
} else if (urlPrefix === "tags") {
const result = tags.store.value.filter((tag) => (tag.id as string).includes(item.id as string));
selectedTags.value = result as NoUndefinedField<RecipeTag>[];
} else if (urlPrefix === "tools") {
const result = tools.store.value.filter((tool) => (tool.id ).includes(item.id || "" ));
selectedTags.value = result as NoUndefinedField<RecipeTag>[];
}
}
async function hydrateSearch() {
const query = router.currentRoute.query;
if (query.auto?.length) {
@@ -592,6 +606,8 @@ export default defineComponent({
removeRecipe,
replaceRecipes,
passedQueryWithSeed,
filterItems,
};
},
head: {},

View File

@@ -86,31 +86,34 @@
</BaseDialog>
</div>
<div>
<div class="d-flex justify-center flex-wrap">
<v-chip
label
:small="$vuetify.breakpoint.smAndDown"
color="accent custom-transparent"
class="ma-1 pa-3"
>
<v-icon left>
{{ $globals.icons.calendar }}
</v-icon>
{{ $t('recipe.last-made-date', { date: value ? new Date(value).toLocaleDateString($i18n.locale) : $t("general.never") } ) }}
</v-chip>
</div>
<div class="d-flex justify-center flex-wrap mt-1">
<BaseButton :small="$vuetify.breakpoint.smAndDown" @click="madeThisDialog = true">
<template #icon> {{ $globals.icons.chefHat }} </template>
{{ $t('recipe.made-this') }}
</BaseButton>
<div v-if="lastMadeReady" class="d-flex justify-center flex-wrap">
<v-row no-gutters class="d-flex flex-wrap align-center" style="font-size: larger;">
<v-tooltip bottom>
<template #activator="{ on, attrs }">
<v-btn
rounded
outlined
x-large
color="primary"
v-bind="attrs"
v-on="on"
@click="madeThisDialog = true"
>
<v-icon left large>{{ $globals.icons.calendar }}</v-icon>
<span class="text--secondary" style="letter-spacing: normal;"><b>{{ $tc("general.last-made") }}</b><br>{{ lastMade ? new Date(lastMade).toLocaleDateString($i18n.locale) : $tc("general.never") }}</span>
<v-icon right large>{{ $globals.icons.createAlt }}</v-icon>
</v-btn>
</template>
<span>{{ $tc("recipe.made-this") }}</span>
</v-tooltip>
</v-row>
</div>
</div>
</div>
</template>
<script lang="ts">
import { computed, defineComponent, reactive, ref, toRefs, useContext } from "@nuxtjs/composition-api";
import { computed, defineComponent, onMounted, reactive, ref, toRefs, useContext } from "@nuxtjs/composition-api";
import { whenever } from "@vueuse/core";
import { VForm } from "~/types/vuetify";
import { useUserApi } from "~/composables/api";
@@ -119,10 +122,6 @@ import { Recipe, RecipeTimelineEventIn } from "~/lib/api/types/recipe";
export default defineComponent({
props: {
value: {
type: String,
default: null,
},
recipe: {
type: Object as () => Recipe,
required: true,
@@ -146,6 +145,20 @@ export default defineComponent({
const newTimelineEventImagePreviewUrl = ref<string>();
const newTimelineEventTimestamp = ref<string>();
const lastMade = ref(props.recipe.lastMade);
const lastMadeReady = ref(false);
onMounted(async () => {
if (!$auth.user?.householdSlug) {
lastMade.value = props.recipe.lastMade;
} else {
const { data } = await userApi.households.getCurrentUserHouseholdRecipe(props.recipe.slug || "");
lastMade.value = data?.lastMade;
}
lastMadeReady.value = true;
});
whenever(
() => madeThisDialog.value,
() => {
@@ -195,11 +208,9 @@ export default defineComponent({
const newEvent = eventResponse.data;
// we also update the recipe's last made value
if (!props.value || newTimelineEvent.value.timestamp > props.value) {
if (!lastMade.value || newTimelineEvent.value.timestamp > lastMade.value) {
lastMade.value = newTimelineEvent.value.timestamp;
await userApi.recipes.updateLastMade(props.recipe.slug, newTimelineEvent.value.timestamp);
// update recipe in parent so the user can see it
context.emit("input", newTimelineEvent.value.timestamp);
}
// update the image, if provided
@@ -234,6 +245,8 @@ export default defineComponent({
newTimelineEventImage,
newTimelineEventImagePreviewUrl,
newTimelineEventTimestamp,
lastMade,
lastMadeReady,
createTimelineEvent,
clearImage,
uploadImage,

View File

@@ -35,7 +35,7 @@
-->
<v-col v-if="!isCookMode || isEditForm" cols="12" sm="12" md="4" lg="4">
<RecipePageIngredientToolsView v-if="!isEditForm" :recipe="recipe" :scale="scale" />
<RecipePageOrganizers v-if="$vuetify.breakpoint.mdAndUp" :recipe="recipe" />
<RecipePageOrganizers v-if="$vuetify.breakpoint.mdAndUp" :recipe="recipe" @item-selected="chipClicked" />
</v-col>
<v-divider v-if="$vuetify.breakpoint.mdAndUp && !isCookMode" class="my-divider" :vertical="true" />
@@ -166,7 +166,7 @@ import {
usePageUser,
} from "~/composables/recipe-page/shared-state";
import { NoUndefinedField } from "~/lib/api/types/non-generated";
import { Recipe } from "~/lib/api/types/recipe";
import { Recipe, RecipeCategory, RecipeTag, RecipeTool } from "~/lib/api/types/recipe";
import { useRouteQuery } from "~/composables/use-router";
import { useUserApi } from "~/composables/api";
import { uuid4, deepCopy } from "~/composables/use-utils";
@@ -329,6 +329,17 @@ export default defineComponent({
*/
const { user } = usePageUser();
/** =============================================================
* RecipeChip Clicked
*/
function chipClicked(item: RecipeTag | RecipeCategory | RecipeTool, itemType: string) {
if (!item.id) {
return;
}
router.push(`/g/${groupSlug.value}?${itemType}=${item.id}`);
}
return {
user,
isOwnGroup,
@@ -350,7 +361,8 @@ export default defineComponent({
deleteRecipe,
addStep,
hasLinkedIngredients,
notLinkedIngredients
notLinkedIngredients,
chipClicked,
};
},
head: {},

View File

@@ -34,7 +34,7 @@
<UserAvatar :tooltip="false" size="40" :user-id="comment.userId" />
<v-card outlined class="flex-grow-1">
<v-card-text class="pa-3 pb-0">
<p class="">{{ comment.user.username }} {{ $d(Date.parse(comment.createdAt), "medium") }}</p>
<p class="">{{ comment.user.fullName }} {{ $d(Date.parse(comment.createdAt), "medium") }}</p>
<SafeMarkdown :source="comment.text" />
</v-card-text>
<v-card-actions class="justify-end mt-0 pt-0">

View File

@@ -11,7 +11,7 @@
:logged-in="isOwnGroup"
:open="isEditMode"
:recipe-id="recipe.id"
class="ml-auto mt-n8 pb-4"
class="ml-auto mt-n2 pb-4"
@close="setMode(PageMode.VIEW)"
@json="toggleEditMode()"
@edit="setMode(PageMode.EDIT)"

View File

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

View File

@@ -10,7 +10,7 @@
<h2 class="mb-2 mt-4">{{ $t('tool.required-tools') }}</h2>
<v-list-item v-for="(tool, index) in recipe.tools" :key="index" dense>
<v-checkbox
v-model="recipe.tools[index].onHand"
v-model="recipeTools[index].onHand"
hide-details
class="pt-0 my-auto py-auto"
color="secondary"
@@ -26,14 +26,18 @@
</template>
<script lang="ts">
import { defineComponent } from "@nuxtjs/composition-api";
import { computed, defineComponent } from "@nuxtjs/composition-api";
import { useLoggedInState } from "~/composables/use-logged-in-state";
import { usePageState, usePageUser } from "~/composables/recipe-page/shared-state";
import { useToolStore } from "~/composables/store";
import { NoUndefinedField } from "~/lib/api/types/non-generated";
import { Recipe } from "~/lib/api/types/recipe";
import { Recipe, RecipeTool } from "~/lib/api/types/recipe";
import RecipeIngredients from "~/components/Domain/Recipe/RecipeIngredients.vue";
interface RecipeToolWithOnHand extends RecipeTool {
onHand: boolean;
}
export default defineComponent({
components: {
RecipeIngredients,
@@ -59,9 +63,31 @@ export default defineComponent({
const { user } = usePageUser();
const { isEditMode } = usePageState(props.recipe.slug);
const recipeTools = computed(() => {
if (!(user.householdSlug && toolStore)) {
return props.recipe.tools.map((tool) => ({ ...tool, onHand: false }) as RecipeToolWithOnHand);
} else {
return props.recipe.tools.map((tool) => {
const onHand = tool.householdsWithTool?.includes(user.householdSlug) || false;
return { ...tool, onHand } as RecipeToolWithOnHand;
});
}
})
function updateTool(index: number) {
if (user.id && toolStore) {
toolStore.actions.updateOne(props.recipe.tools[index]);
if (user.id && user.householdSlug && toolStore) {
const tool = recipeTools.value[index];
if (tool.onHand && !tool.householdsWithTool?.includes(user.householdSlug)) {
if (!tool.householdsWithTool) {
tool.householdsWithTool = [user.householdSlug];
} else {
tool.householdsWithTool.push(user.householdSlug);
}
} else if (!tool.onHand && tool.householdsWithTool?.includes(user.householdSlug)) {
tool.householdsWithTool = tool.householdsWithTool.filter((household) => household !== user.householdSlug);
}
toolStore.actions.updateOne(tool);
} else {
console.log("no user, skipping server update");
}
@@ -69,6 +95,7 @@ export default defineComponent({
return {
toolStore,
recipeTools,
isEditMode,
updateTool,
};

View File

@@ -14,7 +14,7 @@
:show-add="true"
selector-type="categories"
/>
<RecipeChips v-else :items="recipe.recipeCategory" />
<RecipeChips v-else :items="recipe.recipeCategory" v-on="$listeners" />
</v-card-text>
</v-card>
@@ -32,7 +32,7 @@
:show-add="true"
selector-type="tags"
/>
<RecipeChips v-else :items="recipe.tags" url-prefix="tags" />
<RecipeChips v-else :items="recipe.tags" url-prefix="tags" v-on="$listeners" />
</v-card-text>
</v-card>
@@ -41,7 +41,7 @@
<v-card-title class="py-2"> {{ $t('tool.required-tools') }} </v-card-title>
<v-divider class="mx-2" />
<v-card-text class="pt-0">
<RecipeOrganizerSelector v-model="recipe.tools" selector-type="tools" />
<RecipeOrganizerSelector v-model="recipe.tools" selector-type="tools" v-on="$listeners" />
</v-card-text>
</v-card>
@@ -82,6 +82,8 @@ export default defineComponent({
const { user } = usePageUser();
const { isEditForm } = usePageState(props.recipe.slug);
return {
isEditForm,
user,

View File

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

View File

@@ -4,11 +4,18 @@
<div>
<v-menu v-model="menu" :disabled="!canEditScale" offset-y top nudge-top="6" :close-on-content-click="false">
<template #activator="{ on, attrs }">
<v-card class="pa-1 px-2" dark color="secondary darken-1" small v-bind="attrs" v-on="on">
<v-icon small class="mr-2">{{ $globals.icons.edit }}</v-icon>
<v-card
class="pa-1 px-2"
dark
color="secondary darken-1"
small
v-bind="attrs"
:style="{ cursor: canEditScale ? '' : 'default' }"
v-on="on"
>
<v-icon v-if="canEditScale" small class="mr-2">{{ $globals.icons.edit }}</v-icon>
<!-- eslint-disable-next-line vue/no-v-html -->
<span v-html="yieldDisplay"></span>
</v-card>
</template>
<v-card min-width="300px">

View File

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

View File

@@ -1,317 +0,0 @@
<template>
<div class="text-center">
<v-menu
v-model="showMenu"
offset-x
offset-overflow
left
allow-overflow
close-delay="125"
:close-on-content-click="false"
content-class="d-print-none"
:z-index="2"
>
<template #activator="{ on, attrs }">
<v-badge :value="timerEnded" overlap color="red" content="!">
<v-btn :fab="fab" :small="fab" :color="timerEnded ? 'secondary' : color" :icon="!fab" dark v-bind="attrs" v-on="on" @click.prevent>
<v-progress-circular
v-if="timerInitialized && !timerEnded"
:value="timerProgress"
:rotate="270"
:color="timerRunning ? undefined : 'primary'"
>
<v-icon small>{{ timerRunning ? $globals.icons.timer : $globals.icons.timerPause }}</v-icon>
</v-progress-circular>
<v-icon v-else>{{ $globals.icons.timer }}</v-icon>
</v-btn>
</v-badge>
</template>
<v-card>
<v-card-title>
<v-icon class="pr-2">{{ $globals.icons.timer }}</v-icon>
{{ $i18n.tc("recipe.timer.kitchen-timer") }}
</v-card-title>
<div class="mx-auto" style="width: fit-content;">
<v-progress-circular
:value="timerProgress"
:rotate="270"
color="primary"
class="mb-2"
:size="128"
:width="24"
>
<v-icon
v-if="timerInitialized && !timerRunning"
x-large
:color="timerEnded ? 'red' : 'primary'"
@click="() => timerEnded ? resetTimer() : resumeTimer()"
>
{{ timerEnded ? $globals.icons.stop : $globals.icons.pause }}
</v-icon>
</v-progress-circular>
</div>
<v-container width="100%" fluid class="ma-0 px-auto py-2">
<v-row no-gutters justify="center">
<v-col cols="3" align-self="center">
<v-text-field
:value="timerHours"
:min="0"
outlined
single-line
solo
hide-details
type="number"
:disabled="timerInitialized"
class="centered-input my-0 py-0"
style="font-size: large; width: 100px;"
@input="(v) => timerHours = v.toString().padStart(2, '0')"
/>
</v-col>
<v-col cols="1" align-self="center" style="text-align: center;">
<h1>:</h1>
</v-col>
<v-col cols="3" align-self="center">
<v-text-field
:value="timerMinutes"
:min="0"
outlined
single-line
solo
hide-details
type="number"
:disabled="timerInitialized"
class="centered-input my-0 py-0"
style="font-size: large; width: 100px;"
@input="(v) => timerMinutes = v.toString().padStart(2, '0')"
/>
</v-col>
<v-col cols="1" align-self="center" style="text-align: center;" >
<h1>:</h1>
</v-col>
<v-col cols="3" align-self="center">
<v-text-field
:value="timerSeconds"
:min="0"
outlined
single-line
solo
hide-details
type="number"
:disabled="timerInitialized"
class="centered-input my-0 py-0"
style="font-size: large; width: 100px;"
@input="(v) => timerSeconds = v.toString().padStart(2, '0')"
/>
</v-col>
</v-row>
</v-container>
<div class="mx-auto" style="width: 100%;">
<BaseButtonGroup
stretch
:buttons="timerButtons"
@initialize-timer="initializeTimer"
@pause-timer="pauseTimer"
@resume-timer="resumeTimer"
@stop-timer="resetTimer"
/>
</div>
</v-card>
</v-menu>
</div>
</template>
<script lang="ts">
import { computed, defineComponent, reactive, ref, toRefs, useContext, watch } from "@nuxtjs/composition-api";
import { ButtonOption } from "~/components/global/BaseButtonGroup.vue";
// @ts-ignore typescript can't find our audio file, but it's there!
import timerAlarmAudio from "~/assets/audio/kitchen_alarm.mp3";
export default defineComponent({
props: {
fab: {
type: Boolean,
default: false,
},
color: {
type: String,
default: "primary",
},
},
setup() {
const { $globals, i18n } = useContext();
const state = reactive({
showMenu: false,
timerInitialized: false,
timerRunning: false,
timerEnded: false,
timerInitialValue: 0,
timerValue: 0,
});
watch(
() => state.showMenu,
() => {
if (state.showMenu && state.timerEnded) {
resetTimer();
}
}
);
// ts doesn't recognize timerAlarmAudio because it's a weird import
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
const timerAlarm = new Audio(timerAlarmAudio);
timerAlarm.loop = true;
const timerHours = ref<string | number>("00");
const timerMinutes = ref<string | number>("00");
const timerSeconds = ref<string | number>("00");
const initializeButton: ButtonOption = {
icon: $globals.icons.timerPlus,
text: i18n.tc("recipe.timer.start-timer"),
event: "initialize-timer",
}
const pauseButton: ButtonOption = {
icon: $globals.icons.pause,
text: i18n.tc("recipe.timer.pause-timer"),
event: "pause-timer",
};
const resumeButton: ButtonOption = {
icon: $globals.icons.play,
text: i18n.tc("recipe.timer.resume-timer"),
event: "resume-timer",
};
const stopButton: ButtonOption = {
icon: $globals.icons.stop,
text: i18n.tc("recipe.timer.stop-timer"),
event: "stop-timer",
color: "red",
};
const timerButtons = computed<ButtonOption[]>(() => {
const buttons: ButtonOption[] = [];
if (state.timerInitialized) {
if (state.timerEnded) {
buttons.push(stopButton);
} else if (state.timerRunning) {
buttons.push(pauseButton, stopButton);
} else {
buttons.push(resumeButton, stopButton);
}
} else {
buttons.push(initializeButton);
}
// I don't know why this is failing the frontend lint test ¯\_(ツ)_/¯
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
return buttons;
});
const timerProgress = computed(() => {
if(state.timerInitialValue) {
return (state.timerValue / state.timerInitialValue) * 100;
} else {
return 0;
}
});
let timerInterval: number | null = null;
function decrementTimer() {
if (state.timerValue > 0) {
state.timerValue -= 1;
timerHours.value = Math.floor(state.timerValue / 3600).toString().padStart(2, "0");
timerMinutes.value = Math.floor(state.timerValue % 3600 / 60).toString().padStart(2, "0");
timerSeconds.value = Math.floor(state.timerValue % 3600 % 60).toString().padStart(2, "0");
}
else {
state.timerRunning = false;
state.timerEnded = true;
timerAlarm.currentTime = 0;
timerAlarm.play();
if (timerInterval) {
clearInterval(timerInterval);
timerInterval = null;
}
}
}
function initializeTimer() {
state.timerInitialized = true;
state.timerRunning = true;
state.timerEnded = false;
console.log(timerSeconds.value);
const hours = parseFloat(timerHours.value.toString()) > 0 ? parseFloat(timerHours.value.toString()) : 0;
const minutes = parseFloat(timerMinutes.value.toString()) > 0 ? parseFloat(timerMinutes.value.toString()) : 0;
const seconds = parseFloat(timerSeconds.value.toString()) > 0 ? parseFloat(timerSeconds.value.toString()) : 0;
state.timerInitialValue = (hours * 3600) + (minutes * 60) + seconds;
state.timerValue = state.timerInitialValue;
timerInterval = setInterval(decrementTimer, 1000) as unknown as number;
timerHours.value = Math.floor(state.timerValue / 3600).toString().padStart(2, "0");
timerMinutes.value = Math.floor(state.timerValue % 3600 / 60).toString().padStart(2, "0");
timerSeconds.value = Math.floor(state.timerValue % 3600 % 60).toString().padStart(2, "0");
};
function pauseTimer() {
state.timerRunning = false;
if (timerInterval) {
clearInterval(timerInterval);
timerInterval = null;
}
};
function resumeTimer() {
state.timerRunning = true;
timerInterval = setInterval(decrementTimer, 1000) as unknown as number;
};
function resetTimer() {
state.timerInitialized = false;
state.timerRunning = false;
state.timerEnded = false;
timerAlarm.pause();
timerAlarm.currentTime = 0;
timerHours.value = "00";
timerMinutes.value = "00";
timerSeconds.value = "00";
state.timerValue = 0;
if (timerInterval) {
clearInterval(timerInterval);
timerInterval = null;
}
};
return {
...toRefs(state),
timerHours,
timerMinutes,
timerSeconds,
timerButtons,
timerProgress,
initializeTimer,
pauseTimer,
resumeTimer,
resetTimer,
};
},
});
</script>
<style scoped>
.centered-input >>> input {
text-align: center;
}
</style>

View File

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

View File

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

View File

@@ -8,14 +8,14 @@
</v-icon>
<div v-if="large" class="text-small">
<slot>
{{ small ? "" : waitingText }}
{{ (small || tiny) ? "" : waitingText }}
</slot>
</div>
</div>
</v-progress-circular>
<div v-if="!large" class="text-small">
<slot>
{{ small ? "" : waitingTextCalculated }}
{{ (small || tiny) ? "" : waitingTextCalculated }}
</slot>
</div>
</div>
@@ -31,6 +31,10 @@ export default defineComponent({
type: Boolean,
default: true,
},
tiny: {
type: Boolean,
default: false,
},
small: {
type: Boolean,
default: false,
@@ -50,6 +54,13 @@ export default defineComponent({
},
setup(props) {
const size = computed(() => {
if (props.tiny) {
return {
width: 2,
icon: 0,
size: 25,
};
}
if (props.small) {
return {
width: 2,

View File

@@ -9,7 +9,6 @@ export const useTools = function (eager = true) {
id: "",
name: "",
slug: "",
onHand: false,
});
const api = useUserApi();

View File

@@ -2,7 +2,7 @@ import { useAsync, useRouter, ref } from "@nuxtjs/composition-api";
import { useAsyncKey } from "../use-utils";
import { usePublicExploreApi } from "~/composables/api/api-client";
import { useUserApi } from "~/composables/api";
import { Recipe } from "~/lib/api/types/recipe";
import { OrderByNullPosition, Recipe } from "~/lib/api/types/recipe";
import { RecipeSearchQuery } from "~/lib/api/user/recipes/recipe";
export const allRecipes = ref<Recipe[]>([]);
@@ -11,12 +11,14 @@ export const recentRecipes = ref<Recipe[]>([]);
function getParams(
orderBy: string | null = null,
orderDirection = "desc",
orderByNullPosition: OrderByNullPosition | null = null,
query: RecipeSearchQuery | null = null,
queryFilter: string | null = null
) {
return {
orderBy,
orderDirection,
orderByNullPosition,
paginationSeed: query?._searchSeed, // propagate searchSeed to stabilize random order pagination
searchSeed: query?._searchSeed, // unused, but pass it along for completeness of data
search: query?.search,
@@ -47,6 +49,7 @@ export const useLazyRecipes = function (publicGroupSlug: string | null = null) {
perPage: number,
orderBy: string | null = null,
orderDirection = "desc",
orderByNullPosition: OrderByNullPosition | null = null,
query: RecipeSearchQuery | null = null,
queryFilter: string | null = null,
) {
@@ -54,7 +57,7 @@ export const useLazyRecipes = function (publicGroupSlug: string | null = null) {
const { data, error } = await api.recipes.getAll(
page,
perPage,
getParams(orderBy, orderDirection, query, queryFilter),
getParams(orderBy, orderDirection, orderByNullPosition, query, queryFilter),
);
if (error?.response?.status === 404) {
@@ -88,7 +91,7 @@ export const useLazyRecipes = function (publicGroupSlug: string | null = null) {
}
async function getRandom(query: RecipeSearchQuery | null = null, queryFilter: string | null = null) {
const { data } = await api.recipes.getAll(1, 1, getParams("random", "desc", query, queryFilter));
const { data } = await api.recipes.getAll(1, 1, getParams("random", "desc", null, query, queryFilter));
if (data?.items.length) {
return data.items[0];
}

View File

@@ -13,7 +13,6 @@ export const useFoodData = function () {
name: "",
description: "",
labelId: undefined,
onHand: false,
});
}

View File

@@ -3,16 +3,21 @@ import { useData, useReadOnlyStore, useStore } from "../partials/use-store-facto
import { RecipeTool } from "~/lib/api/types/recipe";
import { usePublicExploreApi, useUserApi } from "~/composables/api";
interface RecipeToolWithOnHand extends RecipeTool {
onHand: boolean;
}
const store: Ref<RecipeTool[]> = ref([]);
const loading = ref(false);
const publicLoading = ref(false);
export const useToolData = function () {
return useData<RecipeTool>({
return useData<RecipeToolWithOnHand>({
id: "",
name: "",
slug: "",
onHand: false,
householdsWithTool: [],
});
}

View File

@@ -46,17 +46,23 @@ export const useGroupRecipeActions = function (
return groupRecipeActions.value;
});
function parseRecipeActionUrl(url: string, recipe: Recipe): string {
function parseRecipeActionUrl(url: string, recipe: Recipe, recipeScale: number): string {
const recipeServings = (recipe.recipeServings || 1) * recipeScale;
const recipeYieldQuantity = (recipe.recipeYieldQuantity || 1) * recipeScale;
/* eslint-disable no-template-curly-in-string */
return url
.replace("${url}", window.location.href)
.replace("${id}", recipe.id || "")
.replace("${slug}", recipe.slug || "")
.replace("${servings}", recipeServings.toString())
.replace("${yieldQuantity}", recipeYieldQuantity.toString())
.replace("${yieldText}", recipe.recipeYield || "")
/* eslint-enable no-template-curly-in-string */
};
async function execute(action: GroupRecipeActionOut, recipe: Recipe): Promise<void | RequestResponse<unknown>> {
const url = parseRecipeActionUrl(action.url, recipe);
async function execute(action: GroupRecipeActionOut, recipe: Recipe, recipeScale: number): Promise<void | RequestResponse<unknown>> {
const url = parseRecipeActionUrl(action.url, recipe, recipeScale);
switch (action.actionType) {
case "link":

View File

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

File diff suppressed because it is too large Load Diff

View File

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

View File

@@ -15,7 +15,7 @@
"docs": "Documentació",
"download-log": "Descarregueu el registre",
"download-recipe-json": "Últim JSON recuperat",
"github": "Github",
"github": "GitHub",
"log-lines": "Registre Línies",
"not-demo": "No Demo",
"portfolio": "Projectes",
@@ -43,7 +43,7 @@
"category-deleted": "S'ha suprimit la categoria",
"category-deletion-failed": "S'ha produït un error al eliminar la categoria",
"category-filter": "Filtre per categoria",
"category-update-failed": "S'ha produït un error a l'actualitzar la categoria",
"category-update-failed": "S'ha produït un error en actualitzar la categoria",
"category-updated": "S'ha actualitzat la categoria",
"uncategorized-count": "{count} sense categoritzar",
"create-a-category": "Crea una categoria",
@@ -51,7 +51,7 @@
"category": "Categoria"
},
"events": {
"apprise-url": "URL de Apprise",
"apprise-url": "URL d'Apprise",
"database": "Base de Dades",
"delete-event": "Suprimiu l'esdeveniment",
"event-delete-confirmation": "Està segur que vol suprimir aquest esdeveniment?",
@@ -96,7 +96,7 @@
"dashboard": "Tauler de control",
"delete": "Suprimeix",
"disabled": "Desactivat",
"download": "Baixal",
"download": "Descarregar",
"duplicate": "Duplica",
"edit": "Edita",
"enabled": "Activat",
@@ -225,10 +225,10 @@
"cannot-delete-group-with-users": "No es pot suprimir un grup amb usuaris",
"confirm-group-deletion": "Confirma l'eliminació del grup",
"create-group": "Crea un grup",
"error-updating-group": "Sha produït un error a l'actualitzar el grup",
"error-updating-group": "Sha produït un error actualitzant el grup",
"group": "Grup",
"group-deleted": "S'ha suprimir el grup",
"group-deletion-failed": "S'ha produït un error al suprimir el grup",
"group-deleted": "S'ha suprimit el grup",
"group-deletion-failed": "S'ha produït un error en suprimir el grup",
"group-id-with-value": "Identificador del grup: {groupID}",
"group-name": "Nom del grup",
"group-not-found": "No s'ha trobat el grup",
@@ -238,15 +238,15 @@
"manage-groups": "Gestiona els grups",
"user-group": "Grup",
"user-group-created": "S'ha creat el grup de l'usuari",
"user-group-creation-failed": "Ha fallat la creación del grup de l'usuari",
"user-group-creation-failed": "Ha fallat la creació del grup de l'usuari",
"settings": {
"keep-my-recipes-private": "Manté les meues receptes privades",
"keep-my-recipes-private-description": "Posa el teu grup i totes les receptes com privades. Podeu canviar-lo després."
"keep-my-recipes-private": "Mantenir les meves receptes privades",
"keep-my-recipes-private-description": "Posa el teu grup i totes les receptes com a privades. Podeu canviar-ho després."
},
"manage-members": "Gestiona els membres",
"manage-members-description": "Gestiona els permisos dels membres de la teva llar. {manage} permet a l'usuari accedir la pàgina de gestió de dades, i {invite} permet a l'usuari generar enllaços d'invitació per altres usuaris. Els propitetaris de grups no es poden canviar els seus propis permisos.",
"manage-members-description": "Gestiona els permisos dels membres de la teva llar. {manage} permet a l'usuari accedir la pàgina de gestió de dades, i {invite} permet a l'usuari generar enllaços d'invitació per altres usuaris. Els propietaris de grups no es poden canviar els seus propis permisos.",
"manage": "Gestiona",
"manage-household": "Gestiona llar",
"manage-household": "Gestiona la llar",
"invite": "Convida",
"looking-to-update-your-profile": "Voleu actualitzar el vostre perfil?",
"default-recipe-preferences-description": "Aquestes són les configuracions per defecte quan una recepta es crea en el teu grup. Podeu canviar-les de forma individual en el menú d'opcions de cada recepta.",
@@ -256,14 +256,14 @@
"private-group-description": "Configurar el teu grup com a privat en desactivarà totes les opcions de vista pública. Això sobreescriu qualsevol configuració de vista pública individual",
"enable-public-access": "Permetre l'accés públic",
"enable-public-access-description": "Fes les receptes en grup públiques per defecte, i permet a visitants veure receptes sense registrar-se",
"allow-users-outside-of-your-group-to-see-your-recipes": "Permeteu als usuaris d'altres grups, visualitzar les vostres receptes",
"allow-users-outside-of-your-group-to-see-your-recipes": "Permeteu que usuaris d'altres grups visualitzin les vostres receptes",
"allow-users-outside-of-your-group-to-see-your-recipes-description": "Si ho habiliteu, podreu compartir enllaços públics de receptes específiques sense autoritzar l'usuari. Si està deshabilitat, només podreu compartir amb usuaris del vostre grup o generant enllaços privats",
"show-nutrition-information": "Mostra la informació nutricional",
"show-nutrition-information-description": "Si ho habiliteu, mostrareu la informació nutricional disponible. Si no hi ha informació nutricional disponible, no es mostrarà res",
"show-recipe-assets": "Mostreu els recursos de les receptes",
"show-recipe-assets-description": "Si està habilitat, es mostraran els recursos de les receptes si hi són disponibles",
"show-recipe-assets-description": "Si està habilitat, es mostraran els recursos de les receptes si estan disponibles",
"default-to-landscape-view": "Vista horitzontal per defecte",
"default-to-landscape-view-description": "Quan està activat la capçalera de la secció de receptes es mostraran en vista panoràmica",
"default-to-landscape-view-description": "Quan està activat la capçalera de la secció de receptes es mostrarà en vista panoràmica",
"disable-users-from-commenting-on-recipes": "Desactiva els comentaris a les receptes",
"disable-users-from-commenting-on-recipes-description": "Amaga la secció de comentaris a les pàgines de recepta i deshabilita els comentaris",
"disable-organizing-recipe-ingredients-by-units-and-food": "Desactiva l'organització dels ingredients de la recepta per unitats i aliments",
@@ -277,7 +277,7 @@
"admin-group-management-text": "Els canvis en aquest grup s'actualitzaran immediatament.",
"group-id-value": "ID del grup: {0}",
"total-households": "Llars totals",
"you-must-select-a-group-before-selecting-a-household": "You must select a group before selecting a household"
"you-must-select-a-group-before-selecting-a-household": "Heu de seleccionar un grup abans de seleccionar una llar"
},
"household": {
"household": "Llar",
@@ -286,10 +286,10 @@
"create-household": "Crea llar",
"household-name": "Nom de la llar",
"household-group": "Grup de llar",
"household-management": "Gestió de llar",
"household-management": "Gestió de la llar",
"manage-households": "Gestiona llars",
"admin-household-management": "Gestió de llar d'administrador",
"admin-household-management-text": "Canvis en aquesta llar s'actualitzaran immediatament.",
"admin-household-management": "Gestió de la llar de l'administrador",
"admin-household-management-text": "Els canvis a aquesta llar s'actualitzaran immediatament.",
"household-id-value": "Id de llar: {0}",
"private-household": "Llar privada",
"private-household-description": "Configurar la teva llar com a privada en desactivarà totes les opcions de vista pública. Això sobreescriu qualsevol configuració de vista pública individual",
@@ -304,7 +304,7 @@
"meal-plan": {
"create-a-new-meal-plan": "Crea un nou menú",
"update-this-meal-plan": "Actualitza aquest pla de menjar",
"dinner-this-week": "Sopar d'esta setmana",
"dinner-this-week": "Sopar d'aquesta setmana",
"dinner-today": "Sopar per avui",
"dinner-tonight": "Sopar d'aquesta nit",
"edit-meal-plan": "Edita el menú",
@@ -337,8 +337,8 @@
"start-date": "Data d'inici",
"rule-day": "Regla per a Dia",
"meal-type": "Tipus de menjar",
"breakfast": "Desdejuni",
"lunch": "Menjar principal",
"breakfast": "Esmorzar",
"lunch": "Dinar",
"dinner": "Sopar",
"type-any": "Qualsevol",
"day-any": "Qualsevol",
@@ -348,7 +348,7 @@
"meal-note": "Notes del menú",
"note-only": "Només notes",
"random-meal": "Menú aleatori",
"random-dinner": "Principal aleatori",
"random-dinner": "Sopar aleatori",
"random-side": "Guarnició aleatòria",
"this-rule-will-apply": "Aquesta regla s'aplicarà {dayCriteria} {mealTypeCriteria}.",
"to-all-days": "a tots els dies",
@@ -518,7 +518,7 @@
"save-recipe-before-use": "Desa la recepta abans d'utilitzar-la",
"section-title": "Secció",
"servings": "Porcions",
"serves-amount": "Serves {amount}",
"serves-amount": "Serveis {amount}",
"share-recipe-message": "Vull compartir la meua recepta {0} amb tú.",
"show-nutrition-values": "Mostra els valors nutricionals",
"sodium-content": "Sodi",
@@ -547,8 +547,8 @@
"failed-to-add-recipe-to-mealplan": "S'ha produït un error afegint la recepta al menú",
"failed-to-add-to-list": "No s'ha pogut afegir a la llista",
"yield": "Racions",
"yields-amount-with-text": "Yields {amount} {text}",
"yield-text": "Yield Text",
"yields-amount-with-text": "Racions {amount} {text}",
"yield-text": "Mida de racions",
"quantity": "Quantitat",
"choose-unit": "Tria el tipus d'unitat",
"press-enter-to-create": "Premeu enter per a crear-lo",
@@ -570,13 +570,6 @@
"increase-scale-label": "Multiplica",
"locked": "Bloquejat",
"public-link": "Enllaç públic",
"timer": {
"kitchen-timer": "Temporitzador de cuina",
"start-timer": "Iniciar temporitzador",
"pause-timer": "Pausa el temporitzador",
"resume-timer": "Reprèn el temporitzador",
"stop-timer": "Atura el temporitzador"
},
"edit-timeline-event": "Edita l'esdeveniment de la cronologia",
"timeline": "Cronologia",
"timeline-is-empty": "Encara no hi ha res a la cronologia. Prova de fer aquesta recepta!",
@@ -586,7 +579,6 @@
"made-this": "Ho he fet",
"how-did-it-turn-out": "Com ha sortit?",
"user-made-this": "{user} ha fet això",
"last-made-date": "Última vegada feta {date}",
"api-extras-description": "Els extres de receptes són una funcionalitat clau de l'API de Mealie. Permeten crear parells clau/valor JSON personalitzats dins una recepta, per referenciar-los des d'aplicacions de tercers. Pots emprar aquestes claus per proveir informació, per exemple per a desencadenar automatitzacions o missatges personlitzats per a propagar al teu dispositiu desitjat.",
"message-key": "Clau del missatge",
"parse": "Analitzar",
@@ -644,9 +636,9 @@
"recipe-debugger-use-openai-description": "Fes servir OpenAI per processar els resultats en comptes d'emprar la llibreria de processat. Quan creis una recepta via URL, es fa automàticament si la llibreria falla, però ho pots provar manualment aquí.",
"debug": "Depuració",
"tree-view": "Vista en arbre",
"recipe-servings": "Recipe Servings",
"recipe-servings": "Serveis per la recepta",
"recipe-yield": "Rendiment de la recepta",
"recipe-yield-text": "Recipe Yield Text",
"recipe-yield-text": "Mida/Unitats",
"unit": "Unitat",
"upload-image": "Puja una imatge",
"screen-awake": "Mantenir la pantalla encesa",
@@ -654,7 +646,6 @@
"nextStep": "Següent pas",
"recipe-actions": "Accions de la Recepta",
"parser": {
"experimental-alert-text": "Mealie fa servir processament de llenguatge natural per processar i crear unitats i elements de menjar pels ingredients de la teva recepta. Aquesta funcionalitat és experimental i pot no funcionar com s'espera. Si prefereixes no fer servir els resultats processats, pots seleccionar \"Cancel·la\" i els canvis no es guardaran.",
"ingredient-parser": "Processador d'ingredients",
"explanation": "Per fer servir el processador d'aliments, clica el botó \"Processa tot\" per començar el procés. Un cop els ingredients processats estiguin disponibles, pots revisar-los per comprovar que s'hagin processat degudament. La confiança del model és mostrada a la dreta del títol de l'element. Aquesta puntuació es la mitja de totes les puntuacions individuals i pot no ser del tot precisa.",
"alerts-explainer": "Es mostraran alertes si un menjar o unitat coincident es troben però no existeixen a la base de dades.",
@@ -669,24 +660,24 @@
"no-food": "Sense menjar"
},
"reset-servings-count": "Reiniciar racions servides",
"not-linked-ingredients": "Additional Ingredients"
"not-linked-ingredients": "Ingredients addicionals"
},
"recipe-finder": {
"recipe-finder": "Recipe Finder",
"recipe-finder-description": "Search for recipes based on ingredients you have on hand. You can also filter by tools you have available, and set a maximum number of missing ingredients or tools.",
"selected-ingredients": "Selected Ingredients",
"no-ingredients-selected": "No ingredients selected",
"missing": "Missing",
"no-recipes-found": "No recipes found",
"no-recipes-found-description": "Try adding more ingredients to your search or adjusting your filters",
"include-ingredients-on-hand": "Include Ingredients On Hand",
"include-tools-on-hand": "Include Tools On Hand",
"max-missing-ingredients": "Max Missing Ingredients",
"max-missing-tools": "Max Missing Tools",
"selected-tools": "Selected Tools",
"other-filters": "Other Filters",
"ready-to-make": "Ready to Make",
"almost-ready-to-make": "Almost Ready to Make"
"recipe-finder": "Cercador de receptes",
"recipe-finder-description": "Cerqueu receptes basades en els ingredients que teniu disponibles. També podeu filtrar pels estris que tingueu disponibles i seleccionar el nombre màxim d'ingredients o estris que us faltin.",
"selected-ingredients": "Ingredients seleccionats",
"no-ingredients-selected": "No hi ha ingredients seleccionats",
"missing": "Absent",
"no-recipes-found": "No s'han trobat receptes",
"no-recipes-found-description": "Intenteu afegir més ingredients a la cerca o ajusteu els filtres",
"include-ingredients-on-hand": "Inclou els ingredients disponibles",
"include-tools-on-hand": "Inclou els estris disponibles",
"max-missing-ingredients": "Màxim d'ingredients absents",
"max-missing-tools": "Màxim d'estris absents",
"selected-tools": "Estris seleccionats",
"other-filters": "Altres filtres",
"ready-to-make": "Llest per a preparar-ho",
"almost-ready-to-make": "Gairebé llest per a preparar-ho"
},
"search": {
"advanced-search": "Cerca avançada",
@@ -729,7 +720,7 @@
"backup-restore": "Restaura la còpia de seguretat",
"back-restore-description": "Restaurar aquesta còpia de seguretat sobreescriurà totes les dades actuals de la teva base de dades i qualsevol directori i els substituirà amb el contingut d'aquesta còpia de seguretat. {cannot-be-undone} Si la restauració es duu a terme correctament, se us tancarà la sessió.",
"cannot-be-undone": "Aquesta acció no es pot desfer. Utilitza-la amb precaució.",
"postgresql-note": "Si estàs fent servir PostGresSQL, si us plau, revisa el {backup-restore-process} abans de fer la restauració.",
"postgresql-note": "If you are using PostgreSQL, please review the {backup-restore-process} prior to restoring.",
"backup-restore-process-in-the-documentation": "el procés de còpia de seguretat i restauració es troba a la documentació",
"irreversible-acknowledgment": "Entenc que aquesta acció és irreversible, destructiva i pot ocasionar la pèrdua de dades",
"restore-backup": "Restaura la còpia de seguretat"
@@ -891,7 +882,7 @@
"are-you-sure-you-want-to-check-all-items": "Estàs segur que vols marcar tots els elements?",
"are-you-sure-you-want-to-uncheck-all-items": "Estàs segur que vols desmarcar tots els elements?",
"are-you-sure-you-want-to-delete-checked-items": "Estàs segur que vols eliminar tots els elements marcats?",
"no-shopping-lists-found": "No Shopping Lists Found"
"no-shopping-lists-found": "No s'han trobat llistes de la compra"
},
"sidebar": {
"all-recipes": "Receptes",
@@ -1057,8 +1048,8 @@
"foods": {
"merge-dialog-text": "Combinant els aliments seleccionats, es fusionaran els dos aliments en un. El primer aliment serà eliminat i totes les referències s'actualitzaran a l'aliment resultant.",
"merge-food-example": "Combinant {food1} i {food2}",
"seed-dialog-text": "Afegeix a la base de dades els noms dels aliments en el vostre idioma. Açò crearà més de 200 aliments comuns per a què pugueu organitzar la vostra base de dades. Els noms dels aliments han estat traduïts gràcies a l'esforç de la comunitat.",
"seed-dialog-warning": "Ja teniu algunes dades a la vostra base. Aquesta acció no tindrà en compte duplicats i haureu d'eliminar-los manualment.",
"seed-dialog-text": "Seed the database with foods based on your local language. This will create 200+ common foods that can be used to organize your database. Foods are translated via a community effort.",
"seed-dialog-warning": "You have already have some items in your database. This action will not reconcile duplicates, you will have to manage them manually.",
"combine-food": "Combinar Aliment",
"source-food": "Aliment d'Origen",
"target-food": "Aliment de Destí",
@@ -1303,7 +1294,7 @@
"profile": {
"welcome-user": "👋 Benvingut/Benvinguda, {0}!",
"description": "Gestiona el teu perfil, receptes i configuracions de grup.",
"invite-link": "Invite Link",
"invite-link": "Enllaç d'invitació",
"get-invite-link": "Obtén enllaç d'invitacio",
"get-public-link": "Enllaç públic",
"account-summary": "Resum del compte",
@@ -1353,8 +1344,8 @@
"cookbook": {
"cookbooks": "Receptaris",
"description": "Els llibres de cuina són una altra manera d'organitzar les receptes creant seccions transversals de receptes, organitzadors i altres filtres. La creació d'un llibre de cuina afegirà una entrada a la barra lateral i totes les receptes amb les etiquetes i categories escollides es mostraran al llibre de cuina.",
"hide-cookbooks-from-other-households": "Hide Cookbooks from Other Households",
"hide-cookbooks-from-other-households-description": "When enabled, only cookbooks from your household will appear on the sidebar",
"hide-cookbooks-from-other-households": "Amaga els receptaris d'altres llars",
"hide-cookbooks-from-other-households-description": "Quan s'habilita només es veuran receptaris de la teva llar",
"public-cookbook": "Receptari públic",
"public-cookbook-description": "Els receptaris públics es poden compartir amb usuaris que no estiguin dins l'aplicació i es mostraran a la pàgina del vostre grup.",
"filter-options": "Opcions de filtres",

View File

@@ -15,7 +15,7 @@
"docs": "Dokumentace",
"download-log": "Stáhnout log",
"download-recipe-json": "Poslední scrapovaný JSON",
"github": "Github",
"github": "GitHub",
"log-lines": "Řádky logů",
"not-demo": "Není demo",
"portfolio": "Portfolio",
@@ -257,9 +257,9 @@
"enable-public-access": "Povolit veřejný přístup",
"enable-public-access-description": "Ve výchozím nastavení nastavit recepty skupiny jako veřejné a umožněte návštěvníkům prohlížet recepty bez přihlášení",
"allow-users-outside-of-your-group-to-see-your-recipes": "Povolit uživatelům mimo vaši skupinu vidět vaše recepty",
"allow-users-outside-of-your-group-to-see-your-recipes-description": "When enabled you can use a public share link to share specific recipes without authorizing the user. When disabled, you can only share recipes with users who are in your group or with a pre-generated private link",
"allow-users-outside-of-your-group-to-see-your-recipes-description": "Pokud je tato možnost povolena, můžete použít veřejný odkaz pro sdílení konkrétních receptů bez autorizace uživatele. Pokud je tato možnost vypnutá, můžete sdílet recepty pouze s uživateli, kteří jsou ve vaší skupině, nebo s předem vygenerovaným soukromým odkazem",
"show-nutrition-information": "Zobrazit nutriční informace",
"show-nutrition-information-description": "When enabled the nutrition information will be shown on the recipe if available. If there is no nutrition information available, the nutrition information will not be shown",
"show-nutrition-information-description": "Pokud je povoleno, informace o výživě se zobrazí na receptu, pokud je k dispozici. Nejsou-li k dispozici údaje o výživové hodnotě, nebudou zobrazeny údaje o výživové hodnotě",
"show-recipe-assets": "Zobrazit položky receptu",
"show-recipe-assets-description": "Pokud je tato možnost povolena, zobrazí se u receptu zdroje, pokud jsou k dispozici",
"default-to-landscape-view": "Výchozí zobrazení na šířku",
@@ -270,19 +270,19 @@
"disable-organizing-recipe-ingredients-by-units-and-food-description": "Skryje pole Potravina, Jednotka a Množství pro ingredience a považuje ingredience za textová pole",
"general-preferences": "Všeobecné předvolby",
"group-recipe-preferences": "Preference receptů pro skupinu",
"report": "Report",
"report-with-id": "Report ID: {id}",
"report": "Nahlásit",
"report-with-id": "ID hlášení: {id}",
"group-management": "Správa skupin",
"admin-group-management": "Administrátorská správa skupiny",
"admin-group-management-text": "Změny v této skupině budou okamžitě zohledněny.",
"group-id-value": "ID skupiny: {0}",
"total-households": "Celkem domácností",
"you-must-select-a-group-before-selecting-a-household": "You must select a group before selecting a household"
"you-must-select-a-group-before-selecting-a-household": "Před výběrem domácnosti musíte vybrat skupinu"
},
"household": {
"household": "Domácnost",
"households": "Domácnosti",
"user-household": "User Household",
"user-household": "Uživatelova domácnost",
"create-household": "Vytvořit domácnost",
"household-name": "Název domácnosti",
"household-group": "Skupina domácnosti",
@@ -349,16 +349,16 @@
"note-only": "Pouze poznámka",
"random-meal": "Náhodné jídlo",
"random-dinner": "Náhodná večeře",
"random-side": "Random Side",
"random-side": "Náhodná příloha",
"this-rule-will-apply": "Toto pravidlo se použije {dayCriteria} {mealTypeCriteria}.",
"to-all-days": "na všechny dny",
"on-days": "on {0}s",
"on-days": "každé {0}",
"for-all-meal-types": "pro všechny druhy jídel",
"for-type-meal-types": "pro {0} druhy jídel",
"meal-plan-rules": "Pravidla tvůrce jídelníčků",
"new-rule": "Nové pravidlo",
"meal-plan-rules-description": "You can create rules for auto selecting recipes for your meal plans. These rules are used by the server to determine the random pool of recipes to select from when creating meal plans. Note that if rules have the same day/type constraints then the rule filters will be merged. In practice, it's unnecessary to create duplicate rules, but it's possible to do so.",
"new-rule-description": "When creating a new rule for a meal plan you can restrict the rule to be applicable for a specific day of the week and/or a specific type of meal. To apply a rule to all days or all meal types you can set the rule to \"Any\" which will apply it to all the possible values for the day and/or meal type.",
"meal-plan-rules-description": "Můžete vytvořit pravidla pro automatický výběr receptů pro vaše stravovací plány. Tato pravidla používají server k určení náhodného souboru receptů, ze kterých se při vytváření plánů jídla vybírat. Všimněte si, že pokud mají pravidla stejná omezení den/typ, budou filtry pravidel sloučeny. V praxi je zbytečné vytvářet duplicitní pravidla, ale je to možné.",
"new-rule-description": "Při vytváření nového pravidla pro plán jídla můžete omezit použití pravidla pro konkrétní den v týdnu a/nebo konkrétní druh jídla. Chcete-li použít pravidlo pro všechny dny nebo všechny typy jídla, můžete nastavit pravidlo na \"Jakékoliv\", které se použije na všechny možné hodnoty pro den a/nebo druh jídla.",
"recipe-rules": "Pravidla receptu",
"applies-to-all-days": "Použije se na všechny dny",
"applies-on-days": "Platí pro {0}",
@@ -373,7 +373,7 @@
"recipe-migration": "Přenést recept",
"chowdown": {
"description": "Migrovat data z aplikace Chowdown",
"description-long": "Mealie natively supports the chowdown repository format. Download the code repository as a .zip file and upload it below.",
"description-long": "Mealie nativně podporuje formát chowdown. Stáhněte si z repozitáře kód jako .zip soubor a nahrajte ho níže.",
"title": "Chowdown"
},
"nextcloud": {
@@ -403,7 +403,7 @@
"choose-migration-type": "Zvolte si typ migrace",
"tag-all-recipes": "Označit všechny recepty pomocí štítku {tag-name}",
"nextcloud-text": "Nextcloud recepty lze importovat ze souboru zip, který obsahuje data uložená v Nextcloudu. Podívejte se na příklad struktury složek níže, abyste se ujistili, že vaše recepty lze importovat.",
"chowdown-text": "Mealie natively supports the chowdown repository format. Download the code repository as a .zip file and upload it below.",
"chowdown-text": "Mealie nativně podporuje formát chowdown. Stáhněte si z repozitáře kód jako .zip soubor a nahrajte ho níže.",
"recipe-1": "Recept 1",
"recipe-2": "Recept 2",
"paprika-text": "Mealie může importovat recepty z aplikace Paprika. Exportujte své recepty z papriky, přejmenujte příponu exportovaného souboru na .zip a nahrajte jej níže.",
@@ -414,7 +414,7 @@
},
"myrecipebox": {
"title": "My Recipe Box",
"description-long": "Mealie can import recipes from My Recipe Box. Export your recipes in CSV format, then upload the .csv file below."
"description-long": "Mealie může importovat recepty z My Recipe Box. Exportujte recepty ve formátu CSV, poté nahrajte soubor .zip níže."
},
"recipekeeper": {
"title": "Recipe Keeper",
@@ -518,7 +518,7 @@
"save-recipe-before-use": "Před použitím uložit recept",
"section-title": "Název sekce",
"servings": "Porce",
"serves-amount": "Serves {amount}",
"serves-amount": "Porce {amount}",
"share-recipe-message": "Chci s vámi sdílet svůj recept \"{0}\".",
"show-nutrition-values": "Zobrazit výživové hodnoty",
"sodium-content": "Sodík",
@@ -547,7 +547,7 @@
"failed-to-add-recipe-to-mealplan": "Přidání receptu do jídelníčku selhalo",
"failed-to-add-to-list": "Přidání do seznamu se nezdařilo",
"yield": "Úroda",
"yields-amount-with-text": "Yields {amount} {text}",
"yields-amount-with-text": "Pro {amount} {text}",
"yield-text": "Yield Text",
"quantity": "Množství",
"choose-unit": "Vybrat jednotku",
@@ -570,13 +570,6 @@
"increase-scale-label": "Zvýšit násobení o 1",
"locked": "Uzamčeno",
"public-link": "Veřejný odkaz",
"timer": {
"kitchen-timer": "Kuchyňský časovač",
"start-timer": "Spustit časovač",
"pause-timer": "Pozastavit časovač",
"resume-timer": "Obnovit časovač",
"stop-timer": "Zastavit časovač"
},
"edit-timeline-event": "Upravit událost časové osy",
"timeline": "Časová osa",
"timeline-is-empty": "Zatím nic na časové ose není. Zkuste vytvořit tento recept!",
@@ -586,13 +579,12 @@
"made-this": "Toto jsem uvařil",
"how-did-it-turn-out": "Jak to dopadlo?",
"user-made-this": "{user} udělal toto",
"last-made-date": "Naposledy uvařeno {date}",
"api-extras-description": "Recipes extras are a key feature of the Mealie API. They allow you to create custom JSON key/value pairs within a recipe, to reference from 3rd party applications. You can use these keys to provide information, for example to trigger automations or custom messages to relay to your desired device.",
"message-key": "Message Key",
"parse": "Parse",
"api-extras-description": "Recepty jsou klíčovým rysem rozhraní pro API Mealie. Umožňují vytvářet vlastní klíče/hodnoty JSON v rámci receptu pro odkazy na aplikace třetích stran. Tyto klíče můžete použít pro poskytnutí informací, například pro aktivaci automatizace nebo vlastních zpráv pro přenos do požadovaného zařízení.",
"message-key": "Klíč zprávy",
"parse": "Analyzovat",
"attach-images-hint": "Přiložit obrázky přetažením jich do editoru",
"drop-image": "Drop image",
"enable-ingredient-amounts-to-use-this-feature": "Enable ingredient amounts to use this feature",
"drop-image": "Vložit obrázek",
"enable-ingredient-amounts-to-use-this-feature": "Chcete-li tuto funkci používat, povolte množství ingrediencí",
"recipes-with-units-or-foods-defined-cannot-be-parsed": "Recepty s definovanými jednotkami nebo potravinami nelze zpracovat.",
"parse-ingredients": "Rozbor ingrediencí",
"edit-markdown": "Upravit Markdown",
@@ -611,12 +603,12 @@
"should-translate-description": "Přeložit recept do mého jazyka",
"please-wait-image-procesing": "Počkejte prosím, obrázek se zpracovává. Může to chvíli trvat.",
"bulk-url-import": "Hromadný import adres URL",
"debug-scraper": "Debug Scraper",
"debug-scraper": "Ladící Scraper",
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Vytvořte recept zadáním názvu. Všechny recepty musí mít jedinečná jména.",
"new-recipe-names-must-be-unique": "Názvy receptů musí být jedinečné",
"scrape-recipe": "Scrape Recipe",
"scrape-recipe-description": "Scrape a recipe by url. Provide the url for the site you want to scrape, and Mealie will attempt to scrape the recipe from that site and add it to your collection.",
"scrape-recipe-have-a-lot-of-recipes": "Have a lot of recipes you want to scrape at once?",
"scrape-recipe": "Zpracovat recept",
"scrape-recipe-description": "Zpracovat recept na url. Uveďte adresu url pro str8nku, kterou chcete zpracovat a Mealie se pokusí zpracovat recept z tohoto webu a přidat jej do vaší sbírky.",
"scrape-recipe-have-a-lot-of-recipes": "Máte spoustu receptů, které chcete zpracovat najednou?",
"scrape-recipe-suggest-bulk-importer": "Vyzkoušejte hromadný import",
"scrape-recipe-have-raw-html-or-json-data": "Máte surová data HTML nebo JSON?",
"scrape-recipe-you-can-import-from-raw-data-directly": "Můžete importovat přímo ze surových dat",
@@ -632,19 +624,19 @@
"create-a-recipe-by-uploading-a-scan": "Vytvořte recept nahráním skenu.",
"upload-a-png-image-from-a-recipe-book": "Nahrát png obrázek z knihy receptů",
"recipe-bulk-importer": "Hromadný import receptů",
"recipe-bulk-importer-description": "The Bulk recipe importer allows you to import multiple recipes at once by queueing the sites on the backend and running the task in the background. This can be useful when initially migrating to Mealie, or when you want to import a large number of recipes.",
"recipe-bulk-importer-description": "Hromadný import receptů vám umožní importovat více receptů najednou tím, že ve frontě stránek na podpůrné vrstvě bude spuštěn úkol na pozadí. To může být užitečné při počáteční migraci na Mealie, nebo když chcete importovat velké množství receptů.",
"set-categories-and-tags": "Nastavte kategorie a štítky",
"bulk-imports": "Hromadný import",
"bulk-import-process-has-started": "Proces hromadného importu byl zahájen",
"bulk-import-process-has-failed": "Proces hromadného importu se nezdařil",
"report-deletion-failed": "Odstranění reportu se nezdařilo",
"recipe-debugger": "Recipe Debugger",
"recipe-debugger-description": "Grab the URL of the recipe you want to debug and paste it here. The URL will be scraped by the recipe scraper and the results will be displayed. If you don't see any data returned, the site you are trying to scrape is not supported by Mealie or its scraper library.",
"recipe-debugger": "Ladění receptů",
"recipe-debugger-description": "Získejte URL receptu, který chcete ladit a vložte jej zde. URL bude zpracováno procesorem receptů a budou zobrazeny výsledky. Pokud nevidíte žádná data, stránka, kterou se pokoušíte zpracovat, není podporována ani v Mealie ani jeho knihovně pro zpracování.",
"use-openai": "Použít OpenAI",
"recipe-debugger-use-openai-description": "Use OpenAI to parse the results instead of relying on the scraper library. When creating a recipe via URL, this is done automatically if the scraper library fails, but you may test it manually here.",
"recipe-debugger-use-openai-description": "Použijte OpenAI k analýze výsledků namísto spoléhání se na knihovnu pro zpracování. Při vytváření receptu prostřednictvím adresy URL se to provádí automaticky, pokud knihovna pro zpracování selže, ale můžete to zde otestovat ručně.",
"debug": "Ladit",
"tree-view": "Stromové zobrazení",
"recipe-servings": "Recipe Servings",
"recipe-servings": "Počet porcí",
"recipe-yield": "Recipe Yield",
"recipe-yield-text": "Recipe Yield Text",
"unit": "Jednotka",
@@ -654,14 +646,13 @@
"nextStep": "Další krok",
"recipe-actions": "Akce receptu",
"parser": {
"experimental-alert-text": "Mealie uses natural language processing to parse and create units and food items for your recipe ingredients. This feature is experimental and may not always work as expected. If you prefer not to use the parsed results, you can select 'Cancel' and your changes will not be saved.",
"ingredient-parser": "Ingredient Parser",
"explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.",
"alerts-explainer": "Alerts will be displayed if a matching foods or unit is found but does not exists in the database.",
"select-parser": "Select Parser",
"ingredient-parser": "Analyzátor ingrediencí",
"explanation": "Chcete-li použít analyzátor ingrediencí, klikněte na tlačítko \"Analyzovat vše\" pro zahájení procesu. Jakmile budou zpracované suroviny k dispozici, můžete zkontrolovat položky a ověřit, že byly správně analyzovány. Skóre důvěry modelu se zobrazuje vpravo od názvu položky. Toto skóre je průměrem všech jednotlivých skóre a nemusí být vždy zcela přesné.",
"alerts-explainer": "Upozornění se zobrazí v případě, že je nalezena odpovídající potravina nebo jednotka, ale v databázi neexistuje.",
"select-parser": "Vyberte analyzátor",
"natural-language-processor": "Natural Language Processor",
"brute-parser": "Brute Parser",
"openai-parser": "OpenAI Parser",
"openai-parser": "Analyzátor OpenAI",
"parse-all": "Parsovat vše",
"no-unit": "Žádná jednotka",
"missing-unit": "Vytvořit chybějící jednotku: {unit}",
@@ -669,24 +660,24 @@
"no-food": "Žádné jídlo"
},
"reset-servings-count": "Resetovat počet porcí",
"not-linked-ingredients": "Additional Ingredients"
"not-linked-ingredients": "Další ingredience"
},
"recipe-finder": {
"recipe-finder": "Recipe Finder",
"recipe-finder-description": "Search for recipes based on ingredients you have on hand. You can also filter by tools you have available, and set a maximum number of missing ingredients or tools.",
"selected-ingredients": "Selected Ingredients",
"no-ingredients-selected": "No ingredients selected",
"missing": "Missing",
"no-recipes-found": "No recipes found",
"no-recipes-found-description": "Try adding more ingredients to your search or adjusting your filters",
"include-ingredients-on-hand": "Include Ingredients On Hand",
"include-tools-on-hand": "Include Tools On Hand",
"max-missing-ingredients": "Max Missing Ingredients",
"max-missing-tools": "Max Missing Tools",
"selected-tools": "Selected Tools",
"other-filters": "Other Filters",
"ready-to-make": "Ready to Make",
"almost-ready-to-make": "Almost Ready to Make"
"recipe-finder": "Vyhledávač receptů",
"recipe-finder-description": "Vyhledávání receptů na základě přísad, které máte na ruce. Můžete také filtrovat pomocí nástrojů, které máte k dispozici, a nastavit maximální počet chybějících ingrediencí nebo nástrojů.",
"selected-ingredients": "Vybrané ingredience",
"no-ingredients-selected": "Nebyly vybrány žádné ingredience",
"missing": "Chybějící",
"no-recipes-found": "Nebyly nalezeny žádné recepty",
"no-recipes-found-description": "Zkuste do hledání přidat další ingredience nebo upravit své filtry",
"include-ingredients-on-hand": "Zahrnout ingredience jež k dispozici",
"include-tools-on-hand": "Zahrnout nástroje, které máte po ruce",
"max-missing-ingredients": "Maximální počet chybějících ingredien",
"max-missing-tools": "Maximální počet chybějících nástrojů",
"selected-tools": "Vybrané nástroje",
"other-filters": "Jiné filtry",
"ready-to-make": "Připraveno",
"almost-ready-to-make": "Téměř připraveno"
},
"search": {
"advanced-search": "Pokročilé vyhledávání",
@@ -725,11 +716,11 @@
"import-summary": "Shrnutí importu",
"partial-backup": "Částečná záloha",
"unable-to-delete-backup": "Zálohu nelze odstranit.",
"experimental-description": "Backups are total snapshots of the database and data directory of the site. This includes all data and cannot be set to exclude subsets of data. You can think of this as a snapshot of Mealie at a specific time. These serve as a database agnostic way to export and import data, or back up the site to an external location.",
"experimental-description": "Zálohy jsou celkové snímky databáze a datového adresáře webu. Tato položka zahrnuje všechny údaje a nelze ji nastavit pro vyloučení podsouborů údajů. Můžete ji brát jako snímek Mealie v určitém čase. Tyto slouží jako způsob, jak nezávisle na databázi exportovat a importovat data nebo zálohovat stránky na externí umístění.",
"backup-restore": "Obnova zálohy",
"back-restore-description": "Restoring this backup will overwrite all the current data in your database and in the data directory and replace them with the contents of this backup. {cannot-be-undone} If the restoration is successful, you will be logged out.",
"back-restore-description": "Obnovení této zálohy přepíše všechna aktuální data ve vaší databázi a v datovém adresáři a nahradí je obsahem této zálohy. {cannot-be-undone} Pokud je obnovení úspěšné, budete odhlášeni.",
"cannot-be-undone": "Tuto akci nelze vrátit zpět - používejte ji s opatrností.",
"postgresql-note": "Pokud používáte PostgreSQL, před obnovením si prosím přečtete {backup-restore-process}.",
"postgresql-note": "Pokud používáte PostgreSQL, prosím zkontrolujte {backup-restore-process} před obnovou.",
"backup-restore-process-in-the-documentation": "proces zálohy/obnovení v dokumentaci",
"irreversible-acknowledgment": "Beru na vědomí, že tato akce je nevratná, destruktivní a může způsobit ztrátu dat",
"restore-backup": "Obnovit zálohu"
@@ -817,14 +808,14 @@
"webhooks-caps": "WEBHOOKY",
"webhooks": "Webhooky",
"webhook-name": "Název webhooku",
"description": "The webhooks defined below will be executed when a meal is defined for the day. At the scheduled time the webhooks will be sent with the data from the recipe that is scheduled for the day. Note that webhook execution is not exact. The webhooks are executed on a 5 minutes interval so the webhooks will be executed within 5 +/- minutes of the scheduled."
"description": "Webhooks definované níže budou vykonány, když bude pro daný den definováno jídlo. V plánovaném čase budou webhooks odeslány s daty z receptu, který je naplánován na daný den. Vezměte prosím na vědomí, že vykonání webhooku není přesné. Webhooks jsou vykonávány v intervalech po 5 minutách, takže budou vykonány v rozmezí 5 +/- minut od plánovaného času."
},
"bug-report": "Chybové hlášení",
"bug-report-information": "Use this information to report a bug. Providing details of your instance to developers is the best way to get your issues resolved quickly.",
"bug-report-information": "Použijte tyto informace k nahlášení chyby. Poskytnutí podrobností vaší instance vývojářům je nejlepší způsob, jak rychle vyřešit vaše problémy.",
"tracker": "Tracker",
"configuration": "Konfigurace",
"docker-volume": "Volume dockeru",
"docker-volume-help": "Mealie requires that the frontend container and the backend share the same docker volume or storage. This ensures that the frontend container can properly access the images and assets stored on disk.",
"docker-volume-help": "Mealie vyžaduje, aby kontejner prostředí a podpůrné vrstvy sdílely stejný úložný prostor dockeru. Tím se zajistí, že kontejner prostředí bude moci správně přistupovat k obrázkům a informacím uloženým na disku.",
"volumes-are-misconfigured": "Svazky jsou špatně nakonfigurovány.",
"volumes-are-configured-correctly": "Volumy jsou nastaveny správně.",
"status-unknown-try-running-a-validation": "Neznámý stav. Zkuste provést validaci.",
@@ -891,7 +882,7 @@
"are-you-sure-you-want-to-check-all-items": "Opravdu chcete vybrat všechny položky?",
"are-you-sure-you-want-to-uncheck-all-items": "Opravdu chcete zrušit výběr všech položek?",
"are-you-sure-you-want-to-delete-checked-items": "Opravdu chcete odstranit všechny vybrané položky?",
"no-shopping-lists-found": "No Shopping Lists Found"
"no-shopping-lists-found": "Nebyly nalezeny žádné nákupní seznamy"
},
"sidebar": {
"all-recipes": "Všechny recepty",
@@ -1066,14 +1057,14 @@
"food-label": "Označení jídla",
"edit-food": "Upravit jídlo",
"food-data": "Data jídla",
"example-food-singular": "ex: Onion",
"example-food-plural": "ex: Onions",
"example-food-singular": "např.: Brambora",
"example-food-plural": "např.: Brambory",
"label-overwrite-warning": "Toto přiřadí vybraný štítek všem vybraným jídlům a může přepsat stávající štítky.",
"on-hand-checkbox-label": "Nastavením tohoto příznaku bude tato potravina při přidávání receptu do nákupního seznamu ve výchozím nastavení odškrtnuta."
},
"units": {
"seed-dialog-text": "Naplnit databázi s běžnými jednotkami používanými ve vašem jazyce.",
"combine-unit-description": "Combining the selected units will merge the Source Unit and Target Unit into a single unit. The {source-unit-will-be-deleted} and all of the references to the Source Unit will be updated to point to the Target Unit.",
"combine-unit-description": "Zkombinování zvolených jednotek spojí zdrojovou a cílovou jednotku do jedné. {source-unit-will-be-deleted} a všechny odkazy na ni budou upraveny na cílovou jednotku.",
"combine-unit": "Kombinovaná jednotka",
"source-unit": "Zdrojová jednotka",
"target-unit": "Cílová jednotka",
@@ -1088,10 +1079,10 @@
"unit-data": "Data jednotky",
"use-abbv": "Používat zkratky",
"fraction": "Zlomek",
"example-unit-singular": "ex: Tablespoon",
"example-unit-plural": "ex: Tablespoons",
"example-unit-abbreviation-singular": "ex: Tbsp",
"example-unit-abbreviation-plural": "ex: Tbsps"
"example-unit-singular": "např.: Čajová lžička",
"example-unit-plural": "např.: Čajové lžičky",
"example-unit-abbreviation-singular": "např.: čl",
"example-unit-abbreviation-plural": "např.: čl"
},
"labels": {
"seed-dialog-text": "Naplnit databázi s běžnými popisky používanými ve vašem jazyce.",
@@ -1276,7 +1267,7 @@
"openai": "OpenAI",
"show-individual-confidence": "Zobrazit individuální důvěru",
"ingredient-text": "Text přísady",
"average-confident": "{0} Confident",
"average-confident": "{0} Důvěra",
"try-an-example": "Vyzkoušejte příklad",
"parser": "Analyzátor",
"background-tasks": "Úlohy na pozadí",
@@ -1303,7 +1294,7 @@
"profile": {
"welcome-user": "👋 Vítejte, {0}!",
"description": "Spravujte svůj profil, recepty a nastavení skupiny.",
"invite-link": "Invite Link",
"invite-link": "Odkaz pozvánky",
"get-invite-link": "Získat odkaz na pozvánku",
"get-public-link": "Získat veřejný odkaz",
"account-summary": "Přehled účtu",
@@ -1353,8 +1344,8 @@
"cookbook": {
"cookbooks": "Kuchařky",
"description": "Kuchařky jsou dalším způsobem, jak uspořádat recepty vytvořením průřezů receptů, organizátorů a dalších filtrů. Vytvořením kuchařky se přidá položka na postranní panel a v kuchařce se zobrazí všechny recepty s vybranými filtry.",
"hide-cookbooks-from-other-households": "Hide Cookbooks from Other Households",
"hide-cookbooks-from-other-households-description": "When enabled, only cookbooks from your household will appear on the sidebar",
"hide-cookbooks-from-other-households": "Skrýt kuchařky ostatních domácností",
"hide-cookbooks-from-other-households-description": "Pokud je povoleno, objeví se na postranním panelu pouze kuchařské knihy z vaší domácnosti",
"public-cookbook": "Veřejná kuchařka",
"public-cookbook-description": "Veřejné kuchařky mohou být sdíleny s neregistrovanými uživateli a budou zobrazeny na stránce vaší skupiny.",
"filter-options": "Možnosti filtru",

View File

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

View File

@@ -23,7 +23,7 @@
"support": "Unterstützen",
"version": "Version",
"unknown-version": "unbekannt",
"sponsor": "Unterstützen"
"sponsor": "Unterstützer"
},
"asset": {
"assets": "Anhänge",
@@ -277,7 +277,7 @@
"admin-group-management-text": "Änderungen an dieser Gruppe sind sofort wirksam.",
"group-id-value": "Gruppen ID: {0}",
"total-households": "Haushalte insgesamt",
"you-must-select-a-group-before-selecting-a-household": "You must select a group before selecting a household"
"you-must-select-a-group-before-selecting-a-household": "Sie müssen eine Gruppe auswählen, bevor Sie einen Haushalt auswählen"
},
"household": {
"household": "Haushalt",
@@ -518,7 +518,7 @@
"save-recipe-before-use": "Rezept vor Verwendung speichern",
"section-title": "Titel des Abschnitts",
"servings": "Portionen",
"serves-amount": "Serves {amount}",
"serves-amount": "{amount} Portionen",
"share-recipe-message": "Ich möchte mein Rezept {0} mit dir teilen.",
"show-nutrition-values": "Nährwerte anzeigen",
"sodium-content": "Natrium",
@@ -547,8 +547,8 @@
"failed-to-add-recipe-to-mealplan": "Fehler beim Hinzufügen des Rezepts zum Essensplan",
"failed-to-add-to-list": "Fehler beim Hinzufügen zur Liste",
"yield": "Portionsangabe",
"yields-amount-with-text": "Yields {amount} {text}",
"yield-text": "Yield Text",
"yields-amount-with-text": "Ergibt {amount} {text}",
"yield-text": "Ergibt Text",
"quantity": "Menge",
"choose-unit": "Einheit wählen",
"press-enter-to-create": "Zum Erstellen Eingabetaste drücken",
@@ -570,13 +570,6 @@
"increase-scale-label": "Maßstab um 1 erhöhen",
"locked": "Gesperrt",
"public-link": "Öffentlicher Link",
"timer": {
"kitchen-timer": "Küchenwecker",
"start-timer": "Wecker starten",
"pause-timer": "Wecker pausieren",
"resume-timer": "Wecker fortsetzen",
"stop-timer": "Wecker stoppen"
},
"edit-timeline-event": "Zeitstrahl-Ereignis bearbeiten",
"timeline": "Zeitstrahl",
"timeline-is-empty": "Noch nichts auf dem Zeitstrahl. Probier dieses Rezept aus!",
@@ -586,7 +579,6 @@
"made-this": "Ich hab's gemacht",
"how-did-it-turn-out": "Wie ist es geworden?",
"user-made-this": "{user} hat's gemacht",
"last-made-date": "Zuletzt gemacht {date}",
"api-extras-description": "Rezepte-Extras sind ein Hauptmerkmal der Mealie API. Sie ermöglichen es dir, benutzerdefinierte JSON Key-Value-Paare zu einem Rezept zu erstellen, um Drittanbieter-Anwendungen zu steuern. Du kannst diese dazu verwenden, um Automatisierungen auszulösen oder benutzerdefinierte Nachrichten an bestimmte Geräte zu senden.",
"message-key": "Nachrichten-Schlüssel",
"parse": "Parsen",
@@ -644,9 +636,9 @@
"recipe-debugger-use-openai-description": "Verwende OpenAI anstelle der Scraper-Bibliothek, um die Einträge zu parsen. Wenn du ein Rezept über dessen URL erstellst und der Versuch über die Scraper-Bibliothek fehlschlägt, passiert das automatisch. Aber du kannst es hier auch manuell testen.",
"debug": "Debug",
"tree-view": "Strukturierte Ansicht",
"recipe-servings": "Recipe Servings",
"recipe-servings": "Rezept Portionen",
"recipe-yield": "Portionsangabe",
"recipe-yield-text": "Recipe Yield Text",
"recipe-yield-text": "Rezept ergibt Text",
"unit": "Maßeinheit",
"upload-image": "Bild hochladen",
"screen-awake": "Bildschirm nicht abschalten",
@@ -654,7 +646,6 @@
"nextStep": "Nächster Schritt",
"recipe-actions": "Rezept-Aktionen",
"parser": {
"experimental-alert-text": "Mealie verwendet natürliche Sprachverarbeitung (NLP), um Einheiten und Lebensmittel für deine Zutatenliste zu parsen. Diese Funktion ist experimentell und funktioniert möglicherweise nicht immer wie sie sollte. Wenn du die Parser-Ergebnisse nicht verwenden möchtest, wähle 'Abbrechen' und deine Änderungen werden nicht gespeichert.",
"ingredient-parser": "Zutaten-Parser",
"explanation": "Um den Zutaten-Parser zu verwenden, klicke auf den Button 'Alles parsen', um den Vorgang zu starten. Nachdem die Zutaten analysiert worden sind, kannst du überprüfen, ob die Einträge korrekt erkannt wurden. Der vom Modell errechnete Zuverlässigkeitswert wird rechts neben der Zutat angezeigt. Diese Angabe ist ein Durchschnitt der Einzelwerte und möglicherweise nicht immer ganz korrekt.",
"alerts-explainer": "Es werden Warnungen angezeigt, wenn ein passendes Lebensmittel oder eine Einheit gefunden wurde, aber in der Datenbank nicht vorhanden ist.",
@@ -669,24 +660,24 @@
"no-food": "Kein Lebensmittel"
},
"reset-servings-count": "Portionen zurücksetzen",
"not-linked-ingredients": "Additional Ingredients"
"not-linked-ingredients": "Zusätzliche Zutaten"
},
"recipe-finder": {
"recipe-finder": "Recipe Finder",
"recipe-finder-description": "Search for recipes based on ingredients you have on hand. You can also filter by tools you have available, and set a maximum number of missing ingredients or tools.",
"selected-ingredients": "Selected Ingredients",
"no-ingredients-selected": "No ingredients selected",
"missing": "Missing",
"no-recipes-found": "No recipes found",
"no-recipes-found-description": "Try adding more ingredients to your search or adjusting your filters",
"include-ingredients-on-hand": "Include Ingredients On Hand",
"include-tools-on-hand": "Include Tools On Hand",
"max-missing-ingredients": "Max Missing Ingredients",
"max-missing-tools": "Max Missing Tools",
"selected-tools": "Selected Tools",
"other-filters": "Other Filters",
"ready-to-make": "Ready to Make",
"almost-ready-to-make": "Almost Ready to Make"
"recipe-finder": "Rezept-Suche",
"recipe-finder-description": "Suche nach Rezepten basierend auf den Zutaten, die du zur Hand hast. Sie können auch nach verfügbaren Werkzeugen filtern und eine maximale Anzahl an fehlenden Zutaten oder Werkzeugen festlegen.",
"selected-ingredients": "Ausgewählte Zutaten",
"no-ingredients-selected": "Keine Zutaten ausgewählt",
"missing": "Fehlend",
"no-recipes-found": "Keine Rezepte gefunden",
"no-recipes-found-description": "Versuche mehr Zutaten zu deiner Suche hinzuzufügen oder deine Filter anzupassen",
"include-ingredients-on-hand": "Zutaten zu Hand einbeziehen",
"include-tools-on-hand": "Utensilien zur Hand einbeziehen",
"max-missing-ingredients": "Maximal fehlende Zutaten",
"max-missing-tools": "Maximal fehlende Utensilien",
"selected-tools": "Ausgewählte Utensilien",
"other-filters": "Andere Filter",
"ready-to-make": "Bereit zu Machen",
"almost-ready-to-make": "Fast bereit zu Machen"
},
"search": {
"advanced-search": "Erweiterte Suche",
@@ -729,7 +720,7 @@
"backup-restore": "Wiederherstellen aus Sicherung",
"back-restore-description": "Das Wiederherstellen dieser Sicherung wird alle vorhandenen Daten in deiner Datenbank und im Datenverzeichnis überschreiben und durch den Inhalt dieser Sicherung ersetzen. {cannot-be-undone} Wenn die Wiederherstellung erfolgreich war, wirst du abgemeldet.",
"cannot-be-undone": "Diese Aktion kann nicht rückgängig gemacht werden - verwende sie mit Vorsicht.",
"postgresql-note": "Wenn du PostGreSQL verwendest, überprüfe bitte den {backup-restore-process} vor der Wiederherstellung.",
"postgresql-note": "If you are using PostgreSQL, please review the {backup-restore-process} prior to restoring.",
"backup-restore-process-in-the-documentation": "Sichern- und Wiederherstellen-Prozess in der Dokumentation",
"irreversible-acknowledgment": "Ich verstehe, dass diese Maßnahme unumkehrbar und destruktiv ist und Datenverlust verursachen kann",
"restore-backup": "Sicherung wiederherstellen"
@@ -891,7 +882,7 @@
"are-you-sure-you-want-to-check-all-items": "Bist du sicher, dass du alle Elemente markieren möchtest?",
"are-you-sure-you-want-to-uncheck-all-items": "Bist du sicher, dass du die Auswahl aller Elemente aufheben möchtest?",
"are-you-sure-you-want-to-delete-checked-items": "Bist du sicher, dass du alle ausgewählten Elemente löschen möchtest?",
"no-shopping-lists-found": "No Shopping Lists Found"
"no-shopping-lists-found": "Keine Einkaufslisten gefunden"
},
"sidebar": {
"all-recipes": "Alle Rezepte",
@@ -1057,8 +1048,8 @@
"foods": {
"merge-dialog-text": "Zusammenführen der ausgewählten Lebensmittel führt diese zusammen in ein einzelnes Lebensmittel. Die Ausgangslebensmittel werden gelöscht und alle Verweise werden auf das zusammengeführte Lebensmittel angepasst.",
"merge-food-example": "{food1} wird zu {food2} zusammengeführt",
"seed-dialog-text": "Füllt die Datenbank mit Lebensmitteln basierend auf deiner Landessprache. Dadurch werden mehr als 200 gängige Lebensmittel eingetragen, die verwendet werden können, um die Datenbank zu organisieren. Die Speisen werden über eine Gemeinschaftsleistung übersetzt.",
"seed-dialog-warning": "Du hast bereits einige Elemente in deiner Datenbank. Diese Aktion wird Duplikate nicht ausgleichen, du musst sie manuell verwalten.",
"seed-dialog-text": "Seed the database with foods based on your local language. This will create 200+ common foods that can be used to organize your database. Foods are translated via a community effort.",
"seed-dialog-warning": "You have already have some items in your database. This action will not reconcile duplicates, you will have to manage them manually.",
"combine-food": "Lebensmittel zusammenführen",
"source-food": "Quell-Lebensmittel",
"target-food": "Ziel-Lebensmittel",
@@ -1303,7 +1294,7 @@
"profile": {
"welcome-user": "👋 Willkommen, {0}!",
"description": "Verwalte dein Profil, Rezepte und Gruppeneinstellungen.",
"invite-link": "Invite Link",
"invite-link": "Einladungslink",
"get-invite-link": "Einladungslink erzeugen",
"get-public-link": "Öffentlichen Link abrufen",
"account-summary": "Kontoübersicht",
@@ -1353,8 +1344,8 @@
"cookbook": {
"cookbooks": "Kochbücher",
"description": "Kochbücher sind ein weiterer Weg, Rezepte zu organisieren, indem man verschiedene Filter erstellt. Das Erstellen eines Kochbuchs fügt einen Eintrag zur Seitenleiste hinzu und alle Rezepte, die den gewählten Filtern zustimmen, werden in dem Kochbuch angezeigt.",
"hide-cookbooks-from-other-households": "Hide Cookbooks from Other Households",
"hide-cookbooks-from-other-households-description": "When enabled, only cookbooks from your household will appear on the sidebar",
"hide-cookbooks-from-other-households": "Kochbücher von anderen Haushalten ausblenden",
"hide-cookbooks-from-other-households-description": "Wenn aktiviert, werden nur Kochbücher deines Haushalts in der Seitenleiste angezeigt",
"public-cookbook": "Öffentliches Kochbuch",
"public-cookbook-description": "Öffentliche Kochbücher können mit Nicht-Mealie-Benutzern geteilt werden und werden auf deiner Gruppenseite angezeigt.",
"filter-options": "Filteroptionen",

View File

@@ -15,9 +15,9 @@
"docs": "Τεκμηρίωση",
"download-log": "Λήψη αρχείου καταγραφής",
"download-recipe-json": "Τελευταίο Scraped JSON",
"github": "Github",
"github": "GitHub",
"log-lines": "Γραμμές καταγραφής",
"not-demo": "Όχι επίδειξη",
"not-demo": "Εκτός Επίδειξης",
"portfolio": "Χαρτοφυλάκιο",
"production": "Παραγωγή",
"support": "Υποστήριξη",
@@ -174,7 +174,7 @@
"wednesday": "Τετάρτη",
"yes": "Ναι",
"foods": "Τρόφιμα",
"units": "Μονάδες",
"units": "Μονάδες μέτρησης",
"back": "Πίσω",
"next": "Επόμενο",
"start": "Εναρξη",
@@ -277,7 +277,7 @@
"admin-group-management-text": "Οι αλλαγές σε αυτή την ομάδα θα αντικατοπτρίζονται αμέσως.",
"group-id-value": "ID ομάδας: {0}",
"total-households": "Σύνολο νοικοκυριών",
"you-must-select-a-group-before-selecting-a-household": "You must select a group before selecting a household"
"you-must-select-a-group-before-selecting-a-household": "Πρέπει να επιλέξετε μια ομάδα πριν επιλέξετε ένα νοικοκυριό"
},
"household": {
"household": "Νοικοκυριό",
@@ -518,7 +518,7 @@
"save-recipe-before-use": "Αποθήκευση συνταγής πριν τη χρήση",
"section-title": "Τίτλος τμήματος",
"servings": "Μερίδες",
"serves-amount": "Serves {amount}",
"serves-amount": "Μερίδες {amount}",
"share-recipe-message": "Ήθελα να μοιραστώ την {0} συνταγή μου μαζί σας.",
"show-nutrition-values": "Εμφάνιση Τιμών Διατροφής",
"sodium-content": "Νάτριο",
@@ -547,8 +547,8 @@
"failed-to-add-recipe-to-mealplan": "Αποτυχία προσθήκης συνταγής στο πρόγραμμα γευμάτων",
"failed-to-add-to-list": "Αποτυχία προσθήκης στη λίστα",
"yield": "Ποσότητα",
"yields-amount-with-text": "Yields {amount} {text}",
"yield-text": "Yield Text",
"yields-amount-with-text": "Ποσότητα {amount} {text}",
"yield-text": "Κείμενο ποσότητας",
"quantity": "Ποσότητα",
"choose-unit": "Επιλέξτε μονάδα",
"press-enter-to-create": "Πατήστε Enter για δημιουργία",
@@ -570,13 +570,6 @@
"increase-scale-label": "Αύξηση κλίμακας κατά 1",
"locked": "Κλειδωμένο",
"public-link": "Δημόσιος σύνδεσμος",
"timer": {
"kitchen-timer": "Χρονόμετρο Κουζίνας",
"start-timer": "Εναρξη χρονομέτρου",
"pause-timer": "Παύση χρονόμετρου",
"resume-timer": "Συνέχιση χρονομέτρου",
"stop-timer": "Διακοπή χρονόμετρου"
},
"edit-timeline-event": "Επεξεργασία συμβάντος χρονοδιαγράμματος",
"timeline": "Χρονοδιάγραμμα",
"timeline-is-empty": "Δεν υπάρχει τίποτα ακόμα στο χρονοδιάγραμμα. Δοκιμάστε να κάνετε αυτή τη συνταγή!",
@@ -586,7 +579,6 @@
"made-this": "Το έφτιαξα",
"how-did-it-turn-out": "Ποιό ήταν το αποτέλεσμα;",
"user-made-this": "Ο/η {user} το έφτιαξε αυτό",
"last-made-date": "Τελευταία παρασκευή {date}",
"api-extras-description": "Τα extras συνταγών αποτελούν βασικό χαρακτηριστικό του Mealie API. Σας επιτρέπουν να δημιουργήσετε προσαρμοσμένα ζεύγη κλειδιού/τιμής JSON μέσα σε μια συνταγή, να παραπέμψετε σε εφαρμογές τρίτων. Μπορείτε να χρησιμοποιήσετε αυτά τα κλειδιά για την παροχή πληροφοριών, για παράδειγμα πυροδότηση αυτοματισμών ή μετάδοση προσαρμοσμένων μηνυμάτων στη συσκευή που επιθυμείτε.",
"message-key": "Κλειδί Μηνύματος",
"parse": "Ανάλυση",
@@ -644,9 +636,9 @@
"recipe-debugger-use-openai-description": "Χρησιμοποιήστε το OpenAI για να αναλύσετε τα αποτελέσματα αντί να βασιστείτε στη βιβλιοθήκη του scraper. Κατά τη δημιουργία μιας συνταγής μέσω URL, αυτό γίνεται αυτόματα αν η βιβλιοθήκη του scraper αποτύχει, αλλά μπορείτε να την δοκιμάσετε χειροκίνητα εδώ.",
"debug": "Εντ. σφαλμάτων",
"tree-view": "Προβολή δέντρου",
"recipe-servings": "Recipe Servings",
"recipe-servings": "Μερίδες συνταγής",
"recipe-yield": "Ποσότητα Συνταγής",
"recipe-yield-text": "Recipe Yield Text",
"recipe-yield-text": "Κείμενο ποσότητας συνταγής",
"unit": "Μονάδα",
"upload-image": "Ανέβασμα εικόνας",
"screen-awake": "Διατήρηση ενεργής οθόνης",
@@ -654,7 +646,6 @@
"nextStep": "Επόμενο βήμα",
"recipe-actions": "Ενέργειες Συνταγής",
"parser": {
"experimental-alert-text": "Το Mealie χρησιμοποιεί επεξεργασία φυσικής γλώσσας για να αναλύσει και να δημιουργήσει μονάδες και αντικείμενα τροφίμων για τα συστατικά της συνταγής σας. Αυτή η λειτουργία είναι πειραματική και μπορεί να μην λειτουργεί πάντα όπως πρέπει. Αν προτιμάτε να μην χρησιμοποιείτε τα αναλυμένα αποτελέσματα, μπορείτε να επιλέξετε 'Ακυρο' και οι αλλαγές σας δεν θα αποθηκευτούν.",
"ingredient-parser": "Αναλυτής Συστατικών",
"explanation": "Για να χρησιμοποιήσετε τον αναλυτή συστατικών, κάντε κλικ στο πλήκτρο 'Ανάλυση Ολων' για να ξεκινήσετε τη διαδικασία. Μόλις τα αναλυμένα συστατικά είναι διαθέσιμα, μπορείτε να τα επανεξετάσετε και να βεβαιωθείτε ότι έχουν αναλυθεί σωστά. Η βαθμολογία εμπιστοσύνης του μοντέλου εμφανίζεται στα δεξιά του τίτλου αντικειμένου. Αυτό το σκορ είναι ένας μέσος όρος όλων των επιμέρους βαθμολογιών και μπορεί να μην είναι πάντα εντελώς ακριβής.",
"alerts-explainer": "Θα εμφανίζονται ειδοποιήσεις αν βρεθεί ένα αντίστοιχο τρόφιμο ή μονάδα αλλά δεν υπάρχει στη βάση δεδομένων.",
@@ -669,24 +660,24 @@
"no-food": "Χωρίς Τρόφιμο"
},
"reset-servings-count": "Επαναφορά μέτρησης μερίδων",
"not-linked-ingredients": "Additional Ingredients"
"not-linked-ingredients": "Πρόσθετα συστατικά"
},
"recipe-finder": {
"recipe-finder": "Recipe Finder",
"recipe-finder-description": "Search for recipes based on ingredients you have on hand. You can also filter by tools you have available, and set a maximum number of missing ingredients or tools.",
"selected-ingredients": "Selected Ingredients",
"no-ingredients-selected": "No ingredients selected",
"missing": "Missing",
"no-recipes-found": "No recipes found",
"no-recipes-found-description": "Try adding more ingredients to your search or adjusting your filters",
"include-ingredients-on-hand": "Include Ingredients On Hand",
"include-tools-on-hand": "Include Tools On Hand",
"max-missing-ingredients": "Max Missing Ingredients",
"max-missing-tools": "Max Missing Tools",
"selected-tools": "Selected Tools",
"other-filters": "Other Filters",
"ready-to-make": "Ready to Make",
"almost-ready-to-make": "Almost Ready to Make"
"recipe-finder": "Εύρεση συνταγών",
"recipe-finder-description": "Αναζητήστε συνταγές με βάση τα συστατικά που έχετε στο χέρι. Μπορείτε επίσης να θέσετε φίλτρα με βάση τα εργαλεία που διαθέτετε και να ορίσετε έναν μέγιστο αριθμό συστατικών ή εργαλείων που λείπουν.",
"selected-ingredients": "Επιλεγμένα συστατικά",
"no-ingredients-selected": "Δεν επιλέχτηκαν συστατικά",
"missing": "Λείπει",
"no-recipes-found": "Δεν βρέθηκαν συνταγές",
"no-recipes-found-description": "Δοκιμάστε να προσθέσετε περισσότερα συστατικά στην αναζήτησή σας ή να προσαρμόσετε τα φίλτρα σας",
"include-ingredients-on-hand": "Συμπερίληψη συστατικών στο χέρι",
"include-tools-on-hand": "Συμπερίληψη εργαλείων στο χέρι",
"max-missing-ingredients": "Μέγιστος αριθμός συστατικών που λείπουν",
"max-missing-tools": "Μέγιστος αριθμός εργαλείων που λείπουν",
"selected-tools": "Επιλεγμένα εργαλεία",
"other-filters": "Αλλα φίλτρα",
"ready-to-make": "Ετοιμο για παρασκευή",
"almost-ready-to-make": "Σχεδόν έτοιμο για παρασκευή"
},
"search": {
"advanced-search": "Σύνθετη Αναζήτηση",
@@ -729,7 +720,7 @@
"backup-restore": "Επαναφορά Αντιγράφου Ασφαλείας",
"back-restore-description": "Η επαναφορά αυτού του αντιγράφου ασφαλείας θα αντικαταστήσει όλα τα τρέχοντα δεδομένα στη βάση δεδομένων σας και στον κατάλογο δεδομένων και θα τα αντικαταστήσει με τα περιεχόμενα αυτού του αντιγράφου ασφαλείας. {cannot-be-undone} Αν η αποκατάσταση γίνει με επιτυχία, θα αποσυνδεθείτε.",
"cannot-be-undone": "Αυτή η ενέργεια δεν μπορεί να αναιρεθεί - χρησιμοποιήστε με προσοχή.",
"postgresql-note": "Αν χρησιμοποιείτε το PostGreSQL, παρακαλώ ελέγξτε τη {backup-restore-process} πριν από την επαναφορά.",
"postgresql-note": "Αν χρησιμοποιείτε το PostgreSQL, παρακαλώ ελέγξτε τη {backup-restore-process} πριν από την επαναφορά.",
"backup-restore-process-in-the-documentation": "διαδικασία δημιουργίας αντιγράφων ασφαλείας/επαναφοράς στην τεκμηρίωση",
"irreversible-acknowledgment": "Κατανοώ ότι αυτή η ενέργεια είναι μη αναστρέψιμη, καταστροφική και μπορεί να προκαλέσει απώλεια δεδομένων",
"restore-backup": "Επαναφορά αντιγράφου ασφαλείας"
@@ -891,7 +882,7 @@
"are-you-sure-you-want-to-check-all-items": "Θέλετε σίγουρα να επιλέξετε όλα τα αντικείμενα;",
"are-you-sure-you-want-to-uncheck-all-items": "Θέλετε σίγουρα να αποεπιλέξετε όλα τα αντικείμενα;",
"are-you-sure-you-want-to-delete-checked-items": "Θέλετε σίγουρα να διαγράψετε όλα τα επιλεγμένα αντικείμενα;",
"no-shopping-lists-found": "No Shopping Lists Found"
"no-shopping-lists-found": "Δεν βρέθηκαν λίστες αγορών"
},
"sidebar": {
"all-recipes": "Συνταγές όλες",
@@ -1303,7 +1294,7 @@
"profile": {
"welcome-user": "👋 Καλώς ορίσατε, {0}!",
"description": "Διαχειριστείτε το προφίλ σας, τις συνταγές και τις ρυθμίσεις ομάδας.",
"invite-link": "Invite Link",
"invite-link": "Σύνδεσμος πρόσκλησης",
"get-invite-link": "Λήψη συνδέσμου πρόσκλησης",
"get-public-link": "Λήψη δημόσιου συνδέσμου",
"account-summary": "Σύνοψη λογαριασμού",
@@ -1353,8 +1344,8 @@
"cookbook": {
"cookbooks": "Βιβλία Μαγειρικής",
"description": "Τα βιβλία μαγειρικής είναι ένας άλλος τρόπος για να οργανώσετε τις συνταγές δημιουργώντας τμήματα συνταγών, οργανωτών και άλλων φίλτρων. Η δημιουργία ενός βιβλίου μαγειρικής θα προσθέσει μια καταχώρηση στην πλευρική μπάρα και όλες οι συνταγές με τα φίλτρα που έχουν επιλεγεί θα εμφανιστούν στο βιβλίο μαγειρικών.",
"hide-cookbooks-from-other-households": "Hide Cookbooks from Other Households",
"hide-cookbooks-from-other-households-description": "When enabled, only cookbooks from your household will appear on the sidebar",
"hide-cookbooks-from-other-households": "Απόκρυψη Βιβλίων Μαγειρικής από άλλα νοικοκυριά",
"hide-cookbooks-from-other-households-description": "Οταν είναι ενεργοποιημένο, μόνο βιβλία μαγειρικής από το νοικοκυριό σας θα εμφανίζονται στην πλαϊνή μπάρα",
"public-cookbook": "Δημόσιο Βιβλίο Μαγειρικής",
"public-cookbook-description": "Τα δημόσια βιβλία μαγειρικής μπορούν να μοιραστούν με χρήστες εκτός του mealie και θα εμφανιστούν στη σελίδα των ομάδων σας.",
"filter-options": "Επιλογές φίλτρου",

View File

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

View File

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

View File

@@ -15,7 +15,7 @@
"docs": "Documentación",
"download-log": "Descargar Log",
"download-recipe-json": "Último JSON extraído",
"github": "Github",
"github": "GitHub",
"log-lines": "Líneas de registro",
"not-demo": "No Demo",
"portfolio": "Portfolio",
@@ -277,7 +277,7 @@
"admin-group-management-text": "Los cambios en este grupo se reflejarán inmediatamente.",
"group-id-value": "Id del Grupo: {0}",
"total-households": "Total de Casas",
"you-must-select-a-group-before-selecting-a-household": "You must select a group before selecting a household"
"you-must-select-a-group-before-selecting-a-household": "Debe seleccionar un grupo antes de seleccionar un hogar"
},
"household": {
"household": "Casa",
@@ -332,8 +332,8 @@
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "Sólo las recetas con estas categorías se utilizarán en los menús",
"planner": "Planificador",
"quick-week": "Plan rápido",
"side": "Guarnición",
"sides": "Guarniciones",
"side": "Segundo plato",
"sides": "Segundos platos",
"start-date": "Fecha de Inicio",
"rule-day": "Regla para día",
"meal-type": "Tipo de comida",
@@ -349,7 +349,7 @@
"note-only": "Solo notas",
"random-meal": "Comida aleatoria",
"random-dinner": "Cena al azar",
"random-side": "Lado Aleatorio",
"random-side": "Segundo plato aleatorio",
"this-rule-will-apply": "Esta regla se aplicará {dayCriteria} {mealTypeCriteria}.",
"to-all-days": "a todos los días",
"on-days": "en {0}s",
@@ -469,7 +469,7 @@
"categories": "Categorías",
"cholesterol-content": "Colesterol",
"comment-action": "Comentar",
"comment": "Comentar",
"comment": "Comentario",
"comments": "Comentarios",
"delete-confirmation": "¿Estás seguro de eliminar esta receta?",
"delete-recipe": "Borrar receta",
@@ -518,7 +518,7 @@
"save-recipe-before-use": "Guardar la receta antes de usar",
"section-title": "Título de la sección",
"servings": "Porciones",
"serves-amount": "Serves {amount}",
"serves-amount": "Personas {amount}",
"share-recipe-message": "Quería compartir mi receta {0} contigo.",
"show-nutrition-values": "Mostrar valores nutricionales",
"sodium-content": "Sodio",
@@ -547,8 +547,8 @@
"failed-to-add-recipe-to-mealplan": "Error al añadir receta al menú",
"failed-to-add-to-list": "No se pudo agregar a la lista",
"yield": "Raciones",
"yields-amount-with-text": "Yields {amount} {text}",
"yield-text": "Yield Text",
"yields-amount-with-text": "Raciones {amount} {text}",
"yield-text": "Texto de raciones",
"quantity": "Cantidad",
"choose-unit": "Elija unidad",
"press-enter-to-create": "Presione Intro para crear",
@@ -570,13 +570,6 @@
"increase-scale-label": "Aumentar escala en 1",
"locked": "Bloqueada",
"public-link": "Enlace público",
"timer": {
"kitchen-timer": "Temporizador de cocina",
"start-timer": "Iniciar Temporizador",
"pause-timer": "Pausar Temporizador",
"resume-timer": "Reanudar Temporizador",
"stop-timer": "Detener temporizador"
},
"edit-timeline-event": "Editar evento en la cronología",
"timeline": "Cronología",
"timeline-is-empty": "Aún no hay nada en la línea de tiempo. ¡Intenta hacer esta receta!",
@@ -586,7 +579,6 @@
"made-this": "Lo hice",
"how-did-it-turn-out": "¿Cómo resultó esto?",
"user-made-this": "{user} hizo esto",
"last-made-date": "Cocinado por última vez el {date}",
"api-extras-description": "Los extras de las recetas son una característica clave de la API de Mealie. Permiten crear pares json clave/valor personalizados dentro de una receta para acceder desde aplicaciones de terceros. Puede utilizar estas claves para almacenar información, para activar la automatización o mensajes personalizados para transmitir al dispositivo deseado.",
"message-key": "Clave de mensaje",
"parse": "Analizar",
@@ -644,9 +636,9 @@
"recipe-debugger-use-openai-description": "Utilice OpenAI para analizar los resultados en lugar de depender de la biblioteca de analizadores. Cuando se crea una receta a través de la URL, esto se hace automáticamente si la biblioteca del analizador falla, pero puede probarla manualmente aquí.",
"debug": "Depuración",
"tree-view": "Vista en árbol",
"recipe-servings": "Recipe Servings",
"recipe-servings": "Cantidad de personas",
"recipe-yield": "Porciones",
"recipe-yield-text": "Recipe Yield Text",
"recipe-yield-text": "Texto de raciones totales",
"unit": "Unidades",
"upload-image": "Subir imagen",
"screen-awake": "Mantener la pantalla encendida",
@@ -654,7 +646,6 @@
"nextStep": "Siguiente paso",
"recipe-actions": "Acciones de Receta",
"parser": {
"experimental-alert-text": "Mealie usa procesamiento de lenguaje natural para analizar y crear unidades y productos para los ingredientes de tu receta. Esta característica es experimental y puede no ser confiable. Si prefieres no usar los resultados analizados, elige 'Cancelar' y los cambios serán descartados.",
"ingredient-parser": "Analizador de Ingredientes",
"explanation": "Para usar el analizador de ingredientes, haz clic en 'Analizar Todo'. Una vez que los ingredientes procesados estén disponibles, puedes revisar los productos y verificar que fueron analizados correctamente. El puntaje de confianza del modelo se muestra a la derecha del título del producto. Este puntaje es un promedio de todos los puntajes individuales y puede no ser del todo preciso.",
"alerts-explainer": "Las alertas se mostrarán si se encuentra un alimento o unidad que coincida pero que no exista en la base de datos.",
@@ -669,24 +660,24 @@
"no-food": "Sin Comida"
},
"reset-servings-count": "Restablecer contador de porciones",
"not-linked-ingredients": "Additional Ingredients"
"not-linked-ingredients": "Ingredientes adicionales"
},
"recipe-finder": {
"recipe-finder": "Recipe Finder",
"recipe-finder-description": "Search for recipes based on ingredients you have on hand. You can also filter by tools you have available, and set a maximum number of missing ingredients or tools.",
"selected-ingredients": "Selected Ingredients",
"no-ingredients-selected": "No ingredients selected",
"missing": "Missing",
"no-recipes-found": "No recipes found",
"no-recipes-found-description": "Try adding more ingredients to your search or adjusting your filters",
"include-ingredients-on-hand": "Include Ingredients On Hand",
"include-tools-on-hand": "Include Tools On Hand",
"max-missing-ingredients": "Max Missing Ingredients",
"max-missing-tools": "Max Missing Tools",
"selected-tools": "Selected Tools",
"other-filters": "Other Filters",
"ready-to-make": "Ready to Make",
"almost-ready-to-make": "Almost Ready to Make"
"recipe-finder": "Buscador de recetas",
"recipe-finder-description": "Busca recetas basadas en los ingredientes que tengas disponibles. También puede filtrar por utensilios disponibles, y establecer un número máximo de ingredientes o herramientas que faltan.",
"selected-ingredients": "Ingredientes seleccionados",
"no-ingredients-selected": "Ningún ingrediente seleccionado",
"missing": "Faltan",
"no-recipes-found": "No se encontraron recetas",
"no-recipes-found-description": "Intenta añadir más ingredientes a tu búsqueda o ajustar tus filtros",
"include-ingredients-on-hand": "Incluye ingredientes a mano",
"include-tools-on-hand": "Incluye utensilios disponibles",
"max-missing-ingredients": "Máximo de ingredientes que faltan",
"max-missing-tools": "Máximo de utensilios que faltan",
"selected-tools": "Utensilios seleccionados",
"other-filters": "Otros filtros",
"ready-to-make": "Listo para hacer",
"almost-ready-to-make": "Casi listo para hacer"
},
"search": {
"advanced-search": "Búsqueda avanzada",
@@ -729,7 +720,7 @@
"backup-restore": "Restaurar Copia de Seguridad",
"back-restore-description": "Restaurar esta copia de seguridad sobrescribirá todos los datos actuales de su base de datos y del directorio de datos y los sustituirá por el contenido de esta copia. {cannot-be-undone} Si la restauración se realiza correctamente, se cerrará su sesión.",
"cannot-be-undone": "Esta acción no se puede deshacer, use con precaución.",
"postgresql-note": "Si estás usando PostGreSQL, por favor revisa el {backup-restore-process} antes de restaurar.",
"postgresql-note": "Si estás usando PostgreSQL, por favor revisa {backup-restore-process} antes de restaurar.",
"backup-restore-process-in-the-documentation": "copia de seguridad/proceso de restauración en la documentación",
"irreversible-acknowledgment": "Entiendo que esta acción es irreversible, destructiva y puede causar pérdida de datos",
"restore-backup": "Restaurar copia de seguridad"
@@ -891,14 +882,14 @@
"are-you-sure-you-want-to-check-all-items": "¿Seguro que quieres seleccionar todos los elementos?",
"are-you-sure-you-want-to-uncheck-all-items": "¿Seguro que quieres de-seleccionar todos los elementos?",
"are-you-sure-you-want-to-delete-checked-items": "¿Está seguro que deseas eliminar los elementos seleccionados?",
"no-shopping-lists-found": "No Shopping Lists Found"
"no-shopping-lists-found": "No hay listas de la compra"
},
"sidebar": {
"all-recipes": "Recetas",
"backups": "Copias de Seguridad",
"categories": "Categorías",
"cookbooks": "Recetarios",
"dashboard": "Consola",
"dashboard": "Panel de control",
"home-page": "Inicio",
"manage-users": "Usuarios",
"migrations": "Migraciones",
@@ -1057,8 +1048,8 @@
"foods": {
"merge-dialog-text": "Combinar los alimentos seleccionados fusionará el alimento origen y destinatario en un solo alimento. El alimento origen será eliminado y todas las referencias a él serán actualizadas para apuntar al nuevo alimento.",
"merge-food-example": "Fusionando {food1} con {food2}",
"seed-dialog-text": "Añade a la base de datos ejemplos de alimentos basados en su idioma local. Esto creará más de 200 alimentos comunes que se pueden utilizar para organizar su base de datos. Los alimentos se traducen a través de un esfuerzo comunitario.",
"seed-dialog-warning": "Ya tiene algunos elementos en tu base de datos. Esta acción no reconciliará duplicados, tendrá que gestionarlos manualmente.",
"seed-dialog-text": "Rellena la base de datos con alimentos basados en tu idioma local. Esto creará más de 200 alimentos comunes que se pueden usar para organizar tu base de datos. Los alimentos son traducidos a través de un esfuerzo comunitario.",
"seed-dialog-warning": "Ya tienes algunos elementos en tu base de datos. Esta acción no reconciliará los duplicados, tendrás que gestionarlos manualmente.",
"combine-food": "Combinar Alimentos",
"source-food": "Fuente de Alimento",
"target-food": "Alimentos objetivo",
@@ -1303,7 +1294,7 @@
"profile": {
"welcome-user": "👋 ¡Bienvenido, {0}!",
"description": "Administra tu perfil, recetas y ajustes de grupo.",
"invite-link": "Invite Link",
"invite-link": "Link de invitación",
"get-invite-link": "Obtener enlace de invitación",
"get-public-link": "Obtener enlace público",
"account-summary": "Información de la cuenta",
@@ -1353,8 +1344,8 @@
"cookbook": {
"cookbooks": "Recetarios",
"description": "Los recetarios son otra forma de organizar recetas creando secciones cruzadas de recetas y etiquetas. Crear un recetario añadirá una entrada a la barra lateral y todas las recetas con las etiquetas y categorías elegidas se mostrarán en el recetario.",
"hide-cookbooks-from-other-households": "Hide Cookbooks from Other Households",
"hide-cookbooks-from-other-households-description": "When enabled, only cookbooks from your household will appear on the sidebar",
"hide-cookbooks-from-other-households": "Ocultar libros de cocina de otros grupos/hogares",
"hide-cookbooks-from-other-households-description": "Cuando esté habilitado, sólo los libros de cocina de su hogar aparecerán en la barra lateral",
"public-cookbook": "Recetario público",
"public-cookbook-description": "Los recetarios públicos se pueden compartir con usuarios externos y se mostrarán en su página de grupos.",
"filter-options": "Opciones de filtro",

File diff suppressed because it is too large Load Diff

View File

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

View File

@@ -277,7 +277,7 @@
"admin-group-management-text": "Les modifications apportées à ce groupe seront immédiatement prises en compte.",
"group-id-value": "ID groupe: {0}",
"total-households": "Nombre de foyers",
"you-must-select-a-group-before-selecting-a-household": "You must select a group before selecting a household"
"you-must-select-a-group-before-selecting-a-household": "Vous devez sélectionner un groupe avant de sélectionner un foyer"
},
"household": {
"household": "Foyer",
@@ -518,7 +518,7 @@
"save-recipe-before-use": "Enregistrez la recette avant utilisation",
"section-title": "Titre de la section",
"servings": "Portions",
"serves-amount": "Serves {amount}",
"serves-amount": "{amount} portions",
"share-recipe-message": "Je voulais partager ma recette de {0} avec vous.",
"show-nutrition-values": "Afficher les valeurs nutritionnelles",
"sodium-content": "Sodium",
@@ -547,8 +547,8 @@
"failed-to-add-recipe-to-mealplan": "Échec de lajout de la recette au menu",
"failed-to-add-to-list": "Ajout dans la liste en échec",
"yield": "Nombre de portions",
"yields-amount-with-text": "Yields {amount} {text}",
"yield-text": "Yield Text",
"yields-amount-with-text": "Produit {amount} {text}",
"yield-text": "Unité",
"quantity": "Quantité",
"choose-unit": "Choisissez une unité",
"press-enter-to-create": "Clique sur Entrer pour créer",
@@ -570,13 +570,6 @@
"increase-scale-label": "Augmenter léchelle de 1",
"locked": "Verrouillé",
"public-link": "Lien public",
"timer": {
"kitchen-timer": "Minuteur",
"start-timer": "Démarrer le minuteur",
"pause-timer": "Mettre en pause le minuteur",
"resume-timer": "Reprendre le minuteur",
"stop-timer": "Arrêter le minuteur"
},
"edit-timeline-event": "Modifier lévénement dans lhistorique",
"timeline": "Historique",
"timeline-is-empty": "Pas encore dhistorique. Essayez de cuisiner cette recette!",
@@ -586,7 +579,6 @@
"made-this": "Je lai cuisiné",
"how-did-it-turn-out": "Cétait bon?",
"user-made-this": "{user} la cuisiné",
"last-made-date": "Cuisiné le {date}",
"api-extras-description": "Les suppléments des recettes sont une fonctionnalité clé de lAPI Mealie. Ils permettent de créer des paires JSON clé/valeur personnalisées dans une recette, qui peuvent être référencées depuis des applications tierces. Ces clés peuvent être utilisées par exemple pour déclencher des tâches automatisées ou des messages personnalisés à transmettre à lappareil souhaité.",
"message-key": "Clé de message",
"parse": "Analyser",
@@ -644,9 +636,9 @@
"recipe-debugger-use-openai-description": "Utilisez OpenAI pour analyser les résultats au lieu de la bibliothèque dextraction. Lors de la création d'une recette via une URL, cela se fait automatiquement si la bibliothèque dextraction échoue, mais vous pouvez le tester manuellement ici.",
"debug": "Déboguer",
"tree-view": "Vue en arborescence",
"recipe-servings": "Recipe Servings",
"recipe-servings": "Portions de la recette",
"recipe-yield": "Nombre de parts",
"recipe-yield-text": "Recipe Yield Text",
"recipe-yield-text": "Unité",
"unit": "Unité",
"upload-image": "Envoyer une image",
"screen-awake": "Garder lécran allumé",
@@ -654,7 +646,6 @@
"nextStep": "Étape suivante",
"recipe-actions": "Actions de recette",
"parser": {
"experimental-alert-text": "Mealie utilise le traitement du langage naturel pour analyser et créer des unités et des aliments pour vos ingrédients de recettes. Cette fonctionnalité est expérimentale et peut ne pas toujours fonctionner comme prévu. Si vous préférez ne pas utiliser les résultats analysés, vous pouvez sélectionner « Annuler » et vos modifications ne seront pas enregistrées.",
"ingredient-parser": "Analyseur d'ingrédients",
"explanation": "Pour utiliser l'analyseur d'ingrédients, cliquez sur le bouton « Tout analyser » pour démarrer le processus. Une fois les ingrédients disponibles, vous pouvez vérifier qu'ils ont été analysés correctement. Le score de confiance du modèle est affiché à droite du titre de l'article. Ce score est une moyenne de tous les scores individuels et peut ne pas toujours être complètement exact.",
"alerts-explainer": "Les alertes seront affichées si un produit ou unité correspondant est trouvé mais n'existe pas dans la base de données.",
@@ -669,24 +660,24 @@
"no-food": "Aucun aliment"
},
"reset-servings-count": "Réinitialiser le nombre de portions",
"not-linked-ingredients": "Additional Ingredients"
"not-linked-ingredients": "Ingrédients supplémentaires"
},
"recipe-finder": {
"recipe-finder": "Recipe Finder",
"recipe-finder-description": "Search for recipes based on ingredients you have on hand. You can also filter by tools you have available, and set a maximum number of missing ingredients or tools.",
"selected-ingredients": "Selected Ingredients",
"no-ingredients-selected": "No ingredients selected",
"missing": "Missing",
"no-recipes-found": "No recipes found",
"no-recipes-found-description": "Try adding more ingredients to your search or adjusting your filters",
"include-ingredients-on-hand": "Include Ingredients On Hand",
"include-tools-on-hand": "Include Tools On Hand",
"max-missing-ingredients": "Max Missing Ingredients",
"max-missing-tools": "Max Missing Tools",
"selected-tools": "Selected Tools",
"other-filters": "Other Filters",
"ready-to-make": "Ready to Make",
"almost-ready-to-make": "Almost Ready to Make"
"recipe-finder": "Recherche de recette",
"recipe-finder-description": "Recherchez des recettes en fonction des ingrédients que vous avez à disposition. Vous pouvez également filtrer par ustensile disponible et définir un nombre maximum d'ingrédients ou d'ustensiles manquants.",
"selected-ingredients": "Ingrédients sélectionnés",
"no-ingredients-selected": "Aucun ingrédient sélectionné",
"missing": "Manquant",
"no-recipes-found": "Aucune recette trouvée",
"no-recipes-found-description": "Essayez d'ajouter plus d'ingrédients à votre recherche ou d'ajuster vos filtres",
"include-ingredients-on-hand": "Inclure les ingrédients à disposition",
"include-tools-on-hand": "Inclure les ustensiles à disposition",
"max-missing-ingredients": "Ingrédients manquants max",
"max-missing-tools": "Ustensiles manquants max",
"selected-tools": "Ustensiles sélectionnés",
"other-filters": "Autres filtres",
"ready-to-make": "Prêt à cuisiner",
"almost-ready-to-make": "Presque prêt à cuisiner"
},
"search": {
"advanced-search": "Recherche avancée",
@@ -729,7 +720,7 @@
"backup-restore": "Restaurer la sauvegarde",
"back-restore-description": "La restauration de cette sauvegarde écrasera toutes les données actuelles dans votre base de données et dans le répertoire de données et les remplacera par le contenu de cette sauvegarde. {cannot-be-undone} Si la restauration est réussie, vous serez déconnecté.",
"cannot-be-undone": "Cette action ne peut pas être annulée - à utiliser avec prudence.",
"postgresql-note": "Si vous utilisez PostGreSQL, veuillez consulter le {backup-restore-process} avant de le restaurer.",
"postgresql-note": "Si vous utilisez PostgreSQL, veuillez consulter le {backup-restore-process} avant la restauration.",
"backup-restore-process-in-the-documentation": "processus de sauvegarde/restauration dans la documentation",
"irreversible-acknowledgment": "Je comprends que cette action est irréversible, destructrice et peut entraîner une perte de données",
"restore-backup": "Restaurer une sauvegarde"
@@ -891,7 +882,7 @@
"are-you-sure-you-want-to-check-all-items": "Voulez-vous vraiment sélectionner tous les éléments ?",
"are-you-sure-you-want-to-uncheck-all-items": "Voulez-vous vraiment désélectionner tous les éléments ?",
"are-you-sure-you-want-to-delete-checked-items": "Voulez-vous vraiment supprimer tous les éléments sélectionnés ?",
"no-shopping-lists-found": "No Shopping Lists Found"
"no-shopping-lists-found": "Aucune liste de courses trouvée"
},
"sidebar": {
"all-recipes": "Recettes",
@@ -1058,7 +1049,7 @@
"merge-dialog-text": "La combinaison des aliments sélectionnés fusionnera laliment source et laliment cible en un seul aliment. Laliment source sera supprimé et toutes les références à laliment source seront mises à jour pour pointer vers laliment cible.",
"merge-food-example": "Fusion de {food1} dans {food2}",
"seed-dialog-text": "Initialisez la base de données avec des aliments basés sur votre langue locale. Cela permettra de créer plus de 200 aliments communs qui pourront être utilisés pour organiser votre base de données. Les aliments sont traduits grâce à un effort communautaire.",
"seed-dialog-warning": "Vous avez déjà des éléments dans votre base de données. Cette action ne réconciliera pas les doublons, vous devrez les gérer manuellement.",
"seed-dialog-warning": "Vous avez déjà des éléments dans votre base de données. Cette action ne fusionnera pas les doublons, vous devrez les gérer manuellement.",
"combine-food": "Combiner les aliments",
"source-food": "Aliment source",
"target-food": "Aliment cible",
@@ -1303,7 +1294,7 @@
"profile": {
"welcome-user": "👋 Bienvenue, {0} !",
"description": "Gérez votre profil, les recettes et les paramètres de groupe.",
"invite-link": "Invite Link",
"invite-link": "Lien d'invitation",
"get-invite-link": "Obtenir un lien d'invitation",
"get-public-link": "Voir le lien public",
"account-summary": "Aperçu du compte",
@@ -1352,9 +1343,9 @@
},
"cookbook": {
"cookbooks": "Livres de recettes",
"description": "Les livres de recettes sont un autre moyen dorganiser des recettes en sélectionnant un ensemble précis de recettes, de classification et de filtres. La création d'un livre de recettes ajoute une entrée à la barre latérale et toutes les recettes avec les filtres choisies seront affichées dans le livre de recettes.",
"hide-cookbooks-from-other-households": "Hide Cookbooks from Other Households",
"hide-cookbooks-from-other-households-description": "When enabled, only cookbooks from your household will appear on the sidebar",
"description": "Les livres de recettes sont un autre moyen d'organiser des recettes en sélectionnant un ensemble précis de recettes, de classification et de filtres. La création d'un livre de recettes ajoute une entrée à la barre latérale et toutes les recettes avec les filtres choisies seront affichées dans le livre de recettes.",
"hide-cookbooks-from-other-households": "Masquer les livres de cuisine des autres foyers",
"hide-cookbooks-from-other-households-description": "Lorsque cette option est activée, seuls les livres de cuisine de votre foyer apparaîtront dans la barre latérale",
"public-cookbook": "Livre de recettes public",
"public-cookbook-description": "Les livres de recettes publics peuvent être partagés avec des personnes qui n'ont pas Mealie et seront affichés sur la page de vos groupes.",
"filter-options": "Options de filtres",
@@ -1384,8 +1375,8 @@
"relational-keywords": {
"is": "est",
"is-not": "nest pas",
"is-one-of": "est un de",
"is-not-one-of": "n'est pas un de",
"is-one-of": "fait partie de",
"is-not-one-of": "ne fait pas partie de",
"contains-all-of": "contient tout",
"is-like": "est comme",
"is-not-like": "n'est pas similaire à"

View File

@@ -277,7 +277,7 @@
"admin-group-management-text": "Les modifications apportées à ce groupe seront immédiatement prises en compte.",
"group-id-value": "ID groupe: {0}",
"total-households": "Nombre de foyers",
"you-must-select-a-group-before-selecting-a-household": "You must select a group before selecting a household"
"you-must-select-a-group-before-selecting-a-household": "Vous devez sélectionner un groupe avant de sélectionner un foyer"
},
"household": {
"household": "Foyer",
@@ -518,7 +518,7 @@
"save-recipe-before-use": "Enregistrez la recette avant utilisation",
"section-title": "Titre de la section",
"servings": "Portions",
"serves-amount": "Serves {amount}",
"serves-amount": "{amount} portions",
"share-recipe-message": "Je voulais partager ma recette de {0} avec vous.",
"show-nutrition-values": "Afficher les valeurs nutritionnelles",
"sodium-content": "Sodium",
@@ -547,8 +547,8 @@
"failed-to-add-recipe-to-mealplan": "Échec de l'ajout de la recette à la planification des repas",
"failed-to-add-to-list": "Ajout dans la liste en échec",
"yield": "Rendement",
"yields-amount-with-text": "Yields {amount} {text}",
"yield-text": "Yield Text",
"yields-amount-with-text": "Produit {amount} {text}",
"yield-text": "Unité",
"quantity": "Quantité",
"choose-unit": "Choisir une unité",
"press-enter-to-create": "Clique sur Entrer pour créer",
@@ -570,13 +570,6 @@
"increase-scale-label": "Augmenter l'échelle de 1",
"locked": "Verrouillé",
"public-link": "Lien public",
"timer": {
"kitchen-timer": "Minuteur",
"start-timer": "Démarrer le minuteur",
"pause-timer": "Mettre en pause le minuteur",
"resume-timer": "Reprendre le minuteur",
"stop-timer": "Arrêter le minuteur"
},
"edit-timeline-event": "Modifier lévénement dans lhistorique",
"timeline": "Historique",
"timeline-is-empty": "Pas encore dhistorique. Essayez de cuisiner cette recette!",
@@ -586,7 +579,6 @@
"made-this": "Je lai cuisiné",
"how-did-it-turn-out": "Cétait bon?",
"user-made-this": "{user} la cuisiné",
"last-made-date": "Cuisiné le {date}",
"api-extras-description": "Les suppléments des recettes sont une fonctionnalité clé de lAPI Mealie. Ils permettent de créer des paires JSON clé/valeur personnalisées dans une recette, qui peuvent être référencées depuis des applications tierces. Ces clés peuvent être utilisées par exemple pour déclencher des tâches automatisées ou des messages personnalisés à transmettre à lappareil souhaité.",
"message-key": "Clé de message",
"parse": "Analyser",
@@ -644,9 +636,9 @@
"recipe-debugger-use-openai-description": "Utilisez OpenAI pour analyser les résultats au lieu de la librairie dextraction. Lors de la création d'une recette via une URL, cela se fait automatiquement si la librairie dextraction échoue, mais vous pouvez le tester manuellement ici.",
"debug": "Déboguer",
"tree-view": "Vue en arborescence",
"recipe-servings": "Recipe Servings",
"recipe-servings": "Portions de la recette",
"recipe-yield": "Nombre de parts",
"recipe-yield-text": "Recipe Yield Text",
"recipe-yield-text": "Unité",
"unit": "Unité",
"upload-image": "Ajouter une image",
"screen-awake": "Garder lécran allumé",
@@ -654,7 +646,6 @@
"nextStep": "Étape suivante",
"recipe-actions": "Actions de recette",
"parser": {
"experimental-alert-text": "Mealie utilise le traitement du langage naturel pour analyser et créer des unités et des aliments pour vos ingrédients de recettes. Cette fonctionnalité est expérimentale et peut ne pas toujours fonctionner comme prévu. Si vous préférez ne pas utiliser les résultats analysés, vous pouvez sélectionner « Annuler » et vos modifications ne seront pas enregistrées.",
"ingredient-parser": "Analyseur d'ingrédients",
"explanation": "Pour utiliser l'analyseur d'ingrédients, cliquez sur le bouton « Tout analyser » pour démarrer le processus. Une fois les ingrédients disponibles, vous pouvez vérifier qu'ils ont été analysés correctement. Le score de confiance du modèle est affiché à droite du titre de l'article. Ce score est une moyenne de tous les scores individuels et peut ne pas toujours être complètement exact.",
"alerts-explainer": "Les alertes seront affichées si un produit ou unité correspondant est trouvé mais n'existe pas dans la base de données.",
@@ -669,24 +660,24 @@
"no-food": "Aucun aliment"
},
"reset-servings-count": "Réinitialiser le nombre de portions",
"not-linked-ingredients": "Additional Ingredients"
"not-linked-ingredients": "Ingrédients supplémentaires"
},
"recipe-finder": {
"recipe-finder": "Recipe Finder",
"recipe-finder-description": "Search for recipes based on ingredients you have on hand. You can also filter by tools you have available, and set a maximum number of missing ingredients or tools.",
"selected-ingredients": "Selected Ingredients",
"no-ingredients-selected": "No ingredients selected",
"missing": "Missing",
"no-recipes-found": "No recipes found",
"no-recipes-found-description": "Try adding more ingredients to your search or adjusting your filters",
"include-ingredients-on-hand": "Include Ingredients On Hand",
"include-tools-on-hand": "Include Tools On Hand",
"max-missing-ingredients": "Max Missing Ingredients",
"max-missing-tools": "Max Missing Tools",
"selected-tools": "Selected Tools",
"other-filters": "Other Filters",
"ready-to-make": "Ready to Make",
"almost-ready-to-make": "Almost Ready to Make"
"recipe-finder": "Recherche de recette",
"recipe-finder-description": "Recherchez des recettes en fonction des ingrédients que vous avez à disposition. Vous pouvez également filtrer par ustensile disponible et définir un nombre maximum d'ingrédients ou d'ustensiles manquants.",
"selected-ingredients": "Ingrédients sélectionnés",
"no-ingredients-selected": "Aucun ingrédient sélectionné",
"missing": "Manquant",
"no-recipes-found": "Aucune recette trouvée",
"no-recipes-found-description": "Essayez d'ajouter plus d'ingrédients à votre recherche ou d'ajuster vos filtres",
"include-ingredients-on-hand": "Inclure les ingrédients à disposition",
"include-tools-on-hand": "Inclure les ustensiles à disposition",
"max-missing-ingredients": "Ingrédients manquants max",
"max-missing-tools": "Ustensiles manquants max",
"selected-tools": "Ustensiles sélectionnés",
"other-filters": "Autres filtres",
"ready-to-make": "Prêt à cuisiner",
"almost-ready-to-make": "Presque prêt à cuisiner"
},
"search": {
"advanced-search": "Recherche avancée",
@@ -729,7 +720,7 @@
"backup-restore": "Restaurer la sauvegarde",
"back-restore-description": "La restauration de cette sauvegarde écrasera toutes les données actuelles dans votre base de données et dans le répertoire de données et les remplacera par le contenu de cette sauvegarde. {cannot-be-undone} Si la restauration est réussie, vous serez déconnecté.",
"cannot-be-undone": "Cette action ne peut pas être annulée - à utiliser avec prudence.",
"postgresql-note": "Si vous utilisez PostGreSQL, veuillez consulter le {backup-restore-process} avant de le restaurer.",
"postgresql-note": "Si vous utilisez PostgreSQL, veuillez consulter le {backup-restore-process} avant la restauration.",
"backup-restore-process-in-the-documentation": "processus de sauvegarde/restauration dans la documentation",
"irreversible-acknowledgment": "Je comprends que cette action est irréversible, destructrice et peut entraîner une perte de données",
"restore-backup": "Restaurer une sauvegarde"
@@ -891,7 +882,7 @@
"are-you-sure-you-want-to-check-all-items": "Voulez-vous vraiment sélectionner tous les éléments ?",
"are-you-sure-you-want-to-uncheck-all-items": "Voulez-vous vraiment désélectionner tous les éléments ?",
"are-you-sure-you-want-to-delete-checked-items": "Voulez-vous vraiment supprimer tous les éléments sélectionnés ?",
"no-shopping-lists-found": "No Shopping Lists Found"
"no-shopping-lists-found": "Aucune liste de courses trouvée"
},
"sidebar": {
"all-recipes": "Les recettes",
@@ -1058,7 +1049,7 @@
"merge-dialog-text": "La combinaison des aliments sélectionnés fusionnera laliment source et laliment cible en un seul aliment. Laliment source sera supprimé et toutes les références à laliment source seront mises à jour pour pointer vers laliment cible.",
"merge-food-example": "Fusion de {food1} dans {food2}",
"seed-dialog-text": "Initialisez la base de données avec des aliments basés sur votre langue locale. Cela permettra de créer plus de 200 aliments communs qui pourront être utilisés pour organiser votre base de données. Les aliments sont traduits grâce à un effort communautaire.",
"seed-dialog-warning": "Vous avez déjà des éléments dans votre base de données. Cette action ne réconciliera pas les doublons, vous devrez les gérer manuellement.",
"seed-dialog-warning": "Vous avez déjà des éléments dans votre base de données. Cette action ne fusionnera pas les doublons, vous devrez les gérer manuellement.",
"combine-food": "Combiner les aliments",
"source-food": "Aliment source",
"target-food": "Aliment cible",
@@ -1303,7 +1294,7 @@
"profile": {
"welcome-user": "👋 Bienvenue, {0}!",
"description": "Gérez votre profil, les recettes et les paramètres de groupe.",
"invite-link": "Invite Link",
"invite-link": "Lien d'invitation",
"get-invite-link": "Obtenir un lien d'invitation",
"get-public-link": "Voir le lien public",
"account-summary": "Aperçu du compte",
@@ -1353,8 +1344,8 @@
"cookbook": {
"cookbooks": "Livres de recettes",
"description": "Les livres de recettes sont un autre moyen dorganiser des recettes en sélectionnant un ensemble précis de recettes, de classification et de filtres. La création d'un livre de recettes ajoute une entrée à la barre latérale et toutes les recettes avec les filtres choisies seront affichées dans le livre de recettes.",
"hide-cookbooks-from-other-households": "Hide Cookbooks from Other Households",
"hide-cookbooks-from-other-households-description": "When enabled, only cookbooks from your household will appear on the sidebar",
"hide-cookbooks-from-other-households": "Masquer les livres de cuisine des autres foyers",
"hide-cookbooks-from-other-households-description": "Lorsque cette option est activée, seuls les livres de cuisine de votre foyer apparaîtront dans la barre latérale",
"public-cookbook": "Livre de recettes public",
"public-cookbook-description": "Les livres de recettes publics peuvent être partagés avec des personnes qui n'ont pas Mealie et seront affichés sur la page de vos groupes.",
"filter-options": "Options de filtres",

View File

@@ -45,7 +45,7 @@
"category-filter": "Filtre par catégories",
"category-update-failed": "La mise à jour de la catégorie a échoué",
"category-updated": "Catégorie mise à jour",
"uncategorized-count": "{count} non catégorisée|{count} non catégorisées",
"uncategorized-count": "{count} sans catégorie",
"create-a-category": "Créer une catégorie",
"category-name": "Nom de la catégorie",
"category": "Catégorie"
@@ -53,17 +53,17 @@
"events": {
"apprise-url": "URL Apprise",
"database": "Base de données",
"delete-event": "Supprimer lévènement",
"event-delete-confirmation": "Voulez-vous vraiment supprimer cet évènement?",
"delete-event": "Supprimer lévénement",
"event-delete-confirmation": "Voulez-vous vraiment supprimer cet événement?",
"event-deleted": "Événement supprimé",
"event-updated": "Événement mis à jour",
"new-notification-form-description": "Mealie utilise la bibliothèque Apprise pour générer des notifications. Elle propose de nombreux services à utiliser pour les notifications. Consultez leur wiki pour un guide complet sur la façon de créer lURL de votre service. Si disponible, sélectionner le type de votre notification peut inclure des fonctionnalités supplémentaires.",
"new-version": "Nouvelle version disponible!",
"notification": "Notification",
"refresh": "Rafraîchir",
"refresh": "Actualiser",
"scheduled": "Planifié",
"something-went-wrong": "Une erreur sest produite!",
"subscribed-events": "Évènements suivis",
"subscribed-events": "Événements suivis",
"test-message-sent": "Message de test envoyé",
"message-sent": "Message envoyé",
"new-notification": "Nouvelle notification",
@@ -71,8 +71,8 @@
"apprise-url-skipped-if-blank": "URL Apprise (ignoré si vide)",
"enable-notifier": "Activer la notification",
"what-events": "À quels événements cette notification doit-elle s'abonner ?",
"user-events": "Evénements utilisateur",
"mealplan-events": "Évènements du menu",
"user-events": "Événements utilisateur",
"mealplan-events": "Événements du menu",
"when-a-user-in-your-group-creates-a-new-mealplan": "Lorsqu'un utilisateur de votre groupe crée un nouveau menu",
"shopping-list-events": "Événements de la liste de courses",
"cookbook-events": "Événements du livre de recettes",
@@ -277,7 +277,7 @@
"admin-group-management-text": "Les modifications apportées à ce groupe seront immédiatement prises en compte.",
"group-id-value": "ID groupe: {0}",
"total-households": "Nombre de foyers",
"you-must-select-a-group-before-selecting-a-household": "You must select a group before selecting a household"
"you-must-select-a-group-before-selecting-a-household": "Vous devez sélectionner un groupe avant de sélectionner un foyer"
},
"household": {
"household": "Foyer",
@@ -294,7 +294,7 @@
"private-household": "Foyer privé",
"private-household-description": "Rendre votre foyer privé va désactiver toutes les options de vue publique. Cela écrase les paramètres de vue publique",
"lock-recipe-edits-from-other-households": "Verrouiller les éditions de recettes de la part des autres foyers",
"lock-recipe-edits-from-other-households-description": "Si activé, seuls les utilisateurs de votre foyer peuvent modifier les recettes créé par votre foyer",
"lock-recipe-edits-from-other-households-description": "Si activé, seuls les utilisateurs de votre foyer peuvent modifier les recettes créées par votre foyer",
"household-recipe-preferences": "Préférences de recette du foyer",
"default-recipe-preferences-description": "Ce sont les paramètres par défaut utilisés pour la création dune nouvelle recette dans votre foyer. Ils peuvent être modifiés individuellement dans le menu de configuration des recettes.",
"allow-users-outside-of-your-household-to-see-your-recipes": "Autoriser les utilisateurs en dehors de votre foyer à voir vos recettes",
@@ -337,7 +337,7 @@
"start-date": "Date de début",
"rule-day": "Jour de la Règle",
"meal-type": "Type de repas",
"breakfast": "Déjeuner",
"breakfast": "Petit-déjeuner",
"lunch": "Déjeuner",
"dinner": "Dîner",
"type-any": "Tous",
@@ -518,7 +518,7 @@
"save-recipe-before-use": "Enregistrez la recette avant utilisation",
"section-title": "Titre de la section",
"servings": "Portions",
"serves-amount": "Serves {amount}",
"serves-amount": "{amount} portions",
"share-recipe-message": "Je voulais partager ma recette de {0} avec vous.",
"show-nutrition-values": "Afficher les valeurs nutritionnelles",
"sodium-content": "Sodium",
@@ -546,9 +546,9 @@
"failed-to-add-recipes-to-list": "Impossible dajouter la recette à la liste",
"failed-to-add-recipe-to-mealplan": "Échec de lajout de la recette au menu",
"failed-to-add-to-list": "Ajout dans la liste en échec",
"yield": "Nombre de portions",
"yields-amount-with-text": "Yields {amount} {text}",
"yield-text": "Yield Text",
"yield": "Quantité",
"yields-amount-with-text": "Produit {amount} {text}",
"yield-text": "Unité",
"quantity": "Quantité",
"choose-unit": "Choisissez une unité",
"press-enter-to-create": "Clique sur Entrer pour créer",
@@ -570,13 +570,6 @@
"increase-scale-label": "Augmenter léchelle de 1",
"locked": "Verrouillé",
"public-link": "Lien public",
"timer": {
"kitchen-timer": "Minuteur",
"start-timer": "Démarrer le minuteur",
"pause-timer": "Mettre en pause le minuteur",
"resume-timer": "Reprendre le minuteur",
"stop-timer": "Arrêter le minuteur"
},
"edit-timeline-event": "Modifier lévénement dans lhistorique",
"timeline": "Historique",
"timeline-is-empty": "Pas encore dhistorique. Essayez de cuisiner cette recette!",
@@ -586,7 +579,6 @@
"made-this": "Je lai cuisiné",
"how-did-it-turn-out": "Cétait bon?",
"user-made-this": "{user} la cuisiné",
"last-made-date": "Cuisiné le {date}",
"api-extras-description": "Les suppléments des recettes sont une fonctionnalité clé de lAPI Mealie. Ils permettent de créer des paires JSON clé/valeur personnalisées dans une recette, qui peuvent être référencées depuis des applications tierces. Ces clés peuvent être utilisées par exemple pour déclencher des tâches automatisées ou des messages personnalisés à transmettre à lappareil souhaité.",
"message-key": "Clé de message",
"parse": "Analyser",
@@ -644,9 +636,9 @@
"recipe-debugger-use-openai-description": "Utilisez OpenAI pour analyser les résultats au lieu de la bibliothèque dextraction. Lors de la création d'une recette via une URL, cela se fait automatiquement si la bibliothèque dextraction échoue, mais vous pouvez le tester manuellement ici.",
"debug": "Déboguer",
"tree-view": "Vue en arborescence",
"recipe-servings": "Recipe Servings",
"recipe-servings": "Portions de la recette",
"recipe-yield": "Nombre de parts",
"recipe-yield-text": "Recipe Yield Text",
"recipe-yield-text": "Unité",
"unit": "Unité",
"upload-image": "Envoyer une image",
"screen-awake": "Garder lécran allumé",
@@ -654,7 +646,6 @@
"nextStep": "Étape suivante",
"recipe-actions": "Actions de recette",
"parser": {
"experimental-alert-text": "Mealie utilise le traitement du langage naturel pour analyser et créer des unités et des aliments pour vos ingrédients de recettes. Cette fonctionnalité est expérimentale et peut ne pas toujours fonctionner comme prévu. Si vous préférez ne pas utiliser les résultats analysés, vous pouvez sélectionner « Annuler » et vos modifications ne seront pas enregistrées.",
"ingredient-parser": "Analyseur d'ingrédients",
"explanation": "Pour utiliser l'analyseur d'ingrédients, cliquez sur le bouton « Tout analyser » pour démarrer le processus. Une fois les ingrédients disponibles, vous pouvez vérifier qu'ils ont été analysés correctement. Le score de confiance du modèle est affiché à droite du titre de l'article. Ce score est une moyenne de tous les scores individuels et peut ne pas toujours être complètement exact.",
"alerts-explainer": "Les alertes seront affichées si un produit ou unité correspondant est trouvé mais n'existe pas dans la base de données.",
@@ -669,24 +660,24 @@
"no-food": "Aucun aliment"
},
"reset-servings-count": "Réinitialiser le nombre de portions",
"not-linked-ingredients": "Additional Ingredients"
"not-linked-ingredients": "Ingrédients supplémentaires"
},
"recipe-finder": {
"recipe-finder": "Recipe Finder",
"recipe-finder-description": "Search for recipes based on ingredients you have on hand. You can also filter by tools you have available, and set a maximum number of missing ingredients or tools.",
"selected-ingredients": "Selected Ingredients",
"no-ingredients-selected": "No ingredients selected",
"missing": "Missing",
"no-recipes-found": "No recipes found",
"no-recipes-found-description": "Try adding more ingredients to your search or adjusting your filters",
"include-ingredients-on-hand": "Include Ingredients On Hand",
"include-tools-on-hand": "Include Tools On Hand",
"max-missing-ingredients": "Max Missing Ingredients",
"max-missing-tools": "Max Missing Tools",
"selected-tools": "Selected Tools",
"other-filters": "Other Filters",
"ready-to-make": "Ready to Make",
"almost-ready-to-make": "Almost Ready to Make"
"recipe-finder": "Recherche de recette",
"recipe-finder-description": "Recherchez des recettes en fonction des ingrédients que vous avez à disposition. Vous pouvez également filtrer par ustensile disponible et définir un nombre maximum d'ingrédients ou d'ustensiles manquants.",
"selected-ingredients": "Ingrédients sélectionnés",
"no-ingredients-selected": "Aucun ingrédient sélectionné",
"missing": "Manquant",
"no-recipes-found": "Aucune recette trouvée",
"no-recipes-found-description": "Essayez d'ajouter plus d'ingrédients à votre recherche ou d'ajuster vos filtres",
"include-ingredients-on-hand": "Inclure les ingrédients à disposition",
"include-tools-on-hand": "Inclure les ustensiles à disposition",
"max-missing-ingredients": "Ingrédients manquants max",
"max-missing-tools": "Ustensiles manquants max",
"selected-tools": "Ustensiles sélectionnés",
"other-filters": "Autres filtres",
"ready-to-make": "Prêt à cuisiner",
"almost-ready-to-make": "Presque prêt à cuisiner"
},
"search": {
"advanced-search": "Recherche avancée",
@@ -729,7 +720,7 @@
"backup-restore": "Restaurer la sauvegarde",
"back-restore-description": "La restauration de cette sauvegarde écrasera toutes les données actuelles dans votre base de données et dans le répertoire de données et les remplacera par le contenu de cette sauvegarde. {cannot-be-undone} Si la restauration est réussie, vous serez déconnecté.",
"cannot-be-undone": "Cette action ne peut pas être annulée - à utiliser avec prudence.",
"postgresql-note": "Si vous utilisez PostGreSQL, veuillez consulter le {backup-restore-process} avant de le restaurer.",
"postgresql-note": "Si vous utilisez PostgreSQL, veuillez consulter le {backup-restore-process} avant la restauration.",
"backup-restore-process-in-the-documentation": "processus de sauvegarde/restauration dans la documentation",
"irreversible-acknowledgment": "Je comprends que cette action est irréversible, destructrice et peut entraîner une perte de données",
"restore-backup": "Restaurer une sauvegarde"
@@ -739,7 +730,7 @@
"current": "Version:",
"custom-pages": "Pages personnalisées",
"edit-page": "Modifier la page",
"events": "Évènements",
"events": "Événements",
"first-day-of-week": "Premier jour de la semaine",
"group-settings-updated": "Paramètres du groupe mis à jour",
"homepage": {
@@ -874,7 +865,7 @@
"linked-item-warning": "Cet article est lié à une ou plusieurs recettes. Ajuster les unités ou les aliments donnera des résultats inattendus lors de lajout ou de la suppression de la recette de cette liste.",
"toggle-food": "Activer/Désactiver aliment",
"manage-labels": "Gérer les libellés",
"are-you-sure-you-want-to-delete-this-item": "Êtes-vous sûr de vouloir supprimer cet élément?",
"are-you-sure-you-want-to-delete-this-item": "Êtes-vous sûr de vouloir supprimer cet élément ?",
"copy-as-text": "Copier comme texte",
"copy-as-markdown": "Copier comme Markdown",
"delete-checked": "Supprimer la sélection",
@@ -891,7 +882,7 @@
"are-you-sure-you-want-to-check-all-items": "Voulez-vous vraiment sélectionner tous les éléments ?",
"are-you-sure-you-want-to-uncheck-all-items": "Voulez-vous vraiment désélectionner tous les éléments ?",
"are-you-sure-you-want-to-delete-checked-items": "Voulez-vous vraiment supprimer tous les éléments sélectionnés ?",
"no-shopping-lists-found": "No Shopping Lists Found"
"no-shopping-lists-found": "Aucune liste de courses trouvée"
},
"sidebar": {
"all-recipes": "Recettes",
@@ -1032,7 +1023,7 @@
"user-details": "Détails de l'utilisateur",
"user-name": "Nom d'utilisateur",
"authentication-method": "Méthode d'authentification",
"authentication-method-hint": "Ceci infique comment un utilisateur va s'authentifier sur Mealie. Si vous n'êtes pas sûr, choisissez 'Mealie'",
"authentication-method-hint": "Ceci indique comment un utilisateur va s'authentifier sur Mealie. Si vous n'êtes pas sûr, choisissez 'Mealie'",
"permissions": "Autorisations",
"administrator": "Administrateur",
"user-can-invite-other-to-group": "Lutilisateur peut inviter dautres personnes dans le groupe",
@@ -1050,7 +1041,7 @@
"translated": "traduit",
"choose-language": "Choisir la langue",
"select-description": "Choisissez la langue de linterface utilisateur de Mealie. Ce paramètre sapplique uniquement à vous, pas aux autres utilisateurs.",
"how-to-contribute-description": "Quelque chose nest pas encore traduit, mal traduit, ou votre langue est manquante dans la liste? {read-the-docs-link} sur la façon de contribuer!",
"how-to-contribute-description": "Quelque chose n'est pas encore traduit, mal traduit, ou votre langue est manquante dans la liste? {read-the-docs-link} sur la façon de contribuer!",
"read-the-docs": "Lire la documentation"
},
"data-pages": {
@@ -1058,7 +1049,7 @@
"merge-dialog-text": "La combinaison des aliments sélectionnés fusionnera laliment source et laliment cible en un seul aliment. Laliment source sera supprimé et toutes les références à laliment source seront mises à jour pour pointer vers laliment cible.",
"merge-food-example": "Fusion de {food1} dans {food2}",
"seed-dialog-text": "Initialisez la base de données avec des aliments basés sur votre langue locale. Cela permettra de créer plus de 200 aliments communs qui pourront être utilisés pour organiser votre base de données. Les aliments sont traduits grâce à un effort communautaire.",
"seed-dialog-warning": "Vous avez déjà des éléments dans votre base de données. Cette action ne réconciliera pas les doublons, vous devrez les gérer manuellement.",
"seed-dialog-warning": "Vous avez déjà des éléments dans votre base de données. Cette action ne fusionnera pas les doublons, vous devrez les gérer manuellement.",
"combine-food": "Combiner les aliments",
"source-food": "Aliment source",
"target-food": "Aliment cible",
@@ -1279,14 +1270,14 @@
"average-confident": "Confiant à {0}",
"try-an-example": "Essayez avec un exemple",
"parser": "Parser",
"background-tasks": "Tâches en arrière plan",
"background-tasks": "Tâches en arrière-plan",
"background-tasks-description": "Ici vous pouvez voir toutes les tâches en arrière-plan en cours et leur statut",
"no-logs-found": "Pas de journaux trouvés",
"tasks": "Tâches",
"setup": {
"first-time-setup": "Premier démarrage",
"welcome-to-mealie-get-started": "Bienvenue dans Mealie ! Nous pouvons commencer",
"already-set-up-bring-to-homepage": "Jai déjà tout configuré, amenez moi à lécran daccueil",
"already-set-up-bring-to-homepage": "Jai déjà tout configuré, amenez-moi à lécran daccueil",
"common-settings-for-new-sites": "Voici quelques paramètres courants pour les nouveaux sites",
"setup-complete": "Configuration terminée !",
"here-are-a-few-things-to-help-you-get-started": "Voici quelques trucs pour vous aider à commencer avec Mealie",
@@ -1303,7 +1294,7 @@
"profile": {
"welcome-user": "👋 Bienvenue, {0} !",
"description": "Gérez votre profil, les recettes et les paramètres de groupe.",
"invite-link": "Invite Link",
"invite-link": "Lien d'invitation",
"get-invite-link": "Obtenir un lien d'invitation",
"get-public-link": "Voir le lien public",
"account-summary": "Aperçu du compte",
@@ -1328,9 +1319,9 @@
"cookbooks-description": "Gérez une collection de catégories de recettes et générez des pages.",
"members": "Membres",
"members-description": "Voyez qui est dans votre foyer et gérez leurs permissions.",
"webhooks-description": "Configurez les webhooks qui se déclenchent les jours où il y a un plan au menu.",
"webhooks-description": "Configurez des webhooks qui se déclenchent les jours où il y a un plan au menu.",
"notifiers": "Notifications",
"notifiers-description": "Configurer les e-mails et les notifications push qui se déclenchent sur des événements spécifiques.",
"notifiers-description": "Configurer des e-mails et des notifications push qui se déclenchent sur des événements spécifiques.",
"manage-data": "Gérer les données",
"manage-data-description": "Gérez vos données Mealie, Aliments, Unités, Catégories, Tags et plus.",
"data-migrations": "Migration des données",
@@ -1352,13 +1343,13 @@
},
"cookbook": {
"cookbooks": "Livres de recettes",
"description": "Les livres de recettes sont un autre moyen dorganiser des recettes en sélectionnant un ensemble précis de recettes, de classification et de filtres. La création d'un livre de recettes ajoute une entrée à la barre latérale et toutes les recettes avec les filtres choisies seront affichées dans le livre de recettes.",
"hide-cookbooks-from-other-households": "Hide Cookbooks from Other Households",
"hide-cookbooks-from-other-households-description": "When enabled, only cookbooks from your household will appear on the sidebar",
"description": "Les livres de recettes sont un autre moyen d'organiser des recettes en sélectionnant un ensemble précis de recettes, de classification et de filtres. La création d'un livre de recettes ajoute une entrée à la barre latérale et toutes les recettes avec les filtres choisies seront affichées dans le livre de recettes.",
"hide-cookbooks-from-other-households": "Masquer les livres de cuisine des autres foyers",
"hide-cookbooks-from-other-households-description": "Lorsque cette option est activée, seuls les livres de cuisine de votre foyer apparaîtront dans la barre latérale",
"public-cookbook": "Livre de recettes public",
"public-cookbook-description": "Les livres de recettes publics peuvent être partagés avec des personnes qui n'ont pas Mealie et seront affichés sur la page de vos groupes.",
"filter-options": "Options de filtres",
"filter-options-description": "Si coché, le livre de recettes n'incluera que les recettes qui remplissent tous les critères sélectionnés. Cela s'applique à chaque rubrique individuellement.",
"filter-options-description": "Si coché, le livre de recettes n'inclura que les recettes qui remplissent tous les critères sélectionnés. Cela s'applique à chaque rubrique individuellement.",
"require-all-categories": "Nécessite toutes les catégories",
"require-all-tags": "Nécessite tous les mots-clés",
"require-all-tools": "Nécessite tous les ustensiles",
@@ -1384,8 +1375,8 @@
"relational-keywords": {
"is": "est",
"is-not": "nest pas",
"is-one-of": "est un de",
"is-not-one-of": "n'est pas un de",
"is-one-of": "fait partie de",
"is-not-one-of": "ne fait pas partie de",
"contains-all-of": "contient tout",
"is-like": "est comme",
"is-not-like": "n'est pas similaire à"

File diff suppressed because it is too large Load Diff

View File

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

View File

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

View File

@@ -15,7 +15,7 @@
"docs": "Dokumentáció",
"download-log": "Napló letöltése",
"download-recipe-json": "Utoljára letöltött JSON",
"github": "Github",
"github": "GitHub",
"log-lines": "Napló sorok",
"not-demo": "Nem Demó",
"portfolio": "Portfólió",
@@ -277,7 +277,7 @@
"admin-group-management-text": "A csoporthoz tartozó változtatások azonnal megjelennek.",
"group-id-value": "Csoport azonosító: {0}",
"total-households": "Háztartások száma",
"you-must-select-a-group-before-selecting-a-household": "You must select a group before selecting a household"
"you-must-select-a-group-before-selecting-a-household": "A háztartás kiválasztása előtt ki kell választania egy csoportot"
},
"household": {
"household": "Háztartás",
@@ -518,7 +518,7 @@
"save-recipe-before-use": "Recept mentése használat előtt",
"section-title": "Szakasz címe",
"servings": "Adag",
"serves-amount": "Serves {amount}",
"serves-amount": "Adag {amount}",
"share-recipe-message": "Szeretném megossztani veled a {0} receptemet.",
"show-nutrition-values": "Tápértékek megjelenítése",
"sodium-content": "Nátrium",
@@ -570,13 +570,6 @@
"increase-scale-label": "Skála növelése 1-gyel",
"locked": "Zárolt",
"public-link": "Nyilvános link",
"timer": {
"kitchen-timer": "Konyhai időzítő",
"start-timer": "Időzítő elindítása",
"pause-timer": "Időzítő megállítása",
"resume-timer": "Időzítő folytatása",
"stop-timer": "Időzítő leállítása"
},
"edit-timeline-event": "Idővonal-esemény szerkesztése",
"timeline": "Idővonal",
"timeline-is-empty": "Az idővonalon még semmi sincs. Próbálja meg elkészíteni ezt a receptet!",
@@ -586,7 +579,6 @@
"made-this": "Elkészítettem ezt",
"how-did-it-turn-out": "Hogyan sikerült?",
"user-made-this": "ezt {user} készítette el",
"last-made-date": "Utoljára elkészítve {date}",
"api-extras-description": "A receptek extrái a Mealie API egyik legfontosabb szolgáltatása. Lehetővé teszik, hogy egyéni JSON kulcs/érték párokat hozzon létre egy receptben, amelyekre harmadik féltől származó alkalmazásokból hivatkozhat. Ezeket a kulcsokat információszolgáltatásra használhatja, például automatizmusok vagy egyéni üzenetek indítására, amelyeket a kívánt eszközre küldhet.",
"message-key": "Üzenetkulcs",
"parse": "Előkészítés",
@@ -644,7 +636,7 @@
"recipe-debugger-use-openai-description": "Használja az OpenAI-t az eredmények elemzésére, ahelyett, hogy a scraper könyvtárra hagyatkozna. Ha URL-címen keresztül hoz létre receptet, ez automatikusan megtörténik, ha a scraper könyvtár nem működik, ám itt manuálisan is tesztelheti.",
"debug": "Hibakeresés",
"tree-view": "Fa nézet",
"recipe-servings": "Recipe Servings",
"recipe-servings": "Recept tálalások",
"recipe-yield": "Adagonkénti információk",
"recipe-yield-text": "Recipe Yield Text",
"unit": "Mennyiségi egység",
@@ -654,7 +646,6 @@
"nextStep": "Következő lépés",
"recipe-actions": "Receptekkel kapcsolatos tevékenységek",
"parser": {
"experimental-alert-text": "A Mealie természetes nyelvi feldolgozást használ a recept összetevőinek elemzésére, az egységek és az élelmiszerelemek létrehozására. Ez a funkció kísérleti jellegű, és előfordulhat, hogy nem mindig működik az elvárt módon. Ha nem szeretné használni az elemzett eredményeket, válassza a 'Mégse' lehetőséget, és a módosítások nem kerülnek mentésre.",
"ingredient-parser": "Hozzávaló elemző",
"explanation": "A hozzávalók elemzőjének használatához kattintson a 'Parse All' gombra a folyamat elindításához. Amint a feldolgozott hozzávalók elérhetővé válnak, áttekintheti az elemeket, és ellenőrizheti, hogy azok helyesen lettek-e elemezve. A modell megbízhatósági pontszáma az elem címének jobb oldalán jelenik meg. Ez a pontszám az összes egyéni pontszám átlaga, és nem biztos, hogy mindig teljesen pontos.",
"alerts-explainer": "Figyelmeztetések jelennek meg, ha talál egy megfelelő élelmiszert vagy egységet, de az nem létezik az adatbázisban.",
@@ -669,24 +660,24 @@
"no-food": "Élelmiszer nélküli"
},
"reset-servings-count": "Adagok számának visszaállítása",
"not-linked-ingredients": "Additional Ingredients"
"not-linked-ingredients": "Kiegészítő hozzávalók"
},
"recipe-finder": {
"recipe-finder": "Recipe Finder",
"recipe-finder-description": "Search for recipes based on ingredients you have on hand. You can also filter by tools you have available, and set a maximum number of missing ingredients or tools.",
"selected-ingredients": "Selected Ingredients",
"no-ingredients-selected": "No ingredients selected",
"missing": "Missing",
"no-recipes-found": "No recipes found",
"no-recipes-found-description": "Try adding more ingredients to your search or adjusting your filters",
"include-ingredients-on-hand": "Include Ingredients On Hand",
"include-tools-on-hand": "Include Tools On Hand",
"max-missing-ingredients": "Max Missing Ingredients",
"max-missing-tools": "Max Missing Tools",
"selected-tools": "Selected Tools",
"other-filters": "Other Filters",
"ready-to-make": "Ready to Make",
"almost-ready-to-make": "Almost Ready to Make"
"recipe-finder": "Receptkereső",
"recipe-finder-description": "Keressen recepteket a kéznél lévő összetevők alapján. A rendelkezésre álló eszközök alapján is szűrhet, és beállíthatja a hiányzó összetevők vagy eszközök maximális számát.",
"selected-ingredients": "Kiválasztott összetevők",
"no-ingredients-selected": "Nincsenek kiválasztott összetevők",
"missing": "Hiányzó",
"no-recipes-found": "Nem található recept",
"no-recipes-found-description": "Próbáljon meg több összetevőt hozzáadni a kereséshez, vagy állítsa be a szűrőket",
"include-ingredients-on-hand": "Beleértve a kéznél lévő összetevőket",
"include-tools-on-hand": "Beleértve a kéznél lévő eszközöket",
"max-missing-ingredients": "Maximálisan hiányzó összetevők száma",
"max-missing-tools": "Maximálisan hiányzó eszközök száma",
"selected-tools": "Kiválasztott eszközök",
"other-filters": "További szűrők",
"ready-to-make": "Előkészítve",
"almost-ready-to-make": "Majdnem készen áll"
},
"search": {
"advanced-search": "Részletes keresés",
@@ -729,7 +720,7 @@
"backup-restore": "Biztonsági Mentés/Visszaállítás",
"back-restore-description": "A biztonsági mentés visszaállítása felülírja az adatbázisban és az adatkönyvtárban lévő összes aktuális adatot, és a biztonsági mentés tartalmával helyettesíti azokat. {cannot-be-undone} Ha a visszaállítás sikeres, akkor a rendszer kilépteti Önt.",
"cannot-be-undone": "Ezt a műveletet visszavonható - óvatosan használja.",
"postgresql-note": "Ha PostGreSQL-t használ, kérjük, a visszaállítás előtt tekintse át a {backup-restore-process}-t.",
"postgresql-note": "If you are using PostgreSQL, please review the {backup-restore-process} prior to restoring.",
"backup-restore-process-in-the-documentation": "biztonsági mentés/visszaállítás folyamata a dokumentációban",
"irreversible-acknowledgment": "Tudomásul veszem, hogy ez a művelet visszafordíthatatlan, helyrehozhatatlan, és adatvesztéssel járhat",
"restore-backup": "Biztonsági mentés visszaállítása"
@@ -891,7 +882,7 @@
"are-you-sure-you-want-to-check-all-items": "Biztos, hogy minden elemet be akar jelölni?",
"are-you-sure-you-want-to-uncheck-all-items": "Biztos, hogy minden elem kijelölését visszavonja?",
"are-you-sure-you-want-to-delete-checked-items": "Biztosan törölni akarja az összes bejelölt elemet?",
"no-shopping-lists-found": "No Shopping Lists Found"
"no-shopping-lists-found": "Nem találhatók bevásárlólisták"
},
"sidebar": {
"all-recipes": "Minden recept",
@@ -1303,7 +1294,7 @@
"profile": {
"welcome-user": "👋 Üdvözöljük, {0}!",
"description": "Profiljának, receptjeinek és csoportbeállításainak kezelése.",
"invite-link": "Invite Link",
"invite-link": "Meghívó link",
"get-invite-link": "Meghívó link beszerzése",
"get-public-link": "Nyilvánon link beszerzése",
"account-summary": "Fiók áttekintése",
@@ -1333,7 +1324,7 @@
"notifiers-description": "Állítson be olyan e-mail és push-értesítéseket, amelyek meghatározott események esetén lépnek működésbe.",
"manage-data": "Adatok kezelése",
"manage-data-description": "Az Ön Mealie adatainak kezelése: alapanyagok, mértékegységek, kategóriák, címkék, stb.",
"data-migrations": "Adat migráció",
"data-migrations": "Adatmigráció",
"data-migrations-description": "Migrálja meglévő adatait más alkalmazásokból, például Nextcloud Recipes vagy Chowdown.",
"email-sent": "E-mail elküldve",
"error-sending-email": "Hiba történt az e-Mail küldésénél",
@@ -1348,13 +1339,13 @@
"manage-members": "Tagok Kezelése",
"manage-webhooks": "Webhookok kezelése",
"manage-notifiers": "Értesítések kezelése",
"manage-data-migrations": "Adatok migrációjának kezelése"
"manage-data-migrations": "Adatmigráció kezelése"
},
"cookbook": {
"cookbooks": "Szakácskönyvek",
"description": "A szakácskönyvek egy másik módja a receptek rendszerezésének a receptek, szervezők és egyéb szűrők keresztmetszeteinek létrehozásával. Egy szakácskönyv létrehozása egy bejegyzést ad az oldalsávhoz, és a kiválasztott szűrőkkel rendelkező összes recept megjelenik a szakácskönyvben.",
"hide-cookbooks-from-other-households": "Hide Cookbooks from Other Households",
"hide-cookbooks-from-other-households-description": "When enabled, only cookbooks from your household will appear on the sidebar",
"hide-cookbooks-from-other-households": "Szakácskönyvek elrejtése más háztartásoktól",
"hide-cookbooks-from-other-households-description": "Ha engedélyezve van, csak az Ön háztartásának szakácskönyvei jelennek meg az oldalsávban",
"public-cookbook": "Nyilvános szakácskönyv",
"public-cookbook-description": "A nyilvános szakácskönyvek megoszthatók a nem mealie felhasználókkal, és megjelennek a csoportod oldalán.",
"filter-options": "Szűrési beállítások",

View File

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

View File

@@ -182,7 +182,7 @@
"date": "Data",
"id": "Id",
"owner": "Proprietario",
"change-owner": "Change Owner",
"change-owner": "Cambia Proprietario",
"date-added": "Data Aggiunta",
"none": "Nessuno",
"run": "Avvia",
@@ -214,10 +214,10 @@
"confirm-delete-generic-items": "Sei sicuro di voler eliminare i seguenti elementi?",
"organizers": "Organizzatori",
"caution": "Attenzione",
"show-advanced": "Show Advanced",
"add-field": "Add Field",
"date-created": "Date Created",
"date-updated": "Date Updated"
"show-advanced": "Mostra Avanzate",
"add-field": "Aggiungi campo",
"date-created": "Data di Creazione",
"date-updated": "Data di aggiornamento"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Sei sicuro di volerlo eliminare <b>{groupName}<b/>'?",
@@ -277,7 +277,7 @@
"admin-group-management-text": "Le modifiche a questo gruppo si rifletteranno immediatamente.",
"group-id-value": "Id Gruppo: {0}",
"total-households": "Famiglie Totali",
"you-must-select-a-group-before-selecting-a-household": "You must select a group before selecting a household"
"you-must-select-a-group-before-selecting-a-household": "Devi selezionare un gruppo prima di selezionare una famiglia"
},
"household": {
"household": "Famiglia",
@@ -357,7 +357,7 @@
"for-type-meal-types": "per {0} tipi di pasto",
"meal-plan-rules": "Regole del piano alimentare",
"new-rule": "Nuova regola",
"meal-plan-rules-description": "You can create rules for auto selecting recipes for your meal plans. These rules are used by the server to determine the random pool of recipes to select from when creating meal plans. Note that if rules have the same day/type constraints then the rule filters will be merged. In practice, it's unnecessary to create duplicate rules, but it's possible to do so.",
"meal-plan-rules-description": "Si possono creare regole per la selezione automatica delle ricette per i piani alimentari. Queste regole vengono utilizzate dal server per determinare l'insieme casuale di ricette da cui prelevare quando si creano i piani. Si noti che se le regole hanno gli stessi vincoli giorno/tipo, i filtri delle regole verranno uniti. In pratica, non è necessario creare regole duplicate, ma è comunque possibile farlo.",
"new-rule-description": "Quando si crea una nuova regola per un piano alimentare è possibile limitare la sua applicazione ad un giorno specifico della settimana e/o un tipo specifico di pasto. Per applicare una regola a tutti i giorni o a tutti i tipi di pasto, è possibile impostare la regola a \"Qualsiasi\", applicandola a tutti i possibili valori per il tipo di giorno e/o di pasto.",
"recipe-rules": "Regole per le ricette",
"applies-to-all-days": "Si applica a ogni giorno",
@@ -467,7 +467,7 @@
"calories-suffix": "calorie",
"carbohydrate-content": "Carboidrati",
"categories": "Categorie",
"cholesterol-content": "Cholesterol",
"cholesterol-content": "Colesterolo",
"comment-action": "Commento",
"comment": "Commento",
"comments": "Commenti",
@@ -514,11 +514,11 @@
"recipe-updated": "Ricetta aggiornata",
"remove-from-favorites": "Rimuovi dai Preferiti",
"remove-section": "Rimuovi Sezione",
"saturated-fat-content": "Saturated fat",
"saturated-fat-content": "Grassi saturi",
"save-recipe-before-use": "Salva la ricetta prima dell'uso",
"section-title": "Titolo Sezione",
"servings": "Portate",
"serves-amount": "Serves {amount}",
"servings": "Porzioni",
"serves-amount": "Porzioni {amount}",
"share-recipe-message": "Volevo condividere la mia {0} ricetta con te.",
"show-nutrition-values": "Mostra Valori Nutrizionali",
"sodium-content": "Sodio",
@@ -526,9 +526,9 @@
"sugar-content": "Zuccheri",
"title": "Titolo",
"total-time": "Tempo Totale",
"trans-fat-content": "Trans-fat",
"trans-fat-content": "Grassi trans",
"unable-to-delete-recipe": "Impossibile eliminare ricetta",
"unsaturated-fat-content": "Unsaturated fat",
"unsaturated-fat-content": "Grassi insaturi",
"no-recipe": "Nessuna Ricetta",
"locked-by-owner": "Bloccato dal Proprietario",
"join-the-conversation": "Unisciti alla conversazione",
@@ -546,9 +546,9 @@
"failed-to-add-recipes-to-list": "Impossibile aggiungere la ricetta alla lista",
"failed-to-add-recipe-to-mealplan": "Impossibile aggiungere la ricetta al piano alimentare",
"failed-to-add-to-list": "Errore durante l'aggiunta alla lista",
"yield": "Porzioni",
"yields-amount-with-text": "Yields {amount} {text}",
"yield-text": "Yield Text",
"yield": "Quantità prodotta",
"yields-amount-with-text": "Quantità prodotta: {amount} {text}",
"yield-text": "Unità della quantità prodotta",
"quantity": "Quantità",
"choose-unit": "Scegli Unità",
"press-enter-to-create": "Premi invio per creare",
@@ -570,13 +570,6 @@
"increase-scale-label": "Aumenta la scala di 1",
"locked": "Bloccato",
"public-link": "Link Pubblico",
"timer": {
"kitchen-timer": "Contaminuti da cucina",
"start-timer": "Avvia timer",
"pause-timer": "Metti in pausa il contaminuti",
"resume-timer": "Riprendi il contaminuti",
"stop-timer": "Arresta il Timer"
},
"edit-timeline-event": "Modifica evento sulla linea temporale",
"timeline": "Linea temporale",
"timeline-is-empty": "Niente sulla linea temporale. Prova a fare questa ricetta!",
@@ -586,7 +579,6 @@
"made-this": "L'Ho Preparato",
"how-did-it-turn-out": "Come è venuto?",
"user-made-this": "{user} l'ha preparato",
"last-made-date": "Ultima Preparazione {date}",
"api-extras-description": "Le opzioni extra delle ricette sono una caratteristica fondamentale dell'API Mealie. Consentono di creare json personalizzati con coppie di chiavi/valore all'interno di una ricetta a cui fare riferimento tramite applicazioni terze. È possibile utilizzare queste chiavi per inserire informazioni, per esempio per attivare automazioni oppure per inoltrare messaggi personalizzati al dispositivo desiderato.",
"message-key": "Chiave Messaggio",
"parse": "Analizza",
@@ -619,15 +611,15 @@
"scrape-recipe-have-a-lot-of-recipes": "Hai un sacco di ricette che vuoi importare contemporaneamente?",
"scrape-recipe-suggest-bulk-importer": "Prova l'importatore massivo",
"scrape-recipe-have-raw-html-or-json-data": "Hai dei dati grezzi HTML o JSON?",
"scrape-recipe-you-can-import-from-raw-data-directly": "You can import from raw data directly",
"scrape-recipe-you-can-import-from-raw-data-directly": "È possibile importare direttamente dai dati grezzi",
"import-original-keywords-as-tags": "Importa parole chiave originali come tag",
"stay-in-edit-mode": "Rimani in modalità Modifica",
"import-from-zip": "Importa da Zip",
"import-from-zip-description": "Importa una singola ricetta esportata da un'altra istanza di Mealie.",
"import-from-html-or-json": "Import from HTML or JSON",
"import-from-html-or-json-description": "Import a single recipe from raw HTML or JSON. This is useful if you have a recipe from a site that Mealie can't scrape normally, or from some other external source.",
"json-import-format-description-colon": "To import via JSON, it must be in valid format:",
"json-editor": "JSON Editor",
"import-from-html-or-json": "Importa da HTML o JSON",
"import-from-html-or-json-description": "Importa una singola ricetta da HTML o JSON grezzi. Utile se si ha una ricetta proveniente da siti da cui solitamente Mealie non riesce a importare, o da qualche altra fonte esterna.",
"json-import-format-description-colon": "Per importare tramite JSON, deve essere in un formato valido:",
"json-editor": "Editor JSON",
"zip-files-must-have-been-exported-from-mealie": "I file .zip devono essere stati esportati da Mealie",
"create-a-recipe-by-uploading-a-scan": "Crea una ricetta caricando una scansione.",
"upload-a-png-image-from-a-recipe-book": "Carica un'immagine png da un libro di ricette",
@@ -644,9 +636,9 @@
"recipe-debugger-use-openai-description": "Usa OpenAI per analizzare i risultati invece di affidarsi alla libreria scraper. Quando si crea una ricetta tramite URL, questo viene fatto automaticamente se la libreria scraper fallisce, ma è possibile testarlo manualmente qui.",
"debug": "Debug",
"tree-view": "Visualizzazione ad Albero",
"recipe-servings": "Recipe Servings",
"recipe-servings": "Porzioni ricetta",
"recipe-yield": "Resa Ricetta",
"recipe-yield-text": "Recipe Yield Text",
"recipe-yield-text": "Testo del rendimento ricetta",
"unit": "Unità",
"upload-image": "Carica immagine",
"screen-awake": "Mantieni lo schermo acceso",
@@ -654,7 +646,6 @@
"nextStep": "Passo successivo",
"recipe-actions": "Azioni Ricetta",
"parser": {
"experimental-alert-text": "Mealie utilizza l'elaborazione del linguaggio naturale per analizzare e creare unità e prodotti alimentari per i vostri ingredienti di ricetta. Questa funzione è sperimentale e potrebbe non funzionare sempre come previsto. Se preferisci non usare i risultati analizzati, puoi selezionare 'Annulla' e le tue modifiche non saranno salvate.",
"ingredient-parser": "Analizzatore ingredienti",
"explanation": "Per utilizzare l'analizzatore degli ingredienti, fare clic sul pulsante 'Analizza tutto' per avviare il processo. Una volta che gli ingredienti elaborati saranno disponibili, sarà possibile rivedere gli elementi e verificare che siano stati analizzati correttamente. Il punteggio di confidenza del modello viene visualizzato alla destra del titolo dell'elemento. Questo punteggio è una media di tutti i singoli punteggi e potrebbe non essere sempre completamente accurato.",
"alerts-explainer": "Gli avvisi verranno visualizzati se si trova un prodotto o un'unità corrispondente ma non esiste nel database.",
@@ -668,25 +659,25 @@
"missing-food": "Crea cibo mancante: {food}",
"no-food": "Nessun Alimento"
},
"reset-servings-count": "Reset Servings Count",
"not-linked-ingredients": "Additional Ingredients"
"reset-servings-count": "Reimposta conteggio porzioni",
"not-linked-ingredients": "Ingredienti Aggiuntivi"
},
"recipe-finder": {
"recipe-finder": "Recipe Finder",
"recipe-finder-description": "Search for recipes based on ingredients you have on hand. You can also filter by tools you have available, and set a maximum number of missing ingredients or tools.",
"selected-ingredients": "Selected Ingredients",
"no-ingredients-selected": "No ingredients selected",
"missing": "Missing",
"no-recipes-found": "No recipes found",
"no-recipes-found-description": "Try adding more ingredients to your search or adjusting your filters",
"include-ingredients-on-hand": "Include Ingredients On Hand",
"include-tools-on-hand": "Include Tools On Hand",
"max-missing-ingredients": "Max Missing Ingredients",
"max-missing-tools": "Max Missing Tools",
"selected-tools": "Selected Tools",
"other-filters": "Other Filters",
"ready-to-make": "Ready to Make",
"almost-ready-to-make": "Almost Ready to Make"
"recipe-finder": "Trova ricette",
"recipe-finder-description": "Cerca ricette in base agli ingredienti a portata di mano. Si può anche filtrare in base agli utensili che si ha a disposizione e impostare un numero massimo d'ingredienti o utensili mancanti.",
"selected-ingredients": "Seleziona ingredienti",
"no-ingredients-selected": "Nessun ingrediente selezionato",
"missing": "Mancante",
"no-recipes-found": "Nessuna ricetta trovata",
"no-recipes-found-description": "Prova ad aggiungere altri ingredienti alla tua ricerca o a regolare i tuoi filtri",
"include-ingredients-on-hand": "Includi ingredienti a mano",
"include-tools-on-hand": "Includi strumenti a mano",
"max-missing-ingredients": "Max Ingredienti Mancanti",
"max-missing-tools": "Massimo Strumenti Mancanti",
"selected-tools": "Strumenti Selezionati",
"other-filters": "Altri filtri",
"ready-to-make": "Pronto da fare",
"almost-ready-to-make": "Quasi pronto da fare"
},
"search": {
"advanced-search": "Ricerca Avanzata",
@@ -729,7 +720,7 @@
"backup-restore": "Ripristina backup",
"back-restore-description": "Il ripristino di questo backup sovrascriverà tutti i dati correnti nel database e nella directory dei dati e li sostituirà con il contenuto di questo backup. {cannot-be-undone} Se il ripristino avrà successo, sarai disconnesso.",
"cannot-be-undone": "Questa azione non può essere annullata - usa con cautela.",
"postgresql-note": "Se stai utilizzando PostGreSQL, controlla il {backup-restore-process} prima di ripristinarlo.",
"postgresql-note": "If you are using PostgreSQL, please review the {backup-restore-process} prior to restoring.",
"backup-restore-process-in-the-documentation": "processo di backup/restore nella documentazione",
"irreversible-acknowledgment": "Capisco che questa azione è irreversibile, distruttiva e può causare la perdita di dati",
"restore-backup": "Ripristina Backup"
@@ -891,7 +882,7 @@
"are-you-sure-you-want-to-check-all-items": "Sei sicuro di voler tutti gli elementi?",
"are-you-sure-you-want-to-uncheck-all-items": "Sei sicuro di voler deselezionare tutti gli elementi?",
"are-you-sure-you-want-to-delete-checked-items": "Sei sicuro di voler rimuovere tutti gli articoli selezionati?",
"no-shopping-lists-found": "No Shopping Lists Found"
"no-shopping-lists-found": "Nessuna lista della spesa trovata"
},
"sidebar": {
"all-recipes": "Ricette",
@@ -1057,8 +1048,8 @@
"foods": {
"merge-dialog-text": "Combinando gli alimenti selezionati, l'alimento di origine e l'alimento di destinazione verranno uniti in un unico alimento. L'alimento di origine verrà eliminato e tutti i riferimenti all'alimento di origine verranno aggiornati per puntare all'alimento di destinazione.",
"merge-food-example": "Unione di {food1} in {food2}",
"seed-dialog-text": "Inizializza il database con alimenti in base alla tua lingua locale. Questo creerà oltre 200 alimenti comuni che possono essere utilizzati per organizzare il tuo database. Gli alimenti sono tradotti grazie al contributo della comunità di utenti.",
"seed-dialog-warning": "Hai già alcuni elementi nel tuo database. Questa azione non riconcilierà i duplicati, dovrai gestirli manualmente.",
"seed-dialog-text": "Inizializzare il database con alimenti della propria lingua locale. Ciò creerà oltre 200 alimenti comuni che potranno essere usati per organizzare il proprio database. Gli alimenti vengono tradotti grazie al contributo della comunità degli utenti.",
"seed-dialog-warning": "Ci sono già alcuni elementi nel database. Questa azione non unificherà i duplicati, bisognerà gestirli manualmente.",
"combine-food": "Combina Alimenti",
"source-food": "Alimento di Origine",
"target-food": "Alimento di Destinazione",
@@ -1297,13 +1288,13 @@
"debug-openai-services-description": "Usa questa pagina per fare debug dei servizi OpenAI. Puoi testare la tua connessione OpenAI e vedere i risultati qui. Se si dispone di servizi di immagine abilitati, è anche possibile fornire un'immagine.",
"run-test": "Esegui test",
"test-results": "Risultati dei test",
"group-delete-note": "Groups with users or households cannot be deleted",
"household-delete-note": "Households with users cannot be deleted"
"group-delete-note": "I gruppi con utenti o famiglie non possono essere eliminati",
"household-delete-note": "Le famiglie con utenti non possono essere eliminate"
},
"profile": {
"welcome-user": "👋 Benvenutǝ, {0}!",
"description": "Gestisci il tuo profilo, le ricette e le impostazioni di gruppo.",
"invite-link": "Invite Link",
"invite-link": "Collegamento d'invito",
"get-invite-link": "Ottieni Link Di Invito",
"get-public-link": "Ottieni link pubblico",
"account-summary": "Riepilogo Account",
@@ -1352,9 +1343,9 @@
},
"cookbook": {
"cookbooks": "Ricettari",
"description": "Cookbooks are another way to organize recipes by creating cross sections of recipes, organizers, and other filters. Creating a cookbook will add an entry to the side-bar and all the recipes with the filters chosen will be displayed in the cookbook.",
"hide-cookbooks-from-other-households": "Hide Cookbooks from Other Households",
"hide-cookbooks-from-other-households-description": "When enabled, only cookbooks from your household will appear on the sidebar",
"description": "I libri di cucina sono un altro modo per organizzare le ricette creando insiemi di ricette, ordinamenti e altri filtri. La creazione di un libro di cucina aggiungerà una voce alla barra laterale e tutte le ricette con i filtri scelti verranno visualizzate nel libro di cucina.",
"hide-cookbooks-from-other-households": "Nascondi i libri di cucina delle altre famiglie",
"hide-cookbooks-from-other-households-description": "Se abilitata, nella barra laterale appariranno solo libri di cucina della propria famiglia",
"public-cookbook": "Ricettario Pubblico",
"public-cookbook-description": "I ricettari pubblici possono essere condivisi con gli utenti non-mealie e saranno visualizzati nella pagina dei gruppi.",
"filter-options": "Opzioni Filtro",
@@ -1370,24 +1361,24 @@
},
"query-filter": {
"logical-operators": {
"and": "AND",
"or": "OR"
"and": "E",
"or": "O"
},
"relational-operators": {
"equals": "equals",
"does-not-equal": "does not equal",
"is-greater-than": "is greater than",
"is-greater-than-or-equal-to": "is greater than or equal to",
"is-less-than": "is less than",
"is-less-than-or-equal-to": "is less than or equal to"
"equals": "è uguale",
"does-not-equal": "è diverso",
"is-greater-than": "è maggiore di",
"is-greater-than-or-equal-to": "è maggiore o uguale di",
"is-less-than": "è minore di",
"is-less-than-or-equal-to": "è minore o uguale di"
},
"relational-keywords": {
"is": "is",
"is-not": "is not",
"is-one-of": "is one of",
"is-not-one-of": "is not one of",
"contains-all-of": "contains all of",
"is-like": "is like",
"is": "è",
"is-not": "non è",
"is-one-of": "è uno di",
"is-not-one-of": "non è uno di",
"contains-all-of": "contiene tutti i",
"is-like": "è simile",
"is-not-like": "non è come"
}
}

View File

@@ -277,7 +277,7 @@
"admin-group-management-text": "このグループへの変更はすぐに反映されます。",
"group-id-value": "グループID: {0}",
"total-households": "世帯数",
"you-must-select-a-group-before-selecting-a-household": "You must select a group before selecting a household"
"you-must-select-a-group-before-selecting-a-household": "世帯を選択する前にグループを選択する必要があります"
},
"household": {
"household": "世帯",
@@ -518,7 +518,7 @@
"save-recipe-before-use": "使用する前にレシピを保存する",
"section-title": "手順のタイトル",
"servings": "人前",
"serves-amount": "Serves {amount}",
"serves-amount": "役立つ {amount}",
"share-recipe-message": "{0} レシピをあなたと共有したいと思っています。",
"show-nutrition-values": "栄養価を表示",
"sodium-content": "ナトリウム",
@@ -547,8 +547,8 @@
"failed-to-add-recipe-to-mealplan": "レシピを献立に追加する事に失敗しました。",
"failed-to-add-to-list": "リストに追加できませんでした",
"yield": "人分",
"yields-amount-with-text": "Yields {amount} {text}",
"yield-text": "Yield Text",
"yields-amount-with-text": "収益は{amount} {text}",
"yield-text": "収入テキスト",
"quantity": "分量",
"choose-unit": "単位を選択",
"press-enter-to-create": "Enterキーを押して作成",
@@ -570,13 +570,6 @@
"increase-scale-label": "スケールを 1 ずつ増やす",
"locked": "ロック済み",
"public-link": "公開リンク",
"timer": {
"kitchen-timer": "キッチンタイマー",
"start-timer": "タイマー開始",
"pause-timer": "タイマーを一時停止",
"resume-timer": "タイマーを再開",
"stop-timer": "タイマーを停止"
},
"edit-timeline-event": "タイムラインイベントの編集",
"timeline": "タイムライン",
"timeline-is-empty": "タイムラインにはまだ何もありません。レシピを作ってみてください!",
@@ -586,7 +579,6 @@
"made-this": "これを作りました",
"how-did-it-turn-out": "どうなりましたか?",
"user-made-this": "{user} がこれを作りました",
"last-made-date": "最後は {date} に作りました",
"api-extras-description": "レシピの追加機能はMealie APIの主な機能です。 サードパーティアプリから参照するために、レシピ内にカスタムJSONキー/値のペアを作成することができます。 これらのキーを使用して情報を提供することができます。例えば、自動化をトリガーしたり、カスタムメッセージをお使いのデバイスにリレーするなどです。",
"message-key": "メッセージキー",
"parse": "解析",
@@ -644,9 +636,9 @@
"recipe-debugger-use-openai-description": "スクレーパーライブラリに依存するのではなく、結果を解析するためにOpenAIを使用してください。 URL経由でレシピを作成する場合は、スクレーパーライブラリが失敗した場合に自動的に行われますが、ここで手動でテストすることができます。",
"debug": "デバッグ",
"tree-view": "ツリービュー",
"recipe-servings": "Recipe Servings",
"recipe-servings": "レシピの分量",
"recipe-yield": "レシピ収率",
"recipe-yield-text": "Recipe Yield Text",
"recipe-yield-text": "レシピ収量テキスト",
"unit": "単位",
"upload-image": "画像をアップロード",
"screen-awake": "画面をスリープ状態にしない",
@@ -654,7 +646,6 @@
"nextStep": "次のステップ",
"recipe-actions": "レシピ操作",
"parser": {
"experimental-alert-text": "Mealieは、自然言語処理を使用して、レシピ成分のための単位や食品を解析し、作成します。 この機能は実験的であり、常に期待どおりに動作するとは限りません。 解析結果を使用したくない場合は、「キャンセル」を選択することができ、変更内容は保存されません。",
"ingredient-parser": "Ingredient Parser",
"explanation": "Ingredient Parserを使用するには、「すべて解析」ボタンをクリックしてプロセスを開始します。 処理された原材料が利用可能になったら、項目を確認し、それらが正しく解析されたことを確認できます。 アイテムタイトルの右側にモデルの信頼度が表示されます。 このスコアは、すべての個々のスコアの平均であり、常に完全に正確であるとは限りません。",
"alerts-explainer": "一致する食品または単位が見つかってもデータベースに存在しない場合は、アラートが表示されます。",
@@ -669,24 +660,24 @@
"no-food": "食材はありません"
},
"reset-servings-count": "サービング数をリセット",
"not-linked-ingredients": "Additional Ingredients"
"not-linked-ingredients": "追加の材料"
},
"recipe-finder": {
"recipe-finder": "Recipe Finder",
"recipe-finder-description": "Search for recipes based on ingredients you have on hand. You can also filter by tools you have available, and set a maximum number of missing ingredients or tools.",
"selected-ingredients": "Selected Ingredients",
"no-ingredients-selected": "No ingredients selected",
"missing": "Missing",
"no-recipes-found": "No recipes found",
"no-recipes-found-description": "Try adding more ingredients to your search or adjusting your filters",
"include-ingredients-on-hand": "Include Ingredients On Hand",
"include-tools-on-hand": "Include Tools On Hand",
"max-missing-ingredients": "Max Missing Ingredients",
"max-missing-tools": "Max Missing Tools",
"selected-tools": "Selected Tools",
"other-filters": "Other Filters",
"ready-to-make": "Ready to Make",
"almost-ready-to-make": "Almost Ready to Make"
"recipe-finder": "レシピ検索",
"recipe-finder-description": "手元にある材料に基づいてレシピを検索します。また、利用可能なツールでフィルタリングしたり、不足している材料やツールの最大数を設定したりすることもできます。",
"selected-ingredients": "選択された材料",
"no-ingredients-selected": "材料が選択されていません",
"missing": "見つかりません",
"no-recipes-found": "レシピが見つかりません",
"no-recipes-found-description": "検索に材料を追加するか、フィルターを調整してみてください",
"include-ingredients-on-hand": "手元にある材料を含める",
"include-tools-on-hand": "手元にあるツールを含める",
"max-missing-ingredients": "不足している材料の最大数",
"max-missing-tools": "不足しているツールの最大数",
"selected-tools": "選択されたツール",
"other-filters": "その他のフィルター",
"ready-to-make": "準備完了",
"almost-ready-to-make": "ほぼ準備完了"
},
"search": {
"advanced-search": "詳細検索",
@@ -729,7 +720,7 @@
"backup-restore": "バックアップと復元",
"back-restore-description": "このバックアップを復元すると、データベースとデータディレクトリ内のすべての現在のデータが上書きされ、このバックアップの内容に置き換えられます。 {cannot-be-undone} 復元が成功するとログアウトされます。",
"cannot-be-undone": "この操作は元に戻せません - 注意してください。",
"postgresql-note": "PostGreSQLを使用している場合は、復元する前に {backup-restore-process} を確認してください。",
"postgresql-note": "PostgreSQLを使用している場合は、復元する前に {backup-restore-process} を確認してください。",
"backup-restore-process-in-the-documentation": "ドキュメント内のバックアップ/復元プロセス",
"irreversible-acknowledgment": "このアクションは不可逆的で破壊的で、データ損失を引き起こす可能性があることを理解しています",
"restore-backup": "バックアップから復元"
@@ -891,7 +882,7 @@
"are-you-sure-you-want-to-check-all-items": "すべての項目をチェックしてもよろしいですか?",
"are-you-sure-you-want-to-uncheck-all-items": "すべてのアイテムのチェックを外してもよろしいですか?",
"are-you-sure-you-want-to-delete-checked-items": "チェックされた項目をすべて削除してもよろしいですか?",
"no-shopping-lists-found": "No Shopping Lists Found"
"no-shopping-lists-found": "ショッピングリストが見つかりません"
},
"sidebar": {
"all-recipes": "すべてのレシピ",
@@ -1303,7 +1294,7 @@
"profile": {
"welcome-user": "👋 ようこそ, {0}!",
"description": "プロフィール、レシピ、グループ設定を管理します。",
"invite-link": "Invite Link",
"invite-link": "招待リンク",
"get-invite-link": "招待リンクを取得",
"get-public-link": "公開リンクを取得",
"account-summary": "アカウントの概要",
@@ -1353,8 +1344,8 @@
"cookbook": {
"cookbooks": "料理本",
"description": "料理本は、レシピのクロスセクション、オーガナイザー、その他のフィルターを作成してレシピを整理するもう 1 つの方法です。料理本を作成するとサイドバーにエントリが追加され、選択したフィルターが適用されたすべてのレシピが料理本に表示されます。",
"hide-cookbooks-from-other-households": "Hide Cookbooks from Other Households",
"hide-cookbooks-from-other-households-description": "When enabled, only cookbooks from your household will appear on the sidebar",
"hide-cookbooks-from-other-households": "他の世帯の料理本を隠す",
"hide-cookbooks-from-other-households-description": "有効にするとあなたの世帯の料理本だけがサイドバーに表示されます",
"public-cookbook": "公開料理本",
"public-cookbook-description": "公開料理本は非Mealieユーザーと共有でき、グループページに表示されます。",
"filter-options": "フィルタオプション",

View File

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

View File

@@ -15,7 +15,7 @@
"docs": "Dokumentacija",
"download-log": "Atsisiųsti žurnalą",
"download-recipe-json": "Paskutinis nuskaitytas \"JSON\"",
"github": "Github",
"github": "GitHub",
"log-lines": "Žurnalo eilutės",
"not-demo": "Not Demo",
"portfolio": "Darbai",
@@ -121,7 +121,7 @@
"loading": "Kraunasi",
"loading-events": "Užkrovimo įvykiai",
"loading-recipe": "Receptai kraunasi...",
"loading-ocr-data": "Loading OCR data...",
"loading-ocr-data": "Įkeliami OCR duomenys...",
"loading-recipes": "Receptai kraunasi",
"message": "Pranešimas",
"monday": "Pirmadienis",
@@ -210,14 +210,14 @@
"upload-file": "Įkelti failą",
"created-on-date": "Sukurta: {0}",
"unsaved-changes": "You have unsaved changes. Do you want to save before leaving? Okay to save, Cancel to discard changes.",
"clipboard-copy-failure": "Failed to copy to the clipboard.",
"clipboard-copy-failure": "Nepavyko nukopijuoti į iškarpinę.",
"confirm-delete-generic-items": "Are you sure you want to delete the following items?",
"organizers": "Organizers",
"caution": "Caution",
"show-advanced": "Show Advanced",
"add-field": "Add Field",
"date-created": "Date Created",
"date-updated": "Date Updated"
"show-advanced": "Rodyti plačiau",
"add-field": "Pridėti lauką",
"date-created": "Sukūrimo data",
"date-updated": "Atnaujinimo data"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Ar tikrai norite ištrinti <b>{groupName}<b/>?",
@@ -322,7 +322,7 @@
"mealplan-update-failed": "Mitybos plano atnaujinti nepavyko",
"mealplan-updated": "Mitybos planas atnaujintas",
"mealplan-households-description": "If no household is selected, recipes can be added from any household",
"any-category": "Any Category",
"any-category": "Bet kuri kategorija",
"any-tag": "Any Tag",
"any-household": "Any Household",
"no-meal-plan-defined-yet": "Nėra nustatytų mitybos planų",
@@ -570,13 +570,6 @@
"increase-scale-label": "Padidinti mastelį 1 k.",
"locked": "Užrakinta",
"public-link": "Vieša nuoroda",
"timer": {
"kitchen-timer": "Kitchen Timer",
"start-timer": "Start Timer",
"pause-timer": "Pause Timer",
"resume-timer": "Resume Timer",
"stop-timer": "Stop Timer"
},
"edit-timeline-event": "Redaguoti laiko juostos įvykį",
"timeline": "Laiko juosta",
"timeline-is-empty": "Laiko juosta tuščia. Pabandykit pagaminti šį receptą!",
@@ -586,7 +579,6 @@
"made-this": "Aš tai gaminau",
"how-did-it-turn-out": "Kaip tai pavyko?",
"user-made-this": "{user} gamino šį patiekalą",
"last-made-date": "Paskutinį kartą gaminta {date}",
"api-extras-description": "Recipes extras are a key feature of the Mealie API. They allow you to create custom JSON key/value pairs within a recipe, to reference from 3rd party applications. You can use these keys to provide information, for example to trigger automations or custom messages to relay to your desired device.",
"message-key": "Žinutės raktas",
"parse": "Nuskaityti",
@@ -654,7 +646,6 @@
"nextStep": "Next step",
"recipe-actions": "Recipe Actions",
"parser": {
"experimental-alert-text": "Mealie uses natural language processing to parse and create units and food items for your recipe ingredients. This feature is experimental and may not always work as expected. If you prefer not to use the parsed results, you can select 'Cancel' and your changes will not be saved.",
"ingredient-parser": "Ingredient Parser",
"explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.",
"alerts-explainer": "Alerts will be displayed if a matching foods or unit is found but does not exists in the database.",
@@ -729,7 +720,7 @@
"backup-restore": "Atkurti iš atsarginės kopijos",
"back-restore-description": "Atkūrimas ištrina visus šiuo metu duomenų bazėje ir duomenų archyve esančius duomenis ir perrašo juos į duomenis iš atsarginės kopijos. {cannot-be-undone} Jei atkūrimas bus sėkmingas, būsite atjungti nuo savo paskyros.",
"cannot-be-undone": "Atsargiai - šis veiksmas negrįžtamas.",
"postgresql-note": "Jei naudojate PostgreSQL, prašome peržiūrėti {backup-restore-process} prieš atkuriant.",
"postgresql-note": "If you are using PostgreSQL, please review the {backup-restore-process} prior to restoring.",
"backup-restore-process-in-the-documentation": "atsarginio kopijavimo/atkūrimo procesą dokumentacijoje",
"irreversible-acknowledgment": "Suprantu, jog šis veiksmas bus neatstatomas, destruktyvus ir gali sukelti duomenų praradimus",
"restore-backup": "Atkurti iš atsarginės kopijos"
@@ -1057,8 +1048,8 @@
"foods": {
"merge-dialog-text": "Pasirinktų produktų sujungimas apibendrins pirminį ir antrinį produktus į vieną produktą. Pirminis produktas bus ištrintas, o visi jo panaudojimai bus pakeisti antriniu produktu.",
"merge-food-example": "Sujungiama {food1} su {food2}",
"seed-dialog-text": "Pradėkite pildyti duomenų bazę produktų pavadinimais savo vietine kalba. Bus sukurta apie 200 dažniausių produktų, kuriuos galėsite panaudoti savo duomenų bazės tvarkymui. Produktų pavadinimai verčiami bendruomenės pastangomis.",
"seed-dialog-warning": "Kai kuriuos elementus jau turite savo duomenų bazėje. Šis veiksmas nesutvarkys dublikatų, turėsite juos tvarkyti rankiniu būdu.",
"seed-dialog-text": "Seed the database with foods based on your local language. This will create 200+ common foods that can be used to organize your database. Foods are translated via a community effort.",
"seed-dialog-warning": "You have already have some items in your database. This action will not reconcile duplicates, you will have to manage them manually.",
"combine-food": "Sujungti produktus",
"source-food": "Pirminis produktas",
"target-food": "Antrinis produktas",

View File

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

View File

@@ -15,7 +15,7 @@
"docs": "Documentatie",
"download-log": "Logbestand downloaden",
"download-recipe-json": "Laatst ingelezen JSON",
"github": "Github",
"github": "GitHub",
"log-lines": "Logboekregels",
"not-demo": "Geen demo",
"portfolio": "Portfolio",
@@ -277,7 +277,7 @@
"admin-group-management-text": "Wijzigingen in deze groep zijn meteen zichtbaar.",
"group-id-value": "Groeps-id: {0}",
"total-households": "Totaal aantal huishoudens",
"you-must-select-a-group-before-selecting-a-household": "You must select a group before selecting a household"
"you-must-select-a-group-before-selecting-a-household": "Kies een groep voordat je een huishouden kiest"
},
"household": {
"household": "Huishouden",
@@ -518,7 +518,7 @@
"save-recipe-before-use": "Recept opslaan vóór gebruik",
"section-title": "Sectietitel",
"servings": "Porties",
"serves-amount": "Serves {amount}",
"serves-amount": "Genoeg voor {amount}",
"share-recipe-message": "Ik wil mijn {0} recept met je delen.",
"show-nutrition-values": "Toon voedingswaarden",
"sodium-content": "Zout",
@@ -547,8 +547,8 @@
"failed-to-add-recipe-to-mealplan": "Recept aan maaltijdplan toevoegen mislukt",
"failed-to-add-to-list": "Toevoegen aan lijst mislukt",
"yield": "Opbrengst",
"yields-amount-with-text": "Yields {amount} {text}",
"yield-text": "Yield Text",
"yields-amount-with-text": "Levert {amount} {text}",
"yield-text": "Opmerking over opbrengst",
"quantity": "Hoeveelheid",
"choose-unit": "Kies een eenheid",
"press-enter-to-create": "Druk op Enter om aan te maken",
@@ -570,13 +570,6 @@
"increase-scale-label": "Verhoog de schaal met 1",
"locked": "Vergrendeld",
"public-link": "Openbare link",
"timer": {
"kitchen-timer": "Kookwekker",
"start-timer": "Kookwekker starten",
"pause-timer": "Kookwekker pauzeren",
"resume-timer": "Kookwekker hervatten",
"stop-timer": "Kookwekker stoppen"
},
"edit-timeline-event": "Bewerk tijdlijngebeurtenis",
"timeline": "Tijdlijn",
"timeline-is-empty": "Nog niets op de tijdlijn. Probeer dit recept te maken!",
@@ -586,7 +579,6 @@
"made-this": "Ik heb dit gemaakt",
"how-did-it-turn-out": "Hoe was je gerecht?",
"user-made-this": "{user} heeft dit gemaakt",
"last-made-date": "Laatst gemaakt op {date}",
"api-extras-description": "Extra's bij recepten zijn een belangrijke functie van de Mealie API. Hiermee kun je aangepaste JSON key/value paren maken bij een recept om naar te verwijzen vanuit applicaties van derden. Je kunt deze sleutels gebruiken om extra informatie te bieden, bijvoorbeeld om automatisering aan te sturen of aangepaste berichten naar je gewenste apparaat te laten versturen.",
"message-key": "Berichtsleutel",
"parse": "Ontleed",
@@ -644,9 +636,9 @@
"recipe-debugger-use-openai-description": "Gebruik OpenAI om de resultaten te verwerken in plaats van te vertrouwen op de scraper-bibliotheek. Bij het maken van een recept via een URL wordt dit automatisch gedaan als de scraper-bibliotheek mislukt, maar u kunt het hier handmatig testen.",
"debug": "Debug",
"tree-view": "Boomstructuurweergave",
"recipe-servings": "Recipe Servings",
"recipe-servings": "Recept porties",
"recipe-yield": "Opbrengst van recept",
"recipe-yield-text": "Recipe Yield Text",
"recipe-yield-text": "Opbrengst van recept",
"unit": "Eenheid",
"upload-image": "Afbeelding uploaden",
"screen-awake": "Scherm aan laten staan",
@@ -654,7 +646,6 @@
"nextStep": "Volgende stap",
"recipe-actions": "Acties met recepten ",
"parser": {
"experimental-alert-text": "Mealie gebruikt natuurlijke taalverwerking om te ontleden en maakt eenheden en levensmiddelen voor de ingrediënten van je recept. Deze functie is experimenteel en werkt misschien niet altijd zoals verwacht. Als je liever niet de bewerkte resultaten gebruikt, kan je 'Annuleren' selecterenl de wijzigingen worden dan niet opgeslagen.",
"ingredient-parser": "Ingrediëntenontleder",
"explanation": "Om de ingrediëntenontleder te gebruiken, klik op de knop 'Alles ontleden' om het proces te starten. Zodra de verwerkte ingrediënten beschikbaar zijn, kan je de items bekijken en controleren of ze correct verwerkt zijn. De vertrouwensscore van het model wordt weergegeven aan de rechterkant van de titel van het item. Deze score is een gemiddelde van alle afzonderlijke scores en is mogelijk niet altijd volledig.",
"alerts-explainer": "Waarschuwingen zullen worden getoond als er een overeenkomend levensmiddel of eenheid is gevonden, dat nog niet bestaat in de database.",
@@ -669,24 +660,24 @@
"no-food": "Geen levensmiddel"
},
"reset-servings-count": "Zet de teller van aantal keer gegeten op nul",
"not-linked-ingredients": "Additional Ingredients"
"not-linked-ingredients": "Extra ingrediënten"
},
"recipe-finder": {
"recipe-finder": "Recipe Finder",
"recipe-finder-description": "Search for recipes based on ingredients you have on hand. You can also filter by tools you have available, and set a maximum number of missing ingredients or tools.",
"selected-ingredients": "Selected Ingredients",
"no-ingredients-selected": "No ingredients selected",
"missing": "Missing",
"no-recipes-found": "No recipes found",
"no-recipes-found-description": "Try adding more ingredients to your search or adjusting your filters",
"include-ingredients-on-hand": "Include Ingredients On Hand",
"include-tools-on-hand": "Include Tools On Hand",
"max-missing-ingredients": "Max Missing Ingredients",
"max-missing-tools": "Max Missing Tools",
"selected-tools": "Selected Tools",
"other-filters": "Other Filters",
"ready-to-make": "Ready to Make",
"almost-ready-to-make": "Almost Ready to Make"
"recipe-finder": "Recept zoeker",
"recipe-finder-description": "Zoek naar recepten op basis van ingrediënten die je bij de hand hebt. Je kunt ook filteren op gereedschap dat je beschikbaar hebt en een maximum aantal ontbrekende ingrediënten of gereedschappen instellen.",
"selected-ingredients": "Gekozen ingrediënten",
"no-ingredients-selected": "Geen ingrediënten geselecteerd",
"missing": "Ontbrekend",
"no-recipes-found": "Geen recepten gevonden",
"no-recipes-found-description": "Probeer meer ingrediënten toe te voegen aan uw zoekopdracht of pas uw filters aan",
"include-ingredients-on-hand": "Inclusief ingrediënten in huis",
"include-tools-on-hand": "Inclusief keukengerei in huis",
"max-missing-ingredients": "Maximum ontbrekende ingrediënten",
"max-missing-tools": "Maximum ontbrekend keukengerei",
"selected-tools": "Geselecteerd keukengerei",
"other-filters": "Overige filters",
"ready-to-make": "Klaar om te maken",
"almost-ready-to-make": "Bijna klaar om te maken"
},
"search": {
"advanced-search": "Geavanceerd zoeken",
@@ -725,7 +716,7 @@
"import-summary": "Samenvatting importeren",
"partial-backup": "Gedeeltelijke back-up",
"unable-to-delete-backup": "Kan back-up niet verwijderen.",
"experimental-description": "Back-ups zijn een complete kopie van de database en de data map. Je kunt geen keuze maken wat wel of niet in de reservekopie zit. Het is een kopie van Mealie van dat moment. Je kunt de back-up gebruiken om data te importeren of exporteren. Of om de hele site op een andere plek te bewaren.",
"experimental-description": "Back-ups zijn een complete kopie van de database en de data map. Je kunt niet kiezen wat wel of niet in de reservekopie zit. Het is een kopie van Mealie van dat moment. Je kunt de back-up gebruiken om data te importeren of exporteren. Of om de hele site op een andere plek te bewaren.",
"backup-restore": "Back-up maken/terugzetten",
"back-restore-description": "Het terugzetten van deze back-up overschrijft alle huidige gegevens in je database en in de gegevensmap. {cannot-be-undone} Als het terugzetten is gelukt wordt je afgemeld.",
"cannot-be-undone": "Deze actie kan niet ongedaan worden gemaakt gebruik met voorzichtigheid.",
@@ -891,7 +882,7 @@
"are-you-sure-you-want-to-check-all-items": "Weet je zeker dat je alle items wilt selecteren?",
"are-you-sure-you-want-to-uncheck-all-items": "Weet je zeker dat je alle items wilt deselecteren?",
"are-you-sure-you-want-to-delete-checked-items": "Weet je zeker dat je de geselecteerde items wilt verwijderen?",
"no-shopping-lists-found": "No Shopping Lists Found"
"no-shopping-lists-found": "Geen boodschappenlijsten gevonden"
},
"sidebar": {
"all-recipes": "Alle Recepten",
@@ -1058,7 +1049,7 @@
"merge-dialog-text": "Het combineren van de geselecteerde levensmiddelen zal het oorspronkelijke levensmiddel en het nieuwe levensmiddel samenvoegen. Het oorspronkelijke levensmiddel zal worden verwijderd en alle referenties worden aangepast, zodat ze naar het nieuwe levensmiddel verwijzen.",
"merge-food-example": "{food1} samenvoegen met {food2}",
"seed-dialog-text": "Vul de database met levensmiddelen in jouw taal. Dit maakt meer dan 200 veelvoorkomende levensmiddelen aan die je in jouw database kan gebruiken. De vertalingen zijn verzorgd door een gemeenschap.",
"seed-dialog-warning": "Er bevinden zich al enkele artikelen in je database. Deze actie zal de duplicaten niet samenvoegen, dit moet handmatig worden beheerd.",
"seed-dialog-warning": "Je hebt al enkele artikelen in je database. Deze actie zal duplicaten niet met elkaar in overeenstemming brengen, je zult ze handmatig moeten beheren.",
"combine-food": "Combineer levensmiddelen",
"source-food": "Bron-levensmiddelen",
"target-food": "Doel-levensmiddel",
@@ -1303,7 +1294,7 @@
"profile": {
"welcome-user": "👋 Welkom, {0}!",
"description": "Beheer je profiel, recepten en groepsinstellingen.",
"invite-link": "Invite Link",
"invite-link": "Uitnodigingslink",
"get-invite-link": "Krijg uitnodigingslink",
"get-public-link": "Openbare link krijgen",
"account-summary": "Accountoverzicht",
@@ -1353,8 +1344,8 @@
"cookbook": {
"cookbooks": "Kookboeken",
"description": "Kookboeken zijn een andere manier om recepten te organiseren door verzamelingen van recepten, organisatoren en andere filters te maken. Het maken van een kookboek voegt een item toe aan de zijbalk. Alle recepten met de gekozen filters worden in het kookboek getoond.",
"hide-cookbooks-from-other-households": "Hide Cookbooks from Other Households",
"hide-cookbooks-from-other-households-description": "When enabled, only cookbooks from your household will appear on the sidebar",
"hide-cookbooks-from-other-households": "Verberg kookboeken van andere huishoudens",
"hide-cookbooks-from-other-households-description": "Wanneer ingeschakeld, worden alleen kookboeken van uw huishouden op de zijbalk weergegeven",
"public-cookbook": "Openbaar kookboek",
"public-cookbook-description": "Openbare kookboeken kunnen worden gedeeld met niet-Mealie-gebruikers en zullen worden weergegeven op jouw groepspagina.",
"filter-options": "Filteropties",

View File

@@ -8,7 +8,7 @@
"database-type": "Databasetype",
"database-url": "URL til database",
"default-group": "Standardgruppe",
"default-household": "Standard hushold",
"default-household": "Standard husholdning",
"demo": "Demo",
"demo-status": "Demostatus",
"development": "Utvikling",
@@ -51,7 +51,7 @@
"category": "Kategori"
},
"events": {
"apprise-url": "Apprise URL",
"apprise-url": "Apprise-URL",
"database": "Database",
"delete-event": "Slett hendelse",
"event-delete-confirmation": "Er du sikker på at du ønsker å slette denne hendelsen?",
@@ -66,9 +66,9 @@
"subscribed-events": "Abonnerte hendelser",
"test-message-sent": "Testmelding sendt",
"message-sent": "Melding sendt",
"new-notification": "Ny varsel",
"new-notification": "Nytt varsel",
"event-notifiers": "Hendelsesvarsler",
"apprise-url-skipped-if-blank": "Apprise URL (hoppes over hvis tom)",
"apprise-url-skipped-if-blank": "Apprise-URL (hoppes over hvis tom)",
"enable-notifier": "Aktiver varslingsagenten",
"what-events": "Hvilke hendelser skal denne varslingsagenten abonnere på?",
"user-events": "Brukerhendelser",
@@ -87,7 +87,7 @@
"clear": "Tøm",
"close": "Lukk",
"confirm": "Bekreft",
"confirm-how-does-everything-look": "Hvordan ser alt ut?",
"confirm-how-does-everything-look": "Hvordan ser ting ut?",
"confirm-delete-generic": "Er du sikker på at du vil slette denne?",
"copied_message": "Kopiert!",
"create": "Opprett",
@@ -148,7 +148,7 @@
"share": "Del",
"show-all": "Vis alle",
"shuffle": "Tilfeldig rekkefølge",
"sort": "Sortér",
"sort": "Sorter",
"sort-ascending": "Sorter stigende",
"sort-descending": "Sortere synkende",
"sort-alphabetically": "Alfabetisk",
@@ -193,7 +193,7 @@
"confirm-delete-own-admin-account": "Vær oppmerksom på at du holder på å slette din egen administrator-konto! Dette kan ikke angres og vil slette kontoen din permanent!",
"organizer": "Organisator",
"transfer": "Overfør",
"copy": "Kopiér",
"copy": "Kopier",
"color": "Farge",
"timestamp": "Tidsstempel",
"last-made": "Sist laget",
@@ -277,29 +277,29 @@
"admin-group-management-text": "Endringer i denne gruppen vil gjenspeiles umiddelbart.",
"group-id-value": "Gruppe-ID: {0}",
"total-households": "Husholdninger totalt",
"you-must-select-a-group-before-selecting-a-household": "You must select a group before selecting a household"
"you-must-select-a-group-before-selecting-a-household": "Du må velge en gruppe før du kan velge en husholdning"
},
"household": {
"household": "Husholdning",
"households": "Husholdning",
"households": "Husholdninger",
"user-household": "Brukers husholdning",
"create-household": "Opprett husholdning",
"household-name": "Husholdningenes navn",
"household-group": "Husholdningenes gruppe",
"household-management": "Administrer husholdninger",
"household-name": "Husholdningens navn",
"household-group": "Husholdningens gruppe",
"household-management": "Administrering av husholdninger",
"manage-households": "Administrer husholdninger",
"admin-household-management": "Admin husholdningsadministrasjon",
"admin-household-management-text": "Endringer i denne husholdningen vil umiddelbart gjelde.",
"household-id-value": "Husholdningenes id: {0}",
"household-id-value": "Husholdningens id: {0}",
"private-household": "Privat husholdning",
"private-household-description": "Setting your household to private will disable all public view options. This overrides any individual public view settings",
"lock-recipe-edits-from-other-households": "Lock recipe edits from other households",
"lock-recipe-edits-from-other-households-description": "When enabled only users in your household can edit recipes created by your household",
"private-household-description": "Når du setter husholdningen din til privat, vil alle offentlige visningsalternativer tilbakestilles til standardverdiene. Dette overskriver envher individuell offentlig visningsinnstilling",
"lock-recipe-edits-from-other-households": "Lås redigering av oppskrifter fra andre husholdninger",
"lock-recipe-edits-from-other-households-description": "Når dette er aktivert kan bare brukere i husholdningen din redigere oppskrifter laget av husholdningen din",
"household-recipe-preferences": "Husholdningenes oppskriftsinnstillinger",
"default-recipe-preferences-description": "Dette er standardinnstillingene når en ny oppskrift blir opprettet i din husholdning. Disse kan endres for individuelle oppskrifter i oppskrifters innstillinger.",
"allow-users-outside-of-your-household-to-see-your-recipes": "Tillat brukere utenfor din husholdning å se oppskriftene dine",
"allow-users-outside-of-your-household-to-see-your-recipes-description": "Når aktivert, kan du bruke en offentlig lenke for å dele spesifikke oppskrifter uten å autorisere brukeren. Når deaktivert, kan du kun dele oppskrifter med brukere som er i husholdningen din eller med en forhåndsgenerert privat lenke",
"household-preferences": "Husholdnings innstillinger"
"household-preferences": "Innstillinger for husholdning"
},
"meal-plan": {
"create-a-new-meal-plan": "Opprett en ny måltidsplan",
@@ -313,15 +313,15 @@
"main": "Hovedrett",
"meal-planner": "Måltidsplanlegger",
"meal-plans": "Måltidsplaner",
"mealplan-categories": "MÅLTIDSPLANKATEGORIER",
"mealplan-categories": "MÅLTIDSPLAN-KATEGORIER",
"mealplan-created": "Måltidsplan opprettet",
"mealplan-creation-failed": "Opprettelse av måltidsplan mislyktes",
"mealplan-deleted": "Måltidsplan slettet",
"mealplan-deletion-failed": "Sletting av måltidsplan mislyktes",
"mealplan-settings": "Måltidsplaninnstillinger",
"mealplan-settings": "Innstillinger for måltidsplan",
"mealplan-update-failed": "Oppdatering av måltidsplan mislyktes",
"mealplan-updated": "Måltidsplan oppdatert",
"mealplan-households-description": "If no household is selected, recipes can be added from any household",
"mealplan-households-description": "Hvis ingen husholdning er valgt, kan oppskrifter legges til fra hvilken som helst husholdning",
"any-category": "Enhver kategori",
"any-tag": "Any Tag",
"any-household": "Any Household",
@@ -357,7 +357,7 @@
"for-type-meal-types": "for {0} måltidstyper",
"meal-plan-rules": "Regler for måltidsplan",
"new-rule": "Ny regel",
"meal-plan-rules-description": "You can create rules for auto selecting recipes for your meal plans. These rules are used by the server to determine the random pool of recipes to select from when creating meal plans. Note that if rules have the same day/type constraints then the rule filters will be merged. In practice, it's unnecessary to create duplicate rules, but it's possible to do so.",
"meal-plan-rules-description": "Du kan lage regler for automatisk valg av oppskrifter for måltidsplanene dine. Disse reglene brukes av serveren til å bestemme den tilfeldige oppskriften du kan velge mellom når du lager måltidsplaner. Merk at hvis regler har samme dag/type-begrensninger, vil regelfiltrene slås sammen. I praksis er det unødvendig å lage dupliserte regler, men det er mulig å gjøre det.",
"new-rule-description": "Ved opprettelse av en ny regel for en måltidsplan kan du begrense regelen til å gjelde for en bestemt ukedag og/eller en bestemt type måltid. For å ta i bruk en regen alle dager eller alle måltider kan du sette regelen til \"Enhver\" som gjelder for alle mulige verdier for dag- og/eller måltidstyper.",
"recipe-rules": "Regler for oppskrifter",
"applies-to-all-days": "Gjelder for alle dager",
@@ -426,13 +426,13 @@
"error-details": "Bare nettsteder som inneholder ld+json eller mikrodata kan importeres av Mealie. De største oppskriftsnettstedene støtter denne datastrukturen. Dersom nettstedet ditt ikke kan importeres, men det er json-data i loggen, må du rapportere et GitHub-problem med nettadressen og data.",
"error-title": "Ser ut til at ingenting ble funnet",
"from-url": "Importer en oppskrift",
"github-issues": "GitHub-problemer",
"github-issues": "GitHub Issues",
"google-ld-json-info": "Google ld+json-informasjon",
"must-be-a-valid-url": "Må være en gyldig nettadresse",
"paste-in-your-recipe-data-each-line-will-be-treated-as-an-item-in-a-list": "Lim inn oppskriftsdataene. Hver linje blir behandlet som et element i en liste",
"recipe-markup-specification": "Spesifikasjon for oppskriftsmerking",
"recipe-url": "Nettadresse til oppskrift",
"recipe-html-or-json": "Recipe HTML or JSON",
"recipe-html-or-json": "Oppskrift HTML eller JSON",
"upload-a-recipe": "Last opp oppskrift",
"upload-individual-zip-file": "Last opp en individuell .zip-fil eksportert fra en annen Mealie-instans.",
"url-form-hint": "Kopier og lim inn en lenke fra nettstedet med favorittoppskriftene dine",
@@ -467,7 +467,7 @@
"calories-suffix": "kalorier",
"carbohydrate-content": "Karbohydrater",
"categories": "Kategorier",
"cholesterol-content": "Cholesterol",
"cholesterol-content": "Kolesterol",
"comment-action": "Kommenter",
"comment": "Kommentar",
"comments": "Kommentarer",
@@ -499,7 +499,7 @@
"object-key": "Objektnøkkel",
"object-value": "Objektverdi",
"original-url": "Nettadresse til oppskrift",
"perform-time": "Koketid",
"perform-time": "Passiv Tid",
"prep-time": "Forberedelsestid",
"protein-content": "Protein",
"public-recipe": "Offentlig oppskrift",
@@ -514,11 +514,11 @@
"recipe-updated": "Oppskrift oppdatert",
"remove-from-favorites": "Fjern fra favoritter",
"remove-section": "Fjern seksjon",
"saturated-fat-content": "Saturated fat",
"saturated-fat-content": "Mettet fett",
"save-recipe-before-use": "Lagre oppskrift før bruk",
"section-title": "Seksjonstittel",
"servings": "Porsjoner",
"serves-amount": "Serves {amount}",
"serves-amount": "{amount} Porsjoner",
"share-recipe-message": "Jeg ville dele min {0} oppskrift med deg.",
"show-nutrition-values": "Vis ernæringsverdier",
"sodium-content": "Natrium",
@@ -526,9 +526,9 @@
"sugar-content": "Sukker",
"title": "Tittel",
"total-time": "Total tid",
"trans-fat-content": "Trans-fat",
"trans-fat-content": "Transfett",
"unable-to-delete-recipe": "Kan ikke slette oppskrift",
"unsaturated-fat-content": "Unsaturated fat",
"unsaturated-fat-content": "Umettet fett",
"no-recipe": "Ingen oppskrift",
"locked-by-owner": "Låst av eier",
"join-the-conversation": "Delta i samtalen",
@@ -547,8 +547,8 @@
"failed-to-add-recipe-to-mealplan": "Klarte ikke å legge til oppskrift i måltidsplan",
"failed-to-add-to-list": "Klarte ikke å legge til oppskrift i listen",
"yield": "Gir",
"yields-amount-with-text": "Yields {amount} {text}",
"yield-text": "Yield Text",
"yields-amount-with-text": "Gir {amount} {text}",
"yield-text": "Porsjonsenhet (eks. pers./stk.)",
"quantity": "Antall",
"choose-unit": "Velg enhet",
"press-enter-to-create": "Trykk Enter for å opprette",
@@ -570,23 +570,15 @@
"increase-scale-label": "Øk skala med 1",
"locked": "Låst",
"public-link": "Offentlig lenke",
"timer": {
"kitchen-timer": "Kjøkkentimer",
"start-timer": "Start nedtelling",
"pause-timer": "Pause nedtelling",
"resume-timer": "Fortsett nedtelling",
"stop-timer": "Stopp nedtelling"
},
"edit-timeline-event": "Endre tidslinjehendelser",
"timeline": "Tidslinje",
"timeline-is-empty": "Ingenting på tidslinjen ennå. Prøv å lage denne oppskriften!",
"timeline-no-events-found-try-adjusting-filters": "Ingen hendelser funnet. Prøv å endre søkefiltrene.",
"group-global-timeline": "{groupName} Global tidslinje",
"open-timeline": "Åpne tidslinje",
"made-this": "Jeg har laget denne",
"how-did-it-turn-out": "Hvordan ble den?",
"user-made-this": "{user} har laget denne",
"last-made-date": "Sist laget: {date}",
"made-this": "Jeg har laget dette",
"how-did-it-turn-out": "Hvordan ble det?",
"user-made-this": "{user} har laget dette",
"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",
@@ -617,16 +609,16 @@
"scrape-recipe": "Skrap oppskrift",
"scrape-recipe-description": "Skrap en oppskrift ved bruk av nettadresse. Oppgi nettadressen til nettstedet du vil skrape, så vil Mealie forsøke å skrape oppskriften fra den siden og legge den til i samlingen din.",
"scrape-recipe-have-a-lot-of-recipes": "Har du mange oppskrifter du ønsker å skrape samtidig?",
"scrape-recipe-suggest-bulk-importer": "Prøv masseimporten",
"scrape-recipe-suggest-bulk-importer": "Prøv masseimportering",
"scrape-recipe-have-raw-html-or-json-data": "Have raw HTML or JSON data?",
"scrape-recipe-you-can-import-from-raw-data-directly": "You can import from raw data directly",
"scrape-recipe-you-can-import-from-raw-data-directly": "Du kan importere fra rådata direkte",
"import-original-keywords-as-tags": "Importer originale søkeord som emneord",
"stay-in-edit-mode": "Forbli i redigeringsmodus",
"import-from-zip": "Importer fra zip-fil",
"import-from-zip-description": "Importer en enkelt oppskrift som ble eksportert fra en annen Mealie-instans.",
"import-from-html-or-json": "Import from HTML or JSON",
"import-from-html-or-json-description": "Import a single recipe from raw HTML or JSON. This is useful if you have a recipe from a site that Mealie can't scrape normally, or from some other external source.",
"json-import-format-description-colon": "To import via JSON, it must be in valid format:",
"import-from-html-or-json": "Importer fra HTML eller JSON",
"import-from-html-or-json-description": "Importer én enkelt oppskrift fra rå HTML eller JSON. Dette er nyttig hvis du har en oppskrift fra et nettsted som Mealie ikke kan skrape normal måte, eller fra en annen ekstern kilde.",
"json-import-format-description-colon": "For å importere via JSON, må det være i gyldig format:",
"json-editor": "JSON Editor",
"zip-files-must-have-been-exported-from-mealie": ".zip-filer må ha blitt eksportert fra Mealie",
"create-a-recipe-by-uploading-a-scan": "Opprett en oppskrift ved å laste opp en skanning.",
@@ -644,9 +636,9 @@
"recipe-debugger-use-openai-description": "Bruke OpenAI til å analysere resultatene i stedet for å basere seg på scraper-biblioteket. Når du oppretter en oppskrift via URL, blir dette gjort automatisk hvis scraper-biblioteket mislykkes, men du kan teste det manuelt her.",
"debug": "Feilsøk",
"tree-view": "Trevisning",
"recipe-servings": "Recipe Servings",
"recipe-servings": "Oppskriftsporsjoner",
"recipe-yield": "Utbytte av oppskrift",
"recipe-yield-text": "Recipe Yield Text",
"recipe-yield-text": "Oppskrift gir",
"unit": "Enhet",
"upload-image": "Last opp bilde",
"screen-awake": "Hold skjermen på",
@@ -654,8 +646,7 @@
"nextStep": "Neste trinn",
"recipe-actions": "Oppskriftshandlinger",
"parser": {
"experimental-alert-text": "Mealie bruker naturlig språkbehandling til å analysere og lage enheter og matvarer til oppskriftsingrediensene dine. Denne funksjonen er eksperimentell og fungerer kanskje ikke som forventet. Hvis du foretrekker ikke å bruke de foreslåtte resultatene, kan du velge 'Avbryt', og endringene dine vil ikke bli lagret.",
"ingredient-parser": "Ingrediens-parser",
"ingredient-parser": "Ingrediens-analyserer",
"explanation": "For å bruke ingrediens-forslag, klikk på 'Analyser alle' for å starte prosessen. Når de prosesserte ingrediensene er tilgjengelige, kan du se gjennom elementene og kontrollere at de er sjekket korrekt. Modellens tillitsverdi vises på høyre side av elementet. Denne scoren er et gjennomsnitt av alle de individuelle poengene og alltid er ikke helt nøyaktige.",
"alerts-explainer": "Varsler vil bli vist dersom en matchende matvare eller enhet blir funnet, men ikke finnes i databasen.",
"select-parser": "Velg analyserer",
@@ -668,25 +659,25 @@
"missing-food": "Opprett manglende mat: {food}",
"no-food": "Ingen matvarer"
},
"reset-servings-count": "Reset Servings Count",
"not-linked-ingredients": "Additional Ingredients"
"reset-servings-count": "Nullstill antall porsjoner",
"not-linked-ingredients": "Tilleggsingredienser"
},
"recipe-finder": {
"recipe-finder": "Recipe Finder",
"recipe-finder-description": "Search for recipes based on ingredients you have on hand. You can also filter by tools you have available, and set a maximum number of missing ingredients or tools.",
"selected-ingredients": "Selected Ingredients",
"no-ingredients-selected": "No ingredients selected",
"missing": "Missing",
"no-recipes-found": "No recipes found",
"no-recipes-found-description": "Try adding more ingredients to your search or adjusting your filters",
"include-ingredients-on-hand": "Include Ingredients On Hand",
"include-tools-on-hand": "Include Tools On Hand",
"max-missing-ingredients": "Max Missing Ingredients",
"max-missing-tools": "Max Missing Tools",
"selected-tools": "Selected Tools",
"other-filters": "Other Filters",
"ready-to-make": "Ready to Make",
"almost-ready-to-make": "Almost Ready to Make"
"recipe-finder": "Oppskriftsfinner",
"recipe-finder-description": "Søk etter oppskrifter basert på ingredienser du har for hånden. Du kan også filtrere på verktøy du har tilgjengelig, og angi maksimalt antall manglende ingredienser eller verktøy.",
"selected-ingredients": "Velg ingredienser",
"no-ingredients-selected": "Ingen ingredienser valgt",
"missing": "Mangler",
"no-recipes-found": "Ingen oppskrifter funnet",
"no-recipes-found-description": "Prøv å legge til flere ingredienser i søket eller juster filtrene dine",
"include-ingredients-on-hand": "Inkluder ingredienser du har for hånden",
"include-tools-on-hand": "Inkluder tilgjengelige verktøy",
"max-missing-ingredients": "Maks antall manglende ingredienser",
"max-missing-tools": "Maks antall manglende redskaper",
"selected-tools": "Velg redskaper",
"other-filters": "Andre filtre",
"ready-to-make": "Klar til å lages",
"almost-ready-to-make": "Nesten klar til å lages"
},
"search": {
"advanced-search": "Avansert søk",
@@ -697,7 +688,7 @@
"or": "Eller",
"has-any": "Har enhver",
"has-all": "Har alle",
"clear-selection": "Clear Selection",
"clear-selection": "Tøm valg",
"results": "Resultater",
"search": "Søk",
"search-mealie": "Søk i Mealie (trykk /)",
@@ -891,7 +882,7 @@
"are-you-sure-you-want-to-check-all-items": "Er du sikker på at du vil velge alle elementer?",
"are-you-sure-you-want-to-uncheck-all-items": "Er du sikker på at du vil fjerne valg av alle elementer?",
"are-you-sure-you-want-to-delete-checked-items": "Er du sikker på at du vil slette alle valgte elementer?",
"no-shopping-lists-found": "No Shopping Lists Found"
"no-shopping-lists-found": "Ingen handlelister funnet"
},
"sidebar": {
"all-recipes": "Alle oppskrifter",
@@ -1037,7 +1028,7 @@
"administrator": "Administrator",
"user-can-invite-other-to-group": "Bruker kan invitere andre til gruppe",
"user-can-manage-group": "Brukeren kan administrere gruppe",
"user-can-manage-household": "User can manage household",
"user-can-manage-household": "Bruker kan administrere husholdningen",
"user-can-organize-group-data": "Brukeren kan organisere gruppedata",
"enable-advanced-features": "Aktiver avanserte funksjoner",
"it-looks-like-this-is-your-first-time-logging-in": "Det ser ut som dette er første gang du logger på.",
@@ -1057,8 +1048,8 @@
"foods": {
"merge-dialog-text": "Ved å kombinere de valgte matvarene vil de bli slått sammen til én matvare. Den første matvaren vil bli slettet, og alle referanser til denne vil bli oppdatert til å peke til den nye matvaren.",
"merge-food-example": "Slår sammen {food1} til {food2}",
"seed-dialog-text": "Legg til matvarer i databasen basert på ditt lokale språk. Dette vil opprette 200+ vanlige matvarer som kan brukes til å organisere databasen din. Matvarene oversettes via en fellesinnsats fra samfunnet.",
"seed-dialog-warning": "Du har allerede noen elementer i databasen din. Denne handlingen vil ikke forene duplikater, du må håndtere dem manuelt.",
"seed-dialog-text": "Sett inn matvarer basert på ditt lokale språk i databasen. Dette vil lage 200+ vanlige matvarer som kan brukes til å organisere databasen din. Mat blir oversatt via fellesinnsats.",
"seed-dialog-warning": "Du har allerede noen elementer i databasen din. Denne handlingen vil ikke slå sammen duplikater, du må håndtere dem manuelt.",
"combine-food": "Kombiner matvarer",
"source-food": "Kilde for matvare",
"target-food": "Mål for matvare",
@@ -1293,17 +1284,17 @@
"restore-from-v1-backup": "Har du en sikkerhetskopi fra en tidligere forekomst av Mealie v1? Du kan gjenopprette den her.",
"manage-profile-or-get-invite-link": "Administrer din egen profil, eller hent en invitasjonslenke for å dele med andre."
},
"debug-openai-services": "Debug OpenAI Services",
"debug-openai-services-description": "Use this page to debug OpenAI services. You can test your OpenAI connection and see the results here. If you have image services enabled, you can also provide an image.",
"run-test": "Run Test",
"test-results": "Test Results",
"group-delete-note": "Groups with users or households cannot be deleted",
"household-delete-note": "Households with users cannot be deleted"
"debug-openai-services": "Feilsøk OpenAI-tjenester",
"debug-openai-services-description": "Bruk denne siden for å feilsøke OpenAI tjenester. Du kan teste din OpenAI tilkobling og se resultatene her. Hvis du har bildetjenester aktivert kan du også legge til et bilde.",
"run-test": "Kjør test",
"test-results": "Testresultater",
"group-delete-note": "Grupper med brukere eller husholdninger kan ikke slettes",
"household-delete-note": "Husholdninger med brukere kan ikke slettes"
},
"profile": {
"welcome-user": "Velkommen, {0}!",
"description": "Administrer din profil, oppskrifter og gruppeinnstillinger.",
"invite-link": "Invite Link",
"invite-link": "Invitasjonslenke",
"get-invite-link": "Få invitasjonslenke",
"get-public-link": "Få offentlig lenke",
"account-summary": "Kontosammendrag",
@@ -1352,9 +1343,9 @@
},
"cookbook": {
"cookbooks": "Kokebøker",
"description": "Cookbooks are another way to organize recipes by creating cross sections of recipes, organizers, and other filters. Creating a cookbook will add an entry to the side-bar and all the recipes with the filters chosen will be displayed in the cookbook.",
"hide-cookbooks-from-other-households": "Hide Cookbooks from Other Households",
"hide-cookbooks-from-other-households-description": "When enabled, only cookbooks from your household will appear on the sidebar",
"description": "Kokebøker er en annen måte å organisere oppskrifter på ved å lage tverrsnitt av oppskrifter, organisatorer og andre filtre. Oppretting av en kokebok vil legge til en oppføring i sidefeltet, og alle oppskriftene med de valgte filtrene vil vises i kokeboken.",
"hide-cookbooks-from-other-households": "Skjul kokebøker fra andre husholdninger",
"hide-cookbooks-from-other-households-description": "Når denne er aktivert, vil bare kokebøker fra husstanden din vises i sidefeltet",
"public-cookbook": "Offentlig kokebok",
"public-cookbook-description": "Offentlige kokebøker kan deles med ikke-Mealie-brukere og vil bli vist på din gruppeside.",
"filter-options": "Filteralternativer",
@@ -1370,25 +1361,25 @@
},
"query-filter": {
"logical-operators": {
"and": "AND",
"or": "OR"
"and": "OG",
"or": "ELLER"
},
"relational-operators": {
"equals": "equals",
"does-not-equal": "does not equal",
"is-greater-than": "is greater than",
"is-greater-than-or-equal-to": "is greater than or equal to",
"is-less-than": "is less than",
"is-less-than-or-equal-to": "is less than or equal to"
"equals": "er lik",
"does-not-equal": "er ikke lik",
"is-greater-than": "er større enn",
"is-greater-than-or-equal-to": "er større enn eller lik",
"is-less-than": "er mindre enn",
"is-less-than-or-equal-to": "er mindre enn eller lik"
},
"relational-keywords": {
"is": "is",
"is-not": "is not",
"is-one-of": "is one of",
"is-not-one-of": "is not one of",
"contains-all-of": "contains all of",
"is-like": "is like",
"is-not-like": "is not like"
"is": "er",
"is-not": "er ikke",
"is-one-of": "er en av",
"is-not-one-of": "er ikke en av",
"contains-all-of": "inneholder alle",
"is-like": "er som",
"is-not-like": "er ikke som"
}
}
}

View File

@@ -26,14 +26,14 @@
"sponsor": "Sponsor"
},
"asset": {
"assets": "Zasoby",
"assets": "Załączniki",
"code": "Kod",
"file": "Plik",
"image": "Zdjęcie",
"new-asset": "Nowy zasób",
"new-asset": "Nowy załącznik",
"pdf": "PDF",
"recipe": "Przepis",
"show-assets": "Wyświetl zasoby",
"show-assets": "Wyświetl załączniki",
"error-submitting-form": "Błąd przesyłania formularza"
},
"category": {
@@ -135,7 +135,7 @@
"plural-name": "Nazwa w liczbie mnogiej",
"print": "Drukuj",
"print-preferences": "Właściwości drukowania",
"random": "Losowa",
"random": "Losuj",
"rating": "Ocena",
"recent": "Najnowsze",
"recipe": "Przepis",
@@ -176,8 +176,8 @@
"foods": "Żywność",
"units": "Jednostki",
"back": "Cofnij",
"next": "Następny",
"start": "Start",
"next": "Dalej",
"start": "Zaczynajmy",
"toggle-view": "Przełącz widok",
"date": "Data",
"id": "Id",
@@ -260,8 +260,8 @@
"allow-users-outside-of-your-group-to-see-your-recipes-description": "Po włączeniu możesz użyć linku publicznego udostępniania, aby udostępniać określone przepisy bez autoryzacji użytkownika. Po wyłączeniu, możesz dzielić się przepisami tylko z użytkownikami z twojej grupy lub z wcześniej wygenerowanym linkiem prywatnym",
"show-nutrition-information": "Pokaż informacje o wartości odżywczej",
"show-nutrition-information-description": "Po włączeniu informacja o wartości odżywczej będzie wyświetlana na recepturze, jeśli jest dostępna. Jeśli nie ma dostępnych informacji o wartości odżywczej, informacje o wartości odżywczej nie zostaną pokazane",
"show-recipe-assets": "Pokaż zasoby przepisu",
"show-recipe-assets-description": "Po włączeniu zasoby receptury będą wyświetlane na recepturze, jeśli są dostępne",
"show-recipe-assets": "Pokaż załączniki przepisu",
"show-recipe-assets-description": "Po włączeniu załączników będą one wyświetlane w przepisie, jeśli są dostępne",
"default-to-landscape-view": "Domyślnie w widoku poziomym",
"default-to-landscape-view-description": "Po włączeniu nagłówek receptury będzie wyświetlany w widoku poziomym",
"disable-users-from-commenting-on-recipes": "Zablokuj użytkownikom komentowanie przepisów",
@@ -277,7 +277,7 @@
"admin-group-management-text": "Zmiany w tej grupie zostaną natychmiast odzwierciedlone.",
"group-id-value": "Id grupy: {0}",
"total-households": "Gospodarstwa domowe razem",
"you-must-select-a-group-before-selecting-a-household": "You must select a group before selecting a household"
"you-must-select-a-group-before-selecting-a-household": "Musisz wybrać grupę przed wybraniem gospodarstwa domowego"
},
"household": {
"household": "Gospodarstwo domowe",
@@ -481,7 +481,7 @@
"edit-scale": "Edytuj skalę",
"fat-content": "Tłuszcz",
"fiber-content": "Błonnik",
"grams": "gram",
"grams": "g",
"ingredient": "Składnik",
"ingredients": "Składniki",
"insert-ingredient": "Wstaw Składnik",
@@ -491,7 +491,7 @@
"instructions": "Instrukcje",
"key-name-required": "Nazwa klucza jest wymagana",
"landscape-view-coming-soon": "Widok poziomy (wkrótce)",
"milligrams": "miligram",
"milligrams": "mg",
"new-key-name": "Nazwa nowego klucza",
"no-white-space-allowed": "Znaki niedrukowalne są niedozwolone",
"note": "Notatka",
@@ -514,11 +514,11 @@
"recipe-updated": "Przepis został zaktualizowany",
"remove-from-favorites": "Usuń z ulubionych",
"remove-section": "Usuń sekcję",
"saturated-fat-content": "Tłuszcz nasycony",
"saturated-fat-content": "Tłuszcze nasycone",
"save-recipe-before-use": "Zapisz przepis przed użyciem",
"section-title": "Tytuł rozdziału",
"servings": "Porcje",
"serves-amount": "Serves {amount}",
"serves-amount": "Porcje {amount}",
"share-recipe-message": "Chcę podzielić się z Tobą moim przepisem na {0}.",
"show-nutrition-values": "Pokaż wartości odżywcze",
"sodium-content": "Sód",
@@ -526,9 +526,9 @@
"sugar-content": "Cukry",
"title": "Tytuł",
"total-time": "Czas całkowity",
"trans-fat-content": "Tłuszcz trans",
"trans-fat-content": "Tłuszcze trans",
"unable-to-delete-recipe": "Nie można usunąć przepisu",
"unsaturated-fat-content": "Tłuszcz nienasycony",
"unsaturated-fat-content": "Tłuszcze nienasycone",
"no-recipe": "Brak przepisu",
"locked-by-owner": "Zablokowane przez właściciela",
"join-the-conversation": "Dołącz do rozmowy",
@@ -546,9 +546,9 @@
"failed-to-add-recipes-to-list": "Nie udało się dodać przepisu do listy",
"failed-to-add-recipe-to-mealplan": "Nie udało się dodać przepisu do planu posiłków",
"failed-to-add-to-list": "Nie udało się dodać do listy",
"yield": "Wydajność",
"yields-amount-with-text": "Yields {amount} {text}",
"yield-text": "Yield Text",
"yield": "Ilość",
"yields-amount-with-text": "Ilość {amount} {text}",
"yield-text": "Jednostka \"Ilość\"",
"quantity": "Ilość",
"choose-unit": "Wybierz jednostkę",
"press-enter-to-create": "Naciśnij \"enter\", aby utworzyć",
@@ -570,13 +570,6 @@
"increase-scale-label": "Zwiększ Skalę o 1",
"locked": "Zablokowany",
"public-link": "Link publiczny",
"timer": {
"kitchen-timer": "Minutnik",
"start-timer": "Włącz minutnik",
"pause-timer": "Zatrzymaj minutnik",
"resume-timer": "Wznów minutnik",
"stop-timer": "Zatrzymaj minutnik"
},
"edit-timeline-event": "Edytuj zdarzenie osi czasu",
"timeline": "Oś czasu",
"timeline-is-empty": "Nie ma jeszcze nic na osi czasu. Spróbuj przygotować ten przepis!",
@@ -586,7 +579,6 @@
"made-this": "Ugotowałem to",
"how-did-it-turn-out": "Jak się to udało?",
"user-made-this": "{user} ugotował(a) to",
"last-made-date": "Ostatnio ugotowano {date}",
"api-extras-description": "Dodatki w przepisach są kluczową cechą API Mealie. Pozwalają na tworzenie niestandardowych par kluczy/wartości JSON w przepisie do odwoływania się przez zewnętrzne aplikacje. Możesz użyć tych kluczy do wyzwalania automatyzacji lub przekazywania niestandardowych wiadomości do twoich wybranych urządzeń.",
"message-key": "Klucz Wiadomości",
"parse": "Analizuj",
@@ -644,9 +636,9 @@
"recipe-debugger-use-openai-description": "Użyj OpenAI, aby dynamicznie analizować przepisy zamiast polegać na bibliotece scraperów. Podczas tworzenia przepisu za pomocą adresu URL jest to wykonywane automatycznie, jeśli scraperowi nie uda się przetworzyć przepisu, ale możesz przetestować go ręcznie tutaj.",
"debug": "Debuguj",
"tree-view": "Widok drzewa",
"recipe-servings": "Recipe Servings",
"recipe-servings": "Ilość porcji",
"recipe-yield": "Wydajność przepisu",
"recipe-yield-text": "Recipe Yield Text",
"recipe-yield-text": "Tekst pola przepisu",
"unit": "Jednostka",
"upload-image": "Prześlij obraz",
"screen-awake": "Pozostaw ekran włączony",
@@ -654,7 +646,6 @@
"nextStep": "Następny krok",
"recipe-actions": "Akcje przepisów",
"parser": {
"experimental-alert-text": "Mączka używa naturalnego przetwarzania języka, aby analizować i tworzyć jednostki oraz artykuły żywnościowe dla twoich składników. Ta funkcja jest eksperymentalna i nie zawsze działa zgodnie z oczekiwaniami. Jeśli wolisz nie używać zanalizowanych wyników, możesz wybrać 'Anuluj', a zmiany nie zostaną zapisane.",
"ingredient-parser": "Parser składników",
"explanation": "Aby użyć analizatora składników, kliknij przycisk \"Przeanalizuj wszystko\", aby rozpocząć proces. Gdy przetworzone składniki będą dostępne, możesz przejrzeć elementy i sprawdzić, czy zostały one poprawnie przetworzone. Wskaźnik zaufania modelu jest wyświetlany po prawej stronie tytułu elementu. Ten wynik jest średnią wszystkich wyników i nie zawsze będzie dokładny.",
"alerts-explainer": "Powiadomienia będą wyświetlane, jeśli zostanie znaleziona pasująca żywność lub jednostka, ale nie istnieje w bazie danych.",
@@ -669,24 +660,24 @@
"no-food": "Brak potrawy"
},
"reset-servings-count": "Zresetuj liczbę porcji",
"not-linked-ingredients": "Additional Ingredients"
"not-linked-ingredients": "Dodatkowe składniki"
},
"recipe-finder": {
"recipe-finder": "Recipe Finder",
"recipe-finder-description": "Search for recipes based on ingredients you have on hand. You can also filter by tools you have available, and set a maximum number of missing ingredients or tools.",
"selected-ingredients": "Selected Ingredients",
"no-ingredients-selected": "No ingredients selected",
"missing": "Missing",
"no-recipes-found": "No recipes found",
"no-recipes-found-description": "Try adding more ingredients to your search or adjusting your filters",
"include-ingredients-on-hand": "Include Ingredients On Hand",
"include-tools-on-hand": "Include Tools On Hand",
"max-missing-ingredients": "Max Missing Ingredients",
"max-missing-tools": "Max Missing Tools",
"selected-tools": "Selected Tools",
"other-filters": "Other Filters",
"ready-to-make": "Ready to Make",
"almost-ready-to-make": "Almost Ready to Make"
"recipe-finder": "Wyszukiwarka przepisów",
"recipe-finder-description": "Wyszukuj przepisy na podstawie składników, które masz pod ręką. Możesz również filtrować według dostępnych narzędzi oraz ustawić maksymalną liczbę brakujących składników lub przyborów kuchennych.",
"selected-ingredients": "Wybrany składnik",
"no-ingredients-selected": "Nie wybrano żadnych składników",
"missing": "Brakujący",
"no-recipes-found": "Nie znaleziono przepisów",
"no-recipes-found-description": "Spróbuj dodać więcej składników do wyszukiwania lub dostosować filtry",
"include-ingredients-on-hand": "Uwzględnij składniki dostępne pod ręką",
"include-tools-on-hand": "Uwzględnij przybory kuchenne dostępne pod ręką",
"max-missing-ingredients": "Maks. ilość brakujących składników",
"max-missing-tools": "Maks. ilość brakujących przyborów kuchennych",
"selected-tools": "Wybrane przybory kuchenne",
"other-filters": "Inne filtry",
"ready-to-make": "Gotowe do użycia",
"almost-ready-to-make": "Prawie gotowe do użycia"
},
"search": {
"advanced-search": "Wyszukiwanie zaawansowane",
@@ -729,7 +720,7 @@
"backup-restore": "Przywróć kopie",
"back-restore-description": "Przywracanie tej kopii zapasowej nadpisze wszystkie aktualne dane w bazie danych i w katalogu danych i zastąpi je zawartością tej kopii zapasowej. {cannot-be-undone} Jeśli przywrócenie zakończy się pomyślnie, zostaniesz wylogowany.",
"cannot-be-undone": "Tej czynności nie można cofnąć - należy zachować ostrożność.",
"postgresql-note": "Jeśli używasz PostGreSQL, sprawdź {backup-restore-process} przed przywróceniem.",
"postgresql-note": "Jeśli używasz PostgreSQL, sprawdź {backup-restore-process} przed przywróceniem.",
"backup-restore-process-in-the-documentation": "proces tworzenia kopii zapasowej/przywracania w dokumentacji",
"irreversible-acknowledgment": "Rozumiem, że ta operacja jest nieodwracalna, destrukcyjna i może spowodować utratę danych",
"restore-backup": "Przywróć kopie"
@@ -891,7 +882,7 @@
"are-you-sure-you-want-to-check-all-items": "Czy na pewno chcesz zaznaczyć wszystkie elementy?",
"are-you-sure-you-want-to-uncheck-all-items": "Czy na pewno chcesz odznaczyć wszystkie elementy?",
"are-you-sure-you-want-to-delete-checked-items": "Czy jesteś pewien, że chcesz usunąć wszystkie zaznaczone elementy?",
"no-shopping-lists-found": "No Shopping Lists Found"
"no-shopping-lists-found": "Nie znaleziono list zakupów"
},
"sidebar": {
"all-recipes": "Wszystkie",
@@ -939,13 +930,13 @@
"tag": "Tag"
},
"tool": {
"tools": "Narzędzia",
"tools": "Przybory kuchenne",
"on-hand": "Na stanie",
"create-a-tool": "Utwórz narzędzie",
"tool-name": "Nazwa narzędzia",
"tool-name": "Nazwa przyboru kuchennego",
"create-new-tool": "Utwórz nowe narzędzie",
"on-hand-checkbox-label": "Pokaż jako Posiadane (Zaznaczono)",
"required-tools": "Wymagane Narzędzia",
"required-tools": "Wymagane Przybory kuchenne",
"tool": "Narzędzie"
},
"user": {
@@ -1057,8 +1048,8 @@
"foods": {
"merge-dialog-text": "Połączenie wybranej żywności połączy źródło żywności i żywność docelową w pojedynczą żywność. Źródło żywności zostanie usunięte, a wszystkie odniesienia do źródłowej żywności zostaną zaktualizowane tak, aby wskazywały na docelową żywność.",
"merge-food-example": "Scalanie {food1} do {food2}",
"seed-dialog-text": "Wypełnij bazę daniami na podstawie wybranego lokalnego języka. Akcja ta stworzy ponad 200 zwyczajowych potraw które mogą zostać użyte do organizacji Twojej bazy. Potrawy tłumaczone są przez wysiłek społeczeństwa.",
"seed-dialog-warning": "Posiadasz już wartości w bazie. Rozwiązanie problemu z duplikatami leżeć będzie w gestii użytkownika.",
"seed-dialog-text": "Wypełnij bazę danych produktami spożywczymi na podstawie twojego lokalnego języka. Dzięki temu utworzysz ponad 200 popularnych produktów spożywczych, które można wykorzystać do zorganizowania bazy danych. Produkty spożywcze są tłumaczone dzięki wysiłkom społeczności.",
"seed-dialog-warning": "W twojej bazie danych znajdują się już niektóre pozycje. Ta akcja nie usunie duplikatów, więc będziesz musiał zarządzać nimi ręcznie.",
"combine-food": "Połącz Żywność",
"source-food": "Żywność Źródłowa",
"target-food": "Żywność Docelowa",
@@ -1122,9 +1113,9 @@
"source-unit-will-be-deleted": "Jednostka źródłowa zostanie usunięta"
},
"recipe-actions": {
"recipe-actions-data": "Recipe Actions Data",
"recipe-actions-data": "Dane akcji przepisu",
"new-recipe-action": "",
"edit-recipe-action": "Edit Recipe Action",
"edit-recipe-action": "Edycja akcji przepisu",
"action-type": "Typ akcji"
},
"create-alias": "Utwórz alias",
@@ -1150,7 +1141,7 @@
"tools": {
"new-tool": "Nowe Narzędzie",
"edit-tool": "Edytuj Narzędzie",
"tool-data": "Dane narzędzia"
"tool-data": "Dane przyborów kuchennych"
}
},
"user-registration": {
@@ -1297,17 +1288,17 @@
"debug-openai-services-description": "....",
"run-test": "Uruchom test",
"test-results": "Wyniki testu",
"group-delete-note": "Groups with users or households cannot be deleted",
"group-delete-note": "Nie można usunąć grup z użytkownikami lub gospodarstwami domowymi",
"household-delete-note": "Gospodarstwa domowe z użytkownikami nie mogą być usunięte"
},
"profile": {
"welcome-user": "👋 Witaj, {0}!",
"description": "Zarządzaj swoim profilem, przepisami i ustawieniami grupy.",
"invite-link": "Invite Link",
"invite-link": "Link do zaproszenia",
"get-invite-link": "Uzyskaj link z zaproszeniem",
"get-public-link": "Uzyskaj link publiczny",
"account-summary": "Podsumowanie konta",
"account-summary-description": "Here's a summary of your group's information.",
"account-summary-description": "Oto podsumowanie Twoich informacji.",
"group-statistics": "Statystyki Grupy",
"group-statistics-description": "Twoje statystyki grupy dostarczają informacji o tym, jak używasz Mealie.",
"household-statistics": "Statystyki gospodarstw domowych",
@@ -1317,12 +1308,12 @@
"personal": "Osobiste",
"personal-description": "To są ustawienia, które są dla ciebie osobiste. Zmiany tutaj nie wpłyną na innych użytkowników.",
"user-settings": "Ustawienia użytkownika",
"user-settings-description": "Manage your preferences, change your password, and update your email.",
"api-tokens-description": "Manage your API Tokens for access from external applications.",
"user-settings-description": "Zarządzaj swoimi preferencjami, zmień hasło i zaktualizuj swój e-mail.",
"api-tokens-description": "Zarządzaj tokenami do API, aby uzyskać dostęp z zewnętrznych aplikacji.",
"group-description": "Te elementy są współdzielone w Twojej grupie. Edycja jednego z nich zmieni je dla całej grupy!",
"group-settings": "Ustawienia Grupy",
"group-settings-description": "Manage your common group settings, like privacy settings.",
"household-description": "These items are shared within your household. Editing one of them will change it for the whole household!",
"group-settings-description": "Zarządzaj swoimi wspólnymi ustawieniami grupy, takimi jak ustawienia prywatności.",
"household-description": "Te elementy są współdzielone w Twojej grupie. Edycja jednego z nich zmieni je dla całej grupy!",
"household-settings": "Ustawienia gospodarstwa domowego",
"household-settings-description": "Zarządzaj ustawieniami swojego gospodarstwa domowego, takimi jak plan posiłków i ustawienia prywatności.",
"cookbooks-description": "Zarządzaj kolekcją kategorii przepisów i generuj dla nich strony.",
@@ -1352,9 +1343,9 @@
},
"cookbook": {
"cookbooks": "Książki kucharskie",
"description": "Cookbooks are another way to organize recipes by creating cross sections of recipes, organizers, and other filters. Creating a cookbook will add an entry to the side-bar and all the recipes with the filters chosen will be displayed in the cookbook.",
"hide-cookbooks-from-other-households": "Hide Cookbooks from Other Households",
"hide-cookbooks-from-other-households-description": "When enabled, only cookbooks from your household will appear on the sidebar",
"description": "Książki kucharskie to inny sposób na organizowanie przepisów, tworząc przekrojowe sekcje przepisów i tagów. Stworzenie książki kuchennej spowoduje dodanie wpisu do paska bocznego, a wszystkie pasujące przepisy z wybranymi tagami i kategoriami będą wyświetlane w książce kucharskiej.",
"hide-cookbooks-from-other-households": "Ukryj książki kucharskie w innych gospodarstwach domowych",
"hide-cookbooks-from-other-households-description": "Gdy ta opcja jest włączona, na pasku bocznym będą wyświetlane książki kucharskie tylko z Twojego gospodarstwa domowego",
"public-cookbook": "Publiczka książka kucharska",
"public-cookbook-description": "Publiczne Książki kucharskie mogą być udostępniane użytkownikom spoza Mealie i będą wyświetlane na stronie Twoich grup.",
"filter-options": "Filtruj opcje",

View File

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

View File

@@ -15,7 +15,7 @@
"docs": "Documentação",
"download-log": "Transferir Log",
"download-recipe-json": "Último JSON recuperado",
"github": "Github",
"github": "GitHub",
"log-lines": "Linhas de registo",
"not-demo": "Não Demonstração",
"portfolio": "Portefólio",
@@ -277,7 +277,7 @@
"admin-group-management-text": "As alterações a este grupo serão aplicadas imediatamente.",
"group-id-value": "ID do Grupo: {0}",
"total-households": "Total de Lares",
"you-must-select-a-group-before-selecting-a-household": "You must select a group before selecting a household"
"you-must-select-a-group-before-selecting-a-household": "Tens de selecionar um grupo antes de selecionar uma casa"
},
"household": {
"household": "Casa",
@@ -518,7 +518,7 @@
"save-recipe-before-use": "Guardar receita antes de usar",
"section-title": "Título da secção",
"servings": "Porções",
"serves-amount": "Serves {amount}",
"serves-amount": "Serve {amount}",
"share-recipe-message": "Eu queria partilhar a minha {0} receita consigo.",
"show-nutrition-values": "Mostrar valores nutricionais",
"sodium-content": "Sódio",
@@ -547,8 +547,8 @@
"failed-to-add-recipe-to-mealplan": "Erro ao adicionar receita ao plano de refeições",
"failed-to-add-to-list": "Erro ao adicionar à lista",
"yield": "Rendimento",
"yields-amount-with-text": "Yields {amount} {text}",
"yield-text": "Yield Text",
"yields-amount-with-text": "Rendimentos {amount} {text}",
"yield-text": "Rendimento Texto",
"quantity": "Quantidade",
"choose-unit": "Escolha uma unidade",
"press-enter-to-create": "Prima 'Enter' para criar",
@@ -570,13 +570,6 @@
"increase-scale-label": "Aumentar Escala em 1",
"locked": "Bloqueado",
"public-link": "Link público",
"timer": {
"kitchen-timer": "Temporizador de cozinha",
"start-timer": "Iniciar Temporizador",
"pause-timer": "Pausar Temporizador",
"resume-timer": "Retomar Temporizador",
"stop-timer": "Parar Temporizador"
},
"edit-timeline-event": "Editar evento da Cronologia",
"timeline": "Cronologia",
"timeline-is-empty": "Nada na Cronologia, ainda. Tente fazer esta receita!",
@@ -586,7 +579,6 @@
"made-this": "Eu fiz isto",
"how-did-it-turn-out": "Que tal ficou?",
"user-made-this": "{user} fez isto",
"last-made-date": "Última vez {date}",
"api-extras-description": "Extras para receitas são funcionalidades chave da API Mealie. Estas permitem criar, dentro de uma receita, pares personalizados de chave/valor em JSON, para referência a partir de aplicações de terceiros. Pode usar essas chaves para fornecer informações, por exemplo, para acionar automações ou mensagens personalizadas para transmitir a um determinado dispositivo.",
"message-key": "Chave de Mensagem",
"parse": "Interpretar",
@@ -644,9 +636,9 @@
"recipe-debugger-use-openai-description": "Utilize o OpenAI para analisar os resultados em vez de depender da biblioteca de scrapers. Ao criar uma receita através de um URL, isto é feito automaticamente se a biblioteca de scrapers falhar, mas pode testá-la manualmente aqui.",
"debug": "Depurar",
"tree-view": "Vista em árvore",
"recipe-servings": "Recipe Servings",
"recipe-servings": "Porções por receita",
"recipe-yield": "Rendimento da receita",
"recipe-yield-text": "Recipe Yield Text",
"recipe-yield-text": "Rendimento da Receita Texto",
"unit": "Unidade",
"upload-image": "Carregar imagem",
"screen-awake": "Manter ecrã ligado",
@@ -654,7 +646,6 @@
"nextStep": "Próximo passo",
"recipe-actions": "Ações da Receita",
"parser": {
"experimental-alert-text": "O Mealie utiliza o processamento de linguagem natural para analisar e criar unidades e itens alimentares para os ingredientes da sua receita. Esta funcionalidade é experimental e pode nem sempre funcionar como esperado. Se preferir não utilizar os resultados analisados, pode selecionar “Cancelar” e as suas alterações não serão guardadas.",
"ingredient-parser": "Analisador de ingredientes",
"explanation": "Para utilizar o analisador de ingredientes, clique no botão “Analisar tudo” para iniciar o processo. Quando os ingredientes processados estiverem disponíveis, pode rever os itens e verificar se foram analisados corretamente. A pontuação de confiança do modelo é apresentada à direita do título do item. Esta pontuação é uma média de todas as pontuações individuais e pode nem sempre ser completamente exata.",
"alerts-explainer": "Serão apresentados alertas se for encontrado um alimento ou unidade correspondente, mas que não exista na base de dados.",
@@ -669,24 +660,24 @@
"no-food": "Nenhum Ingrediente"
},
"reset-servings-count": "Reiniciar Contador de Doses",
"not-linked-ingredients": "Additional Ingredients"
"not-linked-ingredients": "Ingredientes Adicionais"
},
"recipe-finder": {
"recipe-finder": "Recipe Finder",
"recipe-finder-description": "Search for recipes based on ingredients you have on hand. You can also filter by tools you have available, and set a maximum number of missing ingredients or tools.",
"selected-ingredients": "Selected Ingredients",
"no-ingredients-selected": "No ingredients selected",
"missing": "Missing",
"no-recipes-found": "No recipes found",
"no-recipes-found-description": "Try adding more ingredients to your search or adjusting your filters",
"include-ingredients-on-hand": "Include Ingredients On Hand",
"include-tools-on-hand": "Include Tools On Hand",
"max-missing-ingredients": "Max Missing Ingredients",
"max-missing-tools": "Max Missing Tools",
"selected-tools": "Selected Tools",
"other-filters": "Other Filters",
"ready-to-make": "Ready to Make",
"almost-ready-to-make": "Almost Ready to Make"
"recipe-finder": "Localizador de Receitas",
"recipe-finder-description": "Procure receitas com base nos ingredientes que tem em mãos. Pode também filtrar pelas ferramentas disponíveis e definir um número máximo de ingredientes ou ferramentas ausentes.",
"selected-ingredients": "Ingredientes Selecionados",
"no-ingredients-selected": "Nenhum ingrediente selecionado",
"missing": "Em falta",
"no-recipes-found": "Nenhuma receita encontrada",
"no-recipes-found-description": "Experimente adicionar mais ingredientes à sua pesquisa ou ajustar os seus filtros",
"include-ingredients-on-hand": "Incluir ingredientes disponíveis",
"include-tools-on-hand": "Incluir ferramentas disponíveis",
"max-missing-ingredients": "Máximo de ingredientes em falta",
"max-missing-tools": "Máximo de ferramentas em falta",
"selected-tools": "Ferramentas selecionadas",
"other-filters": "Outros filtros",
"ready-to-make": "Pronto para fazer",
"almost-ready-to-make": "Quase Pronto para fazer"
},
"search": {
"advanced-search": "Pesquisa Avançada",
@@ -729,7 +720,7 @@
"backup-restore": "Restaurar backup",
"back-restore-description": "Restaurar este backup irá apagar todos os dados atuais da sua base de dados e da pasta de dados e substituí-los pelo conteúdo deste backup. {cannot-be-undone} Se o restauro for bem-sucedido, a sua sessão será encerrada.",
"cannot-be-undone": "Esta acção não pode ser desfeita - use com prudência.",
"postgresql-note": "Se estiver a usar PostGreSQL, por favor reveja o {backup-restore-process} antes de restaurar.",
"postgresql-note": "If you are using PostgreSQL, please review the {backup-restore-process} prior to restoring.",
"backup-restore-process-in-the-documentation": "processo de backup/restauro na documentação",
"irreversible-acknowledgment": "Eu entendo que esta ação é irreversível, destrutiva e pode causar perda de dados",
"restore-backup": "Restaurar Backup"
@@ -891,7 +882,7 @@
"are-you-sure-you-want-to-check-all-items": "Tem a certeza de que pretende selecionar todos os itens?",
"are-you-sure-you-want-to-uncheck-all-items": "Tem a certeza de que pretende desmarcar todos os itens?",
"are-you-sure-you-want-to-delete-checked-items": "Tem a certeza de que pretende eliminar todos os itens selecionados?",
"no-shopping-lists-found": "No Shopping Lists Found"
"no-shopping-lists-found": "Nenhuma lista de compras encontrada"
},
"sidebar": {
"all-recipes": "Todas as Receitas",
@@ -1057,8 +1048,8 @@
"foods": {
"merge-dialog-text": "Combinar os alimentos selecionados irá juntar o alimento de origem e o alimento alvo num alimento único. O alimento de origem será eliminado e todas as referências a este serão atualizadas para apontar para o alimento alvo.",
"merge-food-example": "A juntar {food1} com {food2}",
"seed-dialog-text": "Popule a base de dados com alimentos no seu idioma local. Isto irá criar 200+ alimentos comuns que podem ser usados para organizar a sua base de dados. Os alimentos são traduzidos por via do esforço da comunidade.",
"seed-dialog-warning": "Já tem alguns itens na sua base de dados. Esta ação não vai reconciliar duplicados. Terá de os gerir manualmente.",
"seed-dialog-text": "Seed the database with foods based on your local language. This will create 200+ common foods that can be used to organize your database. Foods are translated via a community effort.",
"seed-dialog-warning": "You have already have some items in your database. This action will not reconcile duplicates, you will have to manage them manually.",
"combine-food": "Combinar Alimentos",
"source-food": "Alimento de Origem",
"target-food": "Alimento Alvo",
@@ -1303,7 +1294,7 @@
"profile": {
"welcome-user": "👋 Bem-vindo, {0}!",
"description": "Gira o seu perfil, receitas e definições de grupo.",
"invite-link": "Invite Link",
"invite-link": "Link de convite",
"get-invite-link": "Obter ligação de convite",
"get-public-link": "Obter ligação pública",
"account-summary": "Resumo da conta",
@@ -1353,8 +1344,8 @@
"cookbook": {
"cookbooks": "Livros de Receitas",
"description": "Os livros de receitas são outra forma de organizar as receitas, criando secções cruzadas de receitas, organizadores e outros filtros. A criação de um livro de receitas adicionará uma entrada à barra lateral e todas as receitas com os filtros selecionados serão apresentadas no livro de receitas.",
"hide-cookbooks-from-other-households": "Hide Cookbooks from Other Households",
"hide-cookbooks-from-other-households-description": "When enabled, only cookbooks from your household will appear on the sidebar",
"hide-cookbooks-from-other-households": "Ocultar livros de receitas de outras famílias",
"hide-cookbooks-from-other-households-description": "Quando ativado, apenas os livros de receitas da sua família aparecerão na barra lateral",
"public-cookbook": "Livro de Receitas público",
"public-cookbook-description": "Os Livros de Receitas públicos podem ser partilhados com utilizadores não registados e serão exibidos na sua página de grupos.",
"filter-options": "Opções de Filtro",

File diff suppressed because it is too large Load Diff

View File

@@ -570,13 +570,6 @@
"increase-scale-label": "Добавить порцию",
"locked": "Заблокировано",
"public-link": "Публичная ссылка",
"timer": {
"kitchen-timer": "Кухонный таймер",
"start-timer": "Запустить таймер",
"pause-timer": "Приостановить таймер",
"resume-timer": "Возобновить таймер",
"stop-timer": "Остановить таймер"
},
"edit-timeline-event": "Редактировать событие в истории",
"timeline": "История",
"timeline-is-empty": "В истории пока ничего нет. Попробуйте сделать этот рецепт!",
@@ -586,7 +579,6 @@
"made-this": "Я сделал это",
"how-did-it-turn-out": "Что получилось?",
"user-made-this": "{user} сделал это",
"last-made-date": "Последний раз сделано {date}",
"api-extras-description": "Дополнения к рецептам являются ключевым элементом Mealie API. Они позволяют создавать пользовательские пары json ключ/значение в рецепте для ссылания на другие приложения. Вы можете использовать эти ключи, чтобы сохранить нужную информацию, например, для автоматизаций или уведомлений на ваши устройства.",
"message-key": "Ключ сообщения",
"parse": "Обработать",
@@ -608,7 +600,7 @@
"create-recipe-from-an-image-description": "Create a recipe by uploading an image of it. Mealie will attempt to extract the text from the image using AI and create a recipe from it.",
"crop-and-rotate-the-image": "Crop and rotate the image so that only the text is visible, and it's in the correct orientation.",
"create-from-image": "Create from Image",
"should-translate-description": "Translate the recipe into my language",
"should-translate-description": "Перевести рецепт на мой язык",
"please-wait-image-procesing": "Подождите, идет обработка изображения.",
"bulk-url-import": "Массовый импорт по URL",
"debug-scraper": "Отладка сканирования",
@@ -618,16 +610,16 @@
"scrape-recipe-description": "Отсканировать рецепт по ссылке. Предоставьте ссылку на страницу, которую вы хотите отсканировать, и Mealie попытается вырезать рецепт с этого сайта и добавить его в свою коллекцию.",
"scrape-recipe-have-a-lot-of-recipes": "Хотите отсканировать несколько рецептов за раз?",
"scrape-recipe-suggest-bulk-importer": "Воспользуйтесь массовым импортом",
"scrape-recipe-have-raw-html-or-json-data": "Have raw HTML or JSON data?",
"scrape-recipe-have-raw-html-or-json-data": "У Вас есть данные HTML или JSON?",
"scrape-recipe-you-can-import-from-raw-data-directly": "You can import from raw data directly",
"import-original-keywords-as-tags": "Импортировать исходные ключевые слова как теги",
"stay-in-edit-mode": "Остаться в режиме редактирования",
"import-from-zip": "Импорт из архива",
"import-from-zip-description": "Импорт одного рецепта, который был экспортирован из другого экземпляра Mealie.",
"import-from-html-or-json": "Import from HTML or JSON",
"import-from-html-or-json": "Импортировать из HTML или JSON",
"import-from-html-or-json-description": "Import a single recipe from raw HTML or JSON. This is useful if you have a recipe from a site that Mealie can't scrape normally, or from some other external source.",
"json-import-format-description-colon": "To import via JSON, it must be in valid format:",
"json-editor": "JSON Editor",
"json-editor": "Редактор JSON",
"zip-files-must-have-been-exported-from-mealie": ".zip файлы должны быть экспортированы из Mealie",
"create-a-recipe-by-uploading-a-scan": "Создайте рецепт, загрузив скан.",
"upload-a-png-image-from-a-recipe-book": "Загрузить png изображение из книги рецептов",
@@ -654,7 +646,6 @@
"nextStep": "След. шаг",
"recipe-actions": "Действия с рецептом",
"parser": {
"experimental-alert-text": "Mealie uses natural language processing to parse and create units and food items for your recipe ingredients. This feature is experimental and may not always work as expected. If you prefer not to use the parsed results, you can select 'Cancel' and your changes will not be saved.",
"ingredient-parser": "Разделитель ингредиентов",
"explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.",
"alerts-explainer": "Оповещение появится если подходящие продукты или единица измерения найдены, но не занесены в базу данных.",
@@ -668,16 +659,16 @@
"missing-food": "Create missing food: {food}",
"no-food": "Нет еды"
},
"reset-servings-count": "Reset Servings Count",
"not-linked-ingredients": "Additional Ingredients"
"reset-servings-count": "Сбросить количество порций",
"not-linked-ingredients": "Дополнительные ингредиенты"
},
"recipe-finder": {
"recipe-finder": "Recipe Finder",
"recipe-finder": "Поиск рецептов",
"recipe-finder-description": "Search for recipes based on ingredients you have on hand. You can also filter by tools you have available, and set a maximum number of missing ingredients or tools.",
"selected-ingredients": "Selected Ingredients",
"selected-ingredients": "Выбранные ингредиенты",
"no-ingredients-selected": "No ingredients selected",
"missing": "Missing",
"no-recipes-found": "No recipes found",
"no-recipes-found": "Рецепты не найдены",
"no-recipes-found-description": "Try adding more ingredients to your search or adjusting your filters",
"include-ingredients-on-hand": "Include Ingredients On Hand",
"include-tools-on-hand": "Include Tools On Hand",
@@ -729,7 +720,7 @@
"backup-restore": "Восстановление резервной копии",
"back-restore-description": "Восстановление этой резервной копии перезапишет все текущие данные в вашей базе данных и в каталоге данных и заменит их содержимым этой резервной копии. {cannot-be-undone} при успешном восстановлении вы выйдете из системы.",
"cannot-be-undone": "Это действие нельзя отменить, используйте с осторожностью.",
"postgresql-note": "Если вы используете PostGreSQL, пожалуйста, просмотрите {backup-restore-process} перед восстановлением.",
"postgresql-note": "If you are using PostgreSQL, please review the {backup-restore-process} prior to restoring.",
"backup-restore-process-in-the-documentation": "процесс резервного копирования/восстановления в документации",
"irreversible-acknowledgment": "Я понимаю, что это действие является необратимым, разрушительным и может привести к потере данных",
"restore-backup": "Восстановить резервную копию"
@@ -888,10 +879,10 @@
"completed-on": "Выполнено в {date}",
"you-are-offline": "Вы не в сети",
"you-are-offline-description": "Not all features are available while offline. You can still add, modify, and remove items, but you will not be able to sync your changes to the server until you are back online.",
"are-you-sure-you-want-to-check-all-items": "Are you sure you want to check all items?",
"are-you-sure-you-want-to-check-all-items": "Вы уверены, что хотите выбрать все элементы?",
"are-you-sure-you-want-to-uncheck-all-items": "Are you sure you want to uncheck all items?",
"are-you-sure-you-want-to-delete-checked-items": "Are you sure you want to delete all checked items?",
"no-shopping-lists-found": "No Shopping Lists Found"
"no-shopping-lists-found": "Списки покупок не найдены"
},
"sidebar": {
"all-recipes": "Все рецепты",
@@ -1057,8 +1048,8 @@
"foods": {
"merge-dialog-text": "Сочетание выбранных продуктов позволит объединить первый и второй продукт в один. Первый продукт будет удалён, и все ссылки на него будут указывать на второй продукт.",
"merge-food-example": "Объединение {food1} в {food2}",
"seed-dialog-text": "Заполняет базу данных с продуктами на основе локального языка. Это добавит 200+ типичных продуктов, которые могут быть использованы для организации вашей базы данных. Продукты переводятся с помощью усилий сообщества.",
"seed-dialog-warning": "У вас уже есть некоторые элементы в базе данных. Это действие не позволит удалить дубликаты, вам придется проверить их вручную.",
"seed-dialog-text": "Seed the database with foods based on your local language. This will create 200+ common foods that can be used to organize your database. Foods are translated via a community effort.",
"seed-dialog-warning": "You have already have some items in your database. This action will not reconcile duplicates, you will have to manage them manually.",
"combine-food": "Объединить продукты",
"source-food": "Первый продукт",
"target-food": "Второй продукт",
@@ -1293,17 +1284,17 @@
"restore-from-v1-backup": "Have a backup from a previous instance of Mealie v1? You can restore it here.",
"manage-profile-or-get-invite-link": "Manage your own profile, or grab an invite link to share with others."
},
"debug-openai-services": "Debug OpenAI Services",
"debug-openai-services": "Отладка OpenAI сервисов",
"debug-openai-services-description": "Use this page to debug OpenAI services. You can test your OpenAI connection and see the results here. If you have image services enabled, you can also provide an image.",
"run-test": "Run Test",
"test-results": "Test Results",
"run-test": "Запустить тест",
"test-results": "Результаты тестов",
"group-delete-note": "Groups with users or households cannot be deleted",
"household-delete-note": "Households with users cannot be deleted"
},
"profile": {
"welcome-user": "👋 Добро пожаловать, {0}!",
"description": "Управление настройками профиля, рецептов и группы.",
"invite-link": "Invite Link",
"invite-link": "Ссылка-приглашение",
"get-invite-link": "Получить ссылку для приглашения",
"get-public-link": "Получить публичную ссылку",
"account-summary": "Cведения об учетной записи",

View File

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

View File

@@ -15,7 +15,7 @@
"docs": "Dokumentacija",
"download-log": "Prenesi dnevniške zapise",
"download-recipe-json": "Zadnji prebran JSON",
"github": "Github",
"github": "GitHub",
"log-lines": "Vrstice",
"not-demo": "Ni testno",
"portfolio": "Portfelj",
@@ -277,7 +277,7 @@
"admin-group-management-text": "Spremembe v tej skupini se poznajo takoj.",
"group-id-value": "ID skupine: {0}",
"total-households": "Skupaj gospodinjstev",
"you-must-select-a-group-before-selecting-a-household": "You must select a group before selecting a household"
"you-must-select-a-group-before-selecting-a-household": "Preden izberete gospodinjstvo, morate izbrati skupino"
},
"household": {
"household": "Gospodinjstvo",
@@ -518,7 +518,7 @@
"save-recipe-before-use": "Shrani recept pred uporabo",
"section-title": "Naslov odseka",
"servings": "Porcija",
"serves-amount": "Serves {amount}",
"serves-amount": "Obroki {amount}",
"share-recipe-message": "Rad bi delil moj {0} recept z vami.",
"show-nutrition-values": "Prikaži hranilne vrednosti",
"sodium-content": "Natrij",
@@ -547,8 +547,8 @@
"failed-to-add-recipe-to-mealplan": "Napaka pri dodajanji recepta v jedilnik",
"failed-to-add-to-list": "Dodajanje na seznam ni uspelo",
"yield": "Donos",
"yields-amount-with-text": "Yields {amount} {text}",
"yield-text": "Yield Text",
"yields-amount-with-text": "Donosi {amount} {text}",
"yield-text": "Besedilo donosa",
"quantity": "Količina",
"choose-unit": "Izberite enoto",
"press-enter-to-create": "Pritisnite enter da izdelate",
@@ -570,13 +570,6 @@
"increase-scale-label": "Zvišaj merilo za 1",
"locked": "Zaklenjeno",
"public-link": "Javna povezava",
"timer": {
"kitchen-timer": "Kuhinjski časovnik",
"start-timer": "Zaženi časovnik",
"pause-timer": "Ustavi časovnik",
"resume-timer": "Nadaljuj časovnik",
"stop-timer": "Ustavi časovnik"
},
"edit-timeline-event": "Uredi dogodek na časovnici",
"timeline": "Časovnica",
"timeline-is-empty": "Zaenkrat je časovnica prazna. Poskusi tale recept!",
@@ -586,7 +579,6 @@
"made-this": "Naredil sem to",
"how-did-it-turn-out": "Kako se je izkazalo?",
"user-made-this": "{user} je tole pripravil/a",
"last-made-date": "Nazadnje pripravljen {date}",
"api-extras-description": "Dodatni podatki za recepte so ključna funkcionalnost Mealie APIja. Omogočajo ustvarjanje lastnih JSON ključ / vrednost parov v okviru recepta, da lahko do njih dostopajo zunanje aplikacije. Te ključe lahko uporabiš za posredovanje informacij, na primer za sprožanje avtomatike ali sporočanje prilagojenih sporočil na poljubno napravo.",
"message-key": "Ključ sporočila",
"parse": "Razloči",
@@ -644,9 +636,9 @@
"recipe-debugger-use-openai-description": "Za razčlenitev rezultatov uporabite OpenAI, namesto da se zanašate na knjižnico strgala. Ko ustvarjate recept prek URL-ja, se to izvede samodejno, če knjižnica strgala odpove, vendar ga lahko tukaj preizkusite ročno.",
"debug": "Debug",
"tree-view": "Drevesni prikaz",
"recipe-servings": "Recipe Servings",
"recipe-servings": "Rocept obrokov",
"recipe-yield": "Število porcij",
"recipe-yield-text": "Recipe Yield Text",
"recipe-yield-text": "Recept donosnega besedila",
"unit": "Enota",
"upload-image": "Naloži sliko",
"screen-awake": "Ohranjanje budnega zaslona",
@@ -654,7 +646,6 @@
"nextStep": "Naslednji korak",
"recipe-actions": "Opravila na receptu",
"parser": {
"experimental-alert-text": "Mealie uporablja procesiranje naravnega jezika za razčlenjevanje in ustvarjanje živil in enot v seznamu sestavin. Ta storitev je eksperimentalna in včasih ne deluje kot pričakovano. Če dobljenega rezultata ne želiš uporabiti, izberi 'Prekliči' in tvoje spremembe ne bodo shranjene.",
"ingredient-parser": "Razčlenjevalnik sestavin",
"explanation": "Če želiš uporabiti razčlenjevalnik sestavin, izberi 'Razčleni vse', da pričneš s postopkom. Ko bodo sestavine na voljo, lahko pregledaš podatke in preveriš, če so bili pravilno razčlenjeni. Stopnja zaupanja je prikazana desno od podatka. Ta vrednost je povprečje vseh posameznih vrednosti in ni nujno popolnoma natančna.",
"alerts-explainer": "Opozorila bodo prikazana v primeru, da obstaja ujemajoče živilo ali enota, ampak še ne obstaja v podatkovni bazi.",
@@ -669,24 +660,24 @@
"no-food": "Ni živila"
},
"reset-servings-count": "Ponastavi števec obrokov",
"not-linked-ingredients": "Additional Ingredients"
"not-linked-ingredients": "Dodatne sestavine"
},
"recipe-finder": {
"recipe-finder": "Recipe Finder",
"recipe-finder-description": "Search for recipes based on ingredients you have on hand. You can also filter by tools you have available, and set a maximum number of missing ingredients or tools.",
"selected-ingredients": "Selected Ingredients",
"no-ingredients-selected": "No ingredients selected",
"missing": "Missing",
"no-recipes-found": "No recipes found",
"no-recipes-found-description": "Try adding more ingredients to your search or adjusting your filters",
"include-ingredients-on-hand": "Include Ingredients On Hand",
"include-tools-on-hand": "Include Tools On Hand",
"max-missing-ingredients": "Max Missing Ingredients",
"max-missing-tools": "Max Missing Tools",
"selected-tools": "Selected Tools",
"other-filters": "Other Filters",
"ready-to-make": "Ready to Make",
"almost-ready-to-make": "Almost Ready to Make"
"recipe-finder": "Iskalnik receptov",
"recipe-finder-description": "Poiščite recepte na podlagi sestavin, ki jih imate pri roki. Filtrirate lahko tudi po orodjih, ki jih imate na voljo, in nastavite največje število manjkajočih sestavin ali orodij.",
"selected-ingredients": "Izbrane sestavine",
"no-ingredients-selected": "Ni izbranih sestavin",
"missing": "manjka",
"no-recipes-found": "Ni receptov",
"no-recipes-found-description": "Poskusite iskanju dodati več sestavin ali prilagoditi filtre",
"include-ingredients-on-hand": "Vključite sestavine pri roki",
"include-tools-on-hand": "Vključite priročna orodja",
"max-missing-ingredients": "Največ manjkajočih sestavin",
"max-missing-tools": "Največ manjkajočih orodij",
"selected-tools": "Izbrana orodja",
"other-filters": "Drugi filtri",
"ready-to-make": "Pripravljen za izdelavo",
"almost-ready-to-make": "Skoraj pripravljeno za izdelavo"
},
"search": {
"advanced-search": "Napredno iskanje",
@@ -729,7 +720,7 @@
"backup-restore": "Obnovitev varnostne kopije",
"back-restore-description": "Obnavljanje varnostne kopije bo prepisalo trenutne podatke v podatkovni zbirki in v podatkovni mapi in jih zamenjalo s podatki v tej varnostni kopiji. {cannot-be-undone} Če je obnavljanje varnostne kopije uspešno, te bo sistem na koncu izpisal iz tvojega uporabniškega računa.",
"cannot-be-undone": "Te akcije ni mogoče razveljaviti - uporabljaj previdno.",
"postgresql-note": "Če uporabljaš PostGreSQL, preveri {backup-restore-process} preden pričneš z obnavljanje varnostne kopije.",
"postgresql-note": "Če uporabljate PostgreSQL, pred obnovitvijo preglejte {backup-restore-process}.",
"backup-restore-process-in-the-documentation": "postopek ustvarjanja in obnavljanja varnostne kopije v dokumentaciji",
"irreversible-acknowledgment": "Razumem, da tega ukaza ni mogoče razveljaviti in da lahko povzroči izgubo podatkov",
"restore-backup": "Obnovi varnostno kopijo"
@@ -891,7 +882,7 @@
"are-you-sure-you-want-to-check-all-items": "Ali res želite izbrati vse elemente?",
"are-you-sure-you-want-to-uncheck-all-items": "Ali res ne želite izbrati vseh elementov?",
"are-you-sure-you-want-to-delete-checked-items": "Ali ste prepričani, da želite izbrisati vse izbrane elemente?",
"no-shopping-lists-found": "No Shopping Lists Found"
"no-shopping-lists-found": "Ni nakupovalnih seznamov"
},
"sidebar": {
"all-recipes": "Vsi recepti",
@@ -1057,8 +1048,8 @@
"foods": {
"merge-dialog-text": "Združitev izbranih živil bo združila izvorno živilo in ciljno živilo v eno samo živilo. Izvorno živilo bo izbrisano in vse povezave na izvorno živilo, bodo po novem kazale na ciljno živilo.",
"merge-food-example": "Združujem {food1} v {food2}",
"seed-dialog-text": "Napolni podatkovno bazo s jedmi, ki izvirajo iz vašega lokalnega jezika. To bo kreiralo 200+ običajnih jedi, ki se lahko uporabijo za organizacijo vaše podatkovne baze. Jedi so prevedene s pomočjo skupnosti.",
"seed-dialog-warning": "Nekatere elemente že imate v podatkovni bazi. To opravilo ne bo upoštevalo dvojnikov in jih boste morali sami ročno upravljati.",
"seed-dialog-text": "Napolnite zbirko podatkov z živili, ki temeljijo na vašem lokalnem jeziku. Tako boste ustvarili več kot 200 običajnih živil, ki jih lahko uporabite za organizacijo vaše zbirke podatkov. Živila so prevedena s prizadevanjem skupnosti.",
"seed-dialog-warning": "Nekaj elementov že imate v svoji bazi podatkov. To dejanje ne bo uskladilo dvojnikov, upravljati jih boste morali ročno.",
"combine-food": "Združi živila",
"source-food": "Izvorno živilo",
"target-food": "Ciljno živilo",
@@ -1303,7 +1294,7 @@
"profile": {
"welcome-user": "👋 Živjo, {0}!",
"description": "Urejaj nastavitve profila, receptov in skupine.",
"invite-link": "Invite Link",
"invite-link": "Povezava za povabilo",
"get-invite-link": "Povabi",
"get-public-link": "Javna povezava",
"account-summary": "Pregled uporabniškega računa",
@@ -1353,8 +1344,8 @@
"cookbook": {
"cookbooks": "Kuharske knjige",
"description": "Kuharske knjige so še en način za organizacijo receptov z ustvarjanjem presekov receptov in značk. Ustvarjanje kuharske knjige bo dodalo povezavo v stranski meni, ki bo prikazala vse recepte z izbranimi značkami in kategorijami.",
"hide-cookbooks-from-other-households": "Hide Cookbooks from Other Households",
"hide-cookbooks-from-other-households-description": "When enabled, only cookbooks from your household will appear on the sidebar",
"hide-cookbooks-from-other-households": "Skrij kuharske knjige pred drugimi gospodinjstvi",
"hide-cookbooks-from-other-households-description": "Ko je omogočeno, bodo na stranski vrstici prikazane samo kuharske knjige iz vašega gospodinjstva",
"public-cookbook": "Javna kuharska knjiga",
"public-cookbook-description": "Javne kuharske knjige lahko deliš z zunanjimi uporabniki, prav tako bodo prikazane tudi na strani tvoje skupine.",
"filter-options": "Nastavitve filtrov",

View File

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

View File

@@ -15,7 +15,7 @@
"docs": "Dokumentation",
"download-log": "Ladda ner logg",
"download-recipe-json": "Senast hämtad JSON",
"github": "Github",
"github": "GitHub",
"log-lines": "Loggrader",
"not-demo": "Inte Demo",
"portfolio": "Portfölj",
@@ -45,7 +45,7 @@
"category-filter": "Kategorifilter",
"category-update-failed": "Kategori gick inte att uppdatera",
"category-updated": "Kategori uppdaterad",
"uncategorized-count": "Ingen Kategori {count}",
"uncategorized-count": "Utan kategori {count}",
"create-a-category": "Skapa kategori",
"category-name": "Kategorinamn",
"category": "Kategori"
@@ -277,7 +277,7 @@
"admin-group-management-text": "Ändringar i denna grupp kommer att återspeglas omedelbart.",
"group-id-value": "Grupp-Id: {0}",
"total-households": "Totalt antal hushåll",
"you-must-select-a-group-before-selecting-a-household": "You must select a group before selecting a household"
"you-must-select-a-group-before-selecting-a-household": "Du måste välja en grupp innan du kan välja ett hushåll"
},
"household": {
"household": "Hushåll",
@@ -518,7 +518,7 @@
"save-recipe-before-use": "Spara recept innan användning",
"section-title": "Avdelningens rubrik",
"servings": "Portioner",
"serves-amount": "Serves {amount}",
"serves-amount": "{amount} portioner",
"share-recipe-message": "Jag vill dela mitt {0} recept med dig.",
"show-nutrition-values": "Visa näringsvärde",
"sodium-content": "Natrium",
@@ -547,8 +547,8 @@
"failed-to-add-recipe-to-mealplan": "Det gick inte att lägga till recept i måltidsplanen",
"failed-to-add-to-list": "Misslyckades att lägga till listan",
"yield": "Ger",
"yields-amount-with-text": "Yields {amount} {text}",
"yield-text": "Yield Text",
"yields-amount-with-text": "Ger {amount} {text}",
"yield-text": "Vad som ges",
"quantity": "Antal",
"choose-unit": "Välj enhet",
"press-enter-to-create": "Tryck Enter för att skapa",
@@ -570,13 +570,6 @@
"increase-scale-label": "Skala upp med 1",
"locked": "Låst",
"public-link": "Publik länk",
"timer": {
"kitchen-timer": "Kökstimer",
"start-timer": "Starta Timer",
"pause-timer": "Pausa Timer",
"resume-timer": "Återuppta Timer",
"stop-timer": "Stoppa Timer"
},
"edit-timeline-event": "Redigera tidslinjehändelse",
"timeline": "Tidslinje",
"timeline-is-empty": "Inget på tidslinjen än. Försök att göra detta recept!",
@@ -586,8 +579,7 @@
"made-this": "Jag lagade den här",
"how-did-it-turn-out": "Hur blev rätten?",
"user-made-this": "{user} lagade detta",
"last-made-date": "Senast lagad {date}",
"api-extras-description": "Recept extras är en viktig funktion i Mealie's API. Med hjälp av dem kan du skapa anpassade JSON-nyckel/värdepar i ett recept, som du kan referera till från tredjepartsapplikationer. Du kan använda dessa nycklar för att tillhandahålla information, till exempel för att trigga automatiseringar eller anpassade meddelanden som ska vidarebefordras till önskad enhet.",
"api-extras-description": "Recept API-tillägg är en viktig funktion i Mealie's API. Med hjälp av dem kan du skapa anpassade JSON-nyckel/värdepar i ett recept, som du kan referera till från tredjepartsapplikationer. Du kan använda dessa nycklar för att tillhandahålla information, till exempel för att trigga automatiseringar eller anpassade meddelanden som ska vidarebefordras till önskad enhet.",
"message-key": "Meddelandenyckel",
"parse": "Läs in",
"attach-images-hint": "Bifoga bilder genom att dra och släppa dem i redigeraren",
@@ -644,9 +636,9 @@
"recipe-debugger-use-openai-description": "Använd OpenAI för att tolka resultaten istället för att förlita sig på skrapans bibliotek. När du skapar ett recept via URL görs detta automatiskt om skrapbiblioteket misslyckas, men du kan testa det manuellt här.",
"debug": "Felsök",
"tree-view": "Trädvy",
"recipe-servings": "Recipe Servings",
"recipe-servings": "Recept portioner",
"recipe-yield": "Recept ger",
"recipe-yield-text": "Recipe Yield Text",
"recipe-yield-text": "Recept ger",
"unit": "Måttenhet",
"upload-image": "Ladda upp bild",
"screen-awake": "Håll skärmen vaken",
@@ -654,9 +646,8 @@
"nextStep": "Nästa steg",
"recipe-actions": "Recept åtgärder",
"parser": {
"experimental-alert-text": "Mealie använder naturligt språk för att tolka enheter och livsmedel som behövs för dina recept. Denna funktion är experimentell och kanske inte alltid funkar som förväntat. Om du föredrar att inte använda de tolkade resultatet, kan du välja 'Avbryt' och förändringarna kommer då inte sparas.",
"ingredient-parser": "Ingrediensanalysator",
"explanation": "För att använda ingrediensen parser, klicka på \"Parse All\" knappen för att starta processen. När de bearbetade ingredienserna är tillgängliga, kan du granska objekten och kontrollera att de tolkades korrekt. Modellens självförtroende poäng visas till höger om artikelns titel. Denna poäng är ett genomsnitt av alla individuella poäng och kanske inte alltid vara helt korrekt.",
"explanation": "För att använda ingrediensen parser, klicka på \"Analysera allt\" knappen för att starta processen. När de bearbetade ingredienserna är tillgängliga, kan du granska objekten och kontrollera att de tolkades korrekt. Modellens självförtroende poäng visas till höger om artikelns titel. Denna poäng är ett genomsnitt av alla individuella poäng och kanske inte alltid vara helt korrekt.",
"alerts-explainer": "Varning kommer visas om en matchande ingrediens eller enhet hittas, men inte existerar i databasen.",
"select-parser": "Välj tolk",
"natural-language-processor": "Naturlig språkbehandlare",
@@ -668,25 +659,25 @@
"missing-food": "Skapa saknad ingrediens: {food}",
"no-food": "Ingen mat"
},
"reset-servings-count": "Nollställ antal serveringar",
"not-linked-ingredients": "Additional Ingredients"
"reset-servings-count": "Nollställ antal portioner",
"not-linked-ingredients": "Ytterligare ingredienser"
},
"recipe-finder": {
"recipe-finder": "Recipe Finder",
"recipe-finder-description": "Search for recipes based on ingredients you have on hand. You can also filter by tools you have available, and set a maximum number of missing ingredients or tools.",
"selected-ingredients": "Selected Ingredients",
"no-ingredients-selected": "No ingredients selected",
"missing": "Missing",
"no-recipes-found": "No recipes found",
"no-recipes-found-description": "Try adding more ingredients to your search or adjusting your filters",
"include-ingredients-on-hand": "Include Ingredients On Hand",
"include-tools-on-hand": "Include Tools On Hand",
"max-missing-ingredients": "Max Missing Ingredients",
"max-missing-tools": "Max Missing Tools",
"selected-tools": "Selected Tools",
"other-filters": "Other Filters",
"ready-to-make": "Ready to Make",
"almost-ready-to-make": "Almost Ready to Make"
"recipe-finder": "Recept sökare",
"recipe-finder-description": "Sök efter recept baserat på ingredienser du har till hands. Du kan också filtrera efter verktyg du har tillgängliga, och ställa in ett maximalt antal saknade ingredienser eller verktyg.",
"selected-ingredients": "Valda ingredienser",
"no-ingredients-selected": "Inga ingredienser valda",
"missing": "Saknas",
"no-recipes-found": "Inga recept hittades",
"no-recipes-found-description": "Prova att lägga till fler ingredienser till din sökning eller justera dina filter",
"include-ingredients-on-hand": "Inkludera ingredienser som finns till hands",
"include-tools-on-hand": "Inkludera verktyg som finns till hands",
"max-missing-ingredients": "Max antal saknade ingredienser",
"max-missing-tools": "Max antal saknade verktyg",
"selected-tools": "Valda Verktyg",
"other-filters": "Flera filter",
"ready-to-make": "Redo att laga",
"almost-ready-to-make": "Nästan redo att lagas"
},
"search": {
"advanced-search": "Avancerad sökning",
@@ -729,7 +720,7 @@
"backup-restore": "Återställ backup",
"back-restore-description": "Återställning av den här backuppen kommer att skriva över all information i databasen och datakatalogen och ersätta allt med innehållet i nackuppen. {cannot-be-undone} Om återställningen går bra kommer du att loggas ut.",
"cannot-be-undone": "Denna åtgärd kan inte ångras - använd med försiktighet.",
"postgresql-note": "Om du använder PostGreSQL, vänligen granska {backup-restore-process} innan du återställer.",
"postgresql-note": "If you are using PostgreSQL, please review the {backup-restore-process} prior to restoring.",
"backup-restore-process-in-the-documentation": "säkerhetskopiering/återställning i dokumentationen",
"irreversible-acknowledgment": "Jag förstår att denna åtgärd är oåterkallelig, destruktiv och kan orsaka dataförlust",
"restore-backup": "Återställ säkerhetskopia"
@@ -891,7 +882,7 @@
"are-you-sure-you-want-to-check-all-items": "Är du säker på att du vill markera alla objekt?",
"are-you-sure-you-want-to-uncheck-all-items": "Är du säker på att du vill avmarkera alla objekt?",
"are-you-sure-you-want-to-delete-checked-items": "Är du säker på att du vill ta bort alla markerade objekt?",
"no-shopping-lists-found": "No Shopping Lists Found"
"no-shopping-lists-found": "Inga inköpslistor hittades"
},
"sidebar": {
"all-recipes": "Recept",
@@ -1057,8 +1048,8 @@
"foods": {
"merge-dialog-text": "Kombinera valda livsmedel kommer att slå samman de valda livsmedlen till ett livsmedel. Ursprungslivsmedlet kommer att raderas och alla hänvisningar till detta kommer att uppdateras för att peka på det kombinerade livsmedlet.",
"merge-food-example": "Slå ihop {food1} till {food2}",
"seed-dialog-text": "Fyll databasen med livsmedel baserade på ditt språk. Detta kommer att skapa 200+ vanliga livsmedel som kan användas för att organisera din databas. Livsmedlen översätts via ett gemenskapsinsats.",
"seed-dialog-warning": "Du har redan några objekt i din databas. Denna åtgärd kommer inte att förena dubbletter, du kommer att behöva hantera dem manuellt.",
"seed-dialog-text": "Seed the database with foods based on your local language. This will create 200+ common foods that can be used to organize your database. Foods are translated via a community effort.",
"seed-dialog-warning": "You have already have some items in your database. This action will not reconcile duplicates, you will have to manage them manually.",
"combine-food": "Kombinera mat",
"source-food": "Matens källa",
"target-food": "Matens mål",
@@ -1303,7 +1294,7 @@
"profile": {
"welcome-user": "👋 Välkommen, {0}!",
"description": "Hantera dina profil, recept och gruppinställningar.",
"invite-link": "Invite Link",
"invite-link": "Inbjudningslänk",
"get-invite-link": "Skapa inbjudningslänk",
"get-public-link": "Få offentlig länk",
"account-summary": "Kontosammanfattning",
@@ -1353,8 +1344,8 @@
"cookbook": {
"cookbooks": "Kokböcker",
"description": "Kokböcker är ett annat sätt att organisera recept genom att skapa tvärsnitt av recept, organisatörer och andra filter. När du skapar en kokbok kommer den att lägga till en post i sidofältet och alla recept med de taggar och kategorier som valts kommer att visas i kokboken.",
"hide-cookbooks-from-other-households": "Hide Cookbooks from Other Households",
"hide-cookbooks-from-other-households-description": "When enabled, only cookbooks from your household will appear on the sidebar",
"hide-cookbooks-from-other-households": "Dölj kokböcker från andra hushåll",
"hide-cookbooks-from-other-households-description": "Endast kokböcker från ditt hushåll visas på sidofältet om denna ruta kryssas i",
"public-cookbook": "Offentlig kokbok",
"public-cookbook-description": "Offentliga kokböcker kan delas med icke-mealie användare och kommer att visas på din gruppsida.",
"filter-options": "Filterinställningar",

View File

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

View File

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

View File

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

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