Compare commits

..

138 Commits

Author SHA1 Message Date
renovate[bot]
583bd742fb fix(deps): update dependency authlib to v1.3.1 (#3696)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-04 18:04:09 -05:00
renovate[bot]
af86ed2028 chore(deps): update dependency pytest to v8.2.2 (#3695)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-04 14:49:33 -05:00
renovate[bot]
80dc1dcaad fix(deps): update dependency pydantic to v2.7.3 (#3689)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-04 19:11:05 +00:00
renovate[bot]
90e184c0fc fix(deps): update dependency pydantic-settings to v2.3.0 (#3688)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-04 18:58:27 +00:00
renovate[bot]
393103662f fix(deps): update dependency openai to v1.31.0 (#3691)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-04 15:18:30 +00:00
Hayden
6e2957fb1e chore(l10n): New Crowdin updates (#3694) 2024-06-04 10:05:53 -05:00
boc-the-git
e7a668e64e feat: Ensure PR title fits convention (#3683) 2024-06-04 13:41:02 +00:00
Hayden
88577b696b New Crowdin updates (#3693) 2024-06-04 12:33:42 +02:00
Hayden
289038ba17 New Crowdin updates (#3687) 2024-06-03 07:43:44 +00:00
boc-the-git
4aec294c26 docs: Add Key Features to README (#3678)
Co-authored-by: Hayden <64056131+hay-kot@users.noreply.github.com>
2024-06-03 00:40:49 +00:00
renovate[bot]
99a13bd0c4 fix(deps): update dependency uvicorn to v0.30.1 (#3685)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-02 19:32:21 +10:00
Hayden
3bd4353685 New Crowdin updates (#3684) 2024-06-02 09:30:18 +02:00
Michael Genson
109ec651cc fix: Broken Data Management Tabs (#3680) 2024-06-01 21:46:31 +00:00
Dennis Gaida
166582acf4 [docs] add possible log levels (#3638)
Co-authored-by: Michael Genson <71845777+michael-genson@users.noreply.github.com>
2024-06-02 07:11:40 +10:00
Michael Genson
4bc88e653f feat: Handle Safari-mangled backup ZIPs and improve backup UI (#3674) 2024-06-01 15:58:42 +00:00
Michael Genson
94e91d3602 feat: Update Shopping List Timestamp on List Item Update (#3453) 2024-06-01 11:07:50 +00:00
renovate[bot]
d6ce607a4e fix(deps): update dependency rapidfuzz to v3.9.3 (#3673)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-01 10:42:57 +00:00
renovate[bot]
9e8822fabe chore(deps): update dependency ruff to v0.4.7 (#3672)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-01 20:32:44 +10:00
Hayden
0734ec9ce8 New Crowdin updates (#3675) 2024-06-01 11:13:31 +02:00
Jonathan Beaulieu
f4f2b863e0 feat: Add recipekeeper migration (#3642) 2024-05-31 09:58:04 +00:00
DataDalton
a7fcb6c84d docs: Update documentation link on main readme (#3657) 2024-05-31 06:34:19 +00:00
renovate[bot]
abcee51d0c fix(deps): update dependency openai to v1.30.5 (#3670)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-30 17:00:31 +10:00
renovate[bot]
8b61f95c8c fix(deps): update dependency requests to v2.32.3 (#3668)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: boc-the-git <3479092+boc-the-git@users.noreply.github.com>
2024-05-30 06:34:55 +00:00
renovate[bot]
e01bb60aab fix(deps): update dependency rapidfuzz to v3.9.2 (#3667)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-30 06:24:55 +00:00
Hayden
bf5340b902 New Crowdin updates (#3669) 2024-05-30 16:13:43 +10:00
renovate[bot]
985041e61f fix(deps): update dependency uvicorn to ^0.30.0 (#3659)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-29 14:40:17 +00:00
renovate[bot]
70edf36073 fix(deps): update dependency lxml to v5.2.2 (#3389)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-29 09:31:36 -05:00
renovate[bot]
15a0d25caa fix(deps): update dependency extruct to ^0.17.0 (#3666)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-29 09:21:06 -05:00
aljora
445754c5d8 Setting backend passwords with docker compose secrets (#3656)
Co-authored-by: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com>
2024-05-29 19:53:24 +10:00
Hayden
831cd9c543 New Crowdin updates (#3665) 2024-05-29 08:59:06 +00:00
renovate[bot]
abaf6062c6 chore(deps): update dependency ruff to v0.4.6 (#3663)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-28 19:47:40 -05:00
renovate[bot]
125c3914b3 fix(deps): update dependency pydantic to v2.7.2 (#3662)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-28 19:08:46 +00:00
renovate[bot]
93cb6bf341 chore(deps): update dependency coverage to v7.5.3 (#3660)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-28 18:57:54 +00:00
renovate[bot]
46fb2b2c5a fix(deps): update dependency openai to v1.30.4 (#3661)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-28 13:48:59 -05:00
Hayden
ac2a77b3b0 New Crowdin updates (#3658) 2024-05-28 08:00:49 +02:00
renovate[bot]
66a6426d15 chore(deps): update dependency mkdocs-material to v9.5.25 (#3655)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-27 10:44:49 +00:00
Hayden
508ae30133 New Crowdin updates (#3653) 2024-05-27 09:27:28 +02:00
boc-the-git
e3c642debf feat: Set default number of days on meal planner (#3650) 2024-05-26 21:30:15 +00:00
renovate[bot]
af9e0f27a3 chore(deps): update dependency coverage to v7.5.2 (#3651)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-26 09:56:26 -05:00
boc-the-git
e07467df57 fix: Set the daily schedule to a specific time, rather than 24hr from start up (#3645) 2024-05-26 04:00:51 +00:00
renovate[bot]
55b91bf847 fix(deps): update dependency openai to v1.30.3 (#3646)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-24 19:39:11 +00:00
renovate[bot]
58fc46af9f chore(deps): update dependency ruff to v0.4.5 (#3636)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-24 21:45:47 +10:00
Hayden
8e4fe55df1 New Crowdin updates (#3641) 2024-05-23 19:54:57 -05:00
renovate[bot]
f150c3f41e fix(deps): update dependency openai to v1.30.2 (#3640)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-23 15:00:34 +02:00
github-actions[bot]
36c7ae5b4b docs(auto): Update image tag, for release v1.7.0 (#3637)
Co-authored-by: boc-the-git <3479092+boc-the-git@users.noreply.github.com>
2024-05-23 07:08:46 +00:00
Hayden
d1c5a6ed8c New Crowdin updates (#3635) 2024-05-23 07:48:06 +02:00
Michael Genson
ca26639525 feat: Data Management from Shopping List (#3603)
Co-authored-by: boc-the-git <3479092+boc-the-git@users.noreply.github.com>
2024-05-22 21:58:16 +00:00
renovate[bot]
89982f3e5f fix(deps): update dependency requests to v2.32.2 (#3632)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-22 20:32:00 +10:00
renovate[bot]
8485b17490 fix(deps): update dependency openai to v1.30.1 (#3633)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-22 09:57:12 +00:00
Michael Genson
5c57b3dd1a feat: OpenAI Ingredient Parsing (#3581) 2024-05-22 09:45:07 +00:00
renovate[bot]
4c8bbdcde2 chore(deps): update dependency mkdocs-material to v9.5.24 (#3629)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-21 21:59:17 +10:00
renovate[bot]
2607066570 fix(deps): update dependency apprise to v1.8.0 (#3588)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-20 23:19:03 +00:00
renovate[bot]
8b7c8be51d fix(deps): update dependency requests to v2.32.1 (#3631)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-20 18:08:33 -05:00
nephlm
c70a5cb72c fix: Fix file not found error with individual recipe export/download. (#3579) 2024-05-20 17:53:14 -05:00
Michael Genson
c610ec1344 fix: Broken Import (#3630) 2024-05-20 07:55:01 -08:00
Michael Genson
61becdbec7 chore: Remove Server Tasks (#3592) 2024-05-20 14:51:37 +00:00
renovate[bot]
78d2a3b8aa chore(deps): update dependency pylint to v3.2.2 (#3625)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-20 20:37:03 +10:00
Michael Genson
a4c3b0da71 fix: NLP Ingredient Parser Misses Some Fractions (#3618) 2024-05-20 10:18:11 +00:00
Hayden
3d3279738b New Crowdin updates (#3622) 2024-05-20 00:36:33 +00:00
renovate[bot]
495d643ed9 fix(deps): update dependency rapidfuzz to v3.9.1 (#3623)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-19 19:28:23 -05:00
renovate[bot]
9094d24e50 chore(deps): update dependency pytest to v8.2.1 (#3621)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-19 15:53:19 -05:00
renovate[bot]
aa4d0f9958 chore(deps): update dependency pytest-asyncio to v0.23.7 (#3620)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-19 10:59:31 -05:00
renovate[bot]
cb821994ae chore(deps): update dependency pylint to v3.2.1 (#3616)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-18 12:53:27 -05:00
Hayden
b07a3a31f7 New Crowdin updates (#3614) 2024-05-17 17:48:33 -05:00
Zac Warham
68ff5f4b1c Fixed comment describing method (#3611) 2024-05-17 00:30:01 +00:00
renovate[bot]
cde9d166a4 chore(deps): update dependency mkdocs-material to v9.5.23 (#3605)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Michael Genson <71845777+michael-genson@users.noreply.github.com>
2024-05-16 22:29:23 +00:00
Hayden
041145423f New Crowdin updates (#3604) 2024-05-16 17:11:54 -05:00
renovate[bot]
c227519fb7 chore(deps): update dependency pylint to v3.2.0 (#3598)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-14 09:04:29 -05:00
Hayden
94223d2903 New Crowdin updates (#3596) 2024-05-13 12:24:07 -05:00
renovate[bot]
e015c65d92 chore(deps): update dependency pylint to v3.1.1 (#3595)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-13 15:30:03 +00:00
renovate[bot]
53916badf3 chore(deps): update dependency mkdocs-material to v9.5.22 (#3589)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-12 20:00:30 -05:00
Michael Genson
c82549ccb4 feat: Default To Fractions When Unit Is Empty (#3587)
Co-authored-by: Hayden <64056131+hay-kot@users.noreply.github.com>
2024-05-12 14:15:26 -05:00
Hayden
554b3fa749 New Crowdin updates (#3590) 2024-05-12 17:59:58 +01:00
Carter
3f263281e7 Add time-based caching for JWKS fetching (#3586) 2024-05-11 21:21:55 -05:00
renovate[bot]
dc47145af6 chore(deps): update dependency pre-commit to v3.7.1 (#3583)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-11 17:24:29 +00:00
Hayden
0ccee3584c New Crowdin updates (#3585) 2024-05-11 12:15:17 -05:00
Hayden
dc8aadc327 New Crowdin updates (#3580) 2024-05-10 15:28:14 +00:00
renovate[bot]
efbb571bc2 chore(deps): update dependency ruff to v0.4.4 (#3577)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-09 18:39:31 -05:00
Hayden
1df75328d7 New Crowdin updates (#3576) 2024-05-09 14:45:26 +02:00
Hayden
85e402ccc3 New Crowdin updates (#3575) 2024-05-08 14:18:40 +02:00
github-actions[bot]
53a1f04562 docs(auto): Update image tag, for release v1.6.0 (#3571)
Co-authored-by: boc-the-git <3479092+boc-the-git@users.noreply.github.com>
2024-05-07 18:04:46 +02:00
Michael Genson
418a8ec72b fix: Recipe Search Quirks and Session Storage (#3541)
Co-authored-by: boc-the-git <3479092+boc-the-git@users.noreply.github.com>
Co-authored-by: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com>
2024-05-06 15:01:56 +00:00
renovate[bot]
770630bf73 fix(deps): update dependency sqlalchemy to v2.0.30 (#3568)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-06 19:40:32 +10:00
renovate[bot]
89ee7475a6 fix(deps): update dependency jinja2 to v3.1.4 (#3570)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-06 01:46:21 +00:00
Hayden
bca5dd8282 New Crowdin updates (#3569) 2024-05-05 20:35:46 -05:00
Michael Genson
dabd93c919 chore(deps): update dependency ruff to v0.4.3 (#3564) 2024-05-05 11:26:14 +00:00
Michael Genson
6991dff3e6 fix: Make Nextcloud Migrations Fault Tolerant (#3544) 2024-05-05 11:17:29 +00:00
Hayden
b0eece789d New Crowdin updates (#3565) 2024-05-04 21:44:22 -05:00
Arsène Reymond
9fad4a9dce fix: Shopping list labels reordering dialog (#3540)
Co-authored-by: Michael Genson <71845777+michael-genson@users.noreply.github.com>
2024-05-04 20:27:04 +00:00
renovate[bot]
22d8c4d5dc fix(deps): update dependency bcrypt to v4.1.3 (#3560)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-04 16:19:05 +00:00
renovate[bot]
7be24d3479 chore(deps): update dependency coverage to v7.5.1 (#3563)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-04 11:09:12 -05:00
renovate[bot]
fbceb61b9a chore(deps): update dependency mkdocs-material to v9.5.21 (#3555)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-03 19:51:57 +00:00
renovate[bot]
1be5bfaef1 fix(deps): update dependency orjson to v3.10.3 (#3553)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-03 11:05:52 -05:00
Carter
fac1df31d3 Make OIDC groups claim configurable and optional (#3552) 2024-05-02 22:55:47 -05:00
renovate[bot]
6957e2fa74 fix(deps): update dependency rapidfuzz to v3.9.0 (#3550)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-03 01:25:43 +00:00
renovate[bot]
4f02fae284 fix(deps): update dependency fastapi to ^0.111.0 (#3549)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-02 20:15:56 -05:00
Hayden
f2615c97e9 New Crowdin updates (#3548) 2024-05-02 20:06:21 -05:00
Hayden
6b4c9a400d New Crowdin updates (#3542) 2024-05-02 08:33:54 +02:00
Michael Genson
cca11b5a12 chore(deps): update dependency ruff to v0.4.2 (#3533)
Co-authored-by: Hayden <64056131+hay-kot@users.noreply.github.com>
2024-05-01 16:07:10 +00:00
Michael Genson
f697a7ee34 docs: formatting (#3539) 2024-05-01 07:58:55 -08:00
Kuchenpirat
0d73338e12 cleanup: parser localization (#3538) 2024-05-01 09:06:43 -05:00
renovate[bot]
2f4c6bd500 fix(deps): update dependency orjson to v3.10.2 (#3535)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-01 19:32:30 +10:00
Michael Genson
3807778e2f feat: Recipe Actions (#3448)
Co-authored-by: boc-the-git <3479092+boc-the-git@users.noreply.github.com>
Co-authored-by: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com>
2024-05-01 09:20:52 +02:00
Hayden
ee87a14401 New Crowdin updates (#3534) 2024-05-01 00:58:59 +00:00
Michael Genson
ec458a0a08 fix: Security Issues (#3530)
Co-authored-by: boc-the-git <3479092+boc-the-git@users.noreply.github.com>
2024-04-30 20:53:55 +00:00
renovate[bot]
2ff37c86d6 chore(deps): update dependency pytest to v8.2.0 (#3522)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-30 14:58:32 +00:00
renovate[bot]
b7da3c0f73 fix(deps): update dependency tzdata to v2024 (#3527)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com>
2024-04-30 14:54:31 +00:00
renovate[bot]
d799136f0d fix(deps): update dependency fastapi to v0.110.3 (#3532)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-30 14:46:52 +00:00
renovate[bot]
d1d5754c6d chore(deps): update dependency mkdocs-material to v9.5.20 (#3517)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-30 14:34:55 +00:00
renovate[bot]
52662fdce2 chore(deps): update dependency mypy to v1.10.0 (#3516)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-30 09:25:46 -05:00
Hayden
8df6033c19 New Crowdin updates (#3531) 2024-04-30 08:45:00 +02:00
Hayden
c23660007e chore: bump user agent (#3457) 2024-04-29 12:18:00 -05:00
Michael Genson
786aa2279c chore: Replace python-jose with PyJWT (#3521)
Co-authored-by: boc-the-git <3479092+boc-the-git@users.noreply.github.com>
2024-04-29 09:49:13 +00:00
Hayden
ab8c3be367 New Crowdin updates (#3523) 2024-04-27 00:19:50 -05:00
Hayden
8bf8dfd3ed New Crowdin updates (#3520) 2024-04-26 09:51:33 +02:00
renovate[bot]
b3aa7aeb1a fix(deps): update dependency recipe-scrapers to v14.56.0 (#3518)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-25 20:15:33 +02:00
Hayden
0f2b1d8d3a New Crowdin updates (#3515) 2024-04-24 16:18:23 +10:00
renovate[bot]
4de6391684 chore(deps): update dependency coverage to v7.5.0 (#3514)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-23 18:21:41 +00:00
renovate[bot]
c3e68b7d8a fix(deps): update dependency pydantic to v2.7.1 (#3513)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-23 13:11:19 -05:00
Hayden
7557d2e818 New Crowdin updates (#3510) 2024-04-23 09:04:28 +02:00
renovate[bot]
c22a2fc4a8 fix(deps): update dependency fastapi to v0.110.2 (#3497)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-22 12:05:43 +00:00
Hayden
ad94a4f42f New Crowdin updates (#3507) 2024-04-22 08:22:55 +02:00
Hayden
e6bf3b3acd New Crowdin updates (#3501) 2024-04-19 19:31:21 +02:00
Michael Genson
711dd93851 fix: Ratings UI and Filter Issues (#3459)
Co-authored-by: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com>
2024-04-19 17:52:41 +02:00
Carter
2b6d7811ca OIDC - Specifically check for 401 status before resetting (#3500) 2024-04-19 14:51:04 +00:00
renovate[bot]
3373abf787 chore(deps): update dependency ruff to v0.4.1 (#3498)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-19 09:20:26 -05:00
Michael Genson
741d37f59e feat: Group Shopping List Items By Food (#3471)
Co-authored-by: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com>
2024-04-19 11:00:40 +00:00
Michael Genson
b38c19ce71 fix: Missing Translations (#3494) 2024-04-19 10:42:50 +00:00
Carter
1a385e941c Add new OIDC TLS CA Certfile option (#3496) 2024-04-19 20:36:03 +10:00
Carter
c6f5b62ad0 Fix OIDC infinite loop if user is not in OIDC_USER_GROUP (#3487) 2024-04-19 00:17:45 +00:00
renovate[bot]
84dad84326 chore(deps): update dependency ruff to ^0.4.0 (#3495)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-18 18:42:07 -05:00
Hayden
f369c8fd6e New Crowdin updates (#3493) 2024-04-18 12:19:22 -05:00
github-actions[bot]
467cf46c6d docs(auto): Update image tag, for release v1.5.1 (#3482)
Co-authored-by: hay-kot <64056131+hay-kot@users.noreply.github.com>
2024-04-18 06:28:13 +00:00
Kuchenpirat
360b8e21d9 fix: MultiPurposeLabel text color (#3485) 2024-04-17 12:24:54 -05:00
Hayden
0b851e79ec New Crowdin updates (#3484) 2024-04-17 16:44:40 +00:00
renovate[bot]
faf716cb7e fix(deps): update dependency gunicorn to v22 (#3479)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-16 23:07:01 -05:00
Michael Genson
46f1ad7941 fix: Bad Recipe Rating Calc Preventing App Startup (#3475) 2024-04-16 20:47:15 +00:00
p0lycarpio
6e1112c73e fix: make groups private by default (#3474) 2024-04-16 15:12:00 -05:00
229 changed files with 6517 additions and 2652 deletions

View File

@@ -1,6 +1,12 @@
<!--
This template provides some ideas of things to include in your PR description.
To start, try providing a short summary of your changes in the Title above.
To start, try providing a short summary of your changes in the Title above. We follow Conventional Commits syntax, please ensure your title is prefixed with one of:
- `feat: `
- `fix: `
- `docs: `
- `chore: `
If a section of the PR template does not apply to this PR, then delete that section.
PLEASE READ:
@@ -36,6 +42,8 @@ _(REQUIRED)_
Briefly explain any decisions you made with respect to the changes.
Include anything here that you didn't include in *Release Notes*
above, such as changes to CI or changes to internal methods.
If there is a UI component to the change, please include before/after images.
-->
## Which issue(s) this PR fixes:
@@ -44,7 +52,7 @@ _(REQUIRED)_
<!--
If this PR fixes one of more issues, list them here.
One line each, like so:
One per line, like so:
Fixes #123
Fixes #39
-->

41
.github/workflows/pull-request-lint.yml vendored Normal file
View File

@@ -0,0 +1,41 @@
name: Pull Request Linter
on:
workflow_call:
pull_request:
types: [edited] # This captures the PR title changing
branches:
- mealie-next
jobs:
validate-title:
name: Validate PR title
runs-on: ubuntu-latest
steps:
# https://github.com/amannn/action-semantic-pull-request
- uses: amannn/action-semantic-pull-request@v5
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
# Configure which types are allowed (newline-delimited).
# Default: https://github.com/commitizen/conventional-commit-types
types: |
fix
feat
docs
chore
# Configure which scopes are allowed (newline-delimited).
# These are regex patterns auto-wrapped in `^ $`.
scopes: |
deps
auto
l10n
# Configure that a scope must always be provided.
requireScope: false
# If the PR contains one of these newline-delimited labels, the
# validation is skipped. If you want to rerun the validation when
# labels change, you might want to use the `labeled` and `unlabeled`
# event triggers in your workflow.
ignoreLabels: |
bot
ignore-semantic-pull-request

View File

@@ -6,6 +6,10 @@ on:
- mealie-next
jobs:
pull-request-lint:
name: "Lint PR"
uses: ./.github/workflows/pull-request-lint.yml
backend-tests:
name: "Backend Server Tests"
uses: ./.github/workflows/partial-backend.yml

View File

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

View File

@@ -18,9 +18,9 @@
<h3 align="center">Mealie</h3>
<p align="center">
A Place for All Your Recipes
A Place For All Your Recipes
<br />
<a href="https://nightly.mealie.io"><strong>Explore the docs »</strong></a>
<a href="https://docs.mealie.io/"><strong>Explore the docs »</strong></a>
<a href="https://github.com/mealie-recipes/mealie">
</a>
<br />
@@ -38,12 +38,20 @@
# About The Project
Mealie is a self hosted recipe manager and meal planner with a RestAPI backend and a reactive frontend application built in Vue for a pleasant user experience for the whole family. Easily add recipes into your database by providing the URL and Mealie will automatically import the relevant data, or add a family recipe with the UI editor. Mealie also provides an API for interactions from 3rd party applications.
Mealie is a self hosted recipe manager, meal planner and shopping list with a RestAPI backend and a reactive frontend built in Vue for a pleasant user experience for the whole family. Easily add recipes into your database by providing the URL and Mealie will automatically import the relevant data, or add a family recipe with the UI editor. Mealie also provides an API for interactions from 3rd party applications.
- [Remember to join the Discord](https://discord.gg/QuStdQGSGK)!
- [Documentation](https://nightly.mealie.io)
- [Documentation](https://docs.mealie.io/)
## Key Features
- Recipe imports: Create recipes, by **importing from a URL** or entering data manually
- Meal Planner: Use the **Meal Planner** to plan your what you'll cook for the next week
- Shopping List: Put the necessary ingredients on your **Shopping List**, organised into sections of your local supermarket
- Cookbooks: Group recipes into **Cookbooks** based on your own criteria
- Docker: Easy **Docker** deployment
- Localisation: **Translations** for 35+ languages
<!-- CONTRIBUTING -->
## Contributing
@@ -58,7 +66,7 @@ If you are not a coder, you can still contribute financially. Financial contribu
### Translations
Translations can be a great way for **non-coders** to contribute to project. We use [Crowdin](https://crowdin.com/project/mealie) to allow several contributors to work on translating Mealie. You can simply help by voting for your preferred translations, or even by completely translating Mealie into a new language.
Translations can be a great way for **non-coders** to contribute to the project. We use [Crowdin](https://crowdin.com/project/mealie) to allow several contributors to work on translating Mealie. You can simply help by voting for your preferred translations, or even by completely translating Mealie into a new language.
For more information, check out the translation page on the [contributor's guide](https://nightly.mealie.io/contributors/translating/).

View File

@@ -0,0 +1,52 @@
"""add group recipe actions
Revision ID: 7788478a0338
Revises: d7c6efd2de42
Create Date: 2024-04-07 01:05:20.816270
"""
import sqlalchemy as sa
import mealie.db.migration_types
from alembic import op
# revision identifiers, used by Alembic.
revision = "7788478a0338"
down_revision = "d7c6efd2de42"
branch_labels = None
depends_on = None
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.create_table(
"recipe_actions",
sa.Column("id", mealie.db.migration_types.GUID(), nullable=False),
sa.Column("group_id", mealie.db.migration_types.GUID(), nullable=False),
sa.Column("action_type", sa.String(), nullable=False),
sa.Column("title", sa.String(), nullable=False),
sa.Column("url", sa.String(), nullable=False),
sa.Column("created_at", sa.DateTime(), nullable=True),
sa.Column("update_at", sa.DateTime(), nullable=True),
sa.ForeignKeyConstraint(
["group_id"],
["groups.id"],
),
sa.PrimaryKeyConstraint("id"),
)
op.create_index(op.f("ix_recipe_actions_action_type"), "recipe_actions", ["action_type"], unique=False)
op.create_index(op.f("ix_recipe_actions_created_at"), "recipe_actions", ["created_at"], unique=False)
op.create_index(op.f("ix_recipe_actions_group_id"), "recipe_actions", ["group_id"], unique=False)
op.create_index(op.f("ix_recipe_actions_title"), "recipe_actions", ["title"], unique=False)
# ### end Alembic commands ###
def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.drop_index(op.f("ix_recipe_actions_title"), table_name="recipe_actions")
op.drop_index(op.f("ix_recipe_actions_group_id"), table_name="recipe_actions")
op.drop_index(op.f("ix_recipe_actions_created_at"), table_name="recipe_actions")
op.drop_index(op.f("ix_recipe_actions_action_type"), table_name="recipe_actions")
op.drop_table("recipe_actions")
# ### end Alembic commands ###

View File

@@ -1,4 +1,8 @@
preserve_hierarchy: false
pull_request_title: "chore(l10n): New Crowdin updates"
pull_request_labels: [
"l10n"
]
files:
- source: /frontend/lang/messages/en-US.json
translation: /frontend/lang/messages/%locale%.json

View File

@@ -35,18 +35,24 @@ LOCALE_DATA: dict[str, LocaleData] = {
"es-ES": LocaleData(name="Español (Spanish)"),
"fi-FI": LocaleData(name="Suomi (Finnish)"),
"fr-FR": LocaleData(name="Français (French)"),
"gl-ES": LocaleData(name="Galego (Galician)"),
"he-IL": LocaleData(name="עברית (Hebrew)", dir="rtl"),
"hr-HR": LocaleData(name="Hrvatski (Croatian)"),
"hu-HU": LocaleData(name="Magyar (Hungarian)"),
"is-IS": LocaleData(name="Íslenska (Icelandic)"),
"it-IT": LocaleData(name="Italiano (Italian)"),
"ja-JP": LocaleData(name="日本語 (Japanese)"),
"ko-KR": LocaleData(name="한국어 (Korean)"),
"no-NO": LocaleData(name="Norsk (Norwegian)"),
"lt-LT": LocaleData(name="Lietuvių (Lithuanian)"),
"lv-LV": LocaleData(name="Latviešu (Latvian)"),
"nl-NL": LocaleData(name="Nederlands (Dutch)"),
"no-NO": LocaleData(name="Norsk (Norwegian)"),
"pl-PL": LocaleData(name="Polski (Polish)"),
"pt-BR": LocaleData(name="Português do Brasil (Brazilian Portuguese)"),
"pt-PT": LocaleData(name="Português (Portuguese)"),
"ro-RO": LocaleData(name="Română (Romanian)"),
"ru-RU": LocaleData(name="Pусский (Russian)"),
"sl-SI": LocaleData(name="Slovenščina (Slovenian)"),
"sr-SP": LocaleData(name="српски (Serbian)"),
"sv-SE": LocaleData(name="Svenska (Swedish)"),
"tr-TR": LocaleData(name="Türkçe (Turkish)"),

View File

@@ -2,11 +2,11 @@
[Please Join the Discord](https://discord.gg/QuStdQGSGK). We are building a community of developers working on the project.
## We Develop with Github
We use github to host code, to track issues and feature requests, as well as accept pull requests.
## We Develop with GitHub
We use GitHub to host code, to track issues and feature requests, as well as accept pull requests.
## We Use [Github Flow](https://docs.github.com/en/get-started/using-github/github-flow), So All Code Changes Happen Through Pull Requests
Pull requests are the best way to propose changes to the codebase (we use [Github Flow](https://docs.github.com/en/get-started/using-github/github-flow)). We actively welcome your pull requests:
## We Use [GitHub Flow](https://docs.github.com/en/get-started/using-github/github-flow), So All Code Changes Happen Through Pull Requests
Pull requests are the best way to propose changes to the codebase (we use [GitHub Flow](https://docs.github.com/en/get-started/using-github/github-flow)). We actively welcome your pull requests:
1. Fork the repo and create your branch from `mealie-next`.
2. Checkout the Discord, the PRs page, or the Projects page to get an idea of what's already being worked on.
@@ -14,13 +14,13 @@ Pull requests are the best way to propose changes to the codebase (we use [Githu
4. Once you've got an idea of what changes you want to make, create a draft PR as soon as you can to let us know what you're working on and how we can help!
5. If you've changed APIs, update the documentation.
6. Run tests, including `task py:check`.
6. Issue that pull request! First make a draft PR, make sure that the automated github tests all pass, then mark as ready for review.
7. Be sure to add release notes to the pull request.
7. Issue that pull request! First make a draft PR, make sure that the automated GitHub tests all pass, then mark as ready for review. We follow Conventional Commits syntax; please title your PR as described in the PR template.
8. Be sure to add release notes to the pull request.
## Any contributions you make will be under the AGPL Software License
In short, when you submit code changes, your submissions are understood to be under the same [AGPL License](https://choosealicense.com/licenses/agpl-3.0/) that covers the project. Feel free to contact the maintainers if that's a concern.
## Report bugs using Github's [issues](https://github.com/mealie-recipes/mealie/issues)
## Report bugs using GitHub's [issues](https://github.com/mealie-recipes/mealie/issues)
We use GitHub issues to track public bugs. Report a bug by [opening a new issue](https://github.com/mealie-recipes/mealie/issues/new); it's that easy!
## Write bug reports with detail, background, and sample code

View File

@@ -20,7 +20,7 @@ Before you can start using OIDC Authentication, you must first configure a new c
1. Create a new client application
- The Provider type should be OIDC or OAuth2
- The Grant type should be `Authorization Code`
- The Application type should be `Web`
- The Application type should be `Web` or `SPA`
- The Client type should be `public`
2. Configure redirect URI
@@ -42,7 +42,9 @@ Before you can start using OIDC Authentication, you must first configure a new c
4. Configure allowed scopes
The scopes required are `openid profile email groups`
The scopes required are `openid profile email`
If you plan to use the [groups](#groups) to configure access within Mealie, you will need to also add the scope defined by the `OIDC_GROUPS_CLAIM` environment variable. The default claim is `groups`
## Mealie Setup
@@ -50,7 +52,7 @@ Take the client id and your discovery URL and update your environment variables
### Groups
There are two (optional) [environment variables](../installation/backend-config.md#openid-connect-oidc) that can control which of the users in your IdP can log in to Mealie and what permissions they will have. The groups should be **defined in your IdP** and be returned in the `groups` claim.
There are two (optional) [environment variables](../installation/backend-config.md#openid-connect-oidc) that can control which of the users in your IdP can log in to Mealie and what permissions they will have. Keep in mind that these groups **do not necessarily correspond to groups in Mealie**. The groups claim is configurable via the `OIDC_GROUPS_CLAIM` environment variable. The groups should be **defined in your IdP** and be returned in the configured claim value.
`OIDC_USER_GROUP`: Users must be a part of this group (within your IdP) to be able to log in.

View File

@@ -26,7 +26,7 @@ Do the following for each recipe you want to intelligently handle ingredients.
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`.
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.

View File

@@ -14,10 +14,14 @@ Mealie offers two main ways to create recipes. You can use the integrated recipe
Mealie supports importing recipes from a few other sources besides websites. Currently the following sources are supported:
- Mealie Pre v1
- Tandoor
- Nextcloud Cookbooks
- Paprika
- Chowdown
- Plan to Eat
- Recipe Keeper
- Copy Me That
- My Recipe Box
You can access these options on your installation at the `/group/migrations` page on your installation. If you'd like to see another source added, feel free to request so on Github.
@@ -81,12 +85,63 @@ 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.
!!! warning
At this time there isn't a tight integration between meal-plans and shopping lists; however, it's something we have planned for the future.
[Shopping List Demo](https://demo.mealie.io/shopping-lists){ .md-button .md-button--primary }
## Integrations
Mealie is designed to integrate with many different external services. There are several ways you can integrate with Mealie to achieve custom IoT automations, data synchronization, and anything else you can think of. [You can work directly with Mealie through the API](./api-usage.md), or leverage other services to make seamless integrations.
### 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
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:
- `form` and `forms`
- `json` and `jsons`
- `xml` and `xmls`
[Notifiers Demo](https://demo.mealie.io/group/notifiers){ .md-button .md-button--primary }
### Webhooks
Unlike notifiers, which are event-driven notifications, Webhooks allow you to send scheduled notifications to your desired endpoint. Webhooks are sent on the day of a scheduled mealplan, at the specified time, and contain the mealplan data in the request.
[Webhooks Demo](https://demo.mealie.io/group/webhooks){ .md-button .md-button--primary }
### Recipe Actions
Recipe Actions are custom actions you can add to all recipes in Mealie. This is a great way to add custom integrations that are fired manually. There are two types of recipe actions:
1. link - these actions will take you directly to an external page
2. post - these actions will send a `POST` request to the specified URL, with the recipe JSON in the request body. These can be used, for instance, to manually trigger a webhook in Home Assistant
Recipe Action URLs can include merge fields to inject the current recipe's data. For instance, you can use the following URL to include a Google search with the recipe's slug:
```
https://www.google.com/search?q=${slug}
```
When the action is clicked on, the `${slug}` field is replaced with the recipe's slug value. So, for example, it might take you to this URL on one of your recipes:
```
https://www.google.com/search?q=pasta-fagioli
```
A common use case for "link" recipe actions is to integrate with the Bring! shopping list. Simply add a Recipe Action with the following URL:
```
https://api.getbring.com/rest/bringrecipes/deeplink?url=${url}&source=web
```
Below is a list of all valid merge fields:
- ${id}
- ${slug}
- ${url}
To add, modify, or delete Recipe Actions, visit the Data Management page (more on that below).
## Data Management

View File

@@ -16,7 +16,8 @@
| TZ | UTC | Must be set to get correct date/time on the server |
| ALLOW_SIGNUP<super>\*</super> | false | Allow user sign-up without token |
| LOG_CONFIG_OVERRIDE | | Override the config for logging with a custom path |
| LOG_LEVEL | info | logging level configured |
| LOG_LEVEL | info | Logging level (e.g. critical, error, warning, info, debug, trace) |
| DAILY_SCHEDULE_TIME | 23:45 | The time of day to run the daily tasks. |
<super>\*</super> Starting in v1.4.0 this was changed to default to `false` as apart of a security review of the application.
@@ -98,7 +99,23 @@ For usage, see [Usage - OpenID Connect](../authentication/oidc.md)
| 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 | Optional: 'email', 'preferred_username' |
| OIDC_USER_CLAIM | email | This is the claim which Mealie will use to look up an existing user by (e.g. "email", "preferred_username") |
| OIDC_GROUPS_CLAIM | groups | Optional if not using `OIDC_USER_GROUP` or `OIDC_ADMIN_GROUP`. This is the claim Mealie will request from your IdP and will use to compare to `OIDC_USER_GROUP` or `OIDC_ADMIN_GROUP` to allow the user to log in to Mealie or is set as an admin. **Your IdP must be configured to grant this claim**|
| OIDC_TLS_CACERTFILE | None | File path to Certificate Authority used to verify server certificate (e.g. `/path/to/ca.crt`) |
### OpenAI
:octicons-tag-24: v1.7.0
Mealie supports various integrations using OpenAI. To enable OpenAI, [you must provide your OpenAI API key](https://platform.openai.com/api-keys). You can tweak how OpenAI is used using these backend settings. Please note that while OpenAI usage is optimized to reduce API costs, you're unlikely to be able to use OpenAI features with the free tier limits.
| 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_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 |
### Themeing
@@ -121,6 +138,28 @@ Setting the following environmental variables will change the theme of the front
| THEME_DARK_WARNING | #FF6D00 | Dark Theme Config Variable |
| THEME_DARK_ERROR | #EF5350 | Dark Theme Config Variable |
### 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.
```
services:
mealie:
...
environment:
...
POSTGRES_USER: postgres
secrets:
- POSTGRES_PASSWORD
secrets:
POSTGRES_PASSWORD:
file: postgrespassword.txt
```
[workers_per_core]: https://github.com/tiangolo/uvicorn-gunicorn-docker/blob/2daa3e3873c837d5781feb4ff6a40a89f791f81b/README.md#workers_per_core
[max_workers]: https://github.com/tiangolo/uvicorn-gunicorn-docker/blob/2daa3e3873c837d5781feb4ff6a40a89f791f81b/README.md#max_workers
[web_concurrency]: https://github.com/tiangolo/uvicorn-gunicorn-docker/blob/2daa3e3873c837d5781feb4ff6a40a89f791f81b/README.md#web_concurrency

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

View File

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

File diff suppressed because one or more lines are too long

View File

@@ -70,6 +70,7 @@
print: true,
printPreferences: true,
share: loggedIn,
recipeActions: true,
}"
@print="$emit('print')"
/>

View File

@@ -105,6 +105,26 @@
</v-list-item-icon>
<v-list-item-title>{{ item.title }}</v-list-item-title>
</v-list-item>
<div v-if="useItems.recipeActions && recipeActions && recipeActions.length">
<v-divider />
<v-list-group @click.stop>
<template #activator>
<v-list-item-title>{{ $tc("recipe.recipe-actions") }}</v-list-item-title>
</template>
<v-list dense class="ma-0 pa-0">
<v-list-item
v-for="(action, index) in recipeActions"
:key="index"
class="pl-6"
@click="executeRecipeAction(action)"
>
<v-list-item-title>
{{ action.title }}
</v-list-item-title>
</v-list-item>
</v-list>
</v-list-group>
</div>
</v-list>
</v-menu>
</div>
@@ -117,11 +137,12 @@ import RecipeDialogPrintPreferences from "./RecipeDialogPrintPreferences.vue";
import RecipeDialogShare from "./RecipeDialogShare.vue";
import { useLoggedInState } from "~/composables/use-logged-in-state";
import { useUserApi } from "~/composables/api";
import { useGroupRecipeActions } from "~/composables/use-group-recipe-actions";
import { useGroupSelf } from "~/composables/use-groups";
import { alert } from "~/composables/use-toast";
import { usePlanTypeOptions } from "~/composables/use-group-mealplan";
import { Recipe } from "~/lib/api/types/recipe";
import { ShoppingListSummary } from "~/lib/api/types/group";
import { GroupRecipeActionOut, ShoppingListSummary } from "~/lib/api/types/group";
import { PlanEntryType } from "~/lib/api/types/meal-plan";
import { useAxiosDownloader } from "~/composables/api/use-axios-download";
@@ -134,6 +155,7 @@ export interface ContextMenuIncludes {
print: boolean;
printPreferences: boolean;
share: boolean;
recipeActions: boolean;
}
export interface ContextMenuItem {
@@ -163,6 +185,7 @@ export default defineComponent({
print: true,
printPreferences: true,
share: true,
recipeActions: true,
}),
},
// Append items are added at the end of the useItems list
@@ -347,6 +370,19 @@ export default defineComponent({
}
const router = useRouter();
const groupRecipeActionsStore = useGroupRecipeActions();
async function executeRecipeAction(action: GroupRecipeActionOut) {
const response = await groupRecipeActionsStore.execute(action, props.recipe);
if (action.actionType === "post") {
if (!response || (response.status >= 200 && response.status < 300)) {
alert.success(i18n.tc("events.message-sent"));
} else {
alert.error(i18n.tc("events.something-went-wrong"));
}
}
}
async function deleteRecipe() {
await api.recipes.deleteOne(props.slug);
@@ -437,6 +473,8 @@ export default defineComponent({
...toRefs(state),
recipeRef,
recipeRefWithScale,
executeRecipeAction,
recipeActions: groupRecipeActionsStore.recipeActions,
shoppingLists,
duplicateRecipe,
contextMenuEventHandler,

View File

@@ -143,7 +143,7 @@ import { watchDebounced } from "@vueuse/shared";
import SearchFilter from "~/components/Domain/SearchFilter.vue";
import { useLoggedInState } from "~/composables/use-logged-in-state";
import { useCategoryStore, useFoodStore, useTagStore, useToolStore } from "~/composables/store";
import { useUserSortPreferences } from "~/composables/use-users/preferences";
import { useUserSearchQuerySession } from "~/composables/use-users/preferences";
import RecipeCardSection from "~/components/Domain/Recipe/RecipeCardSection.vue";
import { IngredientFood, RecipeCategory, RecipeTag, RecipeTool } from "~/lib/api/types/recipe";
import { NoUndefinedField } from "~/lib/api/types/non-generated";
@@ -177,7 +177,7 @@ export default defineComponent({
const route = useRoute();
const groupSlug = computed(() => route.value.params.groupSlug || $auth.user?.groupSlug || "");
const preferences = useUserSortPreferences();
const searchQuerySession = useUserSearchQuerySession();
const { recipes, appendRecipes, assignSorted, removeRecipe, replaceRecipes } = useLazyRecipes(isOwnGroup.value ? null : groupSlug.value);
const categories = isOwnGroup.value ? useCategoryStore() : usePublicCategoryStore(groupSlug.value);
@@ -194,7 +194,9 @@ export default defineComponent({
function calcPassedQuery(): RecipeSearchQuery {
return {
search: state.value.search,
// the search clear button sets search to null, which still renders the query param for a moment,
// whereas an empty string is not rendered
search: state.value.search ? state.value.search : "",
categories: toIDArray(selectedCategories.value),
foods: toIDArray(selectedFoods.value),
tags: toIDArray(selectedTags.value),
@@ -217,14 +219,24 @@ export default defineComponent({
};
})
const queryDefaults = {
search: "",
orderBy: "created_at",
orderDirection: "desc" as "asc" | "desc",
requireAllCategories: false,
requireAllTags: false,
requireAllTools: false,
requireAllFoods: false,
}
function reset() {
state.value.search = "";
state.value.orderBy = "created_at";
state.value.orderDirection = "desc";
state.value.requireAllCategories = false;
state.value.requireAllTags = false;
state.value.requireAllTools = false;
state.value.requireAllFoods = false;
state.value.search = queryDefaults.search;
state.value.orderBy = queryDefaults.orderBy;
state.value.orderDirection = queryDefaults.orderDirection;
state.value.requireAllCategories = queryDefaults.requireAllCategories;
state.value.requireAllTags = queryDefaults.requireAllTags;
state.value.requireAllTools = queryDefaults.requireAllTools;
state.value.requireAllFoods = queryDefaults.requireAllFoods;
selectedCategories.value = [];
selectedFoods.value = [];
selectedTags.value = [];
@@ -262,12 +274,12 @@ export default defineComponent({
foods: passedQuery.value.foods,
tags: passedQuery.value.tags,
tools: passedQuery.value.tools,
// Only add the query param if it's or not default
// Only add the query param if it's not the default value
...{
auto: state.value.auto ? undefined : "false",
search: passedQuery.value.search === "" ? undefined : passedQuery.value.search,
orderBy: passedQuery.value.orderBy === "created_at" ? undefined : passedQuery.value.orderBy,
orderDirection: passedQuery.value.orderDirection === "desc" ? undefined : passedQuery.value.orderDirection,
search: passedQuery.value.search === queryDefaults.search ? undefined : passedQuery.value.search,
orderBy: passedQuery.value.orderBy === queryDefaults.orderBy ? undefined : passedQuery.value.orderBy,
orderDirection: passedQuery.value.orderDirection === queryDefaults.orderDirection ? undefined : passedQuery.value.orderDirection,
requireAllCategories: passedQuery.value.requireAllCategories ? "true" : undefined,
requireAllTags: passedQuery.value.requireAllTags ? "true" : undefined,
requireAllTools: passedQuery.value.requireAllTools ? "true" : undefined,
@@ -275,7 +287,7 @@ export default defineComponent({
},
}
await router.push({ query });
preferences.value.searchQuery = JSON.stringify(query);
searchQuerySession.value.recipe = JSON.stringify(query);
}
function waitUntilAndExecute(
@@ -360,25 +372,55 @@ export default defineComponent({
async function hydrateSearch() {
const query = router.currentRoute.query;
if (query.auto) {
if (query.auto?.length) {
state.value.auto = query.auto === "true";
}
if (query.search) {
if (query.search?.length) {
state.value.search = query.search as string;
} else {
state.value.search = queryDefaults.search;
}
if (query.orderBy) {
if (query.orderBy?.length) {
state.value.orderBy = query.orderBy as string;
} else {
state.value.orderBy = queryDefaults.orderBy;
}
if (query.orderDirection) {
if (query.orderDirection?.length) {
state.value.orderDirection = query.orderDirection as "asc" | "desc";
} else {
state.value.orderDirection = queryDefaults.orderDirection;
}
if (query.requireAllCategories?.length) {
state.value.requireAllCategories = query.requireAllCategories === "true";
} else {
state.value.requireAllCategories = queryDefaults.requireAllCategories;
}
if (query.requireAllTags?.length) {
state.value.requireAllTags = query.requireAllTags === "true";
} else {
state.value.requireAllTags = queryDefaults.requireAllTags;
}
if (query.requireAllTools?.length) {
state.value.requireAllTools = query.requireAllTools === "true";
} else {
state.value.requireAllTools = queryDefaults.requireAllTools;
}
if (query.requireAllFoods?.length) {
state.value.requireAllFoods = query.requireAllFoods === "true";
} else {
state.value.requireAllFoods = queryDefaults.requireAllFoods;
}
const promises: Promise<void>[] = [];
if (query.categories) {
if (query.categories?.length) {
promises.push(
waitUntilAndExecute(
() => categories.items.value.length > 0,
@@ -395,7 +437,35 @@ export default defineComponent({
selectedCategories.value = [];
}
if (query.foods) {
if (query.tags?.length) {
promises.push(
waitUntilAndExecute(
() => tags.items.value.length > 0,
() => {
const result = tags.items.value.filter((item) => (query.tags as string[]).includes(item.id as string));
selectedTags.value = result as NoUndefinedField<RecipeTag>[];
}
)
);
} else {
selectedTags.value = [];
}
if (query.tools?.length) {
promises.push(
waitUntilAndExecute(
() => tools.items.value.length > 0,
() => {
const result = tools.items.value.filter((item) => (query.tools as string[]).includes(item.id));
selectedTools.value = result as NoUndefinedField<RecipeTool>[];
}
)
);
} else {
selectedTools.value = [];
}
if (query.foods?.length) {
promises.push(
waitUntilAndExecute(
() => {
@@ -414,45 +484,17 @@ export default defineComponent({
selectedFoods.value = [];
}
if (query.tags) {
promises.push(
waitUntilAndExecute(
() => tags.items.value.length > 0,
() => {
const result = tags.items.value.filter((item) => (query.tags as string[]).includes(item.id as string));
selectedTags.value = result as NoUndefinedField<RecipeTag>[];
}
)
);
} else {
selectedTags.value = [];
}
if (query.tools) {
promises.push(
waitUntilAndExecute(
() => tools.items.value.length > 0,
() => {
const result = tools.items.value.filter((item) => (query.tools as string[]).includes(item.id));
selectedTools.value = result as NoUndefinedField<RecipeTool>[];
}
)
);
} else {
selectedTools.value = [];
}
await Promise.allSettled(promises);
};
onMounted(async () => {
// restore the user's last search query
if (preferences.value.searchQuery && !(Object.keys(route.value.query).length > 0)) {
if (searchQuerySession.value.recipe && !(Object.keys(route.value.query).length > 0)) {
try {
const query = JSON.parse(preferences.value.searchQuery);
const query = JSON.parse(searchQuerySession.value.recipe);
await router.replace({ query });
} catch (error) {
preferences.value.searchQuery = "";
searchQuerySession.value.recipe = "";
router.replace({ query: {} });
}
}

View File

@@ -29,6 +29,7 @@
</v-col>
<v-col v-if="!disableAmount" sm="12" md="3" cols="12">
<v-autocomplete
ref="unitAutocomplete"
v-model="value.unit"
:search-input.sync="unitSearch"
auto-select-first
@@ -57,6 +58,7 @@
<!-- Foods Input -->
<v-col v-if="!disableAmount" m="12" md="3" cols="12" class="">
<v-autocomplete
ref="foodAutocomplete"
v-model="value.food"
:search-input.sync="foodSearch"
auto-select-first
@@ -200,11 +202,13 @@ export default defineComponent({
const foodStore = useFoodStore();
const foodData = useFoodData();
const foodSearch = ref("");
const foodAutocomplete = ref<HTMLInputElement>();
async function createAssignFood() {
foodData.data.name = foodSearch.value;
props.value.food = await foodStore.actions.createOne(foodData.data) || undefined;
foodData.reset();
foodAutocomplete.value?.blur();
}
// ==================================================
@@ -212,11 +216,13 @@ export default defineComponent({
const unitStore = useUnitStore();
const unitsData = useUnitData();
const unitSearch = ref("");
const unitAutocomplete = ref<HTMLInputElement>();
async function createAssignUnit() {
unitsData.data.name = unitSearch.value;
props.value.unit = await unitStore.actions.createOne(unitsData.data) || undefined;
unitsData.reset();
unitAutocomplete.value?.blur();
}
const state = reactive({
@@ -269,7 +275,9 @@ export default defineComponent({
contextMenuOptions,
handleUnitEnter,
handleFoodEnter,
foodAutocomplete,
createAssignFood,
unitAutocomplete,
createAssignUnit,
foods: foodStore.foods,
foodSearch,

View File

@@ -1,12 +1,12 @@
<template>
<div @click.prevent>
<!-- User Rating -->
<v-hover v-slot="{ hover }">
<v-rating
:value="rating.ratingValue"
:half-increments="(!hover) || (!isOwnGroup)"
:readonly="!isOwnGroup"
:color="hover ? attrs.hoverColor : attrs.color"
:background-color="attrs.backgroundColor"
v-if="isOwnGroup && (userRating || hover || !ratingsLoaded)"
:value="userRating"
color="secondary"
background-color="secondary lighten-3"
length="5"
:dense="small ? true : undefined"
:size="small ? 15 : undefined"
@@ -15,12 +15,25 @@
@input="updateRating"
@click="updateRating"
/>
<!-- Group Rating -->
<v-rating
v-else
:value="groupRating"
:half-increments="true"
:readonly="true"
color="grey darken-1"
background-color="secondary lighten-3"
length="5"
:dense="small ? true : undefined"
:size="small ? 15 : undefined"
hover
/>
</v-hover>
</div>
</template>
<script lang="ts">
import { computed, defineComponent, ref, useContext, watch } from "@nuxtjs/composition-api";
import { computed, defineComponent, ref, watch } from "@nuxtjs/composition-api";
import { useLoggedInState } from "~/composables/use-logged-in-state";
import { useUserSelfRatings } from "~/composables/use-users";
export default defineComponent({
@@ -45,61 +58,29 @@ export default defineComponent({
type: Boolean,
default: false,
},
preferGroupRating: {
type: Boolean,
default: false,
},
},
setup(props, context) {
const { $auth } = useContext();
const { isOwnGroup } = useLoggedInState();
const { userRatings, setRating, ready: ratingsLoaded } = useUserSelfRatings();
const hideGroupRating = ref(false);
type Rating = {
ratingValue: number | undefined;
hasUserRating: boolean | undefined
};
// prefer user rating over group rating
const rating = computed<Rating>(() => {
if (!ratingsLoaded.value) {
return { ratingValue: undefined, hasUserRating: undefined };
}
if (!($auth.user?.id) || props.preferGroupRating) {
return { ratingValue: props.value, hasUserRating: false };
}
const userRating = userRatings.value.find((r) => r.recipeId === props.recipeId);
return {
ratingValue: userRating?.rating || (hideGroupRating.value ? 0 : props.value),
hasUserRating: !!userRating?.rating
};
const userRating = computed(() => {
return userRatings.value.find((r) => r.recipeId === props.recipeId)?.rating;
});
// if a user unsets their rating, we don't want to fall back to the group rating since it's out of sync
const hideGroupRating = ref(!!userRating.value);
watch(
() => rating.value.hasUserRating,
() => userRating.value,
() => {
if (rating.value.hasUserRating && !props.preferGroupRating) {
if (userRating.value) {
hideGroupRating.value = true;
}
},
)
const attrs = computed(() => {
return isOwnGroup.value ? {
// Logged-in user
color: rating.value.hasUserRating ? "secondary" : "grey darken-1",
hoverColor: "secondary",
backgroundColor: "secondary lighten-3",
} : {
// Anonymous user
color: "secondary",
hoverColor: "secondary",
backgroundColor: "secondary lighten-3",
};
})
const groupRating = computed(() => {
return hideGroupRating.value ? 0 : props.value;
});
function updateRating(val: number | null) {
if (!isOwnGroup.value) {
@@ -113,9 +94,10 @@ export default defineComponent({
}
return {
attrs,
isOwnGroup,
rating,
ratingsLoaded,
groupRating,
userRating,
updateRating,
};
},

View File

@@ -8,8 +8,11 @@
<script lang="ts">
import { computed, defineComponent } from "@nuxtjs/composition-api";
// @ts-ignore missing color types
import Color from "@sphinxxxx/color-conversion";
import { MultiPurposeLabelSummary } from "~/lib/api/types/recipe";
export default defineComponent({
props: {
label: {
@@ -34,19 +37,27 @@ export default defineComponent({
const ACCESSIBILITY_THRESHOLD = 0.179;
function pickTextColorBasedOnBgColorAdvanced(bgColor: string, lightColor: string, darkColor: string) {
const color = bgColor.charAt(0) === "#" ? bgColor.substring(1, 7) : bgColor;
const r = parseInt(color.substring(0, 2), 16); // hexToR
const g = parseInt(color.substring(2, 4), 16); // hexToG
const b = parseInt(color.substring(4, 6), 16); // hexToB
const uicolors = [r / 255, g / 255, b / 255];
const c = uicolors.map((col) => {
if (col <= 0.03928) {
return col / 12.92;
try {
const color = new Color(bgColor);
// if opacity is less than 0.3 always return dark color
if (color._rgba[3] < 0.3) {
return darkColor;
}
return Math.pow((col + 0.055) / 1.055, 2.4);
});
const L = 0.2126 * c[0] + 0.7152 * c[1] + 0.0722 * c[2];
return L > ACCESSIBILITY_THRESHOLD ? darkColor : lightColor;
const uicolors = [color._rgba[0] / 255, color._rgba[1] / 255, color._rgba[2] / 255];
const c = uicolors.map((col) => {
if (col <= 0.03928) {
return col / 12.92;
}
return Math.pow((col + 0.055) / 1.055, 2.4);
});
const L = 0.2126 * c[0] + 0.7152 * c[1] + 0.0722 * c[2];
return L > ACCESSIBILITY_THRESHOLD ? darkColor : lightColor;
} catch (error) {
console.warn(error);
return "black";
}
}
return {

View File

@@ -9,6 +9,7 @@
:item-id.sync="listItem.foodId"
:label="$t('shopping-list.food')"
:icon="$globals.icons.foods"
@create="createAssignFood"
/>
<InputLabelType
v-model="listItem.unit"
@@ -16,6 +17,7 @@
:item-id.sync="listItem.unitId"
:label="$t('general.units')"
:icon="$globals.icons.units"
@create="createAssignUnit"
/>
</div>
<div class="d-md-flex align-center" style="gap: 20px">
@@ -28,37 +30,49 @@
@keypress="handleNoteKeyPress"
></v-textarea>
</div>
<div class="d-flex align-end" style="gap: 20px">
<div>
<InputQuantity v-model="listItem.quantity" />
</div>
<div style="max-width: 300px" class="mt-3 mr-auto">
<InputLabelType
v-model="listItem.label"
:items="labels"
:item-id.sync="listItem.labelId"
:label="$t('shopping-list.label')"
/>
</div>
<div class="d-flex flex-wrap align-end" style="gap: 20px">
<div class="d-flex align-end">
<div>
<InputQuantity v-model="listItem.quantity" />
</div>
<div style="max-width: 300px" class="mt-3 mr-auto">
<InputLabelType
v-model="listItem.label"
:items="labels"
:item-id.sync="listItem.labelId"
:label="$t('shopping-list.label')"
/>
</div>
<v-menu
v-if="listItem.recipeReferences && listItem.recipeReferences.length > 0"
open-on-hover
offset-y
left
top
>
<template #activator="{ on, attrs }">
<v-icon class="mt-auto" icon v-bind="attrs" color="warning" v-on="on">
{{ $globals.icons.alert }}
</v-icon>
</template>
<v-card max-width="350px" class="left-warning-border">
<v-card-text>
{{ $t("shopping-list.linked-item-warning") }}
</v-card-text>
</v-card>
</v-menu>
<v-menu
v-if="listItem.recipeReferences && listItem.recipeReferences.length > 0"
open-on-hover
offset-y
left
top
>
<template #activator="{ on, attrs }">
<v-icon class="mt-auto" icon v-bind="attrs" color="warning" v-on="on">
{{ $globals.icons.alert }}
</v-icon>
</template>
<v-card max-width="350px" class="left-warning-border">
<v-card-text>
{{ $t("shopping-list.linked-item-warning") }}
</v-card-text>
</v-card>
</v-menu>
</div>
<BaseButton
v-if="listItem.labelId && listItem.food && listItem.labelId !== listItem.food.labelId"
small
color="info"
:icon="$globals.icons.tagArrowRight"
:text="$tc('shopping-list.save-label')"
class="mt-2 align-items-flex-start"
@click="assignLabelToFood"
/>
<v-spacer />
</div>
</v-card-text>
</v-card>
@@ -100,6 +114,7 @@ import { defineComponent, computed, watch } from "@nuxtjs/composition-api";
import { ShoppingListItemCreate, ShoppingListItemOut } from "~/lib/api/types/group";
import { MultiPurposeLabelOut } from "~/lib/api/types/labels";
import { IngredientFood, IngredientUnit } from "~/lib/api/types/recipe";
import { useFoodStore, useFoodData, useUnitStore, useUnitData } from "~/composables/store";
export default defineComponent({
props: {
@@ -121,6 +136,12 @@ export default defineComponent({
},
},
setup(props, context) {
const foodStore = useFoodStore();
const foodData = useFoodData();
const unitStore = useUnitStore();
const unitData = useUnitData();
const listItem = computed({
get: () => {
return props.value;
@@ -139,8 +160,47 @@ export default defineComponent({
}
);
async function createAssignFood(val: string) {
// keep UI reactive
listItem.value.food ? listItem.value.food.name = val : listItem.value.food = { name: val };
foodData.data.name = val;
const newFood = await foodStore.actions.createOne(foodData.data);
if (newFood) {
listItem.value.food = newFood;
listItem.value.foodId = newFood.id;
}
foodData.reset();
}
async function createAssignUnit(val: string) {
// keep UI reactive
listItem.value.unit ? listItem.value.unit.name = val : listItem.value.unit = { name: val };
unitData.data.name = val;
const newUnit = await unitStore.actions.createOne(unitData.data);
if (newUnit) {
listItem.value.unit = newUnit;
listItem.value.unitId = newUnit.id;
}
unitData.reset();
}
async function assignLabelToFood() {
if (!(listItem.value.food && listItem.value.foodId && listItem.value.labelId)) {
return;
}
listItem.value.food.labelId = listItem.value.labelId;
// @ts-ignore the food will have an id, even though TS says it might not
await foodStore.actions.updateOne(listItem.value.food);
}
return {
listItem,
createAssignFood,
createAssignUnit,
assignLabelToFood,
};
},
methods: {

View File

@@ -14,15 +14,15 @@
>
<v-icon v-if="!iconRight" left>
<slot name="icon">
{{ btnAttrs.icon }}
{{ icon || btnAttrs.icon }}
</slot>
</v-icon>
<slot name="default">
{{ btnAttrs.text }}
{{ text || btnAttrs.text }}
</slot>
<v-icon v-if="iconRight" right>
<slot name="icon">
{{ btnAttrs.icon }}
{{ icon || btnAttrs.icon }}
</slot>
</v-icon>
</v-btn>
@@ -103,6 +103,14 @@ export default defineComponent({
type: String,
default: null,
},
text: {
type: String,
default: null,
},
icon: {
type: String,
default: null,
},
iconRight: {
type: Boolean,
default: false,

View File

@@ -11,44 +11,50 @@
</v-icon>
</v-btn>
</template>
<!-- Model -->
<!-- Model -->
<v-list v-if="mode === MODES.model" dense>
<v-list-item-group v-model="itemGroup">
<template v-for="(item, index) in items">
<v-list-item :key="index" @click="setValue(item)">
<div v-if="!item.hide" :key="index">
<v-list-item @click="setValue(item)">
<v-list-item-icon v-if="item.icon">
<v-icon>{{ item.icon }}</v-icon>
</v-list-item-icon>
<v-list-item-title>{{ item.text }}</v-list-item-title>
</v-list-item>
<v-divider v-if="item.divider" :key="`divider-${index}`" class="my-1" ></v-divider>
</div>
</template>
</v-list-item-group>
</v-list>
<!-- Links -->
<v-list v-else-if="mode === MODES.link" dense>
<v-list-item-group v-model="itemGroup">
<template v-for="(item, index) in items">
<div v-if="!item.hide" :key="index">
<v-list-item :to="item.to">
<v-list-item-icon v-if="item.icon">
<v-icon>{{ item.icon }}</v-icon>
</v-list-item-icon>
<v-list-item-title>{{ item.text }}</v-list-item-title>
</v-list-item>
<v-divider v-if="item.divider" :key="`divider-${index}`" class="my-1" ></v-divider>
</div>
</template>
</v-list-item-group>
</v-list>
<!-- Event -->
<v-list v-else-if="mode === MODES.event" dense>
<template v-for="(item, index) in items">
<div v-if="!item.hide" :key="index">
<v-list-item @click="$emit(item.event)">
<v-list-item-icon v-if="item.icon">
<v-icon>{{ item.icon }}</v-icon>
</v-list-item-icon>
<v-list-item-title>{{ item.text }}</v-list-item-title>
</v-list-item>
<v-divider v-if="item.divider" :key="`divider-${index}`" class="my-1" ></v-divider>
</template>
</v-list-item-group>
</v-list>
<!-- Links -->
<v-list v-else-if="mode === MODES.link" dense>
<v-list-item-group v-model="itemGroup">
<template v-for="(item, index) in items">
<v-list-item :key="index" :to="item.to">
<v-list-item-icon v-if="item.icon">
<v-icon>{{ item.icon }}</v-icon>
</v-list-item-icon>
<v-list-item-title>{{ item.text }}</v-list-item-title>
</v-list-item>
<v-divider v-if="item.divider" :key="`divider-${index}`" class="my-1" ></v-divider>
</template>
</v-list-item-group>
</v-list>
<!-- Event -->
<v-list v-else-if="mode === MODES.event" dense>
<template v-for="(item, index) in items">
<v-list-item :key="index" @click="$emit(item.event)">
<v-list-item-icon v-if="item.icon">
<v-icon>{{ item.icon }}</v-icon>
</v-list-item-icon>
<v-list-item-title>{{ item.text }}</v-list-item-title>
</v-list-item>
<v-divider v-if="item.divider" :key="`divider-${index}`" class="my-1" ></v-divider>
</div>
</template>
</v-list>
</v-menu>
@@ -74,6 +80,7 @@ export interface MenuItem {
value?: string;
event?: string;
divider?: boolean;
hide?: boolean;
}
export default defineComponent({

View File

@@ -1,14 +1,27 @@
<template>
<v-autocomplete
ref="autocompleteRef"
v-model="itemVal"
v-bind="$attrs"
:search-input.sync="searchInput"
item-text="name"
return-object
:items="items"
:prepend-icon="icon || $globals.icons.tags"
auto-select-first
clearable
hide-details
/>
@keyup.enter="emitCreate"
>
<template v-if="$listeners.create" #no-data>
<div class="caption text-center pb-2">{{ $t("recipe.press-enter-to-create") }}</div>
</template>
<template v-if="$listeners.create" #append-item>
<div class="px-2">
<BaseButton block small @click="emitCreate"></BaseButton>
</div>
</template>
</v-autocomplete>
</template>
<script lang="ts">
@@ -31,7 +44,7 @@
* Both the ID and Item can be synced. The item can be synced using the v-model syntax and the itemId can be synced
* using the .sync syntax `item-id.sync="item.labelId"`
*/
import { defineComponent, computed } from "@nuxtjs/composition-api";
import { computed, defineComponent, ref } from "@nuxtjs/composition-api";
import { MultiPurposeLabelSummary } from "~/lib/api/types/labels";
import { IngredientFood, IngredientUnit } from "~/lib/api/types/recipe";
@@ -59,6 +72,8 @@ export default defineComponent({
},
},
setup(props, context) {
const autocompleteRef = ref<HTMLInputElement>();
const searchInput = ref("");
const itemIdVal = computed({
get: () => {
return props.itemId || undefined;
@@ -78,9 +93,20 @@ export default defineComponent({
},
});
function emitCreate() {
if (props.items.some(item => item.name === searchInput.value)) {
return;
}
context.emit("create", searchInput.value);
autocompleteRef.value?.blur();
}
return {
autocompleteRef,
itemVal,
itemIdVal,
searchInput,
emitCreate,
};
},
});

View File

@@ -34,6 +34,12 @@ describe(parseIngredientText.name, () => {
expect(parseIngredientText(ingredient, false, 1, true)).contain("1 <sup>1</sup>").and.to.contain("<sub>2</sub>");
});
test("ingredient text with fraction when unit is null", () => {
const ingredient = createRecipeIngredient({ quantity: 1.5, unit: undefined });
expect(parseIngredientText(ingredient, false, 1, true)).contain("1 <sup>1</sup>").and.to.contain("<sub>2</sub>");
});
test("ingredient text with fraction no formatting", () => {
const ingredient = createRecipeIngredient({ quantity: 1.5, unit: { fraction: true, id: "1", name: "cup" } });
const result = parseIngredientText(ingredient, false, 1, false);

View File

@@ -53,7 +53,9 @@ export function useParsedIngredientText(ingredient: RecipeIngredient, disableAmo
// casting to number is required as sometimes quantity is a string
if (quantity && Number(quantity) !== 0) {
if (unit?.fraction) {
if (unit && !unit.fraction) {
returnQty = (quantity * scale).toString();
} else {
const fraction = frac(quantity * scale, 10, true);
if (fraction[0] !== undefined && fraction[0] > 0) {
returnQty += fraction[0];
@@ -64,8 +66,6 @@ export function useParsedIngredientText(ingredient: RecipeIngredient, disableAmo
` <sup>${fraction[1]}</sup>&frasl;<sub>${fraction[2]}</sub>` :
` ${fraction[1]}/${fraction[2]}`;
}
} else {
returnQty = (quantity * scale).toString();
}
}

View File

@@ -10,7 +10,7 @@ const storeLoading = ref(false);
/**
* useFoodData returns a template reactive object
* for managing the creation of units. It also provides a
* for managing the creation of foods. It also provides a
* function to reset the data back to the initial state.
*/
export const useFoodData = function () {

View File

@@ -0,0 +1,98 @@
import { computed, reactive, ref } from "@nuxtjs/composition-api";
import { useStoreActions } from "./partials/use-actions-factory";
import { useUserApi } from "~/composables/api";
import { GroupRecipeActionOut, RecipeActionType } from "~/lib/api/types/group";
import { Recipe } from "~/lib/api/types/recipe";
const groupRecipeActions = ref<GroupRecipeActionOut[] | null>(null);
const loading = ref(false);
export function useGroupRecipeActionData() {
const data = reactive({
id: "",
actionType: "link" as RecipeActionType,
title: "",
url: "",
});
function reset() {
data.id = "";
data.actionType = "link";
data.title = "";
data.url = "";
}
return {
data,
reset,
};
}
export const useGroupRecipeActions = function (
orderBy: string | null = "title",
orderDirection: string | null = "asc",
) {
const api = useUserApi();
async function refreshGroupRecipeActions() {
loading.value = true;
const { data } = await api.groupRecipeActions.getAll(1, -1, { orderBy, orderDirection });
groupRecipeActions.value = data?.items || null;
loading.value = false;
}
const recipeActions = computed<GroupRecipeActionOut[] | null>(() => {
return groupRecipeActions.value;
});
function parseRecipeActionUrl(url: string, recipe: Recipe): string {
/* eslint-disable no-template-curly-in-string */
return url
.replace("${url}", window.location.href)
.replace("${id}", recipe.id || "")
.replace("${slug}", recipe.slug || "")
/* eslint-enable no-template-curly-in-string */
};
async function execute(action: GroupRecipeActionOut, recipe: Recipe): Promise<void | Response> {
const url = parseRecipeActionUrl(action.url, recipe);
switch (action.actionType) {
case "link":
window.open(url, "_blank")?.focus();
break;
case "post":
return await fetch(url, {
method: "POST",
headers: {
// The "text/plain" content type header is used here to skip the CORS preflight request,
// since it may fail. This is fine, since we don't care about the response, we just want
// the request to get sent.
"Content-Type": "text/plain",
},
body: JSON.stringify(recipe),
}).catch((error) => {
console.error(error);
});
default:
break;
}
};
if (!groupRecipeActions.value && !loading.value) {
refreshGroupRecipeActions();
};
const actions = {
...useStoreActions<GroupRecipeActionOut>(api.groupRecipeActions, groupRecipeActions, loading),
flushStore() {
groupRecipeActions.value = [];
}
}
return {
actions,
execute,
recipeActions,
};
};

View File

@@ -1,6 +1,6 @@
import { Ref, useContext } from "@nuxtjs/composition-api";
import { useLocalStorage } from "@vueuse/core";
import { TimelineEventType } from "~/lib/api/types/recipe";
import { useLocalStorage, useSessionStorage } from "@vueuse/core";
import { RegisteredParser, TimelineEventType } from "~/lib/api/types/recipe";
export interface UserPrintPreferences {
imagePosition: string;
@@ -8,19 +8,26 @@ export interface UserPrintPreferences {
showNotes: boolean;
}
export interface UserSearchQuery {
recipe: string;
}
export enum ImagePosition {
hidden = "hidden",
left = "left",
right = "right",
}
export interface UserMealPlanPreferences {
numberOfDays: number;
}
export interface UserRecipePreferences {
orderBy: string;
orderDirection: string;
filterNull: boolean;
sortIcon: string;
useMobileCards: boolean;
searchQuery: string;
}
export interface UserShoppingListPreferences {
@@ -33,6 +40,24 @@ export interface UserTimelinePreferences {
types: TimelineEventType[];
}
export interface UserParsingPreferences {
parser: RegisteredParser;
}
export function useUserMealPlanPreferences(): Ref<UserMealPlanPreferences> {
const fromStorage = useLocalStorage(
"meal-planner-preferences",
{
numberOfDays: 7,
},
{ mergeDefaults: true }
// we cast to a Ref because by default it will return an optional type ref
// but since we pass defaults we know all properties are set.
) as unknown as Ref<UserMealPlanPreferences>;
return fromStorage;
}
export function useUserPrintPreferences(): Ref<UserPrintPreferences> {
const fromStorage = useLocalStorage(
"recipe-print-preferences",
@@ -60,7 +85,6 @@ export function useUserSortPreferences(): Ref<UserRecipePreferences> {
filterNull: false,
sortIcon: $globals.icons.sortAlphabeticalAscending,
useMobileCards: false,
searchQuery: "",
},
{ mergeDefaults: true }
// we cast to a Ref because by default it will return an optional type ref
@@ -70,6 +94,20 @@ export function useUserSortPreferences(): Ref<UserRecipePreferences> {
return fromStorage;
}
export function useUserSearchQuerySession(): Ref<UserSearchQuery> {
const fromStorage = useSessionStorage(
"search-query",
{
recipe: "",
},
{ mergeDefaults: true }
// we cast to a Ref because by default it will return an optional type ref
// but since we pass defaults we know all properties are set.
) as unknown as Ref<UserSearchQuery>;
return fromStorage;
}
export function useShoppingListPreferences(): Ref<UserShoppingListPreferences> {
const fromStorage = useLocalStorage(
@@ -100,3 +138,17 @@ export function useTimelinePreferences(): Ref<UserTimelinePreferences> {
return fromStorage;
}
export function useParsingPreferences(): Ref<UserParsingPreferences> {
const fromStorage = useLocalStorage(
"parsing-preferences",
{
parser: "nlp",
},
{ mergeDefaults: true }
// we cast to a Ref because by default it will return an optional type ref
// but since we pass defaults we know all properties are set.
) as unknown as Ref<UserParsingPreferences>;
return fromStorage;
}

View File

@@ -0,0 +1,21 @@
{
"short": {
"month": "short",
"day": "numeric",
"weekday": "long"
},
"medium": {
"month": "long",
"day": "numeric",
"weekday": "long",
"year": "numeric"
},
"long": {
"year": "numeric",
"month": "long",
"day": "numeric",
"weekday": "long",
"hour": "numeric",
"minute": "numeric"
}
}

View File

@@ -0,0 +1,21 @@
{
"short": {
"month": "short",
"day": "numeric",
"weekday": "long"
},
"medium": {
"month": "long",
"day": "numeric",
"weekday": "long",
"year": "numeric"
},
"long": {
"year": "numeric",
"month": "long",
"day": "numeric",
"weekday": "long",
"hour": "numeric",
"minute": "numeric"
}
}

View File

@@ -0,0 +1,21 @@
{
"short": {
"month": "short",
"day": "numeric",
"weekday": "long"
},
"medium": {
"month": "long",
"day": "numeric",
"weekday": "long",
"year": "numeric"
},
"long": {
"year": "numeric",
"month": "long",
"day": "numeric",
"weekday": "long",
"hour": "numeric",
"minute": "numeric"
}
}

View File

@@ -0,0 +1,21 @@
{
"short": {
"month": "short",
"day": "numeric",
"weekday": "long"
},
"medium": {
"month": "long",
"day": "numeric",
"weekday": "long",
"year": "numeric"
},
"long": {
"year": "numeric",
"month": "long",
"day": "numeric",
"weekday": "long",
"hour": "numeric",
"minute": "numeric"
}
}

View File

@@ -0,0 +1,21 @@
{
"short": {
"month": "short",
"day": "numeric",
"weekday": "long"
},
"medium": {
"month": "long",
"day": "numeric",
"weekday": "long",
"year": "numeric"
},
"long": {
"year": "numeric",
"month": "long",
"day": "numeric",
"weekday": "long",
"hour": "numeric",
"minute": "numeric"
}
}

View File

@@ -0,0 +1,21 @@
{
"short": {
"month": "short",
"day": "numeric",
"weekday": "long"
},
"medium": {
"month": "long",
"day": "numeric",
"weekday": "long",
"year": "numeric"
},
"long": {
"year": "numeric",
"month": "long",
"day": "numeric",
"weekday": "long",
"hour": "numeric",
"minute": "numeric"
}
}

View File

@@ -64,6 +64,7 @@
"something-went-wrong": "Iets het verkeerd geloop!",
"subscribed-events": "Ingetekende Gebeure",
"test-message-sent": "Toets Boodskap Gestuur",
"message-sent": "Message Sent",
"new-notification": "Nuwe kennisgewing",
"event-notifiers": "Gebeurteniskennisgewers",
"apprise-url-skipped-if-blank": "Apprise URL (oorgeslaan indien leeg)",
@@ -160,6 +161,7 @@
"test": "Toets",
"themes": "Temas",
"thursday": "Donderdag",
"title": "Title",
"token": "Token",
"tuesday": "Dinsdag",
"type": "Tipe",
@@ -289,6 +291,8 @@
"mealplan-updated": "Maaltydplan opgedateer",
"no-meal-plan-defined-yet": "Nog geen maaltydplan opgestel nie",
"no-meal-planned-for-today": "Geen maaltyd beplan vir vandag nie",
"numberOfDays-hint": "Number of days on page load",
"numberOfDays-label": "Default Days",
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "Slegs resepte met hierdie kategorieë sal in maaltydplanne gebruik word",
"planner": "Beplanner",
"quick-week": "Vinnige week",
@@ -375,6 +379,10 @@
"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."
},
"recipekeeper": {
"title": "Recipe Keeper",
"description-long": "Mealie can import recipes from Recipe Keeper. Export your recipes in zip format, then upload the .zip file below."
}
},
"new-recipe": {
@@ -582,7 +590,23 @@
"upload-image": "Laai prent",
"screen-awake": "Hou die skerm aan",
"remove-image": "Verwyder prent",
"nextStep": "Next step"
"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.",
"select-parser": "Select Parser",
"natural-language-processor": "Natural Language Processor",
"brute-parser": "Brute Parser",
"openai-parser": "OpenAI Parser",
"parse-all": "Parse All",
"no-unit": "No unit",
"missing-unit": "Create missing unit: {unit}",
"missing-food": "Create missing food: {food}",
"no-food": "No Food"
}
},
"search": {
"advanced-search": "Gevorderde soek",
@@ -611,6 +635,7 @@
"backup-created-at-response-export_path": "Back-up gemaak op {path}",
"backup-deleted": "Back-up verwyder",
"restore-success": "Restore successful",
"restore-fail": "Restore failed. Check your server logs for more details",
"backup-tag": "Back-up merker",
"create-heading": "Maak 'n back-up",
"delete-backup": "Verwyder back-up",
@@ -747,7 +772,10 @@
"recipe-scraper-version": "Resep skraper weergawe",
"oidc-ready": "OIDC 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": "Krævede OIDC variabler er udfyldt."
"oidc-ready-success-text": "Krævede OIDC variabler er udfyldt.",
"openai-ready": "OpenAI Ready",
"openai-ready-error-text": "Not all OpenAI Values are configured. This can be ignored if you are not using OpenAI features.",
"openai-ready-success-text": "Required OpenAI variables are all set."
},
"shopping-list": {
"all-lists": "Alle lyste",
@@ -761,6 +789,7 @@
"food": "Voedsel",
"note": "Nota",
"label": "Etiket",
"save-label": "Save Label",
"linked-item-warning": "Hierdie item is gekoppel aan een of meer resepte. Die aanpassing van die eenhede of bestanddele sal onverwagte resultate lewer wanneer die resep van hierdie lys bygevoeg of verwyder word.",
"toggle-food": "Voedsel skakelling",
"manage-labels": "Bestuur etikette",
@@ -1001,6 +1030,12 @@
"delete-recipes": "Verwyder resepte",
"source-unit-will-be-deleted": "Bron-eenheid sal verwyder word"
},
"recipe-actions": {
"recipe-actions-data": "Recipe Actions Data",
"new-recipe-action": "New Recipe Action",
"edit-recipe-action": "Edit Recipe Action",
"action-type": "Action Type"
},
"create-alias": "Create Alias",
"manage-aliases": "Manage Aliases",
"seed-data": "Voorbeeld data",
@@ -1147,6 +1182,7 @@
"ingredients-natural-language-processor-explanation-2": "Dit is nie perfek nie, maar dit lewer oor die algemeen uitstekende resultate en is 'n goeie beginpunt vir die handverwerking van bestanddele in individuele velde. Jy kan ook die \"Brute\" verwerker gebruik wat 'n patroonpastegniek gebruik om bestanddele te identifiseer.",
"nlp": "NLP",
"brute": "Brute",
"openai": "OpenAI",
"show-individual-confidence": "Wys individuele oortuiging",
"ingredient-text": "Bestanddeel teks",
"average-confident": "{0} oortuig",

View File

@@ -64,6 +64,7 @@
"something-went-wrong": "حدث خطأ ما!",
"subscribed-events": "الأحداث التي تم الاشتراك فيها",
"test-message-sent": "تم إرسال رسالة تجريبية",
"message-sent": "Message Sent",
"new-notification": "إشعار جديد",
"event-notifiers": "إشعار الحدث",
"apprise-url-skipped-if-blank": "الرابط Apprise (يتم تجاهله إذا ما كان فارغً)",
@@ -160,6 +161,7 @@
"test": "تجربة",
"themes": "السمات",
"thursday": "الخميس",
"title": "Title",
"token": "الرمز التعريفي",
"tuesday": "الثلاثاء",
"type": "النوع",
@@ -289,6 +291,8 @@
"mealplan-updated": "تم تحديث خطة الوجبات",
"no-meal-plan-defined-yet": "لم يتم تحديد خطة بعد",
"no-meal-planned-for-today": "لم يتم تخطيط وجبة لهذا اليوم",
"numberOfDays-hint": "Number of days on page load",
"numberOfDays-label": "Default Days",
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "فقط الوجبات التي تحتوي على التصنيفات التالية سوف تستخدم لإنشاء خطتك",
"planner": "المخطط",
"quick-week": "Quick Week",
@@ -375,6 +379,10 @@
"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."
},
"recipekeeper": {
"title": "Recipe Keeper",
"description-long": "Mealie can import recipes from Recipe Keeper. Export your recipes in zip format, then upload the .zip file below."
}
},
"new-recipe": {
@@ -582,7 +590,23 @@
"upload-image": "Upload image",
"screen-awake": "Keep Screen Awake",
"remove-image": "Remove image",
"nextStep": "Next step"
"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.",
"select-parser": "Select Parser",
"natural-language-processor": "Natural Language Processor",
"brute-parser": "Brute Parser",
"openai-parser": "OpenAI Parser",
"parse-all": "Parse All",
"no-unit": "No unit",
"missing-unit": "Create missing unit: {unit}",
"missing-food": "Create missing food: {food}",
"no-food": "No Food"
}
},
"search": {
"advanced-search": "Advanced Search",
@@ -611,6 +635,7 @@
"backup-created-at-response-export_path": "Backup Created at {path}",
"backup-deleted": "Backup deleted",
"restore-success": "Restore successful",
"restore-fail": "Restore failed. Check your server logs for more details",
"backup-tag": "Backup Tag",
"create-heading": "Create a Backup",
"delete-backup": "Delete Backup",
@@ -747,7 +772,10 @@
"recipe-scraper-version": "Recipe Scraper Version",
"oidc-ready": "OIDC Ready",
"oidc-ready-error-text": "Not all OIDC Values are configured. This can be ignored if you are not using OIDC Authentication.",
"oidc-ready-success-text": "Required OIDC variables are all set."
"oidc-ready-success-text": "Required OIDC variables are all set.",
"openai-ready": "OpenAI Ready",
"openai-ready-error-text": "Not all OpenAI Values are configured. This can be ignored if you are not using OpenAI features.",
"openai-ready-success-text": "Required OpenAI variables are all set."
},
"shopping-list": {
"all-lists": "All Lists",
@@ -761,6 +789,7 @@
"food": "Food",
"note": "Note",
"label": "Label",
"save-label": "Save Label",
"linked-item-warning": "This item is linked to one or more recipe. Adjusting the units or foods will yield unexpected results when adding or removing the recipe from this list.",
"toggle-food": "Toggle Food",
"manage-labels": "Manage Labels",
@@ -1001,6 +1030,12 @@
"delete-recipes": "Delete Recipes",
"source-unit-will-be-deleted": "Source Unit will be deleted"
},
"recipe-actions": {
"recipe-actions-data": "Recipe Actions Data",
"new-recipe-action": "New Recipe Action",
"edit-recipe-action": "Edit Recipe Action",
"action-type": "Action Type"
},
"create-alias": "Create Alias",
"manage-aliases": "Manage Aliases",
"seed-data": "Seed Data",
@@ -1147,6 +1182,7 @@
"ingredients-natural-language-processor-explanation-2": "It's not perfect, but it yields great results in general and is a good starting point for manually parsing ingredients into individual fields. Alternatively, you can also use the \"Brute\" processor that uses a pattern matching technique to identify ingredients.",
"nlp": "NLP",
"brute": "Brute",
"openai": "OpenAI",
"show-individual-confidence": "Show individual confidence",
"ingredient-text": "Ingredient Text",
"average-confident": "{0} Confident",

View File

@@ -64,6 +64,7 @@
"something-went-wrong": "Нещо се обърка!",
"subscribed-events": "Планирани събития",
"test-message-sent": "Тестово съобщение е изпратено",
"message-sent": "Message Sent",
"new-notification": "Ново известие",
"event-notifiers": "Известия за събитие",
"apprise-url-skipped-if-blank": "URL за известяване (пропуска се ако е празно)",
@@ -160,6 +161,7 @@
"test": "Тест",
"themes": "Теми",
"thursday": "четвъртък",
"title": "Title",
"token": "Токън",
"tuesday": "Вторник",
"type": "Тип",
@@ -208,7 +210,7 @@
"unsaved-changes": "Имате незапазени промени. Желаете ли да ги запазите преди да излезете? Натиснете Ок за запазване и Отказ за отхвърляне на промените.",
"clipboard-copy-failure": "Линкът към рецептата е копиран в клипборда.",
"confirm-delete-generic-items": "Сигурни ли сте, че желаете да изтриете следните елементи?",
"organizers": "Organizers"
"organizers": "Органайзер"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Сигурни ли сте, че искате да изтриете <b>{groupName}<b/>?",
@@ -289,6 +291,8 @@
"mealplan-updated": "Седмичното меню бе обновено",
"no-meal-plan-defined-yet": "Все още няма създадено седмично меню",
"no-meal-planned-for-today": "За днес няма планирано меню",
"numberOfDays-hint": "Number of days on page load",
"numberOfDays-label": "Default Days",
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "Само рецептите от тези категории ще бъдат използвани в хранителните планове",
"planner": "Планьор",
"quick-week": "Бърза седмица",
@@ -375,6 +379,10 @@
"myrecipebox": {
"title": "Моята кутия с рецепти",
"description-long": "Mealie може да импортира рецепти от Моята кутия за рецепти. Експортирайте рецептите си в CSV формат, после качете .csv файлът по-долу."
},
"recipekeeper": {
"title": "Recipe Keeper",
"description-long": "Mealie can import recipes from Recipe Keeper. Export your recipes in zip format, then upload the .zip file below."
}
},
"new-recipe": {
@@ -582,7 +590,23 @@
"upload-image": "Качване на изображение",
"screen-awake": "Запази екрана активен",
"remove-image": "Премахване на изображение",
"nextStep": "Следваща стъпка"
"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.",
"select-parser": "Select Parser",
"natural-language-processor": "Natural Language Processor",
"brute-parser": "Brute Parser",
"openai-parser": "OpenAI Parser",
"parse-all": "Parse All",
"no-unit": "No unit",
"missing-unit": "Create missing unit: {unit}",
"missing-food": "Create missing food: {food}",
"no-food": "No Food"
}
},
"search": {
"advanced-search": "Разширено търсене",
@@ -611,6 +635,7 @@
"backup-created-at-response-export_path": "Резервно копие е създадено на {path}",
"backup-deleted": "Резервното копие е изтрито",
"restore-success": "Успешно възстановяване",
"restore-fail": "Restore failed. Check your server logs for more details",
"backup-tag": "Етикет на резервното копие",
"create-heading": "Създай резервно копие",
"delete-backup": "Изтрий резервно копие",
@@ -747,7 +772,10 @@
"recipe-scraper-version": "Версия на скрепер на рецепти",
"oidc-ready": "Готов за OIDC",
"oidc-ready-error-text": "Не всички OIDC стойности са конфигурирани. Това може да бъде игнорирано, ако не използвате OIDC удостоверяване.",
"oidc-ready-success-text": "Задължителните OIDC променливи са зададени."
"oidc-ready-success-text": "Задължителните OIDC променливи са зададени.",
"openai-ready": "OpenAI Ready",
"openai-ready-error-text": "Not all OpenAI Values are configured. This can be ignored if you are not using OpenAI features.",
"openai-ready-success-text": "Required OpenAI variables are all set."
},
"shopping-list": {
"all-lists": "Всички списъци",
@@ -761,6 +789,7 @@
"food": "Продукт",
"note": "Бележка",
"label": "Етикет",
"save-label": "Save Label",
"linked-item-warning": "Елементът е добавен към една или повече рецепти. Редактиране на единиците или храните ще се отрази с непредвидими резултати когато добавяте или премахвате рецепта от списъка.",
"toggle-food": "Превключване на храна",
"manage-labels": "Управление на етикети",
@@ -1001,6 +1030,12 @@
"delete-recipes": "Изтрий рецепти",
"source-unit-will-be-deleted": "Изходната мерна единица ще бъде изтрита"
},
"recipe-actions": {
"recipe-actions-data": "Recipe Actions Data",
"new-recipe-action": "New Recipe Action",
"edit-recipe-action": "Edit Recipe Action",
"action-type": "Action Type"
},
"create-alias": "Създаване на псевдоним",
"manage-aliases": "Управление на псевдоними",
"seed-data": "Зареждане на данни",
@@ -1147,6 +1182,7 @@
"ingredients-natural-language-processor-explanation-2": "Не е перфектно, но като цяло дава страхотни резултати и е добра отправна точка за ръчно анализиране на съставки в отделни полета. Като алтернатива можете също да използвате процесора \"Груб\", който използва техника за съвпадение на шаблони, за да идентифицира съставките.",
"nlp": "ПЕЕ",
"brute": "Груб",
"openai": "OpenAI",
"show-individual-confidence": "Покажи индивидуална увереност",
"ingredient-text": "Текст на съставката",
"average-confident": "{0} Уверен",
@@ -1168,21 +1204,21 @@
}
},
"profile": {
"welcome-user": "👋 Welcome, {0}!",
"welcome-user": "👋 Добре дошъл(а), {0}!",
"description": "Настройки на профил, рецепти и настройки на групата.",
"get-invite-link": "Вземи линк за покана",
"get-public-link": "Вземи публичен линк",
"account-summary": "Обобщение на акаунта",
"account-summary-description": "Here's a summary of your group's information.",
"account-summary-description": "Обобщение на информацията за Вашата група.",
"group-statistics": "Статистики на групата",
"group-statistics-description": "Вашата статистика на групата дава известна представа как използвате Mealie.",
"storage-capacity": "Капацитет за съхранение",
"storage-capacity-description": "Вашият капацитет за съхранение е изчисление на изображенията и активите, които сте качили.",
"personal": "Лични",
"personal-description": "These are settings that are personal to you. Changes here won't affect other users.",
"personal-description": "Това са настройки, които са лични за Вас. Промените тук няма да засегнат други потребители.",
"user-settings": "Потребителски настройки",
"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": "Нстройки на предпочитанията, смяна на парола и актуализация на имей адрес.",
"api-tokens-description": "Управление на API токени за достъп от външни приложения.",
"group-description": "Тези елементи се споделят във вашата група. Редактирането на един от тях ще го промени за цялата група!",
"group-settings": "Настройки на групата",
"group-settings-description": "Общи групови настройки като седмично меню и настройки за поверителност.",
@@ -1193,9 +1229,9 @@
"notifiers": "Уведомители",
"notifiers-description": "Настройте имейл и push известия, които се задействат при конкретни събития.",
"manage-data": "Управление на данни",
"manage-data-description": "Manage your Mealie data; Foods, Units, Categories, Tags and more.",
"manage-data-description": "Управлявай данните в Mealie: Храни, Единици, Категории, Тагове и други.",
"data-migrations": "Миграция на данни",
"data-migrations-description": "Migrate your existing data from other applications like Nextcloud Recipes and Chowdown.",
"data-migrations-description": "Мигрирайте вашите съществуващи данни от други приложения като Nextcloud Recipes и Chowdown.",
"email-sent": "Имейлът е изпратен",
"error-sending-email": "Грешка при изпращане на имейл",
"personal-information": "Лична информация",

View File

@@ -64,6 +64,7 @@
"something-went-wrong": "Alguna cosa ha anat malament!",
"subscribed-events": "Esdeveniments subscrits",
"test-message-sent": "S'ha enviat el missatge",
"message-sent": "Missatge enviat",
"new-notification": "Nova notificació",
"event-notifiers": "Notificacions d'esdeveniments",
"apprise-url-skipped-if-blank": "Apprise URL (si es deixa buit, s'ignorarà)",
@@ -80,7 +81,7 @@
"recipe-events": "Esdeveniments de receptes"
},
"general": {
"add": "Add",
"add": "Afegeix",
"cancel": "Anuŀla",
"clear": "Neteja",
"close": "Tanca",
@@ -144,22 +145,23 @@
"save": "Desa",
"settings": "Configuració",
"share": "Compartiu",
"show-all": "Show All",
"show-all": "Mostra-ho tot",
"shuffle": "Barreja",
"sort": "Ordena",
"sort-ascending": "Sort Ascending",
"sort-descending": "Sort Descending",
"sort-ascending": "Ordre ascendent",
"sort-descending": "Ordre descendent",
"sort-alphabetically": "Alfabèticament",
"status": "Estat",
"subject": "Assumpte",
"submit": "Envia",
"success-count": "Amb èxit: {count}",
"sunday": "Diumenge",
"system": "System",
"system": "Sistema",
"templates": "Plantilles:",
"test": "Prova",
"themes": "Temes",
"thursday": "Dijous",
"title": "Títol",
"token": "Token",
"tuesday": "Dimarts",
"type": "Tipus",
@@ -174,7 +176,7 @@
"units": "Unitats",
"back": "Torna",
"next": "Següent",
"start": "Start",
"start": "Comença",
"toggle-view": "Commuta la visualització",
"date": "Data",
"id": "Id",
@@ -208,7 +210,7 @@
"unsaved-changes": "Tens canvis que no estan guardats. Vols guardar-los abans de sortir? Clica d'acord per guardar-los o cancel·lar per descartar els canvis.",
"clipboard-copy-failure": "No s'ha pogut copiar al porta-retalls.",
"confirm-delete-generic-items": "Are you sure you want to delete the following items?",
"organizers": "Organizers"
"organizers": "Organitzadors"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Esteu segur de voler suprimir el grup <b>{groupName}<b/>?",
@@ -244,7 +246,7 @@
"group-preferences": "Preferències per grup",
"private-group": "Grup privat",
"private-group-description": "Marcar el grup com a privat afectarà a totes les opcions de visualització pública per defecte. Podeu canviar-les individualment en les opcions de visualització de cada recepta.",
"enable-public-access": "Enable Public Access",
"enable-public-access": "Permetre l'accés públic",
"enable-public-access-description": "Make group recipes public by default, and allow visitors to view recipes without logging-in",
"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-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",
@@ -289,6 +291,8 @@
"mealplan-updated": "S'ha actualitzat el menú",
"no-meal-plan-defined-yet": "No hi ha cap menú planificat",
"no-meal-planned-for-today": "No hi han cap menú per a hui",
"numberOfDays-hint": "Number of days on page load",
"numberOfDays-label": "Dies per defecte",
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "Només s'utilitzaran aquestes categories per als menús",
"planner": "Planificador",
"quick-week": "Pla ràpid",
@@ -373,8 +377,12 @@
"description-long": "Mealie pot importar receptes de Plan to Eat."
},
"myrecipebox": {
"title": "My Recipe Box",
"title": "La Meva Caixa de Receptes",
"description-long": "Mealie can import recipes from My Recipe Box. Export your recipes in CSV format, then upload the .csv file below."
},
"recipekeeper": {
"title": "Recipe Keeper",
"description-long": "Mealie can import recipes from Recipe Keeper. Export your recipes in zip format, then upload the .zip file below."
}
},
"new-recipe": {
@@ -509,8 +517,8 @@
"cook-mode": "Mode \"cuinant\"",
"link-ingredients": "Enllaça amb els ingredients",
"merge-above": "Fusiona amb el de dalt",
"move-to-bottom": "Move To Bottom",
"move-to-top": "Move To Top",
"move-to-bottom": "Moure al Final",
"move-to-top": "Moure al Principi",
"reset-scale": "Reinicialitza",
"decrease-scale-label": "Divideix",
"increase-scale-label": "Multiplica",
@@ -547,8 +555,8 @@
"looking-for-migrations": "Estàs buscant migracions?",
"import-with-url": "Importar amb l'URL",
"create-recipe": "Crea la recepta",
"create-recipe-description": "Create a new recipe from scratch.",
"create-recipes": "Create Recipes",
"create-recipe-description": "Crea una nova recepta des de zero.",
"create-recipes": "Crea Receptes",
"import-with-zip": "Importar amb un .zip",
"create-recipe-from-an-image": "Crea la recepta a partir d'una imatge",
"bulk-url-import": "Importació d'URL en massa",
@@ -582,7 +590,23 @@
"upload-image": "Puja una imatge",
"screen-awake": "Mantenir la pantalla encesa",
"remove-image": "Esborrar la imatge",
"nextStep": "Next step"
"nextStep": "Següent pas",
"recipe-actions": "Accions de la Recepta",
"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",
"natural-language-processor": "Natural Language Processor",
"brute-parser": "Brute Parser",
"openai-parser": "Analitzador d'OpenAI",
"parse-all": "Parse All",
"no-unit": "No unit",
"missing-unit": "Create missing unit: {unit}",
"missing-food": "Create missing food: {food}",
"no-food": "No Food"
}
},
"search": {
"advanced-search": "Cerca avançada",
@@ -611,6 +635,7 @@
"backup-created-at-response-export_path": "S'ha creat una còpia de seguretat a {path}",
"backup-deleted": "Còpia de seguretat suprimida",
"restore-success": "La restauració s'ha dut a terme correctament",
"restore-fail": "Restore failed. Check your server logs for more details",
"backup-tag": "Etiqueta de la còpia de seguretat",
"create-heading": "Crea una còpia de seguretat",
"delete-backup": "Esborra la còpia de seguretat",
@@ -713,11 +738,11 @@
"webhook-name": "Nom del Webhook",
"description": "Els webhooks definits a sota s'executaran quan es defineixi un menú pel dia. En un temps estipulat, els webhooks s'enviaran amb les dades de la recepta que estigui programada pel dia. L'execució dels webhooks no és exacta. Els webhooks s'executen en un interval de 5 minuts, és a dir, que s'executaran en un interval de +/- 5 minuts del temps estipulat."
},
"bug-report": "Bug Report",
"bug-report": "Informe d'errors",
"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.",
"tracker": "Tracker",
"configuration": "Configuration",
"docker-volume": "Docker Volume",
"configuration": "Configuració",
"docker-volume": "Volum de Docker",
"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.",
"volumes-are-misconfigured": "Volumes are misconfigured.",
"volumes-are-configured-correctly": "Volumes are configured correctly.",
@@ -726,7 +751,7 @@
"email-configuration-status": "Estat de la configuració del correu electrònic",
"email-configured": "Correu electrònic configurat",
"email-test-results": "Email Test Results",
"ready": "Ready",
"ready": "Llest",
"not-ready": "Not Ready - Check Environmental Variables",
"succeeded": "Va tenir èxit",
"failed": "Ha fallat",
@@ -747,7 +772,10 @@
"recipe-scraper-version": "Recipe Scraper Version",
"oidc-ready": "OIDC Ready",
"oidc-ready-error-text": "Not all OIDC Values are configured. This can be ignored if you are not using OIDC Authentication.",
"oidc-ready-success-text": "Required OIDC variables are all set."
"oidc-ready-success-text": "Required OIDC variables are all set.",
"openai-ready": "Llest per OpenAI",
"openai-ready-error-text": "No tots els valors d'OpenAI estan configurats. Es pot ignorar si no s'estan utilitzant les funcionalitats d'OpenAI.",
"openai-ready-success-text": "Les variables requerides per OpenAI estan establertes."
},
"shopping-list": {
"all-lists": "Totes les llistes",
@@ -761,6 +789,7 @@
"food": "Aliments",
"note": "Nota",
"label": "Etiqueta",
"save-label": "Guarda l'etiqueta",
"linked-item-warning": "Aquest element està enllaçat amb una o més receptes. Modificar les unitats o els aliments pot provocar resultats inesperats en afegir o elimina la recepta del llistat.",
"toggle-food": "Mostra el nom de l'aliment",
"manage-labels": "Gestiona etiquetes",
@@ -820,7 +849,7 @@
"untagged-count": "{count} sense etiquetar",
"create-a-tag": "Crea una etiqueta",
"tag-name": "Nom de l'etiqueta",
"tag": "Tag"
"tag": "Etiqueta"
},
"tool": {
"tools": "Estris",
@@ -830,7 +859,7 @@
"create-new-tool": "Crea un nou estri",
"on-hand-checkbox-label": "Mostra com a disponible (marcat)",
"required-tools": "Eines necessàries",
"tool": "Tool"
"tool": "Eina"
},
"user": {
"admin": "Administrador/a",
@@ -855,8 +884,8 @@
"link-id": "Id de l'enllaç",
"link-name": "Nom de l'enllaç",
"login": "Inicieu sessió",
"login-oidc": "Login with",
"or": "or",
"login-oidc": "Inicia sessió amb",
"or": "o",
"logout": "Tanca la sessió",
"manage-users": "Gestionar usuaris",
"manage-users-description": "Create and manage users.",
@@ -917,8 +946,8 @@
"user-name": "Nom de l'usuari",
"authentication-method": "Authentication Method",
"authentication-method-hint": "This specifies how a user will authenticate with Mealie. If you're not sure, choose 'Mealie",
"permissions": "Permissions",
"administrator": "Administrator",
"permissions": "Permisos",
"administrator": "Administrador",
"user-can-invite-other-to-group": "User can invite other to group",
"user-can-manage-group": "User can manage group",
"user-can-organize-group-data": "User can organize group data",
@@ -927,7 +956,7 @@
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Don't want to see this anymore? Be sure to change your email in your user settings!",
"forgot-password": "Contrasenya oblidada",
"forgot-password-text": "Please enter your email address and we will send you a link to reset your password.",
"changes-reflected-immediately": "Changes to this user will be reflected immediately."
"changes-reflected-immediately": "Els canvis en aquest usuari s'actualitzaran immediatament."
},
"language-dialog": {
"translated": "traduït",
@@ -942,30 +971,30 @@
"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.",
"combine-food": "Combine Food",
"source-food": "Source Food",
"target-food": "Target Food",
"create-food": "Create Food",
"combine-food": "Combinar Aliment",
"source-food": "Aliment d'Origen",
"target-food": "Aliment de Destí",
"create-food": "Crear Aliment",
"food-label": "Food Label",
"edit-food": "Edit Food",
"edit-food": "Editar Aliment",
"food-data": "Food Data",
"example-food-singular": "ex: Onion",
"example-food-plural": "ex: Onions"
"example-food-singular": "p. ex.: Ceba",
"example-food-plural": "p. ex.: Cebes"
},
"units": {
"seed-dialog-text": "Afegeix a la base de dades les unitats més comunes en el vostre idioma.",
"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": "Combine Unit",
"source-unit": "Source Unit",
"target-unit": "Target Unit",
"combine-unit": "Combina Unitats",
"source-unit": "Unitat Origen",
"target-unit": "Unitat Destí",
"merging-unit-into-unit": "Merging {0} into {1}",
"create-unit": "Crea la unitat",
"abbreviation": "Abbreviation",
"plural-abbreviation": "Plural Abbreviation",
"description": "Description",
"display-as-fraction": "Display as Fraction",
"use-abbreviation": "Use Abbreviation",
"edit-unit": "Edit Unit",
"abbreviation": "Abreviatura",
"plural-abbreviation": "Abreviatura del Plural",
"description": "Descripció",
"display-as-fraction": "Mostra com una Fracció",
"use-abbreviation": "Utilitza Abreviatura",
"edit-unit": "Editar Unitat",
"unit-data": "Unit Data",
"use-abbv": "Use Abbv.",
"fraction": "Fraction",
@@ -1001,6 +1030,12 @@
"delete-recipes": "Delete Recipes",
"source-unit-will-be-deleted": "Source Unit will be deleted"
},
"recipe-actions": {
"recipe-actions-data": "Recipe Actions Data",
"new-recipe-action": "New Recipe Action",
"edit-recipe-action": "Edit Recipe Action",
"action-type": "Action Type"
},
"create-alias": "Create Alias",
"manage-aliases": "Manage Aliases",
"seed-data": "Dades d'exemple",
@@ -1147,6 +1182,7 @@
"ingredients-natural-language-processor-explanation-2": "It's not perfect, but it yields great results in general and is a good starting point for manually parsing ingredients into individual fields. Alternatively, you can also use the \"Brute\" processor that uses a pattern matching technique to identify ingredients.",
"nlp": "NLP",
"brute": "Brute",
"openai": "OpenAI",
"show-individual-confidence": "Show individual confidence",
"ingredient-text": "Ingredient Text",
"average-confident": "{0} Confident",

View File

@@ -64,6 +64,7 @@
"something-went-wrong": "Něco se nepovedlo!",
"subscribed-events": "Odebírané události",
"test-message-sent": "Testovací zpráva odeslána",
"message-sent": "Message Sent",
"new-notification": "Nové oznámení",
"event-notifiers": "Notifikace událostí",
"apprise-url-skipped-if-blank": "Apprise URL (přeskočeno pokud je prázdné)",
@@ -160,6 +161,7 @@
"test": "Test",
"themes": "Motivy",
"thursday": "Čtvrtek",
"title": "Title",
"token": "Token",
"tuesday": "Úterý",
"type": "Typ",
@@ -289,6 +291,8 @@
"mealplan-updated": "Jídelníček byl aktualizován",
"no-meal-plan-defined-yet": "Dosud nebyl definován žádný jídelníček",
"no-meal-planned-for-today": "Pro dnešek není naplánováno žádné jídlo",
"numberOfDays-hint": "Number of days on page load",
"numberOfDays-label": "Default Days",
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "Pouze recepty z těchto kategorií budou použity v jídelníčku",
"planner": "Plánovač",
"quick-week": "Rychlý plán týdne",
@@ -338,7 +342,7 @@
},
"nextcloud": {
"description": "Migrovat data z instance Nextcloud Cookbook",
"description-long": "Nextcloud recipes can be imported from a zip file that contains the data stored in Nextcloud. See the example folder structure below to ensure your recipes are able to be imported.",
"description-long": "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.",
"title": "Nextcloud Cookbook"
},
"copymethat": {
@@ -375,6 +379,10 @@
"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."
},
"recipekeeper": {
"title": "Recipe Keeper",
"description-long": "Mealie can import recipes from Recipe Keeper. Export your recipes in zip format, then upload the .zip file below."
}
},
"new-recipe": {
@@ -582,7 +590,23 @@
"upload-image": "Nahrát obrázek",
"screen-awake": "Keep Screen Awake",
"remove-image": "Remove image",
"nextStep": "Další krok"
"nextStep": "Další krok",
"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.",
"select-parser": "Select Parser",
"natural-language-processor": "Natural Language Processor",
"brute-parser": "Brute Parser",
"openai-parser": "OpenAI Parser",
"parse-all": "Parse All",
"no-unit": "No unit",
"missing-unit": "Create missing unit: {unit}",
"missing-food": "Create missing food: {food}",
"no-food": "No Food"
}
},
"search": {
"advanced-search": "Pokročilé vyhledávání",
@@ -611,6 +635,7 @@
"backup-created-at-response-export_path": "Záloha vytvořena v {path}",
"backup-deleted": "Záloha smazána",
"restore-success": "Restore successful",
"restore-fail": "Restore failed. Check your server logs for more details",
"backup-tag": "Štítek zálohy",
"create-heading": "Create a Backup",
"delete-backup": "Smazat zálohu",
@@ -747,7 +772,10 @@
"recipe-scraper-version": "Recipe Scraper Version",
"oidc-ready": "OIDC Ready",
"oidc-ready-error-text": "Not all OIDC Values are configured. This can be ignored if you are not using OIDC Authentication.",
"oidc-ready-success-text": "Required OIDC variables are all set."
"oidc-ready-success-text": "Required OIDC variables are all set.",
"openai-ready": "OpenAI Ready",
"openai-ready-error-text": "Not all OpenAI Values are configured. This can be ignored if you are not using OpenAI features.",
"openai-ready-success-text": "Required OpenAI variables are all set."
},
"shopping-list": {
"all-lists": "Všechny seznamy",
@@ -761,6 +789,7 @@
"food": "Jídlo",
"note": "Poznámka",
"label": "Popisek",
"save-label": "Save Label",
"linked-item-warning": "Tato položka je propojena s jedním nebo více recepty. Úprava jednotky nebo jídla bude mít neočekávané důsledky při přidání nebo odebrání receptu z tohoto seznamu.",
"toggle-food": "Přepnout typ položky",
"manage-labels": "Manage Labels",
@@ -1001,6 +1030,12 @@
"delete-recipes": "Smazat recepty",
"source-unit-will-be-deleted": "Source Unit will be deleted"
},
"recipe-actions": {
"recipe-actions-data": "Recipe Actions Data",
"new-recipe-action": "New Recipe Action",
"edit-recipe-action": "Edit Recipe Action",
"action-type": "Action Type"
},
"create-alias": "Create Alias",
"manage-aliases": "Manage Aliases",
"seed-data": "Seed Data",
@@ -1147,6 +1182,7 @@
"ingredients-natural-language-processor-explanation-2": "Není to dokonalé, ale obecně to přináší skvělé výsledky a je dobrým výchozím bodem pro ruční zpracování ingrediencí do jednotlivých polí. Alternativně můžete také použít procesor \"Brute\", který používá metodu porovnávání vzorců pro idenfikaci ingrediencí.",
"nlp": "ZPJ",
"brute": "Brute",
"openai": "OpenAI",
"show-individual-confidence": "Zobrazit individuální důvěru",
"ingredient-text": "Text přísady",
"average-confident": "{0} Confident",

View File

@@ -64,6 +64,7 @@
"something-went-wrong": "Noget gik galt!",
"subscribed-events": "Abonnerede begivenheder",
"test-message-sent": "Testbesked sendt",
"message-sent": "Besked afsendt",
"new-notification": "Ny notifikation",
"event-notifiers": "Notifikation om begivenheder",
"apprise-url-skipped-if-blank": "Informations link (sprunget over hvis ladet være tomt)",
@@ -85,7 +86,7 @@
"clear": "Ryd",
"close": "Luk",
"confirm": "Bekræft",
"confirm-how-does-everything-look": "How does everything look?",
"confirm-how-does-everything-look": "Hvordan ser alting ud?",
"confirm-delete-generic": "Er du sikker på, du vil slette dette?",
"copied_message": "Kopieret!",
"create": "Opret",
@@ -160,6 +161,7 @@
"test": "Afprøv",
"themes": "Temaer",
"thursday": "Torsdag",
"title": "Titel",
"token": "Token",
"tuesday": "Tirsdag",
"type": "Type",
@@ -208,7 +210,7 @@
"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.",
"confirm-delete-generic-items": "Er du sikker på at du ønsker at slette de valgte emner?",
"organizers": "Organizers"
"organizers": "Organisatorer"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Er du sikker på, du vil slette <b>{groupName}<b/>?",
@@ -289,6 +291,8 @@
"mealplan-updated": "Madplanen blev ændret",
"no-meal-plan-defined-yet": "Ingen madplan er defineret",
"no-meal-planned-for-today": "Ingen ret er planlagt til i dag",
"numberOfDays-hint": "Number of days on page load",
"numberOfDays-label": "Default Days",
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "Kun opskrifter med disse kategorier vil blive brugt i madplaner",
"planner": "Planlæg madplan",
"quick-week": "Hurtig uge",
@@ -363,7 +367,7 @@
"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 natively supports the chowdown repository format. Download the code repository as a .zip file and upload it below.",
"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.",
@@ -373,8 +377,12 @@
"description-long": "Mealie kan importere opskrifter, der er markeret som \"Planlæg at spise\"."
},
"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."
"title": "Mine opskrifter",
"description-long": "Mealie kan importere opskrifter fra My Recipe Box. Eksporter dine opskrifter i CSV-format, og upload derefter .csv-filen nedenfor."
},
"recipekeeper": {
"title": "Recipe Keeper",
"description-long": "Mealie can import recipes from Recipe Keeper. Export your recipes in zip format, then upload the .zip file below."
}
},
"new-recipe": {
@@ -526,7 +534,7 @@
"edit-timeline-event": "Rediger tidslinjebegivenhed",
"timeline": "Tidslinje",
"timeline-is-empty": "Intet på tidslinjen endnu. Prøv at lave denne opskrift!",
"timeline-no-events-found-try-adjusting-filters": "No events found. Try adjusting your search filters.",
"timeline-no-events-found-try-adjusting-filters": "Ingen begivenheder fundet. Prøv at justere dine søgefiltre.",
"group-global-timeline": "{groupName} Global Tidslinje",
"open-timeline": "Åbn tidslinje",
"made-this": "Jeg har lavet denne",
@@ -582,7 +590,23 @@
"upload-image": "Upload billede",
"screen-awake": "Hold skærmen tændt",
"remove-image": "Fjern billede",
"nextStep": "Næste trin"
"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.",
"alerts-explainer": "En advarsel vil blive vist, hvis en identificeret fødevare eller måleenhed ikke findes i databasen.",
"select-parser": "Vælg Parser",
"natural-language-processor": "Natural Language Processor",
"brute-parser": "Brute Parser",
"openai-parser": "OpenAI Parser",
"parse-all": "Fortolk alt",
"no-unit": "Ingen enhed",
"missing-unit": "Opret manglende måleenhed: {unit}",
"missing-food": "Opret manglende fødevare: {food}",
"no-food": "Ingen fødevarer"
}
},
"search": {
"advanced-search": "Avanceret søgning",
@@ -611,6 +635,7 @@
"backup-created-at-response-export_path": "Backup oprettet ved {path}",
"backup-deleted": "Backup slettet",
"restore-success": "Gendannelse lykkedes",
"restore-fail": "Restore failed. Check your server logs for more details",
"backup-tag": "Backupnavn",
"create-heading": "Opret en backup",
"delete-backup": "Slet backup",
@@ -747,7 +772,10 @@
"recipe-scraper-version": "Version på opskrift-indsamler",
"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."
"oidc-ready-success-text": "Alle påkrævede OIDC værdier er angivet.",
"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."
},
"shopping-list": {
"all-lists": "Alle lister",
@@ -761,6 +789,7 @@
"food": "Fødevarer",
"note": "Note",
"label": "Etiket",
"save-label": "Gem etiket",
"linked-item-warning": "Dette element er tilknyttet en eller flere opskrifter. Justering af enheder eller fødevarer vil give uventede resultater, når du tilføjer eller fjerner opskriften fra denne liste.",
"toggle-food": "Slå fødevarer til/fra",
"manage-labels": "Håndter etiketter",
@@ -820,7 +849,7 @@
"untagged-count": "Ikke-tagget: {count}",
"create-a-tag": "Opret tag",
"tag-name": "Tag navn",
"tag": "Tag"
"tag": "Mærker"
},
"tool": {
"tools": "Værktøjer",
@@ -1001,6 +1030,12 @@
"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",
"action-type": "Handlingstype"
},
"create-alias": "Opret alias",
"manage-aliases": "Administrer Aliaser",
"seed-data": "Opret standard data",
@@ -1147,6 +1182,7 @@
"ingredients-natural-language-processor-explanation-2": "Det er ikke perfekt, men giver generelt gode resultater og er et godt udgangspunkt for manuel redigering af ingredienser i individuelle felter. Alternativt kan du også bruge \"Brute\" metoden, der bruger en mønstermatchende teknik til at identificere ingredienser.",
"nlp": "NLP",
"brute": "Brute",
"openai": "OpenAI",
"show-individual-confidence": "Vis individual konfidensscore",
"ingredient-text": "Ingredienstekst",
"average-confident": "{0} konfidens",

View File

@@ -64,6 +64,7 @@
"something-went-wrong": "Etwas ist schief gelaufen!",
"subscribed-events": "Abonnierte Ereignisse",
"test-message-sent": "Testnachricht gesendet",
"message-sent": "Daten gesendet",
"new-notification": "Neue Benachrichtigung",
"event-notifiers": "Ereignis-Benachrichtigungen",
"apprise-url-skipped-if-blank": "Apprise-URL (wird übersprungen, wenn leer)",
@@ -160,6 +161,7 @@
"test": "Testen",
"themes": "Themen",
"thursday": "Donnerstag",
"title": "Titel",
"token": "Token",
"tuesday": "Dienstag",
"type": "Typ",
@@ -185,7 +187,7 @@
"menu": "Menü",
"a-name-is-required": "Ein Name wird benötigt",
"delete-with-name": "{name} löschen",
"confirm-delete-generic-with-name": "Bist du dir sicher, dass du \"{name}\" löschen möchtest?",
"confirm-delete-generic-with-name": "Bist du dir sicher, dass du dies löschen möchtest?",
"confirm-delete-own-admin-account": "Bitte beachte, dass du versuchst, dein eigenes Administrator-Konto zu löschen! Diese Aktion kann nicht rückgängig gemacht werden und wird dein Konto dauerhaft löschen!",
"organizer": "Organisator",
"transfer": "Übertragen",
@@ -289,6 +291,8 @@
"mealplan-updated": "Essensplan aktualisiert",
"no-meal-plan-defined-yet": "Noch kein Essensplan definiert",
"no-meal-planned-for-today": "Kein Essen für heute geplant",
"numberOfDays-hint": "Anzahl der Tage beim Laden der Seite",
"numberOfDays-label": "Anzuzeigende Tage",
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "Nur Rezepte dieser Kategorien werden in Essensplänen verwendet",
"planner": "Planer",
"quick-week": "Schnelle Woche",
@@ -375,6 +379,10 @@
"myrecipebox": {
"title": "My Recipe Box",
"description-long": "Mealie kann Rezepte von My Recipe Box importieren. Exportiere deine Rezepte im CSV-Format und lade dann unten die .csv Datei hoch."
},
"recipekeeper": {
"title": "Recipe Keeper",
"description-long": "Mealie kann Rezepte von Recipe Keeper importieren. Exportiere deine Rezepte im ZIP-Format und lade dann unten die .zip Datei hoch.\n"
}
},
"new-recipe": {
@@ -535,7 +543,7 @@
"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": "Parse",
"parse": "Parsen",
"attach-images-hint": "Bilder durch Ziehen & Ablegen in den Editor hinzufügen",
"drop-image": "Bild hier ablegen",
"enable-ingredient-amounts-to-use-this-feature": "Aktiviere Zutatenmengen, um diese Funktion zu nutzen",
@@ -582,7 +590,23 @@
"upload-image": "Bild hochladen",
"screen-awake": "Bildschirm nicht abschalten",
"remove-image": "Bild entfernen",
"nextStep": "Nächster Schritt"
"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.",
"select-parser": "Parser auswählen",
"natural-language-processor": "Natürliche Sprachverarbeitung (NLP)",
"brute-parser": "Brute Parser",
"openai-parser": "OpenAI Parser",
"parse-all": "Alles parsen",
"no-unit": "Keine Einheit",
"missing-unit": "Fehlende Einheit erstellen: {unit}",
"missing-food": "Fehlendes Lebensmittel erstellen: {food}",
"no-food": "Kein Lebensmittel"
}
},
"search": {
"advanced-search": "Erweiterte Suche",
@@ -611,6 +635,7 @@
"backup-created-at-response-export_path": "Sicherung erstellt unter {path}",
"backup-deleted": "Sicherung gelöscht",
"restore-success": "Wiederherstellung erfolgreich",
"restore-fail": "Wiederherstellung fehlgeschlagen. Überprüfe deine Serverprotokolle für weitere Informationen",
"backup-tag": "Sicherungsbeschreibung",
"create-heading": "Sicherung erstellen",
"delete-backup": "Sicherung löschen",
@@ -747,7 +772,10 @@
"recipe-scraper-version": "Rezept Scraper Version",
"oidc-ready": "OIDC bereit",
"oidc-ready-error-text": "Es sind nicht alle OIDC-Werte konfiguriert. Wenn du keine OIDC-Authentifizierung benutzt, kannst du das ignorieren.",
"oidc-ready-success-text": "Alle erforderlichen OIDC-Variablen sind gesetzt."
"oidc-ready-success-text": "Alle erforderlichen OIDC-Variablen sind gesetzt.",
"openai-ready": "OpenAI bereit",
"openai-ready-error-text": "Es sind nicht alle OpenAI-Werte konfiguriert. Wenn du die OpenAI Funktionen nicht benutzt, kannst du das ignorieren.",
"openai-ready-success-text": "Alle erforderlichen OpenAI-Variablen sind hinterlegt."
},
"shopping-list": {
"all-lists": "Alle Listen",
@@ -761,6 +789,7 @@
"food": "Lebensmittel",
"note": "Notiz",
"label": "Etikett",
"save-label": "Etikett speichern",
"linked-item-warning": "Dieser Eintrag ist mit einem oder mehreren Rezepten verknüpft. Das Ändern der Einheiten oder Lebensmittel führt zu unerwarteten Ergebnissen, wenn das Rezept von dieser Einkaufsliste entfernt oder hinzugefügt wird.",
"toggle-food": "Lebensmittel-Eingabe umschalten",
"manage-labels": "Etiketten verwalten",
@@ -1001,6 +1030,12 @@
"delete-recipes": "Rezepte löschen",
"source-unit-will-be-deleted": "Quell-Einheit wird gelöscht"
},
"recipe-actions": {
"recipe-actions-data": "Rezept-Aktionen Daten",
"new-recipe-action": "Neue Rezept-Aktion",
"edit-recipe-action": "Rezept-Aktion bearbeiten",
"action-type": "Aktionstyp"
},
"create-alias": "Alias erstellen",
"manage-aliases": "Aliasse verwalten",
"seed-data": "Musterdaten",
@@ -1119,10 +1154,10 @@
"info-description-cleanable-images": "Löschbare Bilder",
"storage": {
"title-temporary-directory": "Temporäres Verzeichnis (.temp)",
"title-backups-directory": "Sicherungsverzeichnis (backups)",
"title-backups-directory": "Sicherungen-Verzeichnis (backups)",
"title-groups-directory": "Gruppen-Verzeichnis (groups)",
"title-recipes-directory": "Rezept-Verzeichnis (recipes)",
"title-user-directory": "Benutzerverzeichnis (user)"
"title-user-directory": "Benutzer-Verzeichnis (user)"
},
"action-delete-log-files-name": "Logs löschen",
"action-delete-log-files-description": "Löscht alle Logdateien",
@@ -1147,9 +1182,10 @@
"ingredients-natural-language-processor-explanation-2": "Es ist nicht perfekt, aber es erzeugt meist sehr gute Ergebnisse und ist ein guter Anfang, um Zutaten manuell den einzelnen Feldern zuzuordnen. Alternativ kannst du auch den \"Brute\" Prozessor benutzen, der eine Musterabgleich-Technik verwendet, um Zutaten zu identifizieren.",
"nlp": "NLP",
"brute": "Brute",
"show-individual-confidence": "Zeige individuelle Überzeugungswerte an",
"openai": "OpenAI",
"show-individual-confidence": "Zeige individuelle Zuverlässigkeitswerte an",
"ingredient-text": "Zutaten-Angabe",
"average-confident": "{0} überzeugt",
"average-confident": "{0} zuverlässig",
"try-an-example": "Probier ein Beispiel aus",
"parser": "Parser",
"background-tasks": "Hintergrundaufgaben",

View File

@@ -64,6 +64,7 @@
"something-went-wrong": "Κάτι δεν πήγε καλά!",
"subscribed-events": "Εγγεγραμμένα Γεγονότα",
"test-message-sent": "Το δοκιμαστικό μήνυμα εστάλη",
"message-sent": "Το μήνυμα εστάλη",
"new-notification": "Νέα ειδοποίηση",
"event-notifiers": "Ειδοποιητές Συμβάντος",
"apprise-url-skipped-if-blank": "Apprise URL (skipped if blank)",
@@ -72,7 +73,7 @@
"user-events": "Συμβάντα Χρήστη",
"mealplan-events": "Mealplan Events",
"when-a-user-in-your-group-creates-a-new-mealplan": "When a user in your group creates a new mealplan",
"shopping-list-events": "Shopping List Events",
"shopping-list-events": "Συμβάντα Λιστών Αγορών",
"cookbook-events": "Cookbook Events",
"tag-events": "Tag Events",
"category-events": "Category Events",
@@ -160,6 +161,7 @@
"test": "Δοκιμή",
"themes": "Θέματα",
"thursday": "Τρίτη",
"title": "Τίτλος",
"token": "Token",
"tuesday": "Τρίτη",
"type": "Τύπος",
@@ -289,6 +291,8 @@
"mealplan-updated": "Το Γεύμα Ενημερώθηκε",
"no-meal-plan-defined-yet": "Δεν έχει οριστεί ακόμα σχέδιο γεύματος",
"no-meal-planned-for-today": "Δεν έχει προγραμματιστεί γεύμα για σήμερα",
"numberOfDays-hint": "Αριθμός ημερών κατά την φόρτωση της σελίδας",
"numberOfDays-label": "Προεπιλεγμένες Ημέρες",
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "Μόνο συνταγές με αυτές τις κατηγορίες θα χρησιμοποιηθούν στα σχέδια γεύματος",
"planner": "Προγραμματισμός",
"quick-week": "Γρήγορη προβολή",
@@ -312,7 +316,7 @@
"random-side": "Τυχαίο Συνοδευτικό",
"this-rule-will-apply": "This rule will apply {dayCriteria} {mealTypeCriteria}.",
"to-all-days": "σε όλες τις ημέρες",
"on-days": "on {0}s",
"on-days": "κάθε {0}",
"for-all-meal-types": "για όλα τα είδη γεύματος",
"for-type-meal-types": "for {0} meal types",
"meal-plan-rules": "Κανόνες Προγράμματος Γευμάτων",
@@ -375,6 +379,10 @@
"myrecipebox": {
"title": "Κιβώτιο Συνταγών",
"description-long": "Το Mealie μπορεί να εισάγει συνταγές από το Κουτί Συνταγών. Εξάγετε τις συνταγές σας σε μορφή CSV, στη συνέχεια, ανεβάστε το αρχείο .csv παρακάτω."
},
"recipekeeper": {
"title": "Recipe Keeper",
"description-long": "Το Mealie μπορεί να εισάγει συνταγές από το Recipe Keeper. Εξάγετε τις συνταγές σας σε μορφή zip, στη συνέχεια, ανεβάστε το αρχείο .zip παρακάτω."
}
},
"new-recipe": {
@@ -582,7 +590,23 @@
"upload-image": "Upload image",
"screen-awake": "Keep Screen Awake",
"remove-image": "Remove image",
"nextStep": "Next step"
"nextStep": "Next step",
"recipe-actions": "Ενέργειες Συνταγής",
"parser": {
"experimental-alert-text": "Το Mealie χρησιμοποιεί επεξεργασία φυσικής γλώσσας για να αναλύσει και να δημιουργήσει μονάδες και είδη διατροφής για τα συστατικά της συνταγής σας. Αυτή η λειτουργία είναι πειραματική και μπορεί να μην λειτουργεί πάντα όπως πρέπει. Αν προτιμάτε να μην χρησιμοποιείτε τα αναλυμένα αποτελέσματα, μπορείτε να επιλέξετε 'Ακύρωση' και οι αλλαγές σας δεν θα αποθηκευτούν.",
"ingredient-parser": "Αναλυτής Συστατικών",
"explanation": "Για να χρησιμοποιήσετε τον αναλυτή συστατικών, κάντε κλικ στο πλήκτρο 'Ανάλυση Ολων' για να ξεκινήσετε τη διαδικασία. Μόλις τα αναλυμένα συστατικά είναι διαθέσιμα, μπορείτε να τα επανεξετάσετε και να βεβαιωθείτε ότι έχουν αναλυθεί σωστά. Η βαθμολογία εμπιστοσύνης του μοντέλου εμφανίζεται στα δεξιά του τίτλου αντικειμένου. Αυτό το σκορ είναι ένας μέσος όρος όλων των επιμέρους βαθμολογιών και μπορεί να μην είναι πάντα εντελώς ακριβής.",
"alerts-explainer": "Θα εμφανίζονται ειδοποιήσεις αν βρεθεί ένα αντίστοιχο φαγητό ή μονάδα αλλά δεν υπάρχει στη βάση δεδομένων.",
"select-parser": "Επιλέξτε Αναλυτή",
"natural-language-processor": "Επεξεργαστής Φυσικής Γλώσσας",
"brute-parser": "Αναλυτής Ωμής Βίας",
"openai-parser": "Αναλυτής OpenAI",
"parse-all": "Ανάλυση Ολων",
"no-unit": "Καμία μονάδα",
"missing-unit": "Δημιουργία μονάδας που λείπει: {unit}",
"missing-food": "Δημιουργία φαγητού που λείπει: {food}",
"no-food": "Χωρίς Φαγητό"
}
},
"search": {
"advanced-search": "Σύνθετη Αναζήτηση",
@@ -611,6 +635,7 @@
"backup-created-at-response-export_path": "Δημιουργήθηκε αντίγραφο ασφαλείας στο: {path}",
"backup-deleted": "Το αντίγραφο ασφαλείας διαγράφηκε",
"restore-success": "Restore successful",
"restore-fail": "Η επαναφορά απέτυχε. Ελέγξτε τα αρχεία καταγραφής του διακομιστή σας για περισσότερες λεπτομέρειες",
"backup-tag": "Ετικέτα Αντιγράφου Ασφαλείας",
"create-heading": "Δημιουργία αντιγράφου ασφαλείας",
"delete-backup": "Διαγραφή Αντιγράφου Ασφαλείας",
@@ -747,7 +772,10 @@
"recipe-scraper-version": "Recipe Scraper Version",
"oidc-ready": "OIDC Ready",
"oidc-ready-error-text": "Not all OIDC Values are configured. This can be ignored if you are not using OIDC Authentication.",
"oidc-ready-success-text": "Required OIDC variables are all set."
"oidc-ready-success-text": "Required OIDC variables are all set.",
"openai-ready": "OpenAI Ready",
"openai-ready-error-text": "Δεν έχουν ρυθμιστεί όλες οι τιμές OpenAI. Αυτό μπορεί να αγνοηθεί αν δεν χρησιμοποιείτε τα χαρακτηριστικά του OpenAI.",
"openai-ready-success-text": "Ολες οι απαιτούμενες μεταβλητές OpenAI έχουν οριστεί."
},
"shopping-list": {
"all-lists": "Όλες οι λίστες",
@@ -761,6 +789,7 @@
"food": "Food",
"note": "Note",
"label": "Label",
"save-label": "Αποθήκεύση ετικέτας",
"linked-item-warning": "This item is linked to one or more recipe. Adjusting the units or foods will yield unexpected results when adding or removing the recipe from this list.",
"toggle-food": "Toggle Food",
"manage-labels": "Manage Labels",
@@ -1001,6 +1030,12 @@
"delete-recipes": "Delete Recipes",
"source-unit-will-be-deleted": "Source Unit will be deleted"
},
"recipe-actions": {
"recipe-actions-data": "Δεδομένα Ενεργειών Συνταγής",
"new-recipe-action": "Νέα Ενέργεια Συνταγής",
"edit-recipe-action": "Επεξεργασία Ενέργειας Συνταγής",
"action-type": "Τύπος Ενέργειας"
},
"create-alias": "Create Alias",
"manage-aliases": "Manage Aliases",
"seed-data": "Seed Data",
@@ -1147,6 +1182,7 @@
"ingredients-natural-language-processor-explanation-2": "It's not perfect, but it yields great results in general and is a good starting point for manually parsing ingredients into individual fields. Alternatively, you can also use the \"Brute\" processor that uses a pattern matching technique to identify ingredients.",
"nlp": "NLP",
"brute": "Brute",
"openai": "OpenAI",
"show-individual-confidence": "Show individual confidence",
"ingredient-text": "Ingredient Text",
"average-confident": "{0} Confident",

View File

@@ -64,6 +64,7 @@
"something-went-wrong": "Something Went Wrong!",
"subscribed-events": "Subscribed Events",
"test-message-sent": "Test Message Sent",
"message-sent": "Message Sent",
"new-notification": "New Notification",
"event-notifiers": "Event Notifiers",
"apprise-url-skipped-if-blank": "Apprise URL (skipped if blank)",
@@ -160,6 +161,7 @@
"test": "Test",
"themes": "Themes",
"thursday": "Thursday",
"title": "Title",
"token": "Token",
"tuesday": "Tuesday",
"type": "Type",
@@ -187,10 +189,10 @@
"delete-with-name": "Delete {name}",
"confirm-delete-generic-with-name": "Are you sure you want to delete this {name}?",
"confirm-delete-own-admin-account": "Please note that you are trying to delete your own admin account! This action cannot be undone and will permanently delete your account?",
"organizer": "Organizer",
"organizer": "Organiser",
"transfer": "Transfer",
"copy": "Copy",
"color": "Color",
"color": "Colour",
"timestamp": "Timestamp",
"last-made": "Last Made",
"learn-more": "Learn More",
@@ -289,6 +291,8 @@
"mealplan-updated": "Mealplan Updated",
"no-meal-plan-defined-yet": "No meal plan defined yet",
"no-meal-planned-for-today": "No meal planned for today",
"numberOfDays-hint": "Number of days on page load",
"numberOfDays-label": "Default Days",
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "Only recipes with these categories will be used in Meal Plans",
"planner": "Planner",
"quick-week": "Quick Week",
@@ -375,6 +379,10 @@
"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."
},
"recipekeeper": {
"title": "Recipe Keeper",
"description-long": "Mealie can import recipes from Recipe Keeper. Export your recipes in zip format, then upload the .zip file below."
}
},
"new-recipe": {
@@ -582,7 +590,23 @@
"upload-image": "Upload image",
"screen-awake": "Keep Screen Awake",
"remove-image": "Remove image",
"nextStep": "Next step"
"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.",
"select-parser": "Select Parser",
"natural-language-processor": "Natural Language Processor",
"brute-parser": "Brute Parser",
"openai-parser": "OpenAI Parser",
"parse-all": "Parse All",
"no-unit": "No unit",
"missing-unit": "Create missing unit: {unit}",
"missing-food": "Create missing food: {food}",
"no-food": "No Food"
}
},
"search": {
"advanced-search": "Advanced Search",
@@ -611,6 +635,7 @@
"backup-created-at-response-export_path": "Backup Created at {path}",
"backup-deleted": "Backup deleted",
"restore-success": "Restore successful",
"restore-fail": "Restore failed. Check your server logs for more details",
"backup-tag": "Backup Tag",
"create-heading": "Create a Backup",
"delete-backup": "Delete Backup",
@@ -747,7 +772,10 @@
"recipe-scraper-version": "Recipe Scraper Version",
"oidc-ready": "OIDC Ready",
"oidc-ready-error-text": "Not all OIDC Values are configured. This can be ignored if you are not using OIDC Authentication.",
"oidc-ready-success-text": "Required OIDC variables are all set."
"oidc-ready-success-text": "Required OIDC variables are all set.",
"openai-ready": "OpenAI Ready",
"openai-ready-error-text": "Not all OpenAI Values are configured. This can be ignored if you are not using OpenAI features.",
"openai-ready-success-text": "Required OpenAI variables are all set."
},
"shopping-list": {
"all-lists": "All Lists",
@@ -761,6 +789,7 @@
"food": "Food",
"note": "Note",
"label": "Label",
"save-label": "Save Label",
"linked-item-warning": "This item is linked to one or more recipe. Adjusting the units or foods will yield unexpected results when adding or removing the recipe from this list.",
"toggle-food": "Toggle Food",
"manage-labels": "Manage Labels",
@@ -1001,6 +1030,12 @@
"delete-recipes": "Delete Recipes",
"source-unit-will-be-deleted": "Source Unit will be deleted"
},
"recipe-actions": {
"recipe-actions-data": "Recipe Actions Data",
"new-recipe-action": "New Recipe Action",
"edit-recipe-action": "Edit Recipe Action",
"action-type": "Action Type"
},
"create-alias": "Create Alias",
"manage-aliases": "Manage Aliases",
"seed-data": "Seed Data",
@@ -1147,6 +1182,7 @@
"ingredients-natural-language-processor-explanation-2": "It's not perfect, but it yields great results in general and is a good starting point for manually parsing ingredients into individual fields. Alternatively, you can also use the \"Brute\" processor that uses a pattern matching technique to identify ingredients.",
"nlp": "NLP",
"brute": "Brute",
"openai": "OpenAI",
"show-individual-confidence": "Show individual confidence",
"ingredient-text": "Ingredient Text",
"average-confident": "{0} Confident",

View File

@@ -64,6 +64,7 @@
"something-went-wrong": "Something Went Wrong!",
"subscribed-events": "Subscribed Events",
"test-message-sent": "Test Message Sent",
"message-sent": "Message Sent",
"new-notification": "New Notification",
"event-notifiers": "Event Notifiers",
"apprise-url-skipped-if-blank": "Apprise URL (skipped if blank)",
@@ -160,6 +161,7 @@
"test": "Test",
"themes": "Themes",
"thursday": "Thursday",
"title": "Title",
"token": "Token",
"tuesday": "Tuesday",
"type": "Type",
@@ -289,6 +291,8 @@
"mealplan-updated": "Mealplan Updated",
"no-meal-plan-defined-yet": "No meal plan defined yet",
"no-meal-planned-for-today": "No meal planned for today",
"numberOfDays-hint": "Number of days on page load",
"numberOfDays-label": "Default Days",
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "Only recipes with these categories will be used in Meal Plans",
"planner": "Planner",
"quick-week": "Quick Week",
@@ -375,6 +379,10 @@
"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."
},
"recipekeeper": {
"title": "Recipe Keeper",
"description-long": "Mealie can import recipes from Recipe Keeper. Export your recipes in zip format, then upload the .zip file below."
}
},
"new-recipe": {
@@ -582,7 +590,23 @@
"upload-image": "Upload image",
"screen-awake": "Keep Screen Awake",
"remove-image": "Remove image",
"nextStep": "Next step"
"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.",
"select-parser": "Select Parser",
"natural-language-processor": "Natural Language Processor",
"brute-parser": "Brute Parser",
"openai-parser": "OpenAI Parser",
"parse-all": "Parse All",
"no-unit": "No unit",
"missing-unit": "Create missing unit: {unit}",
"missing-food": "Create missing food: {food}",
"no-food": "No Food"
}
},
"search": {
"advanced-search": "Advanced Search",
@@ -611,6 +635,7 @@
"backup-created-at-response-export_path": "Backup Created at {path}",
"backup-deleted": "Backup deleted",
"restore-success": "Restore successful",
"restore-fail": "Restore failed. Check your server logs for more details",
"backup-tag": "Backup Tag",
"create-heading": "Create A Backup",
"delete-backup": "Delete Backup",
@@ -747,7 +772,10 @@
"recipe-scraper-version": "Recipe Scraper Version",
"oidc-ready": "OIDC Ready",
"oidc-ready-error-text": "Not all OIDC Values are configured. This can be ignored if you are not using OIDC Authentication.",
"oidc-ready-success-text": "Required OIDC variables are all set."
"oidc-ready-success-text": "Required OIDC variables are all set.",
"openai-ready": "OpenAI Ready",
"openai-ready-error-text": "Not all OpenAI Values are configured. This can be ignored if you are not using OpenAI features.",
"openai-ready-success-text": "Required OpenAI variables are all set."
},
"shopping-list": {
"all-lists": "All Lists",
@@ -761,6 +789,7 @@
"food": "Food",
"note": "Note",
"label": "Label",
"save-label": "Save Label",
"linked-item-warning": "This item is linked to one or more recipe. Adjusting the units or foods will yield unexpected results when adding or removing the recipe from this list.",
"toggle-food": "Toggle Food",
"manage-labels": "Manage Labels",
@@ -1001,6 +1030,12 @@
"delete-recipes": "Delete Recipes",
"source-unit-will-be-deleted": "Source Unit will be deleted"
},
"recipe-actions": {
"recipe-actions-data": "Recipe Actions Data",
"new-recipe-action": "New Recipe Action",
"edit-recipe-action": "Edit Recipe Action",
"action-type": "Action Type"
},
"create-alias": "Create Alias",
"manage-aliases": "Manage Aliases",
"seed-data": "Seed Data",
@@ -1147,6 +1182,7 @@
"ingredients-natural-language-processor-explanation-2": "It's not perfect, but it yields great results in general and is a good starting point for manually parsing ingredients into individual fields. Alternatively, you can also use the \"Brute\" processor that uses a pattern matching technique to identify ingredients.",
"nlp": "NLP",
"brute": "Brute",
"openai": "OpenAI",
"show-individual-confidence": "Show individual confidence",
"ingredient-text": "Ingredient Text",
"average-confident": "{0} Confident",

View File

@@ -64,6 +64,7 @@
"something-went-wrong": "¡Algo ha salido mal!",
"subscribed-events": "Eventos suscritos",
"test-message-sent": "Mensaje Enviado",
"message-sent": "Mensaje Enviado",
"new-notification": "Nueva notificación",
"event-notifiers": "Notificaciones de eventos",
"apprise-url-skipped-if-blank": "URL de Apprise (omitida si está en blanco)",
@@ -80,12 +81,12 @@
"recipe-events": "Eventos de receta"
},
"general": {
"add": "Add",
"add": "Agregar",
"cancel": "Cancelar",
"clear": "Eliminar",
"close": "Cerrar",
"confirm": "Confirmar",
"confirm-how-does-everything-look": "How does everything look?",
"confirm-how-does-everything-look": "¿Cómo se ve todo?",
"confirm-delete-generic": "¿Estás seguro de que quieres eliminarlo?",
"copied_message": "¡Copiado!",
"create": "Crear",
@@ -144,22 +145,23 @@
"save": "Guardar",
"settings": "Ajustes",
"share": "Compartir",
"show-all": "Show All",
"show-all": "Mostrar Todo",
"shuffle": "Aleatorio",
"sort": "Ordenar",
"sort-ascending": "Sort Ascending",
"sort-descending": "Sort Descending",
"sort-ascending": "Orden Ascendente",
"sort-descending": "Orden Descendente",
"sort-alphabetically": "Alfabéticamente",
"status": "Estado",
"subject": "Asunto",
"submit": "Enviar",
"success-count": "Éxito: {count}",
"sunday": "Domingo",
"system": "System",
"system": "Sistema",
"templates": "Plantillas:",
"test": "Prueba",
"themes": "Temas",
"thursday": "Jueves",
"title": "Título",
"token": "Token",
"tuesday": "Martes",
"type": "Tipo",
@@ -174,7 +176,7 @@
"units": "Unidades",
"back": "Volver",
"next": "Siguiente",
"start": "Start",
"start": "Comenzar",
"toggle-view": "Cambiar vista",
"date": "Fecha",
"id": "Id",
@@ -208,7 +210,7 @@
"unsaved-changes": "Tienes cambios sin guardar. ¿Quieres guardar antes de salir? Aceptar para guardar, Cancelar para descartar cambios.",
"clipboard-copy-failure": "No se pudo copiar al portapapeles.",
"confirm-delete-generic-items": "¿Estás seguro que quieres eliminar los siguientes elementos?",
"organizers": "Organizers"
"organizers": "Organizadores"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Por favor, confirma que deseas eliminar <b>{groupName}<b/>",
@@ -244,8 +246,8 @@
"group-preferences": "Preferencias de grupo",
"private-group": "Grupo privado",
"private-group-description": "Establecer el grupo como privado, cambiará todas las opciones de visualización a las opciones predeterminadas. Puede cambiarse individualmente en la configuración de cada receta.",
"enable-public-access": "Enable Public Access",
"enable-public-access-description": "Make group recipes public by default, and allow visitors to view recipes without logging-in",
"enable-public-access": "Habilitar acceso público",
"enable-public-access-description": "Habilitar recetas públicas por defecto y permitir que usuarios anónimos vean recetas",
"allow-users-outside-of-your-group-to-see-your-recipes": "Permite a los usuarios fuera de tu grupo ver tus recetas",
"allow-users-outside-of-your-group-to-see-your-recipes-description": "Cuando esté habilitado, puede utilizar un enlace público para compartir recetas específicas sin autorizar al usuario. Cuando está desactivado, sólo puedes compartir recetas con usuarios que estén en tu grupo o generando un enlace privado de forma previa",
"show-nutrition-information": "Mostrar la información nutricional",
@@ -289,6 +291,8 @@
"mealplan-updated": "Menú actualizado",
"no-meal-plan-defined-yet": "Todavía no hay ningún menú",
"no-meal-planned-for-today": "No hay ningún menú para hoy",
"numberOfDays-hint": "Número de días al cargar la página",
"numberOfDays-label": "Default Days",
"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",
@@ -359,22 +363,26 @@
},
"recipe-data-migrations": "Migración de recetas",
"recipe-data-migrations-explanation": "Las recetas pueden migrarse desde otra aplicación soportada a Mealie. Esta es una excelente manera de empezar con Mealie.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Coming from another application or an even older version of Mealie? Check out migrations and see if your data can be imported.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "¿Vienes de otra app o una versión previa de Mealie? Revisa migraciones para ver si tus datos pueden ser importados.",
"choose-migration-type": "Elegir tipo de migración",
"tag-all-recipes": "Etiqueta todas las recetas con la etiqueta {tag-name}",
"nextcloud-text": "Las recetas Nextcloud se pueden importar desde un archivo zip que contiene los datos almacenados en Nextcloud. Consulte la estructura de carpetas de ejemplo a continuación para asegurarse de que sus recetas pueden ser importadas.",
"chowdown-text": "Mealie natively supports the chowdown repository format. Download the code repository as a .zip file and upload it below.",
"chowdown-text": "Mealie soporta el formato de repositorio chowndown de manera nativa. Descarga el código fuente como archivo .zip y súbelo a continuación.",
"recipe-1": "Receta 1",
"recipe-2": "Receta 2",
"paprika-text": "Mealie puede importar recetas de la aplicación Paprika. Exporta tus recetas de paprika, renombra la extensión del fichero a .zip y súbelo a continuación.",
"mealie-text": "Mealie puede importar recetas de la aplicación Mealie desde una versión anterior a v1.0. Exporta tus recetas de tu antigua instancia y sube el archivo zip a continuación. Ten en cuenta que solo se pueden importar recetas de la exportación.",
"plantoeat": {
"title": "Plan to Eat",
"description-long": "Mealie puede importar recetas de Plan a Comer."
"description-long": "Mealie puede importar recetas de Plan to Eat."
},
"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 puede importar recetas de My Recipe Box. Exporta tus recetas en formato CSV y sube el archivo a continuación."
},
"recipekeeper": {
"title": "Recipe Keeper",
"description-long": "Mealie can import recipes from Recipe Keeper. Export your recipes in zip format, then upload the .zip file below."
}
},
"new-recipe": {
@@ -510,7 +518,7 @@
"link-ingredients": "Vincular ingredientes",
"merge-above": "Combinar por encima",
"move-to-bottom": "Mover al fondo",
"move-to-top": "Move To Top",
"move-to-top": "Mover al Inicio",
"reset-scale": "Reiniciar",
"decrease-scale-label": "Disminuir escala en 1",
"increase-scale-label": "Aumentar escala en 1",
@@ -526,7 +534,7 @@
"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!",
"timeline-no-events-found-try-adjusting-filters": "No events found. Try adjusting your search filters.",
"timeline-no-events-found-try-adjusting-filters": "No se encontraron eventos. Intenta ajustar los filtros de búsqueda.",
"group-global-timeline": "Línea de tiempo global de {groupName}",
"open-timeline": "Abrir línea de tiempo",
"made-this": "Lo hice",
@@ -547,8 +555,8 @@
"looking-for-migrations": "¿Buscas las Migraciones?",
"import-with-url": "Importar por url",
"create-recipe": "Crear receta",
"create-recipe-description": "Create a new recipe from scratch.",
"create-recipes": "Create Recipes",
"create-recipe-description": "Crear nueva receta desde cero.",
"create-recipes": "Crear Recetas",
"import-with-zip": "Importar desde .zip",
"create-recipe-from-an-image": "Crear receta a partir de una imagen",
"bulk-url-import": "Importación masiva desde URL",
@@ -582,7 +590,23 @@
"upload-image": "Subir imagen",
"screen-awake": "Mantener la pantalla encendida",
"remove-image": "Eliminar imagen",
"nextStep": "Siguiente paso"
"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.",
"select-parser": "Seleccionar Analizador",
"natural-language-processor": "Procesador de Lenguaje Natural",
"brute-parser": "Analizador Bruto",
"openai-parser": "OpenAI Parser",
"parse-all": "Analizar Todo",
"no-unit": "Sin unidad",
"missing-unit": "Crear unidad faltante: {unit}",
"missing-food": "Crear comida faltante: {food}",
"no-food": "Sin Comida"
}
},
"search": {
"advanced-search": "Búsqueda avanzada",
@@ -611,6 +635,7 @@
"backup-created-at-response-export_path": "Copia de seguridad creada en {path}",
"backup-deleted": "Copia de seguridad eliminada",
"restore-success": "Restauración exitosa",
"restore-fail": "Restore failed. Check your server logs for more details",
"backup-tag": "Etiqueta de la copia de seguridad",
"create-heading": "Crear una copia de seguridad",
"delete-backup": "Eliminar copia de seguridad",
@@ -619,7 +644,7 @@
"import-summary": "Importar resumen",
"partial-backup": "Copia de seguridad parcial",
"unable-to-delete-backup": "No se puede eliminar la copia de seguridad.",
"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": "Las copias de seguridad son guardados completos de las carpetas database y data del sitio. Esto incluye todo y no puede ser configurado para excluir subconjuntos de datos. Puedes pensar en ello como una 'instantánea' de Mealie en un momento en específico. Estas sirven para exportar e importar datos, o clonar el sitio a otra ubicación de manera intercompatible.",
"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.",
@@ -730,7 +755,7 @@
"not-ready": "No Listo - Comprobar variables de ambiente",
"succeeded": "Logrado",
"failed": "Error",
"general-about": "General Acerca de",
"general-about": "Información General",
"application-version": "Versión de la aplicación",
"application-version-error-text": "Su versión actual ({0}) no coincide con la última versión. Considere actualizar a la última versión ({1}).",
"mealie-is-up-to-date": "Mealie está actualizada",
@@ -745,9 +770,12 @@
"ldap-ready-success-text": "Las variables LDAP requeridas están todas definidas.",
"build": "Compilación",
"recipe-scraper-version": "Versión de Analizador de Recetas",
"oidc-ready": "OIDC Ready",
"oidc-ready-error-text": "Not all OIDC Values are configured. This can be ignored if you are not using OIDC Authentication.",
"oidc-ready-success-text": "Required OIDC variables are all set."
"oidc-ready": "OIDC Listo",
"oidc-ready-error-text": "No todos los valores OIDC están configurados. Puedes ignorar esto si no estás usando autenticación OIDC.",
"oidc-ready-success-text": "Todas las variables OIDC requeridas están configuradas.",
"openai-ready": "OpenAI Ready",
"openai-ready-error-text": "Not all OpenAI Values are configured. This can be ignored if you are not using OpenAI features.",
"openai-ready-success-text": "Required OpenAI variables are all set."
},
"shopping-list": {
"all-lists": "Todas las listas",
@@ -761,6 +789,7 @@
"food": "Alimentos",
"note": "Nota",
"label": "Etiqueta",
"save-label": "Save Label",
"linked-item-warning": "Este elemento está vinculado a una o más recetas. Ajustar las unidades o los alimentos producirá resultados inesperados al añadir o quitar la receta de esta lista.",
"toggle-food": "Mostrar nombre del alimento",
"manage-labels": "Administrar etiquetas",
@@ -855,11 +884,11 @@
"link-id": "ID del enlace",
"link-name": "Nombre del enlace",
"login": "Iniciar sesión",
"login-oidc": "Login with",
"or": "or",
"login-oidc": "Acceder con",
"or": "o",
"logout": "Cerrar Sesión",
"manage-users": "Administrar usuarios",
"manage-users-description": "Create and manage users.",
"manage-users-description": "Crear y gestionar usuarios.",
"new-password": "Nueva contraseña",
"new-user": "Nuevo usuario",
"password-has-been-reset-to-the-default-password": "La contraseña se ha restablecido a su valor por defecto",
@@ -1001,6 +1030,12 @@
"delete-recipes": "Borrar Recetas",
"source-unit-will-be-deleted": "Se eliminará la unidad de origen"
},
"recipe-actions": {
"recipe-actions-data": "Datos de Acciones de Receta",
"new-recipe-action": "Nueva Acción de Receta",
"edit-recipe-action": "Editar Acción de Receta",
"action-type": "Tipo de Acción"
},
"create-alias": "Crear un Alias",
"manage-aliases": "Administrar Alias",
"seed-data": "Datos de ejemplo",
@@ -1090,15 +1125,15 @@
"selection-mode-desc": "El modo de selección es el modo principal que puede utilizarse para introducir datos:",
"selection-mode-steps": {
"draw": "Dibuja un rectángulo sobre el texto que deseas seleccionar.",
"click": "Click on any field on the right and then click back on the rectangle above the image.",
"result": "The selected text will appear inside the previously selected field."
"click": "Haz clic en cualquier campo a la derecha y luego haz clic en el rectángulo sobre la imagen.",
"result": "El texto seleccionado aparecerá dentro del campo elegido."
},
"pan-and-zoom-mode": "Modo Panorámico y Zoom",
"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": "Selecciona, desplaza y haz zoom haciendo clic en el icono. Este modo te permite hacer zoom dentro de la imagen y desplazarte para facilitar el uso de imágenes grandes.",
"split-text-mode": "Modos de división de texto",
"split-modes": {
"line-mode": "Modo de línea (por defecto)",
"line-mode-desc": "In line mode, the text will be propagated by keeping the original line breaks. This mode is useful when using bulk add on a list of ingredients where one ingredient is one line.",
"line-mode-desc": "En el modo línea, el texto será propagado manteniendo los saltos de línea originales. Este modo es útil cuando se usa 'agregar varios' y cada ingrediente corresponde a una línea de texto.",
"block-mode": "Modo en bloque",
"block-mode-desc": "En el modo de bloque, el texto se dividirá en bloques. Este modo es útil cuando se agregan instrucciones que están escritas en párrafos.",
"flat-mode": "Modo texto sin formato",
@@ -1109,14 +1144,14 @@
"admin": {
"maintenance": {
"storage-details": "Detalle del almacenamiento",
"page-title": "Mantenimiento del sitio",
"page-title": "Mantenimiento del Sitio",
"summary-title": "Índice",
"button-label-get-summary": "Obtener Resumen",
"button-label-open-details": "Detalles",
"info-description-data-dir-size": "Tamaño del directorio de datos",
"info-description-data-dir-size": "Tamaño del Directorio de Datos",
"info-description-log-file-size": "Tamaño del archivo de registro",
"info-description-cleanable-directories": "Directorios eliminables",
"info-description-cleanable-images": "Imágenes eliminables",
"info-description-cleanable-directories": "Directorios Eliminables",
"info-description-cleanable-images": "Imágenes Eliminables",
"storage": {
"title-temporary-directory": "Directorio temporal (.temp)",
"title-backups-directory": "Directorio de Copias de Seguridad (respaldos)",
@@ -1127,7 +1162,7 @@
"action-delete-log-files-name": "Borrar archivos de registro",
"action-delete-log-files-description": "Elimina todos los archivos de registro",
"action-clean-directories-name": "Limpiar directorios",
"action-clean-directories-description": "Removes all the recipe folders that are not valid UUIDs",
"action-clean-directories-description": "Remueve todas las carpetas de receta sin UUID válido",
"action-clean-temporary-files-name": "Eliminar archivos temporales",
"action-clean-temporary-files-description": "Eliminar todos los archivos y carpetas del directorio .temp",
"action-clean-images-name": "Limpiar imágenes",
@@ -1142,11 +1177,12 @@
"mainentance": {
"actions-title": "Acciones"
},
"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-2": "It's not perfect, but it yields great results in general and is a good starting point for manually parsing ingredients into individual fields. Alternatively, you can also use the \"Brute\" processor that uses a pattern matching technique to identify ingredients.",
"ingredients-natural-language-processor": "Procesador de Lenguaje Natural de Ingredientes",
"ingredients-natural-language-processor-explanation": "Mealie usa CRFs (Campos Condicionales Aleatorios) para analizar y procesar ingredientes. El modelo para ingredientes está basado en un conjunto de más de 100.000 ingredientes de una base de datos perteneciente a New York Times. Ya que el modelo sólo está entrenado en inglés, puede que obtengas resultados variados al utilizar otros lenguajes. Esta página es un sitio de prueba para probar el modelo.",
"ingredients-natural-language-processor-explanation-2": "Si bien no es perfecto, entrega buenos resultados en general y es un buen punto de partida para empezar a analizar ingredientes a campos individuales. Alternativamente puedes usar el procesador \"bruto\", que utiliza una técnica de reconocimiento de patrones para identificar ingredientes.",
"nlp": "PLN",
"brute": "En bruto",
"openai": "OpenAI",
"show-individual-confidence": "Mostrar confianza individual",
"ingredient-text": "Texto del ingrediente",
"average-confident": "{0} Confianza",
@@ -1157,45 +1193,45 @@
"no-logs-found": "No se encontraron registros",
"tasks": "Tareas",
"setup": {
"first-time-setup": "First Time Setup",
"welcome-to-mealie-get-started": "Welcome to Mealie! Let's get started",
"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!",
"here-are-a-few-things-to-help-you-get-started": "Here are a few things to help you get started with Mealie",
"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."
"first-time-setup": "Configuración Inicial",
"welcome-to-mealie-get-started": "¡Bienvenido a Mealie! Empecemos",
"already-set-up-bring-to-homepage": "Estoy bien, solo llévame al Inicio",
"common-settings-for-new-sites": "Aquí hay algunos ajustes comunes para sitios nuevos",
"setup-complete": "¡Configuración completada!",
"here-are-a-few-things-to-help-you-get-started": "Aquí hay algunas cosas para ayudarte a empezar con Mealie",
"restore-from-v1-backup": "¿Tienes una copia de seguridad de Mealie v1? Puedes restaurarla aquí.",
"manage-profile-or-get-invite-link": "Gestiona tu perfil, o usa un enlace de invitación para compartir con otros."
}
},
"profile": {
"welcome-user": "👋 Welcome, {0}!",
"welcome-user": "👋 ¡Bienvenido, {0}!",
"description": "Administra tu perfil, recetas y ajustes de grupo.",
"get-invite-link": "Obtener enlace de invitación",
"get-public-link": "Obtener enlace público",
"account-summary": "Información de la cuenta",
"account-summary-description": "Here's a summary of your group's information.",
"account-summary-description": "Aquí hay un resumen de la información del grupo.",
"group-statistics": "Estadísticas del grupo",
"group-statistics-description": "Your Group Statistics provide some insight how you're using Mealie.",
"group-statistics-description": "Tus estadísticas de grupo proporcionan información sobre cómo utilizas Mealie.",
"storage-capacity": "Capacidad de almacenamiento",
"storage-capacity-description": "Your storage capacity is a calculation of the images and assets you have uploaded.",
"storage-capacity-description": "Tu capacidad de almacenamiento es el cálculo de las imágenes y recursos que has subido.",
"personal": "Personal",
"personal-description": "These are settings that are personal to you. Changes here won't affect other users.",
"personal-description": "Estos ajustes son para ti. Cualquier cambio no afectará otros usuarios.",
"user-settings": "Ajustes de usuario",
"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.",
"group-description": "These items are shared within your group. Editing one of them will change it for the whole group!",
"user-settings-description": "Gestiona tus ajustes, cambia tu contraseña y actualiza tu correo electrónico.",
"api-tokens-description": "Administra tus API tokens para el acceso desde apps externas.",
"group-description": "Estos elementos se comparten dentro del grupo. ¡Editar cualquiera de ellos lo modificará para todo el grupo!",
"group-settings": "Ajustes de grupo",
"group-settings-description": "Manage your common group settings like mealplan and privacy settings.",
"cookbooks-description": "Manage a collection of recipe categories and generate pages for them.",
"group-settings-description": "Gestiona tus ajustes comunes de grupo, como la configuración de plan de comidas y privacidad.",
"cookbooks-description": "Gestiona un a colección de categorías de receta y genera páginas para estas.",
"members": "Miembros",
"members-description": "Ver quién está en tu grupo y administrar sus permisos.",
"webhooks-description": "Setup webhooks that trigger on days that you have have mealplan scheduled.",
"notifiers": "Notificaciones",
"notifiers-description": "Setup email and push notifications that trigger on specific events.",
"manage-data": "Administrar datos",
"manage-data-description": "Manage your Mealie data; Foods, Units, Categories, Tags and more.",
"manage-data-description": "Gestiona tus datos de Mealie; Comidas, unidades, categorías, etiquetas y más.",
"data-migrations": "Migración de datos",
"data-migrations-description": "Migrate your existing data from other applications like Nextcloud Recipes and Chowdown.",
"data-migrations-description": "Migra tus datos existentes desde otras aplicaciones como Nextcloud Recipes o Chowdown.",
"email-sent": "Email enviado",
"error-sending-email": "Error enviando email",
"personal-information": "Datos Personales",

View File

@@ -64,6 +64,7 @@
"something-went-wrong": "Jotain meni pieleen!",
"subscribed-events": "Tilatut tapahtumat",
"test-message-sent": "Viesti lähetetty",
"message-sent": "Viesti lähetetty",
"new-notification": "Uusi ilmoitus",
"event-notifiers": "Tapahtumien ilmoitukset",
"apprise-url-skipped-if-blank": "Ilmoitusverkko-osoite (voi jättää tyhjäksi)",
@@ -160,6 +161,7 @@
"test": "Testi",
"themes": "Teemat",
"thursday": "Torstai",
"title": "Otsikko",
"token": "Tunniste",
"tuesday": "Tiistai",
"type": "Tyyppi",
@@ -289,6 +291,8 @@
"mealplan-updated": "Ateriasuunnitelma päivitetty",
"no-meal-plan-defined-yet": "Ateriasuunnitelmaa ei ole vielä määritelty",
"no-meal-planned-for-today": "Ei ateriasuunnitelmaa tälle päivälle",
"numberOfDays-hint": "Number of days on page load",
"numberOfDays-label": "Default Days",
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "Vain näiden luokkien reseptejä käytetään ateriasuunnitelmissa",
"planner": "Suunnittelija",
"quick-week": "Pikaviikkosuunnitelma",
@@ -375,6 +379,10 @@
"myrecipebox": {
"title": "Reseptilaatikkoni",
"description-long": "Voit tuoda Mealieen reseptejä reseptilaatikosta. Tuo reseptisi csv-muodossa ja lataa sitten csv-tiedosto alempaa."
},
"recipekeeper": {
"title": "Recipe Keeper",
"description-long": "Mealie can import recipes from Recipe Keeper. Export your recipes in zip format, then upload the .zip file below."
}
},
"new-recipe": {
@@ -557,8 +565,8 @@
"new-recipe-names-must-be-unique": "Reseptin nimen on oltava yksilöllinen",
"scrape-recipe": "Reseptin kaappain",
"scrape-recipe-description": "Kaappaa resepti urlin avulla. Anna sen reseptin url-osoite, jonka haluat kaapata, ja Mealie yrittää kaapata reseptin kyseiseltä sivustolta ja lisätä sen kokoelmaasi.",
"scrape-recipe-have-a-lot-of-recipes": "Have a lot of recipes you want to scrape at once?",
"scrape-recipe-suggest-bulk-importer": "Try out the bulk importer",
"scrape-recipe-have-a-lot-of-recipes": "Haluatko kerätä useamman reseptin kerralla?",
"scrape-recipe-suggest-bulk-importer": "Kokeile massasiirtotyökalua",
"import-original-keywords-as-tags": "Tuo alkuperäiset avainsanat tunnisteiksi",
"stay-in-edit-mode": "Pysy muokkaustilassa",
"import-from-zip": "Tuo zip-arkistosta",
@@ -582,7 +590,23 @@
"upload-image": "Lataa kuva",
"screen-awake": "Pidä näyttö aina päällä",
"remove-image": "Poista kuva",
"nextStep": "Seuraava askel"
"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.",
"select-parser": "Valitse jäsentäjätyökalu",
"natural-language-processor": "Luonnollisen kielen prosessointityökalu",
"brute-parser": "Voimakas jäsentäjätyökalu",
"openai-parser": "OpenAI Parser",
"parse-all": "Jäsennä kaikki",
"no-unit": "Ei yksikköä",
"missing-unit": "Luo puuttuva yksikkö: {unit}",
"missing-food": "Luo puuttuva ruoka: {food}",
"no-food": "Ei ruokaa"
}
},
"search": {
"advanced-search": "Tarkennettu haku",
@@ -611,6 +635,7 @@
"backup-created-at-response-export_path": "Varmuuskopio luotu sijaintiin {path}",
"backup-deleted": "Varmuuskopio poistettu",
"restore-success": "Palautus onnistui",
"restore-fail": "Restore failed. Check your server logs for more details",
"backup-tag": "Varmuuskopion tunniste",
"create-heading": "Create a Backup",
"delete-backup": "Poista varmuuskopio",
@@ -700,7 +725,7 @@
"no-unused-items": "Ei käyttämättömiä kohteita",
"recipes-affected": "Ei vaikuttanut resepteihin|Vaikutti yhteen reseptiin|Vaikutti {count} reseptiin",
"remove-unused": "Poista käyttämättömät",
"title-case-all": "Title Case All",
"title-case-all": "Isot alkukirjaimet kaikille sanoille",
"toolbox": "Työkalut",
"unorganized": "Järjestämätön"
},
@@ -746,8 +771,11 @@
"build": "Koonti",
"recipe-scraper-version": "Reseptikaappaimen versio",
"oidc-ready": "OIDC valmis",
"oidc-ready-error-text": "Not all OIDC Values are configured. This can be ignored if you are not using OIDC Authentication.",
"oidc-ready-success-text": "Required OIDC variables are all set."
"oidc-ready-error-text": "Kaikkia OIDC-arvoja ei ole määritelty. Jos et käytä OIDC-todennusta, voidaan asia jättää huomiotta.",
"oidc-ready-success-text": "Kaikki vaaditut OIDC-muuttujat asetettu.",
"openai-ready": "OpenAI Ready",
"openai-ready-error-text": "Not all OpenAI Values are configured. This can be ignored if you are not using OpenAI features.",
"openai-ready-success-text": "Required OpenAI variables are all set."
},
"shopping-list": {
"all-lists": "Kaikki ostoslistat",
@@ -761,6 +789,7 @@
"food": "Elintarvikkeet",
"note": "Muistiinpano",
"label": "Tunnus",
"save-label": "Save Label",
"linked-item-warning": "Tämä kohde on linkitetty yhteen tai useampaan reseptiin. Yksikköjen tai elintarvikkeiden muuttaminen tuottaa odottamattomia tuloksia, kun reseptiä lisätään tai poistetaan tästä luettelosta.",
"toggle-food": "Vaihda elintarvike",
"manage-labels": "Hallinnoi nimikkeitä",
@@ -820,7 +849,7 @@
"untagged-count": "Tunnisteettomat {count}",
"create-a-tag": "Luo tunniste",
"tag-name": "Tunnisteen nimi",
"tag": "Tag"
"tag": "Tunniste"
},
"tool": {
"tools": "Työkalut",
@@ -830,7 +859,7 @@
"create-new-tool": "Luo Uusi Työkalu",
"on-hand-checkbox-label": "Näytä työkalut, jotka omistan jo (valittu)",
"required-tools": "Tarvittavat Työkalut",
"tool": "Tool"
"tool": "Työkalu"
},
"user": {
"admin": "Ylläpitäjä",
@@ -855,11 +884,11 @@
"link-id": "Linkin ID",
"link-name": "Linkin nimi",
"login": "Kirjaudu",
"login-oidc": "Login with",
"or": "or",
"login-oidc": "Kirjaudu sisään käyttäen",
"or": "tai",
"logout": "Uloskirjaudu",
"manage-users": "Käyttäjien hallinta",
"manage-users-description": "Create and manage users.",
"manage-users-description": "Luo ja hallitse käyttäjiä.",
"new-password": "Uusi salasana",
"new-user": "Uusi käyttäjä",
"password-has-been-reset-to-the-default-password": "Salasana on palautettu oletussalasanaksi",
@@ -868,7 +897,7 @@
"password-updated": "Salasana päivitetty",
"password": "Salasana",
"password-strength": "Salasana on {strength}",
"please-enter-password": "Please enter your new password.",
"please-enter-password": "Syötä uusi salasanasi.",
"register": "Rekisteröidy",
"reset-password": "Palauta salasana",
"sign-in": "Kirjaudu",
@@ -889,7 +918,7 @@
"username": "Käyttäjänimi",
"users-header": "KÄYTTÄJÄT",
"users": "Käyttäjät",
"user-not-found": "User not found",
"user-not-found": "Käyttäjää ei löytynyt",
"webhook-time": "Webhook-aika",
"webhooks-enabled": "Webhookit käytössä",
"you-are-not-allowed-to-create-a-user": "Sinulla ei ole oikeutta luoda käyttäjää",
@@ -912,7 +941,7 @@
"user-management": "Käyttäjien Hallinta",
"reset-locked-users": "Nollaa Lukitut Käyttäjät",
"admin-user-creation": "Ylläpitokäyttäjän Luonti",
"admin-user-management": "Admin User Management",
"admin-user-management": "Ylläpidon käyttäjien hallinta",
"user-details": "Käyttäjän tiedot",
"user-name": "Käyttäjänimi",
"authentication-method": "Todentamistapa",
@@ -923,11 +952,11 @@
"user-can-manage-group": "Käyttäjä voi hallita ryhmää",
"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": "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!",
"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."
"it-looks-like-this-is-your-first-time-logging-in": "Tämä vaikuttaa olevan ensimmäinen kirjautumisesi.",
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Vaihda sähköpostisi asetuksista, jos et halua nähdä tätä enää.",
"forgot-password": "Unohditko salasanasi",
"forgot-password-text": "Syötä sähköpostiosoitteesi, niin voit muuttaa salasanaasi linkin kautta.",
"changes-reflected-immediately": "Muutokset tähän käyttäjään astuvat välittömästi voimaan."
},
"language-dialog": {
"translated": "käännetty",
@@ -949,8 +978,8 @@
"food-label": "Elintarvikkeiden nimike",
"edit-food": "Muokkaa elintarviketta",
"food-data": "Elintarvikkeiden tiedot",
"example-food-singular": "ex: Onion",
"example-food-plural": "ex: Onions"
"example-food-singular": "esim. sipuli",
"example-food-plural": "esim. sipulit"
},
"units": {
"seed-dialog-text": "Lisää tietokantaan yksiköt paikallisen kielen perusteella.",
@@ -961,7 +990,7 @@
"merging-unit-into-unit": "Yhdistä {0} ja {1} yhdeksi",
"create-unit": "Luo yksikkö",
"abbreviation": "Lyhenne",
"plural-abbreviation": "Plural Abbreviation",
"plural-abbreviation": "Monikon lyhenne",
"description": "Kuvaus",
"display-as-fraction": "Näytä murtolukuna",
"use-abbreviation": "Käytä Lyhennettä",
@@ -969,10 +998,10 @@
"unit-data": "Yksikkötiedot",
"use-abbv": "Käytä lyhennettä.",
"fraction": "Murtoluku",
"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": "esim. ruokalusikka",
"example-unit-plural": "esim. ruokalusikat",
"example-unit-abbreviation-singular": "esim. rkl",
"example-unit-abbreviation-plural": "esim. rkl"
},
"labels": {
"seed-dialog-text": "Lisää tietokantaan yleiset tunnisteet paikallisen kielen perusteella.",
@@ -1001,8 +1030,14 @@
"delete-recipes": "Poista Reseptit",
"source-unit-will-be-deleted": "Lähdeyksikkö poistetaan"
},
"create-alias": "Create Alias",
"manage-aliases": "Manage Aliases",
"recipe-actions": {
"recipe-actions-data": "Reseptin toimintojen käyttötiedot",
"new-recipe-action": "Uusi reseptin toiminto",
"edit-recipe-action": "Muuta reseptin toimintoa",
"action-type": "Toiminnon tyyppi"
},
"create-alias": "Luo alias",
"manage-aliases": "Hallitse aliaksia",
"seed-data": "Tietokannan pohjadata",
"seed": "Lisää pohjadata",
"data-management": "Tietojen hallinta",
@@ -1012,9 +1047,9 @@
"columns": "Sarakkeet",
"combine": "Yhdistä",
"categories": {
"edit-category": "Edit Category",
"new-category": "New Category",
"category-data": "Category Data"
"edit-category": "Muuta luokkaa",
"new-category": "Uusi luokka",
"category-data": "Luokan tiedot"
},
"tags": {
"new-tag": "New Tag",
@@ -1147,6 +1182,7 @@
"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",
"openai": "OpenAI",
"show-individual-confidence": "Näytä yksilöllinen luottamus",
"ingredient-text": "Ainesosan Teksti",
"average-confident": "{0} Luottamus",

View File

@@ -15,7 +15,7 @@
"download-log": "Télécharger les logs",
"download-recipe-json": "Dernier JSON récupéré",
"github": "GitHub",
"log-lines": "Lignes de log",
"log-lines": "Lignes du journal",
"not-demo": "Non démo",
"portfolio": "Portfolio",
"production": "Production",
@@ -50,7 +50,7 @@
"category": "Catégorie"
},
"events": {
"apprise-url": "URL apprise",
"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?",
@@ -64,15 +64,16 @@
"something-went-wrong": "Une erreur s'est produite!",
"subscribed-events": "Évènements suivis",
"test-message-sent": "Message de test envoyé",
"message-sent": "Message envoyé",
"new-notification": "Nouvelle notification",
"event-notifiers": "Notifications d'événements",
"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 de l'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",
"shopping-list-events": "Événements de la liste d'épicerie",
"cookbook-events": "Événements du livre de recettes",
"tag-events": "Événements des mots-clés",
"category-events": "Événements de catégories",
@@ -147,8 +148,8 @@
"show-all": "Tout afficher",
"shuffle": "Mélanger",
"sort": "Trier",
"sort-ascending": "Tri croissant",
"sort-descending": "Tri décroissant",
"sort-ascending": "Trier par ordre croissant",
"sort-descending": "Trier par ordre décroissant",
"sort-alphabetically": "Alphabétique",
"status": "Statut",
"subject": "Sujet",
@@ -160,6 +161,7 @@
"test": "Tester",
"themes": "Thèmes",
"thursday": "Jeudi",
"title": "Titre",
"token": "Jeton",
"tuesday": "Mardi",
"type": "Type",
@@ -203,12 +205,12 @@
"selected-count": "Sélectionné : {count}",
"export-all": "Exporter tout",
"refresh": "Actualiser",
"upload-file": "Transférer un fichier",
"upload-file": "Téléverser un fichier",
"created-on-date": "Créé le {0}",
"unsaved-changes": "Vous avez des modifications non enregistrées. Voulez-vous les enregistrer? Ok pour enregistrer, annuler pour ignorer les modifications.",
"clipboard-copy-failure": "Échec de la copie vers le presse-papiers.",
"confirm-delete-generic-items": "Êtes-vous sûr de vouloir supprimer les éléments suivants ?",
"organizers": "Organizers"
"organizers": "Classification"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Êtes-vous certain de vouloir supprimer <b>{groupName}<b/>?",
@@ -289,6 +291,8 @@
"mealplan-updated": "Menu mis à jour",
"no-meal-plan-defined-yet": "Aucun menu planifié",
"no-meal-planned-for-today": "Aucun repas prévu pour aujourd'hui",
"numberOfDays-hint": "Nombre de jours lors du chargement de la page",
"numberOfDays-label": "Jours par défaut",
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "Seules les recettes appartenant à ces catégories seront utilisées dans les menus",
"planner": "Planificateur",
"quick-week": "Semaine rapide",
@@ -375,6 +379,10 @@
"myrecipebox": {
"title": "My Recipe Box",
"description-long": "Mealie peut importer des recettes depuis My Recipe Box. Exportez vos recettes au format CSV, puis téléchargez le fichier CSV ci-dessous."
},
"recipekeeper": {
"title": "Recipe Keeper",
"description-long": "Mealie peut importer des recettes depuis Recipe Keeper. Exportez vos recettes au format Zip, puis téléversez le fichier .zip ci-dessous."
}
},
"new-recipe": {
@@ -582,7 +590,23 @@
"upload-image": "Ajouter une image",
"screen-awake": "Garder lécran allumé",
"remove-image": "Supprimer limage",
"nextStep": "Étape suivante"
"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.",
"select-parser": "Sélectionner l'analyseur",
"natural-language-processor": "Traitement du Langage Naturel",
"brute-parser": "Analyseur brut",
"openai-parser": "Parseur OpenAI",
"parse-all": "Tout analyser",
"no-unit": "Pas d'unité",
"missing-unit": "Créer une unité manquante : {unit}",
"missing-food": "Créer un aliment manquant : {food}",
"no-food": "Aucun aliment"
}
},
"search": {
"advanced-search": "Recherche avancée",
@@ -611,6 +635,7 @@
"backup-created-at-response-export_path": "Sauvegarde créée dans {path}",
"backup-deleted": "Sauvegarde supprimée",
"restore-success": "Restauration réussie",
"restore-fail": "Échec de la restauration. Vérifiez les journaux de votre serveur pour plus de détails",
"backup-tag": "Tag de la sauvegarde",
"create-heading": "Créer une sauvegarde",
"delete-backup": "Supprimer la sauvegarde",
@@ -723,8 +748,8 @@
"volumes-are-configured-correctly": "Les volumes sont configurés correctement.",
"status-unknown-try-running-a-validation": "Statut inconnu. Essayez de lancer une validation.",
"validate": "Valider",
"email-configuration-status": "État de la configuration e-mail",
"email-configured": "E-mail configuré",
"email-configuration-status": "État de la configuration courriel",
"email-configured": "Courriel configuré",
"email-test-results": "Résultats des tests e-mail",
"ready": "Prêt",
"not-ready": "Pas prêt - Vérifier les variables d'environnement",
@@ -747,7 +772,10 @@
"recipe-scraper-version": "Version du Scraper de recette",
"oidc-ready": "Prêt pour OIDC",
"oidc-ready-error-text": "Toutes les valeurs OIDC ne sont pas configurées. Vous pouvez ignorer cet avertissement si vous nutilisez pas lauthentification OIDC.",
"oidc-ready-success-text": "Les variables OIDC obligatoires sont toutes définies."
"oidc-ready-success-text": "Les variables OIDC obligatoires sont toutes définies.",
"openai-ready": "Prêt pour OpenAI",
"openai-ready-error-text": "Toutes les valeurs OpenAI ne sont pas configurées. Vous pouvez ignorer cet avertissement si vous n'utilisez pas les fonctionnalités OpenAI.",
"openai-ready-success-text": "Les variables OpenAI obligatoires sont toutes définies."
},
"shopping-list": {
"all-lists": "Toutes les listes",
@@ -761,6 +789,7 @@
"food": "Aliments",
"note": "Note",
"label": "Étiquette",
"save-label": "Sauvegarder le libellé",
"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",
@@ -897,9 +926,9 @@
"enable-advanced-content": "Activer le contenu avancé",
"enable-advanced-content-description": "Active les fonctionnalités avancées comme la mise à l'échelle des recettes, les clés API, les Webhooks, et la gestion des données. Ne vous inquiétez pas, vous pouvez toujours modifier cela plus tard",
"favorite-recipes": "Recettes préférées",
"email-or-username": "E-mail ou nom d'utilisateur",
"email-or-username": "Courriel ou nom d'utilisateur",
"remember-me": "Se souvenir de moi",
"please-enter-your-email-and-password": "Veuillez saisir votre e-mail et votre mot de passe",
"please-enter-your-email-and-password": "Veuillez entrer votre adresse courriel et votre mot de passe",
"invalid-credentials": "Identifiants invalides",
"account-locked-please-try-again-later": "Compte verrouillé. Veuillez réessayer plus tard",
"user-favorites": "Favoris utilisateur",
@@ -1001,6 +1030,12 @@
"delete-recipes": "Supprimer les recettes",
"source-unit-will-be-deleted": "L'unité source sera supprimée"
},
"recipe-actions": {
"recipe-actions-data": "Données des actions de recette",
"new-recipe-action": "Nouvelle action de recette",
"edit-recipe-action": "Modifier l'action de recette",
"action-type": "Type d'action"
},
"create-alias": "Créer un alias",
"manage-aliases": "Gérer les alias",
"seed-data": "Initialiser les données",
@@ -1042,7 +1077,7 @@
"validation": {
"group-name-is-taken": "Le nom du groupe est déjà pris",
"username-is-taken": "Nom dutilisateur déjà utilisé",
"email-is-taken": "Cet e-mail est déjà pris",
"email-is-taken": "Cette adresse courriel est déjà prise",
"this-field-is-required": "Ce champ est obligatoire"
},
"export": {
@@ -1147,6 +1182,7 @@
"ingredients-natural-language-processor-explanation-2": "Ce n'est pas parfait, mais cela donne de bons résultats en général et est un bon point de départ pour décomposer manuellement les ingrédients dans des champs individuels. Alternativement, vous pouvez également utiliser le processeur « Brut » qui utilise une technique de correspondance (patterns) pour identifier les ingrédients.",
"nlp": "NLP",
"brute": "Brut",
"openai": "OpenAI",
"show-individual-confidence": "Afficher la confiance individuelle",
"ingredient-text": "Texte de l'ingrédient",
"average-confident": "Confiant à {0}",
@@ -1168,21 +1204,21 @@
}
},
"profile": {
"welcome-user": "👋 Welcome, {0}!",
"welcome-user": "👋 Bienvenue, {0}!",
"description": "Gérez votre profil, les recettes et les paramètres de groupe.",
"get-invite-link": "Obtenir un lien d'invitation",
"get-public-link": "Voir le lien public",
"account-summary": "Aperçu du compte",
"account-summary-description": "Here's a summary of your group's information.",
"account-summary-description": "Voici un résumé des informations de votre groupe.",
"group-statistics": "Statistiques du groupe",
"group-statistics-description": "Les statistiques de votre groupe vous donnent un aperçu de la façon dont vous utilisez Mealie.",
"storage-capacity": "Capacité de stockage",
"storage-capacity-description": "Votre capacité de stockage est un calcul des images et des ressources que vous avez téléchargées.",
"personal": "Personnel",
"personal-description": "These are settings that are personal to you. Changes here won't affect other users.",
"personal-description": "Il s'agit de paramètres qui vous sont personnels. Les modifications ici n'affecteront pas les autres utilisateurs.",
"user-settings": "Paramètres utilisateur",
"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": "Gérez vos préférences, changez votre mot de passe et mettez à jour votre adresse courriel.",
"api-tokens-description": "Gérez vos jetons d'API pour accéder à partir d'applications externes.",
"group-description": "Ces éléments sont partagés au sein de votre groupe. Un changement impactera l'ensemble du groupe !",
"group-settings": "Paramètres de groupe",
"group-settings-description": "Gérez vos paramètres de groupe habituels tels que le menu de la semaine et les paramètres de confidentialité.",
@@ -1191,13 +1227,13 @@
"members-description": "Voyez qui est dans votre groupe et gérez leurs autorisations.",
"webhooks-description": "Configurez les 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 les courriels et les notifications push qui se déclenchent sur des événements spécifiques.",
"manage-data": "Gérer les données",
"manage-data-description": "Manage your Mealie data; Foods, Units, Categories, Tags and more.",
"manage-data-description": "Gérez vos données Mealie, Aliments, Unités, Catégories, Tags et plus.",
"data-migrations": "Migration des données",
"data-migrations-description": "Migrate your existing data from other applications like Nextcloud Recipes and Chowdown.",
"email-sent": "E-mail envoyé",
"error-sending-email": "Erreur lors de l'envoi de l'email",
"data-migrations-description": "Migrez vos données existantes à partir d'autres applications comme Nextcloud Cookbook et Chowdown.",
"email-sent": "Courriel envoyé",
"error-sending-email": "Erreur lors de l'envoi du courriel",
"personal-information": "Informations personnelles",
"preferences": "Préférences",
"show-advanced-description": "Afficher les fonctionnalités avancées (clés API, Webhooks, et gestion des données)",

View File

@@ -64,6 +64,7 @@
"something-went-wrong": "Une erreur sest produite!",
"subscribed-events": "Évènements suivis",
"test-message-sent": "Message de test envoyé",
"message-sent": "Message envoyé",
"new-notification": "Nouvelle notification",
"event-notifiers": "Notifications d'événements",
"apprise-url-skipped-if-blank": "URL Apprise (ignoré si vide)",
@@ -160,6 +161,7 @@
"test": "Tester",
"themes": "Thèmes",
"thursday": "Jeudi",
"title": "Titre",
"token": "Jeton",
"tuesday": "Mardi",
"type": "Type",
@@ -208,7 +210,7 @@
"unsaved-changes": "Vous avez des modifications non enregistrées. Voulez-vous enregistrer avant de partir? OK pour enregistrer, Annuler pour ignorer les modifications.",
"clipboard-copy-failure": "Échec de la copie dans le presse-papiers.",
"confirm-delete-generic-items": "Êtes-vous sûr de vouloir supprimer les éléments suivants ?",
"organizers": "Organizers"
"organizers": "Classification"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Voulez-vous vraiment supprimer <b>{groupName}<b/>?",
@@ -289,6 +291,8 @@
"mealplan-updated": "Menu mis à jour",
"no-meal-plan-defined-yet": "Aucun menu planifié",
"no-meal-planned-for-today": "Aucun repas prévu pour aujourdhui",
"numberOfDays-hint": "Nombre de jours lors du chargement de la page",
"numberOfDays-label": "Jours par défaut",
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "Seules les recettes appartenant à ces catégories seront utilisées dans les menus",
"planner": "Menu",
"quick-week": "Semaine rapide",
@@ -375,6 +379,10 @@
"myrecipebox": {
"title": "My Recipe Box",
"description-long": "Mealie peut importer des recettes depuis My Recipe Box. Exportez vos recettes au format CSV, puis téléchargez le fichier CSV ci-dessous."
},
"recipekeeper": {
"title": "Recipe Keeper",
"description-long": "Mealie peut importer des recettes depuis Recipe Keeper. Exportez vos recettes au format Zip, puis téléversez le fichier .zip ci-dessous."
}
},
"new-recipe": {
@@ -582,7 +590,23 @@
"upload-image": "Envoyer une image",
"screen-awake": "Garder lécran allumé",
"remove-image": "Supprimer limage",
"nextStep": "Étape suivante"
"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.",
"select-parser": "Sélectionner l'analyseur",
"natural-language-processor": "Traitement du Langage Naturel",
"brute-parser": "Analyseur brut",
"openai-parser": "Parseur OpenAI",
"parse-all": "Tout analyser",
"no-unit": "Pas d'unité",
"missing-unit": "Créer une unité manquante : {unit}",
"missing-food": "Créer un aliment manquant : {food}",
"no-food": "Aucun aliment"
}
},
"search": {
"advanced-search": "Recherche avancée",
@@ -611,6 +635,7 @@
"backup-created-at-response-export_path": "Sauvegarde créée dans {path}",
"backup-deleted": "Sauvegarde supprimée",
"restore-success": "Restauration réussie",
"restore-fail": "Échec de la restauration. Vérifiez les journaux de votre serveur pour plus de détails",
"backup-tag": "Tag de la sauvegarde",
"create-heading": "Créer une sauvegarde",
"delete-backup": "Supprimer la sauvegarde",
@@ -747,7 +772,10 @@
"recipe-scraper-version": "Version du Scraper de recette",
"oidc-ready": "Prêt pour OIDC",
"oidc-ready-error-text": "Toutes les valeurs OIDC ne sont pas configurées. Vous pouvez ignorer cet avertissement si vous nutilisez pas lauthentification OIDC.",
"oidc-ready-success-text": "Les variables OIDC obligatoires sont toutes définies."
"oidc-ready-success-text": "Les variables OIDC obligatoires sont toutes définies.",
"openai-ready": "Prêt pour OpenAI",
"openai-ready-error-text": "Toutes les valeurs OpenAI ne sont pas configurées. Vous pouvez ignorer cet avertissement si vous n'utilisez pas les fonctionnalités OpenAI.",
"openai-ready-success-text": "Les variables OpenAI obligatoires sont toutes définies."
},
"shopping-list": {
"all-lists": "Toutes les listes",
@@ -761,6 +789,7 @@
"food": "Aliment",
"note": "Note",
"label": "Étiquette",
"save-label": "Sauvegarder le libellé",
"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",
@@ -1001,6 +1030,12 @@
"delete-recipes": "Supprimer les recettes",
"source-unit-will-be-deleted": "L'unité source sera supprimée"
},
"recipe-actions": {
"recipe-actions-data": "Données des actions de recette",
"new-recipe-action": "Nouvelle action de recette",
"edit-recipe-action": "Modifier l'action de recette",
"action-type": "Type d'action"
},
"create-alias": "Créer un alias",
"manage-aliases": "Gérer les alias",
"seed-data": "Initialiser les données",
@@ -1147,6 +1182,7 @@
"ingredients-natural-language-processor-explanation-2": "Ce n'est pas parfait, mais cela donne de bons résultats en général et est un bon point de départ pour décomposer manuellement les ingrédients dans des champs individuels. Alternativement, vous pouvez également utiliser le processeur « Brut » qui utilise une technique de correspondance (patterns) pour identifier les ingrédients.",
"nlp": "NLP",
"brute": "Brut",
"openai": "OpenAI",
"show-individual-confidence": "Afficher la confiance individuelle",
"ingredient-text": "Texte de l'ingrédient",
"average-confident": "Confiant à {0}",
@@ -1168,21 +1204,21 @@
}
},
"profile": {
"welcome-user": "👋 Welcome, {0}!",
"welcome-user": "👋 Bienvenue, {0} !",
"description": "Gérez votre profil, les recettes et les paramètres de groupe.",
"get-invite-link": "Obtenir un lien d'invitation",
"get-public-link": "Voir le lien public",
"account-summary": "Aperçu du compte",
"account-summary-description": "Here's a summary of your group's information.",
"account-summary-description": "Voici un résumé des informations de votre groupe.",
"group-statistics": "Statistiques du groupe",
"group-statistics-description": "Les statistiques de votre groupe vous donnent un aperçu de la façon dont vous utilisez Mealie.",
"storage-capacity": "Capacité de stockage",
"storage-capacity-description": "Votre capacité de stockage est un calcul des images et des ressources que vous avez téléchargées.",
"personal": "Personnel",
"personal-description": "These are settings that are personal to you. Changes here won't affect other users.",
"personal-description": "Ici se trouvent des paramètres qui vous sont propres personnellement. Toute modification n'affectera pas les autres utilisateurs.",
"user-settings": "Paramètres utilisateur",
"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": "Gérez vos préférences, changez votre mot de passe et mettez à jour votre adresse e-mail.",
"api-tokens-description": "Gérez vos jetons API pour un accès à partir d'applications externes.",
"group-description": "Ces éléments sont partagés au sein de votre groupe. Un changement impactera l'ensemble du groupe !",
"group-settings": "Paramètres de groupe",
"group-settings-description": "Gérez vos paramètres de groupe habituels tels que le menu de la semaine et les paramètres de confidentialité.",
@@ -1193,9 +1229,9 @@
"notifiers": "Notifications",
"notifiers-description": "Configurer les e-mails et les notifications push qui se déclenchent sur des événements spécifiques.",
"manage-data": "Gérer les données",
"manage-data-description": "Manage your Mealie data; Foods, Units, Categories, Tags and more.",
"manage-data-description": "Gérez vos données Mealie, Aliments, Unités, Catégories, Tags et plus.",
"data-migrations": "Migration des données",
"data-migrations-description": "Migrate your existing data from other applications like Nextcloud Recipes and Chowdown.",
"data-migrations-description": "Migrez vos données existantes à partir d'autres applications comme Nextcloud Cookbook et Chowdown.",
"email-sent": "E-mail envoyé",
"error-sending-email": "Erreur lors de l'envoi de l'email",
"personal-information": "Informations personnelles",

View File

@@ -25,14 +25,14 @@
"sponsor": "Patrocinador"
},
"asset": {
"assets": "Activos",
"assets": "Recursos",
"code": "Código",
"file": "Ficheiro",
"image": "Imaxe",
"new-asset": "Novo documento",
"new-asset": "Novo Recurso",
"pdf": "PDF",
"recipe": "Receita",
"show-assets": "Amosar documentos",
"show-assets": "Amosar Recursos",
"error-submitting-form": "Erro ao enviar formulario"
},
"category": {
@@ -56,60 +56,61 @@
"event-delete-confirmation": "Estás seguro de que queres eliminar este evento?",
"event-deleted": "Evento eliminado",
"event-updated": "Evento actualizado",
"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!",
"subscribed-events": "Subscribed Events",
"test-message-sent": "Test Message Sent",
"new-notification": "New Notification",
"event-notifiers": "Event Notifiers",
"apprise-url-skipped-if-blank": "Apprise URL (skipped if blank)",
"enable-notifier": "Enable Notifier",
"what-events": "What events should this notifier subscribe to?",
"user-events": "User Events",
"mealplan-events": "Mealplan Events",
"when-a-user-in-your-group-creates-a-new-mealplan": "When a user in your group creates a new mealplan",
"shopping-list-events": "Shopping List Events",
"cookbook-events": "Cookbook Events",
"tag-events": "Tag Events",
"category-events": "Category Events",
"when-a-new-user-joins-your-group": "When a new user joins your group",
"recipe-events": "Recipe Events"
"new-notification-form-description": "Mealie usa a biblioteca de Appprise para xerar notificacións. Ofrecen moitas opcións para que os servizos usen as notificacións. Consulte a súa wiki para obter unha guía completa sobre como crear o URL para o seu servizo. Se está dispoñible, a selección do tipo de notificación pode incluír funcións adicionais.",
"new-version": "Nova versión dispoñible!",
"notification": "Notificación",
"refresh": "Actualizar",
"scheduled": "Programación",
"something-went-wrong": "Algo Fallou!",
"subscribed-events": "Eventos Subscritos",
"test-message-sent": "Mensaxe de Proba Enviada",
"message-sent": "Mensaxe Enviada",
"new-notification": "Nova notificación",
"event-notifiers": "Notificadores de Eventos",
"apprise-url-skipped-if-blank": "URL de Apprise (omitido se está en branco)",
"enable-notifier": "Activar o Notificador",
"what-events": "A que eventos debería subscribirse este notificador?",
"user-events": "Eventos de Usuario",
"mealplan-events": "Eventos do Menú",
"when-a-user-in-your-group-creates-a-new-mealplan": "Cando un usuario do teu grupo crea un novo plan de comidas",
"shopping-list-events": "Eventos da Lista da Compra",
"cookbook-events": "Eventos de Libros de Cociña",
"tag-events": "Eventos de Etiquetas",
"category-events": "Eventos de Categorías",
"when-a-new-user-joins-your-group": "Cando un novo usuario se une ao teu grupo",
"recipe-events": "Eventos de Receitas"
},
"general": {
"add": "Add",
"cancel": "Cancel",
"clear": "Clear",
"close": "Close",
"confirm": "Confirm",
"confirm-how-does-everything-look": "How does everything look?",
"confirm-delete-generic": "Are you sure you want to delete this?",
"copied_message": "Copied!",
"create": "Create",
"created": "Created",
"custom": "Custom",
"dashboard": "Dashboard",
"delete": "Delete",
"disabled": "Disabled",
"download": "Download",
"duplicate": "Duplicate",
"edit": "Edit",
"enabled": "Enabled",
"exception": "Exception",
"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",
"home": "Home",
"add": "Engadir",
"cancel": "Cancelar",
"clear": "Borrar",
"close": "Pechar",
"confirm": "Confirmar",
"confirm-how-does-everything-look": "Como se ve todo?",
"confirm-delete-generic": "Estás seguro de que queres eliminar isto?",
"copied_message": "Copiado!",
"create": "Crear",
"created": "Creado",
"custom": "Personalizado",
"dashboard": "Panel",
"delete": "Eliminar",
"disabled": "Desactivado",
"download": "Descargar",
"duplicate": "Duplicar",
"edit": "Editar",
"enabled": "Activado",
"exception": "Excepción",
"failed-count": "Produciuse un erro: {count}",
"failure-uploading-file": "Produciuse un erro ao cargar o ficheiro",
"favorites": "Favoritos",
"field-required": "Campo Obrigatorio",
"file-folder-not-found": "Non se atopou o ficheiro/cartafol",
"file-uploaded": "Ficheiro cargado",
"filter": "Filtro",
"friday": "Venres",
"general": "Xeral",
"get": "Obter",
"home": "Inicio",
"image": "Imaxe",
"image-upload-failed": "Fallou a subida da imaxe",
"import": "Importar",
@@ -144,196 +145,199 @@
"save": "Gardar",
"settings": "Axustes",
"share": "Compartir",
"show-all": "Show All",
"show-all": "Amosar todo",
"shuffle": "Barallar",
"sort": "Ordenar",
"sort-ascending": "Sort Ascending",
"sort-descending": "Sort Descending",
"sort-ascending": "Orde Ascendente",
"sort-descending": "Orde Descendente",
"sort-alphabetically": "Alfabético",
"status": "Estado",
"subject": "Asunto",
"submit": "Enviar",
"success-count": "Éxito: {count}",
"sunday": "Domingo",
"system": "System",
"system": "Sistema",
"templates": "Modelos:",
"test": "Probar",
"themes": "Temas",
"thursday": "Xoves",
"title": "Titulo",
"token": "Identificador",
"tuesday": "Martes",
"type": "Tipo",
"update": "Actualizar",
"updated": "Updated",
"upload": "Upload",
"updated": "Actualizado",
"upload": "Subir",
"url": "URL",
"view": "View",
"wednesday": "Wednesday",
"yes": "Yes",
"foods": "Foods",
"units": "Units",
"back": "Back",
"next": "Next",
"start": "Start",
"toggle-view": "Toggle View",
"date": "Date",
"view": "Ver",
"wednesday": "Mércores",
"yes": "Si",
"foods": "Comidas",
"units": "Unidades",
"back": "Atrás",
"next": "Seguinte",
"start": "Comezo",
"toggle-view": "Cambiar a Vista",
"date": "Data",
"id": "Id",
"owner": "Owner",
"date-added": "Date Added",
"none": "None",
"run": "Run",
"menu": "Menu",
"a-name-is-required": "A Name is Required",
"owner": "Dono",
"date-added": "Engadida o",
"none": "Nada",
"run": "Executar",
"menu": "Menú",
"a-name-is-required": "Requírese un Nome",
"delete-with-name": "Delete {name}",
"confirm-delete-generic-with-name": "Are you sure you want to delete this {name}?",
"confirm-delete-own-admin-account": "Please note that you are trying to delete your own admin account! This action cannot be undone and will permanently delete your account?",
"organizer": "Organizer",
"transfer": "Transfer",
"copy": "Copy",
"color": "Color",
"timestamp": "Timestamp",
"last-made": "Last Made",
"learn-more": "Learn More",
"this-feature-is-currently-inactive": "This feature is currently inactive",
"clipboard-not-supported": "Clipboard not supported",
"copied-to-clipboard": "Copied to clipboard",
"your-browser-does-not-support-clipboard": "Your browser does not support clipboard",
"copied-items-to-clipboard": "No item copied to clipboard|One item copied to clipboard|Copied {count} items to clipboard",
"actions": "Actions",
"selected-count": "Selected: {count}",
"export-all": "Export All",
"refresh": "Refresh",
"upload-file": "Upload File",
"created-on-date": "Created on: {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.",
"confirm-delete-generic-items": "Are you sure you want to delete the following items?",
"organizers": "Organizers"
"confirm-delete-generic-with-name": "Estás seguro de que queres eliminar este {name}?",
"confirm-delete-own-admin-account": "Ten en conta que estás tentando eliminar a túa propia conta de administrador. Esta acción non se pode desfacer e eliminarase permanentemente a túa conta?",
"organizer": "Organizador",
"transfer": "Transferir",
"copy": "Copiar",
"color": "Cor",
"timestamp": "Data e hora",
"last-made": "Feito por Última Vez",
"learn-more": "Saber máis",
"this-feature-is-currently-inactive": "Esta función está actualmente inactiva",
"clipboard-not-supported": "Portapapeis non compatible",
"copied-to-clipboard": "Copiado ao portapapeis",
"your-browser-does-not-support-clipboard": "O teu navegador non soporta o portapapeis",
"copied-items-to-clipboard": "Non se copiou ningún elemento no portapapeis|Copiouse un elemento no portapapeis|Copiáronse {count} elementos no portapapeis",
"actions": "Accións",
"selected-count": "Seleccionado: {count}",
"export-all": "Exportar Todo",
"refresh": "Recargar",
"upload-file": "Subir Arquivo",
"created-on-date": "Creado o: {0}",
"unsaved-changes": "Tes cambios sen gardar. Queres gardar antes de saír? OK para gardar, Cancelar para descartar cambios.",
"clipboard-copy-failure": "Produciuse un erro ao copiar contido no portapapeis.",
"confirm-delete-generic-items": "Estás seguro de que queres eliminar os seguintes elementos?",
"organizers": "Organizadores"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Are you sure you want to delete <b>{groupName}<b/>?",
"cannot-delete-default-group": "Cannot delete default group",
"cannot-delete-group-with-users": "Cannot delete group with users",
"confirm-group-deletion": "Confirm Group Deletion",
"create-group": "Create Group",
"error-updating-group": "Error updating group",
"group": "Group",
"group-deleted": "Group deleted",
"group-deletion-failed": "Group deletion failed",
"group-id-with-value": "Group ID: {groupID}",
"group-name": "Group Name",
"group-not-found": "Group not found",
"group-token": "Group Token",
"group-with-value": "Group: {groupID}",
"groups": "Groups",
"manage-groups": "Manage Groups",
"user-group": "User Group",
"user-group-created": "User Group Created",
"user-group-creation-failed": "User Group Creation Failed",
"are-you-sure-you-want-to-delete-the-group": "Estás seguro de que queres eliminar <b>{groupName}<b/>?",
"cannot-delete-default-group": "Non se pode eliminar o grupo predeterminado",
"cannot-delete-group-with-users": "Non se pode eliminar un grupo con usuarios",
"confirm-group-deletion": "Confirme a Eliminación do Grupo",
"create-group": "Crear Grupo",
"error-updating-group": "Produciuse un erro ao actualizar o grupo",
"group": "Grupo",
"group-deleted": "Grupo eliminado",
"group-deletion-failed": "Produciuse un erro ao eliminar o grupo",
"group-id-with-value": "ID do grupo: {groupID}",
"group-name": "Nome do Grupo",
"group-not-found": "Non se atopou o grupo",
"group-token": "Token de Grupo",
"group-with-value": "Grupo: {groupID}",
"groups": "Grupos",
"manage-groups": "Xestionar Grupos",
"user-group": "Grupo de Usuarios",
"user-group-created": "Grupo de Usuarios Creado",
"user-group-creation-failed": "Produciuse un Erro na Creación do Grupo de Usuarios",
"settings": {
"keep-my-recipes-private": "Keep My Recipes Private",
"keep-my-recipes-private-description": "Sets your group and all recipes defaults to private. You can always change this later."
"keep-my-recipes-private": "Mantén as Miñas Receitas Privadas",
"keep-my-recipes-private-description": "Establece o teu grupo e todas as receitas como privados por defecto. Sempre podes cambiar isto máis tarde."
},
"manage-members": "Manage Members",
"manage-members-description": "Manage the permissions of the members in your groups. {manage} allows the user to access the data-management page {invite} allows the user to generate invitation links for other users. Group owners cannot change their own permissions.",
"manage": "Manage",
"invite": "Invite",
"looking-to-update-your-profile": "Looking to Update Your Profile?",
"default-recipe-preferences-description": "These are the default settings when a new recipe is created in your group. These can be changed for individual recipes in the recipe settings menu.",
"default-recipe-preferences": "Default Recipe Preferences",
"group-preferences": "Group Preferences",
"private-group": "Private Group",
"private-group-description": "Setting your group to private will default all public view options to default. This overrides an individual recipes public view settings.",
"enable-public-access": "Enable Public Access",
"enable-public-access-description": "Make group recipes public by default, and allow visitors to view recipes without logging-in",
"allow-users-outside-of-your-group-to-see-your-recipes": "Allow users outside of your group to see your recipes",
"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",
"show-nutrition-information": "Show nutrition information",
"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-recipe-assets": "Show recipe assets",
"show-recipe-assets-description": "When enabled the recipe assets will be shown on the recipe if available",
"default-to-landscape-view": "Default to landscape view",
"default-to-landscape-view-description": "When enabled the recipe header section will be shown in landscape view",
"disable-users-from-commenting-on-recipes": "Disable users from commenting on recipes",
"disable-users-from-commenting-on-recipes-description": "Hides the comment section on the recipe page and disables commenting",
"disable-organizing-recipe-ingredients-by-units-and-food": "Disable organizing recipe ingredients by units and food",
"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.",
"general-preferences": "General Preferences",
"group-recipe-preferences": "Group Recipe Preferences",
"report": "Report",
"report-with-id": "Report ID: {id}",
"group-management": "Group Management",
"admin-group-management": "Admin Group Management",
"admin-group-management-text": "Changes to this group will be reflected immediately.",
"group-id-value": "Group Id: {0}"
"manage-members": "Xestionar Membros",
"manage-members-description": "Xestiona os permisos dos membros dos teus grupos. {manage} permítelle ao usuario acceder á páxina de xestión de datos {invite} permítelle xerar ligazóns de invitación para outros usuarios. Os propietarios do grupo non poden cambiar os seus propios permisos.",
"manage": "Xestionar",
"invite": "Convidar",
"looking-to-update-your-profile": "Buscas Actualizar o Teu Perfil?",
"default-recipe-preferences-description": "Estas son as opcións predeterminadas cando se crea unha nova receita no teu grupo. Pódense cambiar para receitas individuais no menú de configuración de receitas.",
"default-recipe-preferences": "Preferencias de Receitas Predeterminadas",
"group-preferences": "Preferencias do Grupo",
"private-group": "Grupo Privado",
"private-group-description": "Ao configurar o teu grupo como privado, todas as opcións de visualización pública serán predeterminadas. Isto anula a configuración de vista pública dunha receita individual.",
"enable-public-access": "Habilitar o Acceso Público",
"enable-public-access-description": "Fai que as receitas do grupo sexan públicas de forma predeterminada e permita que os visitantes vexan receitas sen iniciar sesión",
"allow-users-outside-of-your-group-to-see-your-recipes": "Permite que os usuarios alleos ao teu grupo vexan as túas receitas",
"allow-users-outside-of-your-group-to-see-your-recipes-description": "Cando estea activado, podes usar unha ligazón pública para compartir receitas específicas sen autorizar o usuario. Cando estea desactivado, só podes compartir receitas con usuarios que estean no teu grupo ou cunha ligazón privada xerada previamente",
"show-nutrition-information": "Mostrar información nutricional",
"show-nutrition-information-description": "Cando estea activado, a información nutricional mostrarase na receita se está dispoñible. Se non hai información nutricional dispoñible, a información nutricional non se mostrará",
"show-recipe-assets": "Mostrar recursos da receita",
"show-recipe-assets-description": "Cando estea activado, os recursos da receita mostraranse na receita se están dispoñibles",
"default-to-landscape-view": "Vista predeterminada en horizontal",
"default-to-landscape-view-description": "Cando estea activado, a sección de cabeceira da receita mostrarase en horizontal",
"disable-users-from-commenting-on-recipes": "Deshabilitar aos usuarios para comentar receitas",
"disable-users-from-commenting-on-recipes-description": "Oculta a sección de comentarios na páxina de receitas e desactiva os comentarios",
"disable-organizing-recipe-ingredients-by-units-and-food": "Desactivar a organización dos ingredientes da receita por unidades e alimentos",
"disable-organizing-recipe-ingredients-by-units-and-food-description": "Oculta os campos Comida, Unidade e Cantidade dos ingredientes e trata os ingredientes como campos de texto simple.",
"general-preferences": "Preferencias Xerais",
"group-recipe-preferences": "Preferencias de Receitas de Grupo",
"report": "Informar",
"report-with-id": "ID do informe: {id}",
"group-management": "Xestión de Grupos",
"admin-group-management": "Xestión do Grupo de Administración",
"admin-group-management-text": "Os cambios neste grupo reflectiranse inmediatamente.",
"group-id-value": "Id do grupo: {0}"
},
"meal-plan": {
"create-a-new-meal-plan": "Create a New Meal Plan",
"update-this-meal-plan": "Update this Meal Plan",
"dinner-this-week": "Dinner This Week",
"dinner-today": "Dinner Today",
"dinner-tonight": "DINNER TONIGHT",
"edit-meal-plan": "Edit Meal Plan",
"end-date": "End Date",
"group": "Group (Beta)",
"main": "Main",
"meal-planner": "Meal Planner",
"meal-plans": "Meal Plans",
"mealplan-categories": "MEALPLAN CATEGORIES",
"mealplan-created": "Mealplan created",
"mealplan-creation-failed": "Mealplan creation failed",
"mealplan-deleted": "Mealplan Deleted",
"mealplan-deletion-failed": "Mealplan deletion failed",
"mealplan-settings": "Mealplan Settings",
"mealplan-update-failed": "Mealplan update failed",
"mealplan-updated": "Mealplan Updated",
"no-meal-plan-defined-yet": "No meal plan defined yet",
"no-meal-planned-for-today": "No meal planned for today",
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "Only recipes with these categories will be used in Meal Plans",
"planner": "Planner",
"quick-week": "Quick Week",
"side": "Side",
"sides": "Sides",
"start-date": "Start Date",
"rule-day": "Rule Day",
"meal-type": "Meal Type",
"breakfast": "Breakfast",
"lunch": "Lunch",
"dinner": "Dinner",
"type-any": "Any",
"day-any": "Any",
"create-a-new-meal-plan": "Crea un Novo Menú",
"update-this-meal-plan": "Actualiza este Menú",
"dinner-this-week": "Cea Desta Semana",
"dinner-today": "Cea de Hoxe",
"dinner-tonight": "CEA DESTA NOITE",
"edit-meal-plan": "Editar o Menú",
"end-date": "Data de Finalización",
"group": "Grupo (Beta)",
"main": "Principal",
"meal-planner": "Planificador de Menús",
"meal-plans": "Menús",
"mealplan-categories": "CATEGORÍAS DE COMIDAS",
"mealplan-created": "Menú creado",
"mealplan-creation-failed": "Produciuse un erro ao crear o menú",
"mealplan-deleted": "Menú Eliminado",
"mealplan-deletion-failed": "Produciuse un erro ao eliminar o menú",
"mealplan-settings": "Axustes do Menú",
"mealplan-update-failed": "Produciuse un erro na actualización do menú",
"mealplan-updated": "Menú Actualizado",
"no-meal-plan-defined-yet": "Aínda non se definiu ningún menú",
"no-meal-planned-for-today": "Non hai ningunha comida prevista para hoxe",
"numberOfDays-hint": "Número de días ao cargar a páxina",
"numberOfDays-label": "Días Predeterminados",
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "Só se utilizarán receitas con estas categorías nos Menús",
"planner": "Planificador",
"quick-week": "Plan Rápido",
"side": "Guarnición",
"sides": "Guarnicións",
"start-date": "Data de inicio",
"rule-day": "Regra para o Día",
"meal-type": "Tipo de Comida",
"breakfast": "Almorzo",
"lunch": "Xantar",
"dinner": "Cea",
"type-any": "Calquera",
"day-any": "Calquera",
"editor": "Editor",
"meal-recipe": "Meal Recipe",
"meal-title": "Meal Title",
"meal-note": "Meal Note",
"note-only": "Note Only",
"random-meal": "Random Meal",
"random-dinner": "Random Dinner",
"random-side": "Random Side",
"this-rule-will-apply": "This rule will apply {dayCriteria} {mealTypeCriteria}.",
"to-all-days": "to all days",
"on-days": "on {0}s",
"for-all-meal-types": "for all meal types",
"for-type-meal-types": "for {0} meal types",
"meal-plan-rules": "Meal Plan Rules",
"new-rule": "New Rule",
"meal-plan-rules-description": "You can create rules for auto selecting recipes for your meal plans. These rules are used by the server to determine the random pool of recipes to select from when creating meal plans. Note that if rules have the same day/type constraints then the categories of the rules 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.",
"recipe-rules": "Recipe Rules",
"applies-to-all-days": "Applies to all days",
"applies-on-days": "Applies on {0}s",
"meal-plan-settings": "Meal Plan Settings"
"meal-recipe": "Receita de Comida",
"meal-title": "Título de Comida",
"meal-note": "Nota da Comida",
"note-only": "Só Nota",
"random-meal": "Comida Aleatoria",
"random-dinner": "Cea Aleatoria",
"random-side": "Guarnición Aleatoria",
"this-rule-will-apply": "Esta regra aplicarase {dayCriteria} {mealTypeCriteria}.",
"to-all-days": "a todos os días",
"on-days": "en {0}s",
"for-all-meal-types": "para todo tipo de comidas",
"for-type-meal-types": "para {0} tipos de comidas",
"meal-plan-rules": "Regras do Menú",
"new-rule": "Nova Regra",
"meal-plan-rules-description": "Podes crear regras para a selección automática de receitas para os teus menús. Estas regras son usadas polo servidor para determinar o grupo aleatorio de receitas para seleccionar ao crear menús. Teña en conta que se as regras teñen as mesmas restricións de día/tipo, fusionaranse as categorías das regras. Na práctica, é innecesario crear regras duplicadas, pero é posible facelo.",
"new-rule-description": "Ao crear unha nova regra para un menú, pode restrinxir a regra para que se aplique a un día específico da semana e/ou a un tipo específico de comida. Para aplicar unha regra a todos os días ou a todos os tipos de comidas, pode establecer a regra en \"Calquera\" que a aplicará a todos os valores posibles para o día e/ou o tipo de comida.",
"recipe-rules": "Regras da Receita",
"applies-to-all-days": "Aplícase a todos os días",
"applies-on-days": "Aplícase en {0}s",
"meal-plan-settings": "Axustes do Menú"
},
"migration": {
"migration-data-removed": "Migration data removed",
"new-migration": "New Migration",
"no-file-selected": "No File Selected",
"no-migration-data-available": "No Migration Data Available",
"previous-migrations": "Previous Migrations",
"recipe-migration": "Recipe Migration",
"migration-data-removed": "Elimináronse os datos de migración",
"new-migration": "Nova Migración",
"no-file-selected": "Non se Seleccionou Ningún Ficheiro",
"no-migration-data-available": "Non Hai Datos de Migración Dispoñibles",
"previous-migrations": "Migracións Anteriores",
"recipe-migration": "Migración de Receitas",
"chowdown": {
"description": "Migrate data from Chowdown",
"description-long": "Mealie natively supports the chowdown repository format. Download the code repository as a .zip file and upload it below.",
"description": "Migra os datos dende Chowdown",
"description-long": "Mealie admite de forma nativa o formato do repositorio de chowdown. Descarga o repositorio de códigos como ficheiro .zip e cárgao a continuación.",
"title": "Chowdown"
},
"nextcloud": {
@@ -363,18 +367,22 @@
"choose-migration-type": "Choose Migration Type",
"tag-all-recipes": "Tag all recipes with {tag-name} tag",
"nextcloud-text": "Nextcloud recipes can be imported from a zip file that contains the data stored in Nextcloud. See the example folder structure below to ensure your recipes are able to be imported.",
"chowdown-text": "Mealie natively supports the chowdown repository format. Download the code repository as a .zip file and upload it below.",
"chowdown-text": "Mealie admite de forma nativa o formato do repositorio de chowdown. Descarga o repositorio de códigos como ficheiro .zip e cárgao a continuación.",
"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.",
"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 pode importar receitas de Plan to Eat."
},
"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."
},
"recipekeeper": {
"title": "Garda Receitas",
"description-long": "Mealie pode importar receitas do Garda Receitas. Exporta as túas receitas en formato zip e, a continuación, carga o ficheiro .zip abaixo."
}
},
"new-recipe": {
@@ -405,81 +413,81 @@
"new-page-created": "New page created",
"page": "Page",
"page-creation-failed": "Page creation failed",
"page-deleted": "Page deleted",
"page-deletion-failed": "Page deletion failed",
"page-update-failed": "Page update failed",
"page-updated": "Page updated",
"pages-update-failed": "Pages update failed",
"pages-updated": "Pages updated",
"404-not-found": "404 Not Found",
"an-error-occurred": "An error occurred"
"page-deleted": "Páxina eliminada",
"page-deletion-failed": "Produciuse un erro ao eliminar a páxina",
"page-update-failed": "Produciuse un erro na actualización da páxina",
"page-updated": "Páxina actualizada",
"pages-update-failed": "Produciuse un erro na actualización das páxinas",
"pages-updated": "Páxinas actualizadas",
"404-not-found": "404 non atopado",
"an-error-occurred": "Houbo un erro"
},
"recipe": {
"add-key": "Add Key",
"add-to-favorites": "Add to Favorites",
"api-extras": "API Extras",
"calories": "Calories",
"calories-suffix": "calories",
"carbohydrate-content": "Carbohydrate",
"categories": "Categories",
"comment-action": "Comment",
"comment": "Comment",
"comments": "Comments",
"delete-confirmation": "Are you sure you want to delete this recipe?",
"delete-recipe": "Delete Recipe",
"description": "Description",
"disable-amount": "Disable Ingredient Amounts",
"add-key": "Engadir Chave",
"add-to-favorites": "Engadir a Favoritos",
"api-extras": "Extras da API",
"calories": "Calorías",
"calories-suffix": "calorías",
"carbohydrate-content": "Carbohidratos",
"categories": "Categorías",
"comment-action": "Comentar",
"comment": "Comentario",
"comments": "Comentarios",
"delete-confirmation": "Estás seguro de que queres eliminar esta receita?",
"delete-recipe": "Eliminar Receita",
"description": "Descrición",
"disable-amount": "Desactivar as Cantidades de Ingredientes",
"disable-comments": "Disable Comments",
"duplicate": "Duplicate recipe",
"duplicate-name": "Name of the new recipe",
"duplicate": "Duplicar a receita",
"duplicate-name": "Nome da nova receita",
"edit-scale": "Edit Scale",
"fat-content": "Fat",
"fiber-content": "Fiber",
"grams": "grams",
"ingredient": "Ingredient",
"ingredients": "Ingredients",
"insert-ingredient": "Insert Ingredient",
"insert-section": "Insert Section",
"instructions": "Instructions",
"key-name-required": "Key Name Required",
"landscape-view-coming-soon": "Landscape View",
"milligrams": "milligrams",
"new-key-name": "New Key Name",
"no-white-space-allowed": "No White Space Allowed",
"note": "Note",
"nutrition": "Nutrition",
"object-key": "Object Key",
"object-value": "Object Value",
"original-url": "Original URL",
"perform-time": "Cook Time",
"prep-time": "Prep Time",
"protein-content": "Protein",
"public-recipe": "Public Recipe",
"recipe-created": "Recipe created",
"recipe-creation-failed": "Recipe creation failed",
"recipe-deleted": "Recipe deleted",
"recipe-image": "Recipe Image",
"recipe-image-updated": "Recipe image updated",
"recipe-name": "Recipe Name",
"recipe-settings": "Recipe Settings",
"recipe-update-failed": "Recipe update failed",
"recipe-updated": "Recipe updated",
"remove-from-favorites": "Remove from Favorites",
"remove-section": "Remove Section",
"save-recipe-before-use": "Save recipe before use",
"section-title": "Section Title",
"servings": "Servings",
"share-recipe-message": "I wanted to share my {0} recipe with you.",
"show-nutrition-values": "Show Nutrition Values",
"sodium-content": "Sodium",
"step-index": "Step: {step}",
"sugar-content": "Sugar",
"title": "Title",
"total-time": "Total Time",
"unable-to-delete-recipe": "Unable to Delete Recipe",
"no-recipe": "No Recipe",
"locked-by-owner": "Locked by Owner",
"join-the-conversation": "Join the Conversation",
"fat-content": "Graxa",
"fiber-content": "Fibra",
"grams": "gramos",
"ingredient": "Ingrediente",
"ingredients": "Ingredientes",
"insert-ingredient": "Inserir Ingrediente",
"insert-section": "Inserir Sección",
"instructions": "Instrucns",
"key-name-required": "Nome da Chave Obrigatorio",
"landscape-view-coming-soon": "Vista Horizontal",
"milligrams": "miligramos",
"new-key-name": "Novo Nome da Chave",
"no-white-space-allowed": "Non se Permiten Espazos en Branco",
"note": "Nota",
"nutrition": "Nutrición",
"object-key": "Chave do Obxecto",
"object-value": "Valor do Obxecto",
"original-url": "URL orixinal",
"perform-time": "Tempo de Cocción",
"prep-time": "Tempo de Preparación",
"protein-content": "Proteína",
"public-recipe": "Receita Pública",
"recipe-created": "Receita creada",
"recipe-creation-failed": "Produciuse un erro na creación da receita",
"recipe-deleted": "Eliminouse a receita",
"recipe-image": "Imaxe da Receita",
"recipe-image-updated": "Actualizouse a imaxe da receita",
"recipe-name": "Nome da Receita",
"recipe-settings": "Configuración da Receita",
"recipe-update-failed": "Produciuse un erro na actualización da receita",
"recipe-updated": "Receita actualizada",
"remove-from-favorites": "Eliminar de Favoritos",
"remove-section": "Eliminar Sección",
"save-recipe-before-use": "Garda a receita antes de usala",
"section-title": "Título da Sección",
"servings": "Porcións",
"share-recipe-message": "Quería compartir a miña receita de {0} contigo.",
"show-nutrition-values": "Mostrar Valores Nutricionais",
"sodium-content": "Sodio",
"step-index": "Paso: {step}",
"sugar-content": "Azucre",
"title": "Titulo",
"total-time": "Tempo Total",
"unable-to-delete-recipe": "Non se Puido Eliminar a Receita",
"no-recipe": "Sen Receita",
"locked-by-owner": "Bloqueado polo Propietario",
"join-the-conversation": "Únete á Conversa",
"add-recipe-to-mealplan": "Add Recipe to Mealplan",
"entry-type": "Entry Type",
"date-format-hint": "MM/DD/YYYY format",
@@ -531,9 +539,9 @@
"open-timeline": "Open Timeline",
"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.",
"user-made-this": "{user} fixo isto",
"last-made-date": "Feito por Última Vez {date}",
"api-extras-description": "Os extras de receitas son unha característica clave da API de Mealie. Permítenche crear pares de clave/valor JSON personalizados dentro dunha receita, para facer referencia desde aplicacións de terceiros. Podes usar estas teclas para proporcionar información, por exemplo, para activar automatizacións ou mensaxes personalizadas para transmitir ao dispositivo que desexes.",
"message-key": "Message Key",
"parse": "Parse",
"attach-images-hint": "Attach images by dragging & dropping them into the editor",
@@ -544,7 +552,7 @@
"edit-markdown": "Edit Markdown",
"recipe-creation": "Recipe Creation",
"select-one-of-the-various-ways-to-create-a-recipe": "Select one of the various ways to create a recipe",
"looking-for-migrations": "Looking For Migrations?",
"looking-for-migrations": "Buscando As Migracións?",
"import-with-url": "Import with URL",
"create-recipe": "Create Recipe",
"create-recipe-description": "Create a new recipe from scratch.",
@@ -582,7 +590,23 @@
"upload-image": "Upload image",
"screen-awake": "Keep Screen Awake",
"remove-image": "Remove image",
"nextStep": "Next step"
"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": "Analizador de Ingredientes",
"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": "Seleccione Analizador",
"natural-language-processor": "Natural Language Processor",
"brute-parser": "Analizador Bruto",
"openai-parser": "Analizador OpenAI",
"parse-all": "Parse All",
"no-unit": "No unit",
"missing-unit": "Create missing unit: {unit}",
"missing-food": "Create missing food: {food}",
"no-food": "No Food"
}
},
"search": {
"advanced-search": "Advanced Search",
@@ -608,27 +632,28 @@
"admin-settings": "Admin Settings",
"backup": {
"backup-created": "Backup created successfully",
"backup-created-at-response-export_path": "Backup Created at {path}",
"backup-created-at-response-export_path": "Copia de Seguridade Creada en {path}",
"backup-deleted": "Backup deleted",
"restore-success": "Restore successful",
"restore-fail": "Restore failed. Check your server logs for more details",
"backup-tag": "Backup Tag",
"create-heading": "Create A Backup",
"create-heading": "Crea Unha Copia de Seguridade",
"delete-backup": "Delete Backup",
"error-creating-backup-see-log-file": "Error Creating Backup. See Log File",
"full-backup": "Full Backup",
"import-summary": "Import Summary",
"partial-backup": "Partial Backup",
"unable-to-delete-backup": "Unable to Delete Backup.",
"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.",
"backup-restore": "Backup Restore",
"experimental-description": "As copias de seguridade son instantáneas totais da base de datos e do directorio de datos do sitio. Isto inclúe todos os datos e non se pode configurar para excluír subconxuntos de datos. Podes pensar nisto como unha instantánea de Mealie nun momento específico. Estas serven como unha forma independente da base de datos para exportar e importar datos ou facer unha copia de seguridade do sitio nunha localización externa.",
"backup-restore": "Restaurar Copia de Seguridade",
"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.",
"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"
"irreversible-acknowledgment": "Entendo que esta acción é irreversible, destrutiva e pode provocar a perda de datos",
"restore-backup": "Restaurar Copia de Seguridad"
},
"backup-and-exports": "Backups",
"backup-and-exports": "Copias de seguridade",
"change-password": "Change Password",
"current": "Version:",
"custom-pages": "Custom Pages",
@@ -658,7 +683,7 @@
"set-new-time": "Set New Time",
"settings-update-failed": "Settings update failed",
"settings-updated": "Settings updated",
"site-settings": "Site Settings",
"site-settings": "Configuración do sitio",
"theme": {
"accent": "Accent",
"dark": "Dark",
@@ -713,41 +738,44 @@
"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."
},
"bug-report": "Bug Report",
"bug-report": "Informe de Erros",
"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.",
"tracker": "Tracker",
"configuration": "Configuration",
"configuration": "Configuración",
"docker-volume": "Docker Volume",
"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.",
"volumes-are-misconfigured": "Volumes are misconfigured.",
"volumes-are-configured-correctly": "Volumes are configured correctly.",
"status-unknown-try-running-a-validation": "Status Unknown. Try running a validation.",
"validate": "Validate",
"email-configuration-status": "Email Configuration Status",
"email-configured": "Email Configured",
"email-test-results": "Email Test Results",
"email-configuration-status": "Estado da Configuración do Correo-e",
"email-configured": "Correo-e Configurado",
"email-test-results": "Resultados da Proba de Correo-e",
"ready": "Ready",
"not-ready": "Not Ready - Check Environmental Variables",
"succeeded": "Succeeded",
"failed": "Failed",
"general-about": "General About",
"application-version": "Application Version",
"application-version-error-text": "Your current version ({0}) does not match the latest release. Considering updating to the latest version ({1}).",
"general-about": "Información Xeral",
"application-version": "Versión da Aplicación",
"application-version-error-text": "A túa versión actual ({0}) non coincide coa última versión. Considera actualizar á última versión ({1}).",
"mealie-is-up-to-date": "Mealie is up to date",
"secure-site": "Secure Site",
"secure-site": "Sitio Seguro",
"secure-site-error-text": "Serve via localhost or secure with https. Clipboard and additional browser APIs may not work.",
"secure-site-success-text": "Site is accessed by localhost or https",
"server-side-base-url": "Server Side Base URL",
"secure-site-success-text": "Accédese ao sitio por localhost ou https",
"server-side-base-url": "URL Base do Servidor",
"server-side-base-url-error-text": "`BASE_URL` is still the default value on API Server. This will cause issues with notifications links generated on the server for emails, etc.",
"server-side-base-url-success-text": "Server Side URL does not match the default",
"ldap-ready": "LDAP Ready",
"ldap-ready-error-text": "Not all LDAP Values are configured. This can be ignored if you are not using LDAP Authentication.",
"server-side-base-url-success-text": "O URL do servidor non coincide co predeterminado",
"ldap-ready": "LDAP Listo",
"ldap-ready-error-text": "Non todos os valores LDAP están configurados. Isto pódese ignorar se non está a usar a Autenticación LDAP.",
"ldap-ready-success-text": "Required LDAP variables are all set.",
"build": "Build",
"recipe-scraper-version": "Recipe Scraper Version",
"oidc-ready": "OIDC Ready",
"oidc-ready-error-text": "Not all OIDC Values are configured. This can be ignored if you are not using OIDC Authentication.",
"oidc-ready-success-text": "Required OIDC variables are all set."
"recipe-scraper-version": "Versión do Analizador de Receitas",
"oidc-ready": "OIDC Listo",
"oidc-ready-error-text": "Non todos os valores OIDC están configurados. Isto pódese ignorar se non está a usar a Autenticación OIDC.",
"oidc-ready-success-text": "Required OIDC variables are all set.",
"openai-ready": "OpenAI Ready",
"openai-ready-error-text": "Non todos os valores de OpenAI están configurados. Isto pódese ignorar se non está a usar as funcións de OpenAI.",
"openai-ready-success-text": "Required OpenAI variables are all set."
},
"shopping-list": {
"all-lists": "All Lists",
@@ -761,6 +789,7 @@
"food": "Food",
"note": "Note",
"label": "Label",
"save-label": "Save Label",
"linked-item-warning": "This item is linked to one or more recipe. Adjusting the units or foods will yield unexpected results when adding or removing the recipe from this list.",
"toggle-food": "Toggle Food",
"manage-labels": "Manage Labels",
@@ -779,7 +808,7 @@
},
"sidebar": {
"all-recipes": "All Recipes",
"backups": "Backups",
"backups": "Copias de seguridade",
"categories": "Categories",
"cookbooks": "Cookbooks",
"dashboard": "Dashboard",
@@ -788,13 +817,13 @@
"migrations": "Migrations",
"profile": "Profile",
"search": "Search",
"site-settings": "Site Settings",
"site-settings": "Configuración do sitio",
"tags": "Tags",
"toolbox": "Toolbox",
"language": "Language",
"maintenance": "Maintenance",
"background-tasks": "Background Tasks",
"parser": "Parser",
"parser": "Analizador",
"developer": "Developer",
"cookbook": "Cookbook",
"create-cookbook": "Create a new cookbook"
@@ -846,7 +875,7 @@
"current-password": "Current Password",
"e-mail-must-be-valid": "E-mail must be valid",
"edit-user": "Edit User",
"email": "Email",
"email": "Correo-e",
"error-cannot-delete-super-user": "Error! Cannot Delete Super User",
"existing-password-does-not-match": "Existing password does not match",
"full-name": "Full Name",
@@ -872,7 +901,7 @@
"register": "Register",
"reset-password": "Reset Password",
"sign-in": "Sign in",
"total-mealplans": "Total MealPlans",
"total-mealplans": "Menús Totais",
"total-users": "Total Users",
"upload-photo": "Upload Photo",
"use-8-characters-or-more-for-your-password": "Use 8 characters or more for your password",
@@ -897,7 +926,7 @@
"enable-advanced-content": "Enable Advanced Content",
"enable-advanced-content-description": "Enables advanced features like Recipe Scaling, API keys, Webhooks, and Data Management. Don't worry, you can always change this later",
"favorite-recipes": "Favorite Recipes",
"email-or-username": "Email or Username",
"email-or-username": "Correo-e ou Nome de Usuario",
"remember-me": "Remember Me",
"please-enter-your-email-and-password": "Please enter your email and password",
"invalid-credentials": "Invalid Credentials",
@@ -1001,6 +1030,12 @@
"delete-recipes": "Delete Recipes",
"source-unit-will-be-deleted": "Source Unit will be deleted"
},
"recipe-actions": {
"recipe-actions-data": "Recipe Actions Data",
"new-recipe-action": "New Recipe Action",
"edit-recipe-action": "Edit Recipe Action",
"action-type": "Action Type"
},
"create-alias": "Create Alias",
"manage-aliases": "Manage Aliases",
"seed-data": "Seed Data",
@@ -1042,7 +1077,7 @@
"validation": {
"group-name-is-taken": "Group name is taken",
"username-is-taken": "Username is taken",
"email-is-taken": "Email is taken",
"email-is-taken": "O correo-e está collido",
"this-field-is-required": "This Field is Required"
},
"export": {
@@ -1109,49 +1144,50 @@
"admin": {
"maintenance": {
"storage-details": "Storage Details",
"page-title": "Site Maintenance",
"page-title": "Mantemento do Sitio",
"summary-title": "Summary",
"button-label-get-summary": "Get Summary",
"button-label-get-summary": "Obter un Resumo",
"button-label-open-details": "Details",
"info-description-data-dir-size": "Data Directory Size",
"info-description-data-dir-size": "Tamaño do Directorio de Datos",
"info-description-log-file-size": "Log File Size",
"info-description-cleanable-directories": "Cleanable Directories",
"info-description-cleanable-images": "Cleanable Images",
"info-description-cleanable-directories": "Directorios Eliminables",
"info-description-cleanable-images": "Imaxes Eliminables",
"storage": {
"title-temporary-directory": "Temporary Directory (.temp)",
"title-backups-directory": "Backups Directory (backups)",
"title-backups-directory": "Directorio de Copias de Seguridade (copias de seguridade)",
"title-groups-directory": "Groups Directory (groups)",
"title-recipes-directory": "Recipes Directory (recipes)",
"title-user-directory": "User Directory (user)"
},
"action-delete-log-files-name": "Delete Log Files",
"action-delete-log-files-description": "Deletes all the log files",
"action-clean-directories-name": "Clean Directories",
"action-clean-directories-description": "Removes all the recipe folders that are not valid UUIDs",
"action-clean-temporary-files-name": "Clean Temporary Files",
"action-clean-temporary-files-description": "Removes all files and folders in the .temp directory",
"action-clean-images-name": "Clean Images",
"action-clean-images-description": "Removes all the images that don't end with .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": "destructive",
"action-clean-directories-name": "Limpar Directorios",
"action-clean-directories-description": "Elimina todos os cartafoles de receitas sin UUIDs válidos",
"action-clean-temporary-files-name": "Limpar Ficheiros Temporais",
"action-clean-temporary-files-description": "Elimina todos os ficheiros e cartafoles do directorio .temp",
"action-clean-images-name": "Eliminar Imaxes",
"action-clean-images-description": "Elimina todas as imaxes que non rematan en .webp",
"actions-description": "As accións de mantemento son {destructive_in_bold} e deben usarse con precaución. Realizar calquera destas accións é {irreversible_in_bold}.",
"actions-description-destructive": "destrutivas",
"actions-description-irreversible": "irreversible",
"logs-action-refresh": "Refresh Logs",
"logs-page-title": "Mealie Logs",
"logs-tail-lines-label": "Tail Lines"
},
"mainentance": {
"actions-title": "Actions"
"actions-title": "Accións"
},
"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-2": "It's not perfect, but it yields great results in general and is a good starting point for manually parsing ingredients into individual fields. Alternatively, you can also use the \"Brute\" processor that uses a pattern matching technique to identify ingredients.",
"nlp": "NLP",
"brute": "Brute",
"show-individual-confidence": "Show individual confidence",
"ingredients-natural-language-processor": "Procesador de Linguaxe Natural de Ingredientes",
"ingredients-natural-language-processor-explanation": "Mealie usa Campos Aleatorios Condicionais (CACs) para analizar e procesar ingredientes. O modelo utilizado para os ingredientes baséase nun conxunto de datos de máis de 100.000 ingredientes dun conxunto de datos compilado polo New York Times. Teña en conta que, como o modelo está adestrado só en inglés, pode ter resultados variados ao usar o modelo noutros idiomas. Esta páxina é unha zona de xogos para probar o modelo.",
"ingredients-natural-language-processor-explanation-2": "Non é perfecto, pero dá excelentes resultados en xeral e é un bo punto de partida para analizar manualmente os ingredientes en campos individuais. Alternativamente, tamén pode usar o procesador \"Bruto\" que usa unha técnica de coincidencia de patróns para identificar ingredientes.",
"nlp": "PLN",
"brute": "Bruto",
"openai": "OpenAI",
"show-individual-confidence": "Amosar confianza individual",
"ingredient-text": "Ingredient Text",
"average-confident": "{0} Confident",
"try-an-example": "Try an example",
"parser": "Parser",
"try-an-example": "Proba un exemplo",
"parser": "Analizador",
"background-tasks": "Background Tasks",
"background-tasks-description": "Here you can view all the running background tasks and their status",
"no-logs-found": "No Logs Found",
@@ -1196,8 +1232,8 @@
"manage-data-description": "Manage your Mealie data; Foods, Units, Categories, Tags and more.",
"data-migrations": "Data Migrations",
"data-migrations-description": "Migrate your existing data from other applications like Nextcloud Recipes and Chowdown.",
"email-sent": "Email Sent",
"error-sending-email": "Error Sending Email",
"email-sent": "Correo-e Enviado",
"error-sending-email": "Erro ao Enviar o Correo-e",
"personal-information": "Personal Information",
"preferences": "Preferences",
"show-advanced-description": "Show advanced features (API Keys, Webhooks, and Data Management)",

View File

@@ -64,6 +64,7 @@
"something-went-wrong": "משהו השתבש!",
"subscribed-events": "אירועים שנרשמת אליהם",
"test-message-sent": "הודעת בדיקה נשלחה",
"message-sent": "Message Sent",
"new-notification": "התראה חדשה",
"event-notifiers": "אירועי נוטיפיקציות",
"apprise-url-skipped-if-blank": "כתובת Apprise (דלג אם ריק)",
@@ -160,6 +161,7 @@
"test": "ניסיון",
"themes": "ערכות נושא",
"thursday": "חמישי",
"title": "Title",
"token": "טוקן",
"tuesday": "שלישי",
"type": "סוג",
@@ -289,6 +291,8 @@
"mealplan-updated": "תכנית ארוחה עודכנה",
"no-meal-plan-defined-yet": "עדיין לא הוגדרה תכנית ארוחה",
"no-meal-planned-for-today": "לא מתוכננת ארוחה להיום",
"numberOfDays-hint": "Number of days on page load",
"numberOfDays-label": "Default Days",
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "רק מתכונים שהוגדרו עם הקטגוריות הללו ישומשו בתכנוני ארוחות",
"planner": "תכנון",
"quick-week": "תכנון שבועי מהיר",
@@ -375,6 +379,10 @@
"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."
},
"recipekeeper": {
"title": "Recipe Keeper",
"description-long": "Mealie can import recipes from Recipe Keeper. Export your recipes in zip format, then upload the .zip file below."
}
},
"new-recipe": {
@@ -582,7 +590,23 @@
"upload-image": "העלה תמונה",
"screen-awake": "השאר את המסך פעיל",
"remove-image": "האם למחוק את התמונה?",
"nextStep": "השלב הבא"
"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.",
"select-parser": "Select Parser",
"natural-language-processor": "Natural Language Processor",
"brute-parser": "Brute Parser",
"openai-parser": "OpenAI Parser",
"parse-all": "Parse All",
"no-unit": "No unit",
"missing-unit": "Create missing unit: {unit}",
"missing-food": "Create missing food: {food}",
"no-food": "No Food"
}
},
"search": {
"advanced-search": "חיפוש מתקדם",
@@ -611,6 +635,7 @@
"backup-created-at-response-export_path": "גיבוי נוצר ב {path}",
"backup-deleted": "גיבוי נמחק",
"restore-success": "השחזור הצליח",
"restore-fail": "Restore failed. Check your server logs for more details",
"backup-tag": "תגית גיבוי",
"create-heading": "Create a Backup",
"delete-backup": "מחיקת גיבוי",
@@ -747,7 +772,10 @@
"recipe-scraper-version": "גרסת מפענך המתכונים",
"oidc-ready": "OIDC Ready",
"oidc-ready-error-text": "Not all OIDC Values are configured. This can be ignored if you are not using OIDC Authentication.",
"oidc-ready-success-text": "Required OIDC variables are all set."
"oidc-ready-success-text": "Required OIDC variables are all set.",
"openai-ready": "OpenAI Ready",
"openai-ready-error-text": "Not all OpenAI Values are configured. This can be ignored if you are not using OpenAI features.",
"openai-ready-success-text": "Required OpenAI variables are all set."
},
"shopping-list": {
"all-lists": "כל הרשימות",
@@ -761,6 +789,7 @@
"food": "אוכל",
"note": "הערה",
"label": "תווית",
"save-label": "Save Label",
"linked-item-warning": "האובייקט הזה מקושר לאחד או יותר מתכונים. שינוי היחידות או האוכל יוביל לתוצאות בלתי צפויות בהוספה או הסרת מתכונים מהרשימה.",
"toggle-food": "הצג/הסתר אוכל",
"manage-labels": "ניהול תויות",
@@ -1001,6 +1030,12 @@
"delete-recipes": "מחיקת מתכונים",
"source-unit-will-be-deleted": "יחידת המקור תמחק"
},
"recipe-actions": {
"recipe-actions-data": "Recipe Actions Data",
"new-recipe-action": "New Recipe Action",
"edit-recipe-action": "Edit Recipe Action",
"action-type": "Action Type"
},
"create-alias": "יצירת שם נרדף",
"manage-aliases": "נהל שמות נרדפים",
"seed-data": "אכלס נתונים",
@@ -1147,6 +1182,7 @@
"ingredients-natural-language-processor-explanation-2": "זה לא מושלם, אבל מספק תוצאות טובות באופן כללי ומספק נקודת התחלה טובה עבור עיבוד ידני של מרכיבים לשדות נפרדים. לחילופין ניתן להשתמש בעיבוד \"נוקשה\" לזיהוי המרכיבים.",
"nlp": "NLP",
"brute": "נוקשה",
"openai": "OpenAI",
"show-individual-confidence": "הראה תאימות בודדת",
"ingredient-text": "טקסט מרכיב",
"average-confident": "{0} דיוק",

View File

@@ -64,6 +64,7 @@
"something-went-wrong": "Nešto nije bilo u redu!",
"subscribed-events": "Pretplaćeni Događaji",
"test-message-sent": "Testna Poruka je Poslana",
"message-sent": "Message Sent",
"new-notification": "Nova Obavijest",
"event-notifiers": "Obavještavatelji Događaja",
"apprise-url-skipped-if-blank": "Apprise URL (preskočeno ako je prazno)",
@@ -160,6 +161,7 @@
"test": "Test",
"themes": "Teme",
"thursday": "Četvrtak",
"title": "Title",
"token": "Token",
"tuesday": "Utorak",
"type": "Tip",
@@ -289,6 +291,8 @@
"mealplan-updated": "Plan obroka je Ažuriran",
"no-meal-plan-defined-yet": "Plan obroka još nije definiran",
"no-meal-planned-for-today": "Nema Plan obroka za današnji dan",
"numberOfDays-hint": "Number of days on page load",
"numberOfDays-label": "Default Days",
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "Samo recepti s ovim kategorijama bit će korišteni u planovima obroka",
"planner": "Planer",
"quick-week": "Brzi Tjedan",
@@ -375,6 +379,10 @@
"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."
},
"recipekeeper": {
"title": "Recipe Keeper",
"description-long": "Mealie can import recipes from Recipe Keeper. Export your recipes in zip format, then upload the .zip file below."
}
},
"new-recipe": {
@@ -582,7 +590,23 @@
"upload-image": "Učitavanje Slike",
"screen-awake": "Keep Screen Awake",
"remove-image": "Remove image",
"nextStep": "Next step"
"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.",
"select-parser": "Select Parser",
"natural-language-processor": "Natural Language Processor",
"brute-parser": "Brute Parser",
"openai-parser": "OpenAI Parser",
"parse-all": "Parse All",
"no-unit": "No unit",
"missing-unit": "Create missing unit: {unit}",
"missing-food": "Create missing food: {food}",
"no-food": "No Food"
}
},
"search": {
"advanced-search": "Napredno Pretraživanje",
@@ -611,6 +635,7 @@
"backup-created-at-response-export_path": "Sigurnosna Kopija Kreirana na lokaciji {path}",
"backup-deleted": "Sigurnosna kopija izbrisana",
"restore-success": "Restore successful",
"restore-fail": "Restore failed. Check your server logs for more details",
"backup-tag": "Sigurnosna kopija Oznake",
"create-heading": "Kreiraj sigurnosnu kopiju",
"delete-backup": "Izbriši sigurnosnu kopiju",
@@ -747,7 +772,10 @@
"recipe-scraper-version": "Verzija skraper alata za recepte",
"oidc-ready": "OIDC Ready",
"oidc-ready-error-text": "Not all OIDC Values are configured. This can be ignored if you are not using OIDC Authentication.",
"oidc-ready-success-text": "Required OIDC variables are all set."
"oidc-ready-success-text": "Required OIDC variables are all set.",
"openai-ready": "OpenAI Ready",
"openai-ready-error-text": "Not all OpenAI Values are configured. This can be ignored if you are not using OpenAI features.",
"openai-ready-success-text": "Required OpenAI variables are all set."
},
"shopping-list": {
"all-lists": "Svi Popisi",
@@ -761,6 +789,7 @@
"food": "Namirnica",
"note": "Bilješka",
"label": "Oznaka",
"save-label": "Save Label",
"linked-item-warning": "Ova stavka je povezana s jednim ili više recepata. Prilagođavanje jedinica ili namirnica može rezultirati neočekivanim rezultatima prilikom dodavanja ili uklanjanja recepta s ove liste.",
"toggle-food": "Prebaci prekidač Namirnice",
"manage-labels": "Upravljanje Oznakama",
@@ -1001,6 +1030,12 @@
"delete-recipes": "Obriši Recepte",
"source-unit-will-be-deleted": "Izvorna jedinica će biti izbrisana"
},
"recipe-actions": {
"recipe-actions-data": "Recipe Actions Data",
"new-recipe-action": "New Recipe Action",
"edit-recipe-action": "Edit Recipe Action",
"action-type": "Action Type"
},
"create-alias": "Create Alias",
"manage-aliases": "Manage Aliases",
"seed-data": "Unesi Podatke",
@@ -1147,6 +1182,7 @@
"ingredients-natural-language-processor-explanation-2": "Nije savršen, ali općenito daje odlične rezultate i dobra je polazna točka za ručno parsiranje sastojaka u pojedinačna polja. Alternativno, možete koristiti \"Brute\" procesor koji koristi tehniku usklađivanja uzoraka za identifikaciju sastojaka.",
"nlp": "NLP",
"brute": "Brute",
"openai": "OpenAI",
"show-individual-confidence": "Prikaži pojedinačno povjerenje",
"ingredient-text": "Tekst Sastojka",
"average-confident": "{0} - Siguran",

View File

@@ -64,6 +64,7 @@
"something-went-wrong": "Hiba történt!",
"subscribed-events": "Feliratkozott események",
"test-message-sent": "Teszt üzenet elküldve",
"message-sent": "Üzenet elküldve",
"new-notification": "Új értesítés",
"event-notifiers": "Esemény értesítők",
"apprise-url-skipped-if-blank": "Értesítendő URL (kihagy, ha üres)",
@@ -85,7 +86,7 @@
"clear": "Törlés",
"close": "Bezár",
"confirm": "Megerősítés",
"confirm-how-does-everything-look": "How does everything look?",
"confirm-how-does-everything-look": "Hogy néz ki?",
"confirm-delete-generic": "Biztosan törölni szeretnéd ezt?",
"copied_message": "Másolva!",
"create": "Létrehozás",
@@ -144,11 +145,11 @@
"save": "Mentés",
"settings": "Beállítások",
"share": "Megosztás",
"show-all": "Show All",
"show-all": "Mutasd az összeset",
"shuffle": "Véletlenszerű",
"sort": "Rendezés",
"sort-ascending": "Sort Ascending",
"sort-descending": "Sort Descending",
"sort-ascending": "Rendezés növekvő sorrendben",
"sort-descending": "Rendezés csökkenő sorrendben",
"sort-alphabetically": "Betűrendben",
"status": "Állapot",
"subject": "Tárgy",
@@ -160,6 +161,7 @@
"test": "Teszt",
"themes": "Témák",
"thursday": "Csütörtök",
"title": "Cím",
"token": "Token",
"tuesday": "Kedd",
"type": "Típus",
@@ -245,7 +247,7 @@
"private-group": "Privát csoport",
"private-group-description": "Ha a csoportot privátra állítja, az összes nyilvános nézeti beállítás alapértelmezettre lesz állítva. Ez felülírja az egyes receptek nyilvános nézet beállításait.",
"enable-public-access": "Nyilvános hozzáférés engedélyezése",
"enable-public-access-description": "Make group recipes public by default, and allow visitors to view recipes without logging-in",
"enable-public-access-description": "Legyenek a csoport receptek alapértelmezetten publikusak és engedélyezze a látogatóknak a megtekintést belépés nélkül",
"allow-users-outside-of-your-group-to-see-your-recipes": "Engedélyezze a csoporton kívüli felhasználók számára a receptek megtekintését",
"allow-users-outside-of-your-group-to-see-your-recipes-description": "Ha engedélyezve van, nyilvános megosztási hivatkozással megoszthat adott recepteket a felhasználó felhatalmazása nélkül. Ha le van tiltva, csak olyan felhasználókkal oszthat meg recepteket, akik a csoportjába tartoznak, vagy egy előre generált privát linkkel",
"show-nutrition-information": "Táplálkozási információk megjelenítése",
@@ -289,6 +291,8 @@
"mealplan-updated": "Menüterv módosítva",
"no-meal-plan-defined-yet": "Nincs még menüterv létrehozva",
"no-meal-planned-for-today": "Nincs mára menüterv",
"numberOfDays-hint": "Napok száma az oldal betöltésekor",
"numberOfDays-label": "Alapértelmezett napok",
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "A menütervekben csak a következő kategóriához tartozó receptek kerülnek felhasználásra",
"planner": "Tervező",
"quick-week": "Gyors hét",
@@ -359,11 +363,11 @@
},
"recipe-data-migrations": "Receptadatok migrációja",
"recipe-data-migrations-explanation": "A receptek átemelhetők más támogatott alkalmazásból Mealie-be. Ez egy remek módja a Mealie használatának elkezdésére.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Coming from another application or an even older version of Mealie? Check out migrations and see if your data can be imported.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "A Mealie egy másik verzióját használtad vagy valami teljesen más applikációt? Nézd meg az adat importálási lehetőségeinket.",
"choose-migration-type": "Válassza ki a migrációs típusát",
"tag-all-recipes": "Az összes recept címkézése a {tag-name} címkével",
"nextcloud-text": "A Nextcloud-receptek importálhatók a Nextcloudban tárolt adatokat tartalmazó zip-fájlból. Tekintse meg az alábbi példamappaszerkezetet, hogy receptjei biztosan importálhatók legyenek.",
"chowdown-text": "Mealie natively supports the chowdown repository format. Download the code repository as a .zip file and upload it below.",
"chowdown-text": "Mealie natívan támogatja a chowdown repository formátumot. Töltse le a kódtárat .zip fájlként, és töltse fel alább.",
"recipe-1": "Recept 1",
"recipe-2": "Recept 2",
"paprika-text": "Mealie képes recepteket importálni a Paprika alkalmazásból. Exportálja a receptjeit a Paprikából, nevezze át az export kiterjesztést .zip-re, és töltse fel alább.",
@@ -373,8 +377,12 @@
"description-long": "Mealie képes recepteket importálni a Plan to Eat alkalmazásból."
},
"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."
"title": "Az én receptes dobozom",
"description-long": "A Mealie képest recepteket importálni az Én Receptes Dobozomból. Exportáld a receptjeidet CSV formátúmba, aztán töltsd fel a .csv fájlt lentebb."
},
"recipekeeper": {
"title": "Recipe Keeper",
"description-long": "A Mealie képes recepteket importálni a Recipe Keeperből. Exportálja a receptjeit zip formátumban, majd töltse fel a .zip fájlt az oldal alján."
}
},
"new-recipe": {
@@ -509,8 +517,8 @@
"cook-mode": "Főzési mód",
"link-ingredients": "Hozzávalók összekapcsolása",
"merge-above": "Összevonás a fentivel",
"move-to-bottom": "Move To Bottom",
"move-to-top": "Move To Top",
"move-to-bottom": "Ugrás az aljára",
"move-to-top": "Ugrás a tetejére",
"reset-scale": "Skála alaphelyzetbe állítása",
"decrease-scale-label": "Skála csökkentése 1-gyel",
"increase-scale-label": "Skála növelése 1-gyel",
@@ -526,7 +534,7 @@
"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!",
"timeline-no-events-found-try-adjusting-filters": "No events found. Try adjusting your search filters.",
"timeline-no-events-found-try-adjusting-filters": "Nem találtunk eseményeket. Próbáld meg átállítani a keresési szűrőket.",
"group-global-timeline": "{groupName} Globális idővonal",
"open-timeline": "Idővonal megnyitása",
"made-this": "Elkészítettem ezt",
@@ -547,7 +555,7 @@
"looking-for-migrations": "Migrációt keres?",
"import-with-url": "Importálás URL-címről",
"create-recipe": "Recept létrehozása",
"create-recipe-description": "Create a new recipe from scratch.",
"create-recipe-description": "Adj hozzá egy új receptet a nulláról kezdve.",
"create-recipes": "Receptek létrehozása",
"import-with-zip": "Importálás .zip formátummal",
"create-recipe-from-an-image": "Recept létrehozása fotóról",
@@ -582,7 +590,23 @@
"upload-image": "Kép feltöltése",
"screen-awake": "Képernyő ébren tartása",
"remove-image": "Kép etávolítása",
"nextStep": "Következő lépés"
"nextStep": "Következő lépés",
"recipe-actions": "Recipe Actions",
"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.",
"select-parser": "Válasszon elemzőt",
"natural-language-processor": "Természetes nyelvi feldolgozó",
"brute-parser": "Brute elemző",
"openai-parser": "OpenAI elemző",
"parse-all": "Összes elemzése",
"no-unit": "Mértékegység nélkül",
"missing-unit": "Hiányzó mértékegység létrehozása: {unit}",
"missing-food": "Hiányzó élelmiszer létrehozása: {food}",
"no-food": "Élelmiszer nélküli"
}
},
"search": {
"advanced-search": "Részletes keresés",
@@ -611,6 +635,7 @@
"backup-created-at-response-export_path": "Mentés a következő helyre: {path}",
"backup-deleted": "Biztonsági mentés törölve",
"restore-success": "Sikeres visszaállítás",
"restore-fail": "A visszaállítás sikertelen. További részletekért ellenőrizze a szervernaplókat",
"backup-tag": "Biztonsági mentés leírás",
"create-heading": "Biztonsági mentés létrehozása",
"delete-backup": "Biztonsági mentés törlése",
@@ -619,7 +644,7 @@
"import-summary": "Import összefoglaló",
"partial-backup": "Részleges biztonsági mentés",
"unable-to-delete-backup": "Nem lehetett létrehozni a biztonsági mentést.",
"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": "A biztonsági mentések az oldal adatbázisának és adatkönyvtárának teljes pillanatfelvételei. Ez az összes adatot tartalmazza, és nem lehet beállítani, hogy az adatok részhalmazait kizárja. Ezt úgy is elképzelheti, mint a Mealie egy adott időpontban készült pillanatfelvételét. Ezek adatbázis-független módon szolgálnak az adatok exportálására és importálására, vagy a webhely külső helyre történő mentésére.",
"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.",
@@ -745,9 +770,12 @@
"ldap-ready-success-text": "A szükséges LDAP-változók mind beállítva.",
"build": "Build",
"recipe-scraper-version": "Receptkinyerő verziója",
"oidc-ready": "OIDC Ready",
"oidc-ready-error-text": "Not all OIDC Values are configured. This can be ignored if you are not using OIDC Authentication.",
"oidc-ready-success-text": "Required OIDC variables are all set."
"oidc-ready": "OIDC készen áll",
"oidc-ready-error-text": "Nem minden OIDC érték van beállítva. Ezt figyelmen kívül lehet hagyni ha nem használ OIDC hitelesítést.",
"oidc-ready-success-text": "A szükséges OIDC változók mind beállítva.",
"openai-ready": "OpenAI készen áll",
"openai-ready-error-text": "Nem minden OpenAI érték van beállítva. Ez figyelmen kívül hagyható, ha nem használja az OpenAI funkcióit.",
"openai-ready-success-text": "Minden szükséges OpenAI változó beállítva."
},
"shopping-list": {
"all-lists": "Összes lista",
@@ -761,6 +789,7 @@
"food": "Étel",
"note": "Megjegyzés",
"label": "Címke",
"save-label": "Címke mentése",
"linked-item-warning": "Ez a tétel egy vagy több recepthez kapcsolódik. A mennyiségi egységek vagy az alapanyagok átállítása nem várt eredményeket fog eredményezni, amikor hozzáadja vagy eltávolítja a receptet ebből a listából.",
"toggle-food": "Váltás alapanyagokra",
"manage-labels": "Címkék kezelése",
@@ -1001,6 +1030,12 @@
"delete-recipes": "Receptek törlése",
"source-unit-will-be-deleted": "A forrás mennyiségi egység törlésre kerül"
},
"recipe-actions": {
"recipe-actions-data": "Recipe Actions Data",
"new-recipe-action": "New Recipe Action",
"edit-recipe-action": "Edit Recipe Action",
"action-type": "Művelet típusa"
},
"create-alias": "Alias készítése",
"manage-aliases": "Alias kezelése",
"seed-data": "Kezdőérték adat",
@@ -1147,6 +1182,7 @@
"ingredients-natural-language-processor-explanation-2": "Nem tökéletes, de általában nagyszerű eredményeket ad, és jó kiindulópont a hozzávalók kézi elemzésére az egyedi mezőkbe. Alternatívaként használhatja a \"Brute\" feldolgozót is, amely egy mintaillesztési technikát használ a hozzávalók azonosítására.",
"nlp": "NLP",
"brute": "Brute",
"openai": "OpenAI",
"show-individual-confidence": "",
"ingredient-text": "Hozzávaló szöveg",
"average-confident": "{0}-os bizonyosság",
@@ -1159,12 +1195,12 @@
"setup": {
"first-time-setup": "Első beállítás",
"welcome-to-mealie-get-started": "Üdvözöl a Mealie! Vágjunk bele",
"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",
"already-set-up-bring-to-homepage": "Már kész is vagyok, vigyél az új kezdőoldalamra",
"common-settings-for-new-sites": "Itt van egy pár alap beállítás az új oldaladhoz",
"setup-complete": "Beállítás kész!",
"here-are-a-few-things-to-help-you-get-started": "Here are a few things to help you get started with Mealie",
"here-are-a-few-things-to-help-you-get-started": "Itt van egy pár dolog ami segíthet a kezdésben a Mealie-vel",
"restore-from-v1-backup": "Van egy korábbi Mealie v1 biztonsági másolatod? Itt visszaállíthatod.",
"manage-profile-or-get-invite-link": "Manage your own profile, or grab an invite link to share with others."
"manage-profile-or-get-invite-link": "Alakítsa a profilját vagy szerezze meg a meghívó link-jét hogy megoszthassa másokkal."
}
},
"profile": {
@@ -1179,7 +1215,7 @@
"storage-capacity": "Tárhely mérete",
"storage-capacity-description": "A tárhely kapacitása az Ön által feltöltött képek és eszközök számításából adódik.",
"personal": "Személyes",
"personal-description": "These are settings that are personal to you. Changes here won't affect other users.",
"personal-description": "Ezek a beállítások az Ön személyes beállításai. Az itt végzett változtatások nincsenek hatással más felhasználókra.",
"user-settings": "Felhasználói beállítások",
"user-settings-description": "Itt kezelheti beállításait, módosíthatja jelszavát és frissítheti e-mail címét.",
"api-tokens-description": "API kulcsok kezelése külső alkalmazásokból.",

View File

@@ -64,6 +64,7 @@
"something-went-wrong": "Something Went Wrong!",
"subscribed-events": "Subscribed Events",
"test-message-sent": "Test Message Sent",
"message-sent": "Message Sent",
"new-notification": "New Notification",
"event-notifiers": "Event Notifiers",
"apprise-url-skipped-if-blank": "Apprise URL (skipped if blank)",
@@ -160,6 +161,7 @@
"test": "Test",
"themes": "Themes",
"thursday": "Thursday",
"title": "Title",
"token": "Token",
"tuesday": "Tuesday",
"type": "Type",
@@ -289,6 +291,8 @@
"mealplan-updated": "Mealplan Updated",
"no-meal-plan-defined-yet": "No meal plan defined yet",
"no-meal-planned-for-today": "No meal planned for today",
"numberOfDays-hint": "Number of days on page load",
"numberOfDays-label": "Default Days",
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "Only recipes with these categories will be used in Meal Plans",
"planner": "Planner",
"quick-week": "Quick Week",
@@ -375,6 +379,10 @@
"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."
},
"recipekeeper": {
"title": "Recipe Keeper",
"description-long": "Mealie can import recipes from Recipe Keeper. Export your recipes in zip format, then upload the .zip file below."
}
},
"new-recipe": {
@@ -582,7 +590,23 @@
"upload-image": "Upload image",
"screen-awake": "Keep Screen Awake",
"remove-image": "Remove image",
"nextStep": "Next step"
"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.",
"select-parser": "Select Parser",
"natural-language-processor": "Natural Language Processor",
"brute-parser": "Brute Parser",
"openai-parser": "OpenAI Parser",
"parse-all": "Parse All",
"no-unit": "No unit",
"missing-unit": "Create missing unit: {unit}",
"missing-food": "Create missing food: {food}",
"no-food": "No Food"
}
},
"search": {
"advanced-search": "Advanced Search",
@@ -611,6 +635,7 @@
"backup-created-at-response-export_path": "Backup Created at {path}",
"backup-deleted": "Backup deleted",
"restore-success": "Restore successful",
"restore-fail": "Restore failed. Check your server logs for more details",
"backup-tag": "Backup Tag",
"create-heading": "Create A Backup",
"delete-backup": "Delete Backup",
@@ -747,7 +772,10 @@
"recipe-scraper-version": "Recipe Scraper Version",
"oidc-ready": "OIDC Ready",
"oidc-ready-error-text": "Not all OIDC Values are configured. This can be ignored if you are not using OIDC Authentication.",
"oidc-ready-success-text": "Required OIDC variables are all set."
"oidc-ready-success-text": "Required OIDC variables are all set.",
"openai-ready": "OpenAI Ready",
"openai-ready-error-text": "Not all OpenAI Values are configured. This can be ignored if you are not using OpenAI features.",
"openai-ready-success-text": "Required OpenAI variables are all set."
},
"shopping-list": {
"all-lists": "All Lists",
@@ -761,6 +789,7 @@
"food": "Food",
"note": "Note",
"label": "Label",
"save-label": "Save Label",
"linked-item-warning": "This item is linked to one or more recipe. Adjusting the units or foods will yield unexpected results when adding or removing the recipe from this list.",
"toggle-food": "Toggle Food",
"manage-labels": "Manage Labels",
@@ -1001,6 +1030,12 @@
"delete-recipes": "Delete Recipes",
"source-unit-will-be-deleted": "Source Unit will be deleted"
},
"recipe-actions": {
"recipe-actions-data": "Recipe Actions Data",
"new-recipe-action": "New Recipe Action",
"edit-recipe-action": "Edit Recipe Action",
"action-type": "Action Type"
},
"create-alias": "Create Alias",
"manage-aliases": "Manage Aliases",
"seed-data": "Seed Data",
@@ -1147,6 +1182,7 @@
"ingredients-natural-language-processor-explanation-2": "It's not perfect, but it yields great results in general and is a good starting point for manually parsing ingredients into individual fields. Alternatively, you can also use the \"Brute\" processor that uses a pattern matching technique to identify ingredients.",
"nlp": "NLP",
"brute": "Brute",
"openai": "OpenAI",
"show-individual-confidence": "Show individual confidence",
"ingredient-text": "Ingredient Text",
"average-confident": "{0} Confident",

View File

@@ -64,6 +64,7 @@
"something-went-wrong": "Si è verificato un errore!",
"subscribed-events": "Eventi Sottoscritti",
"test-message-sent": "Messaggio di prova inviato",
"message-sent": "Message Sent",
"new-notification": "Nuova Notifica",
"event-notifiers": "Notifiche Evento",
"apprise-url-skipped-if-blank": "Url di Apprise (ignorato se vuoto)",
@@ -85,7 +86,7 @@
"clear": "Resetta",
"close": "Chiudi",
"confirm": "Conferma",
"confirm-how-does-everything-look": "How does everything look?",
"confirm-how-does-everything-look": "Come ti sembra tutto questo?",
"confirm-delete-generic": "Sei sicuro di volere eliminare?",
"copied_message": "Copiato!",
"create": "Crea",
@@ -160,6 +161,7 @@
"test": "Test",
"themes": "Temi",
"thursday": "Giovedì",
"title": "Title",
"token": "Token",
"tuesday": "Martedì",
"type": "Tipo",
@@ -174,7 +176,7 @@
"units": "Unità",
"back": "Indietro",
"next": "Avanti",
"start": "Start",
"start": "Inizia",
"toggle-view": "Cambia Vista",
"date": "Data",
"id": "Id",
@@ -208,7 +210,7 @@
"unsaved-changes": "Sono state apportate modifiche non salvate. Salvare prima di uscire? Premi Ok per salvare, Annulla per scartare le modifiche.",
"clipboard-copy-failure": "Impossibile copiare negli appunti.",
"confirm-delete-generic-items": "Sei sicuro di voler eliminare i seguenti elementi?",
"organizers": "Organizers"
"organizers": "Organizzatori"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Sei sicuro di volerlo eliminare <b>{groupName}<b/>'?",
@@ -244,8 +246,8 @@
"group-preferences": "Preferenze Gruppo",
"private-group": "Gruppo Privato",
"private-group-description": "Impostando il tuo gruppo su privato verranno ripristinate tutte le opzioni di visualizzazione pubblica. Questa opzione sovrascrive le impostazioni di visualizzazione pubblica della singola ricetta.",
"enable-public-access": "Enable Public Access",
"enable-public-access-description": "Make group recipes public by default, and allow visitors to view recipes without logging-in",
"enable-public-access": "Abilita accesso pubblico",
"enable-public-access-description": "Rendi pubbliche le ricette di gruppo per impostazione predefinita, e consenti ai visitatori di visualizzare le ricette senza effettuare l'accesso",
"allow-users-outside-of-your-group-to-see-your-recipes": "Consenti agli utenti al di fuori del tuo gruppo di vedere le tue ricette",
"allow-users-outside-of-your-group-to-see-your-recipes-description": "Se abilitato, è possibile utilizzare un link pubblico per condividere ricette specifiche senza autorizzare l'utente. Se disabilitato, puoi condividere ricette solo con gli utenti che sono nel tuo gruppo o con un link privato pre-generato",
"show-nutrition-information": "Mostra informazioni nutrizionali",
@@ -289,6 +291,8 @@
"mealplan-updated": "Piano Alimentare Aggiornato",
"no-meal-plan-defined-yet": "Ancora nessun piano alimentare definito",
"no-meal-planned-for-today": "Nessun piano alimentare per oggi",
"numberOfDays-hint": "Number of days on page load",
"numberOfDays-label": "Default Days",
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "Solo ricette con queste categorie possono essere utilizzate un un Piano Alimentare",
"planner": "Pianificatore",
"quick-week": "Settimana Veloce",
@@ -359,11 +363,11 @@
},
"recipe-data-migrations": "Migrazione Dati Ricetta",
"recipe-data-migrations-explanation": "Le ricette possono essere migrate da un'altra applicazione supportata da Mealie. Questo è un ottimo modo per iniziare con Mealie.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Coming from another application or an even older version of Mealie? Check out migrations and see if your data can be imported.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Arrivi da un'altra applicazione o da una versione più vecchia di Mealie? Scopri le migrazioni e scopri se i tuoi dati possono essere importati.",
"choose-migration-type": "Scegli Il Tipo Di Migrazione",
"tag-all-recipes": "Etichetta tutte le ricette con {tag-name} etichetta",
"nextcloud-text": "Le ricette di Nextcloud possono essere importate da un file zip che contiene i dati memorizzati in Nextcloud. Osserva la struttura della cartella di esempio qui sotto per assicurarti che le tue ricette siano in grado di essere importate.",
"chowdown-text": "Mealie natively supports the chowdown repository format. Download the code repository as a .zip file and upload it below.",
"chowdown-text": "Mealie supporta nativamente il formato del repository chowdown. Scarica il repository del codice come file .zip e caricalo qui sotto.",
"recipe-1": "Ricetta 1",
"recipe-2": "Ricetta 2",
"paprika-text": "Mealie può importare ricette dall'applicazione Paprika. Esporta le tue ricette da paprika, rinomina l'estensione di esportazione in .zip e caricala qui sotto.",
@@ -373,8 +377,12 @@
"description-long": "Mealie può importare le ricette da Plan to Eat."
},
"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."
"title": "Il mio ricettario",
"description-long": "Mealie può importare ricette da My Recipe Box. Esporta le tue ricette in formato HTML, quindi carica il .zip qui sotto."
},
"recipekeeper": {
"title": "Recipe Keeper",
"description-long": "Mealie can import recipes from Recipe Keeper. Export your recipes in zip format, then upload the .zip file below."
}
},
"new-recipe": {
@@ -547,8 +555,8 @@
"looking-for-migrations": "Stai Cercando Le Migrazioni?",
"import-with-url": "Importa da URL",
"create-recipe": "Crea Ricetta",
"create-recipe-description": "Create a new recipe from scratch.",
"create-recipes": "Create Recipes",
"create-recipe-description": "Crea una nuova ricetta da zero.",
"create-recipes": "Crea Ricette",
"import-with-zip": "Importa da .zip",
"create-recipe-from-an-image": "Crea ricetta da un'immagine",
"bulk-url-import": "Importazione multipla URL",
@@ -582,7 +590,23 @@
"upload-image": "Carica immagine",
"screen-awake": "Mantieni lo schermo acceso",
"remove-image": "Rimuovi immagine",
"nextStep": "Passo successivo"
"nextStep": "Passo successivo",
"recipe-actions": "Recipe Actions",
"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.",
"select-parser": "Seleziona Analizzatore",
"natural-language-processor": "Analizzatore di Linguaggio Naturale",
"brute-parser": "Analizzatore brutale",
"openai-parser": "OpenAI Parser",
"parse-all": "Analizza tutto",
"no-unit": "Nessuna unità",
"missing-unit": "Crea unità mancante: {unit}",
"missing-food": "Crea cibo mancante: {food}",
"no-food": "Nessun Alimento"
}
},
"search": {
"advanced-search": "Ricerca Avanzata",
@@ -611,6 +635,7 @@
"backup-created-at-response-export_path": "Backup Creato in {path}",
"backup-deleted": "Backup eliminato",
"restore-success": "Ripristino riuscito",
"restore-fail": "Restore failed. Check your server logs for more details",
"backup-tag": "Tag Backup",
"create-heading": "Crea un Backup",
"delete-backup": "Elimina Backup",
@@ -745,9 +770,12 @@
"ldap-ready-success-text": "Le variabili LDAP richieste sono tutte configurate.",
"build": "Versione",
"recipe-scraper-version": "Versione Recipe Scraper",
"oidc-ready": "OIDC Ready",
"oidc-ready-error-text": "Not all OIDC Values are configured. This can be ignored if you are not using OIDC Authentication.",
"oidc-ready-success-text": "Required OIDC variables are all set."
"oidc-ready": "Pronto per OIDC",
"oidc-ready-error-text": "I valori OIDC non sono configurati. Questo può essere ignorato se non si utilizza Autenticazione OIDC.",
"oidc-ready-success-text": "Le variabili OIDC richieste sono tutte impostate.",
"openai-ready": "OpenAI Ready",
"openai-ready-error-text": "Not all OpenAI Values are configured. This can be ignored if you are not using OpenAI features.",
"openai-ready-success-text": "Required OpenAI variables are all set."
},
"shopping-list": {
"all-lists": "Tutte le Liste",
@@ -761,6 +789,7 @@
"food": "Alimenti",
"note": "Nota",
"label": "Etichetta",
"save-label": "Save Label",
"linked-item-warning": "Questo elemento è collegato a una o più ricette. La modifica delle unità o degli alimenti potrebbe dare risultati inattesi quando si aggiunge o si rimuove la ricetta da questo elenco.",
"toggle-food": "Attiva/Disattiva Alimento",
"manage-labels": "Gestisci Etichette",
@@ -855,11 +884,11 @@
"link-id": "Link ID",
"link-name": "Link Nome",
"login": "Login",
"login-oidc": "Login with",
"or": "or",
"login-oidc": "Accedi con",
"or": "oppure",
"logout": "Logout",
"manage-users": "Gestisci Utenti",
"manage-users-description": "Create and manage users.",
"manage-users-description": "Crea e gestisci gli utenti.",
"new-password": "Nuova Password",
"new-user": "Nuovo Utente",
"password-has-been-reset-to-the-default-password": "La password è stata reimpostata a quella di default",
@@ -1001,6 +1030,12 @@
"delete-recipes": "Elimina Ricette",
"source-unit-will-be-deleted": "L'unità di origine verrà eliminata"
},
"recipe-actions": {
"recipe-actions-data": "Recipe Actions Data",
"new-recipe-action": "New Recipe Action",
"edit-recipe-action": "Edit Recipe Action",
"action-type": "Action Type"
},
"create-alias": "Crea Alias",
"manage-aliases": "Gestisci Alias",
"seed-data": "Dati Predefiniti",
@@ -1147,6 +1182,7 @@
"ingredients-natural-language-processor-explanation-2": "Non è perfetto, ma produce ottimi risultati in generale ed è un buon punto di partenza per separare manualmente gli ingredienti in singoli campi. In alternativa, è anche possibile utilizzare il processore \"Bruto\" che utilizza una tecnica di corrispondenza di modello per identificare gli ingredienti.",
"nlp": "NLP",
"brute": "Bruto",
"openai": "OpenAI",
"show-individual-confidence": "Mostra fiducia individuale",
"ingredient-text": "Testo Ingrediente",
"average-confident": "{0} Fiducia",
@@ -1157,32 +1193,32 @@
"no-logs-found": "Nessun Log Trovato",
"tasks": "Compiti",
"setup": {
"first-time-setup": "First Time Setup",
"welcome-to-mealie-get-started": "Welcome to Mealie! Let's get started",
"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!",
"here-are-a-few-things-to-help-you-get-started": "Here are a few things to help you get started with Mealie",
"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."
"first-time-setup": "Configurazione iniziale",
"welcome-to-mealie-get-started": "Un benvenuto su Mealie! Iniziamo",
"already-set-up-bring-to-homepage": "Ho già configurato tutto, portami alla pagina iniziale",
"common-settings-for-new-sites": "Ecco alcune impostazioni comuni per i nuovi siti",
"setup-complete": "Configurazione completata!",
"here-are-a-few-things-to-help-you-get-started": "Qui ci sono alcune cose per aiutarvi a iniziare con Mealie",
"restore-from-v1-backup": "Hai un backup da un'istanza precedente di Mealie v1? Puoi ripristinarlo qui.",
"manage-profile-or-get-invite-link": "Gestisci il tuo profilo, o parti da un link di invito per condividere con gli altri."
}
},
"profile": {
"welcome-user": "👋 Welcome, {0}!",
"welcome-user": "👋 Benvenutǝ, {0}!",
"description": "Gestisci il tuo profilo, le ricette e le impostazioni di gruppo.",
"get-invite-link": "Ottieni Link Di Invito",
"get-public-link": "Ottieni link pubblico",
"account-summary": "Riepilogo Account",
"account-summary-description": "Here's a summary of your group's information.",
"account-summary-description": "Ecco un riepilogo delle informazioni del tuo gruppo.",
"group-statistics": "Statistiche Gruppo",
"group-statistics-description": "Le statistiche di gruppo forniscono alcune informazioni su come stai usando Mealie.",
"storage-capacity": "Capacità di Archiviazione",
"storage-capacity-description": "La capacità di archiviazione è data dall'insieme delle immagini e delle risorse caricate.",
"personal": "Personale",
"personal-description": "These are settings that are personal to you. Changes here won't affect other users.",
"personal-description": "Queste sono le tue impostazioni personali. Le modifiche non influenzeranno gli altri utenti.",
"user-settings": "Impostazioni Utente",
"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": "Gestisci le tue preferenze, modifica la tua password e aggiorna la tua email.",
"api-tokens-description": "Gestisci i tuoi Token API per l'accesso da applicazioni esterne.",
"group-description": "Questi elementi sono condivisi all'interno del tuo gruppo. Modificando uno di essi cambierà per l'intero gruppo!",
"group-settings": "Impostazioni Gruppo",
"group-settings-description": "Gestisci le impostazioni comuni del gruppo, come il piano alimentare e impostazioni di privacy.",
@@ -1193,9 +1229,9 @@
"notifiers": "Notifiche",
"notifiers-description": "Imposta email e notifiche push che si attivano per eventi specifici.",
"manage-data": "Gestisci Dati",
"manage-data-description": "Manage your Mealie data; Foods, Units, Categories, Tags and more.",
"manage-data-description": "Gestisci i tuoi dati di Mealie; Alimenti, Unità, Categorie, Tag e altro ancora.",
"data-migrations": "Migrazioni Dati",
"data-migrations-description": "Migrate your existing data from other applications like Nextcloud Recipes and Chowdown.",
"data-migrations-description": "Migra i dati esistenti da altre applicazioni come Nextcloud Recipes e Chowdown.",
"email-sent": "Email Inviata",
"error-sending-email": "Errore Nell'Invio Email",
"personal-information": "Informazioni Personali",

View File

@@ -18,8 +18,8 @@
"log-lines": "ログの行",
"not-demo": "非デモ",
"portfolio": "ポートフォリオ",
"production": "生産",
"support": "お問い合わせ",
"production": "Production",
"support": "ヘルプ",
"version": "バージョン",
"unknown-version": "不明",
"sponsor": "スポンサー"
@@ -29,7 +29,7 @@
"code": "コード",
"file": "ファイル",
"image": "画像",
"new-asset": "新しい資産",
"new-asset": "新しいアセット",
"pdf": "PDF",
"recipe": "レシピ",
"show-assets": "資産を表示",
@@ -64,6 +64,7 @@
"something-went-wrong": "問題が発生しました",
"subscribed-events": "購読中のイベント",
"test-message-sent": "テストメッセージを送信しました",
"message-sent": "メッセージが送信されました",
"new-notification": "新着通知",
"event-notifiers": "イベント通知",
"apprise-url-skipped-if-blank": "通知用URL (空欄の場合はスキップ)",
@@ -71,12 +72,12 @@
"what-events": "この通知はどのイベントを購読すべきですか?",
"user-events": "ユーザーイベント",
"mealplan-events": "献立イベント",
"when-a-user-in-your-group-creates-a-new-mealplan": "グループ内のユーザーが新しい食事プランを作成したとき",
"when-a-user-in-your-group-creates-a-new-mealplan": "グループ内のユーザーが新しい献立を作成したとき",
"shopping-list-events": "買い物リストイベント",
"cookbook-events": "料理本イベント",
"tag-events": "タグイベント",
"category-events": "カテゴリイベント",
"when-a-new-user-joins-your-group": "新しいユーザーがあなたのグループに参加する際",
"when-a-new-user-joins-your-group": "新しいユーザーがグループに参加したとき",
"recipe-events": "レシピイベント"
},
"general": {
@@ -160,6 +161,7 @@
"test": "テスト",
"themes": "テーマ",
"thursday": "木曜日",
"title": "タイトル",
"token": "トークン",
"tuesday": "火曜日",
"type": "タイプ",
@@ -289,6 +291,8 @@
"mealplan-updated": "献立を更新しました",
"no-meal-plan-defined-yet": "食事プランはまだ定義されていません",
"no-meal-planned-for-today": "今日の食事プランはありません",
"numberOfDays-hint": "Number of days on page load",
"numberOfDays-label": "Default Days",
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "食事プランでは、これらのカテゴリを持つレシピのみが使用されます",
"planner": "プランナー",
"quick-week": "クイックウィーク",
@@ -375,6 +379,10 @@
"myrecipebox": {
"title": "My Recipe Box",
"description-long": "MealieはMy Recipe Boxからレシピをインポートできます。レシピをCSV形式でエクスポートし、以下に.csvをアップロードしてください。"
},
"recipekeeper": {
"title": "Recipe Keeper",
"description-long": "Mealie can import recipes from Recipe Keeper. Export your recipes in zip format, then upload the .zip file below."
}
},
"new-recipe": {
@@ -582,7 +590,23 @@
"upload-image": "画像をアップロード",
"screen-awake": "画面をスリープ状態にしない",
"remove-image": "画像を削除",
"nextStep": "次のステップ"
"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": "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",
"natural-language-processor": "Natural Language Processor",
"brute-parser": "Brute Parser",
"openai-parser": "OpenAI Parser",
"parse-all": "Parse All",
"no-unit": "No unit",
"missing-unit": "Create missing unit: {unit}",
"missing-food": "Create missing food: {food}",
"no-food": "No Food"
}
},
"search": {
"advanced-search": "詳細検索",
@@ -611,6 +635,7 @@
"backup-created-at-response-export_path": "{path} にバックアップを作成しました",
"backup-deleted": "バックアップを削除しました",
"restore-success": "復元に成功しました",
"restore-fail": "Restore failed. Check your server logs for more details",
"backup-tag": "バックアップ タグ",
"create-heading": "Create a Backup",
"delete-backup": "バックアップを削除",
@@ -747,7 +772,10 @@
"recipe-scraper-version": "Recipe Scraper バージョン",
"oidc-ready": "OIDC対応",
"oidc-ready-error-text": "すべてのOIDC値が設定されていません。OIDC認証を使用していない場合は無視できます。",
"oidc-ready-success-text": "必要なOIDC変数はすべて設定されています。"
"oidc-ready-success-text": "必要なOIDC変数はすべて設定されています。",
"openai-ready": "OpenAI Ready",
"openai-ready-error-text": "Not all OpenAI Values are configured. This can be ignored if you are not using OpenAI features.",
"openai-ready-success-text": "Required OpenAI variables are all set."
},
"shopping-list": {
"all-lists": "すべてのリスト",
@@ -761,6 +789,7 @@
"food": "食料",
"note": "メモ",
"label": "ラベル",
"save-label": "Save Label",
"linked-item-warning": "このアイテムは 1 つ以上のレシピにリンクされています。このリストにレシピを追加または削除するときに、単位や食品を調整すると予期しない結果が生じることがあります。",
"toggle-food": "食料の切り替え",
"manage-labels": "ラベルの管理",
@@ -1001,6 +1030,12 @@
"delete-recipes": "レシピを削除",
"source-unit-will-be-deleted": "元の単位が削除されます"
},
"recipe-actions": {
"recipe-actions-data": "Recipe Actions Data",
"new-recipe-action": "New Recipe Action",
"edit-recipe-action": "Edit Recipe Action",
"action-type": "Action Type"
},
"create-alias": "エイリアスを作成",
"manage-aliases": "エイリアスの管理",
"seed-data": "シードデータ",
@@ -1147,6 +1182,7 @@
"ingredients-natural-language-processor-explanation-2": "これは完璧ではありませんが、一般的に優れた結果が得られ、成分を手動で個別のフィールドに解析するための良い出発点となります。あるいは、パターン マッチング技術を使用して成分を識別する「Brute」プロセッサを使用することもできます。",
"nlp": "NLP",
"brute": "ブルート",
"openai": "OpenAI",
"show-individual-confidence": "個々の信頼性を表示",
"ingredient-text": "材料テキスト",
"average-confident": "{0} 自信あり",

View File

@@ -42,9 +42,9 @@
"category-deleted": "카테고리 삭제됨",
"category-deletion-failed": "카테고리 삭제 실패",
"category-filter": "카테고리 필터",
"category-update-failed": "Category update failed",
"category-update-failed": "Category 업데이트 실패",
"category-updated": "카테고리 업데이트",
"uncategorized-count": "Uncategorized {count}",
"uncategorized-count": "카테고리 없음 {count}",
"create-a-category": "카테고리 생성",
"category-name": "카테고리 이름",
"category": "카테고리"
@@ -56,21 +56,22 @@
"event-delete-confirmation": "정말로 이 이벤트를 삭제하시겠어요?",
"event-deleted": "이벤트 삭제됨",
"event-updated": "이벤트 업데이트됨",
"new-notification-form-description": "Mealie uses the Apprise library to generate notifications. They offer many options for services to use for notifications. Refer to their wiki for a comprehensive guide on how to create the URL for your service. If available, selecting the type of your notification may include extra features.",
"new-notification-form-description": "Mealie는 Apprise 라이브러리를 사용하여 알림을 생성합니다. 알림에 사용할 서비스에 대한 다양한 옵션을 제공합니다. 서비스의 URL을 만드는 방법에 대한 종합적인 가이드는 해당 Wiki 문서를 참조하세요. 알림 유형에 따라 추가 기능이 포함될 수 있습니다.",
"new-version": "새로운 버전 사용 가능",
"notification": "알림",
"refresh": "새로고침",
"scheduled": "Scheduled",
"something-went-wrong": "Something Went Wrong!",
"something-went-wrong": "문제가 발생했습니다!",
"subscribed-events": "구독한 이벤트",
"test-message-sent": "Test Message Sent",
"test-message-sent": "테스트 메시지가 전송됐습니다.",
"message-sent": "메세지가 전송됨",
"new-notification": "새 알림",
"event-notifiers": "Event Notifiers",
"apprise-url-skipped-if-blank": "Apprise URL (skipped if blank)",
"apprise-url-skipped-if-blank": "Apprise URL (비워두면 생략합니다)",
"enable-notifier": "Enable Notifier",
"what-events": "What events should this notifier subscribe to?",
"user-events": "User Events",
"mealplan-events": "Mealplan Events",
"user-events": "사용자 이벤트",
"mealplan-events": "Mealplan 이벤트",
"when-a-user-in-your-group-creates-a-new-mealplan": "When a user in your group creates a new mealplan",
"shopping-list-events": "Shopping List Events",
"cookbook-events": "Cookbook Events",
@@ -160,6 +161,7 @@
"test": "Test",
"themes": "Themes",
"thursday": "목요일",
"title": "Title",
"token": "Token",
"tuesday": "화요일",
"type": "Type",
@@ -289,6 +291,8 @@
"mealplan-updated": "Mealplan Updated",
"no-meal-plan-defined-yet": "No meal plan defined yet",
"no-meal-planned-for-today": "No meal planned for today",
"numberOfDays-hint": "Number of days on page load",
"numberOfDays-label": "Default Days",
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "Only recipes with these categories will be used in Meal Plans",
"planner": "Planner",
"quick-week": "Quick Week",
@@ -375,6 +379,10 @@
"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."
},
"recipekeeper": {
"title": "Recipe Keeper",
"description-long": "Mealie can import recipes from Recipe Keeper. Export your recipes in zip format, then upload the .zip file below."
}
},
"new-recipe": {
@@ -582,7 +590,23 @@
"upload-image": "이미지 업로드",
"screen-awake": "화면을 항상 켠 상태로 유지",
"remove-image": "이미지 제거",
"nextStep": "다음 단계"
"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.",
"select-parser": "Select Parser",
"natural-language-processor": "Natural Language Processor",
"brute-parser": "Brute Parser",
"openai-parser": "OpenAI Parser",
"parse-all": "Parse All",
"no-unit": "No unit",
"missing-unit": "Create missing unit: {unit}",
"missing-food": "Create missing food: {food}",
"no-food": "No Food"
}
},
"search": {
"advanced-search": "고급 검색",
@@ -611,6 +635,7 @@
"backup-created-at-response-export_path": "Backup Created at {path}",
"backup-deleted": "백업 삭제됨",
"restore-success": "복원 성공!",
"restore-fail": "Restore failed. Check your server logs for more details",
"backup-tag": "Backup Tag",
"create-heading": "Create a Backup",
"delete-backup": "백업 삭제",
@@ -747,7 +772,10 @@
"recipe-scraper-version": "Recipe Scraper Version",
"oidc-ready": "OIDC Ready",
"oidc-ready-error-text": "Not all OIDC Values are configured. This can be ignored if you are not using OIDC Authentication.",
"oidc-ready-success-text": "Required OIDC variables are all set."
"oidc-ready-success-text": "Required OIDC variables are all set.",
"openai-ready": "OpenAI Ready",
"openai-ready-error-text": "Not all OpenAI Values are configured. This can be ignored if you are not using OpenAI features.",
"openai-ready-success-text": "Required OpenAI variables are all set."
},
"shopping-list": {
"all-lists": "All Lists",
@@ -761,6 +789,7 @@
"food": "Food",
"note": "Note",
"label": "Label",
"save-label": "Save Label",
"linked-item-warning": "This item is linked to one or more recipe. Adjusting the units or foods will yield unexpected results when adding or removing the recipe from this list.",
"toggle-food": "Toggle Food",
"manage-labels": "Manage Labels",
@@ -1001,6 +1030,12 @@
"delete-recipes": "Delete Recipes",
"source-unit-will-be-deleted": "Source Unit will be deleted"
},
"recipe-actions": {
"recipe-actions-data": "Recipe Actions Data",
"new-recipe-action": "New Recipe Action",
"edit-recipe-action": "Edit Recipe Action",
"action-type": "Action Type"
},
"create-alias": "Create Alias",
"manage-aliases": "Manage Aliases",
"seed-data": "Seed Data",
@@ -1147,6 +1182,7 @@
"ingredients-natural-language-processor-explanation-2": "It's not perfect, but it yields great results in general and is a good starting point for manually parsing ingredients into individual fields. Alternatively, you can also use the \"Brute\" processor that uses a pattern matching technique to identify ingredients.",
"nlp": "NLP",
"brute": "Brute",
"openai": "OpenAI",
"show-individual-confidence": "Show individual confidence",
"ingredient-text": "Ingredient Text",
"average-confident": "{0} Confident",

View File

@@ -64,6 +64,7 @@
"something-went-wrong": "Įvyko klaida!",
"subscribed-events": "Prenumeruojami įvykiai",
"test-message-sent": "Testinė žinutė išsiųsta",
"message-sent": "Message Sent",
"new-notification": "Naujas pranešimas",
"event-notifiers": "Įvykių pranešimai",
"apprise-url-skipped-if-blank": "Apprise URL (praleidžiama, jei tuščia)",
@@ -160,6 +161,7 @@
"test": "Tikrinti",
"themes": "Temos",
"thursday": "Ketvirtadienis",
"title": "Title",
"token": "Prieeigos raktas",
"tuesday": "Antradienis",
"type": "Tipas",
@@ -289,6 +291,8 @@
"mealplan-updated": "Mitybos planas atnaujintas",
"no-meal-plan-defined-yet": "Nėra nustatytų mitybos planų",
"no-meal-planned-for-today": "Nėra šios dienos mitybos plano",
"numberOfDays-hint": "Number of days on page load",
"numberOfDays-label": "Default Days",
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "Mitybos planuose bus naudojami tik šių kategorijų receptai",
"planner": "Planuoklis",
"quick-week": "Greitas savaitės planas",
@@ -375,6 +379,10 @@
"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."
},
"recipekeeper": {
"title": "Recipe Keeper",
"description-long": "Mealie can import recipes from Recipe Keeper. Export your recipes in zip format, then upload the .zip file below."
}
},
"new-recipe": {
@@ -582,7 +590,23 @@
"upload-image": "Įkelti nuotrauką",
"screen-awake": "Keep Screen Awake",
"remove-image": "Remove image",
"nextStep": "Next step"
"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.",
"select-parser": "Select Parser",
"natural-language-processor": "Natural Language Processor",
"brute-parser": "Brute Parser",
"openai-parser": "OpenAI Parser",
"parse-all": "Parse All",
"no-unit": "No unit",
"missing-unit": "Create missing unit: {unit}",
"missing-food": "Create missing food: {food}",
"no-food": "No Food"
}
},
"search": {
"advanced-search": "Išplėstinė paieška",
@@ -611,6 +635,7 @@
"backup-created-at-response-export_path": "Atsarginė kopija sukurta {path}",
"backup-deleted": "Atsarginė kopija ištrinta",
"restore-success": "Restore successful",
"restore-fail": "Restore failed. Check your server logs for more details",
"backup-tag": "Atsarginės kopijos žyma",
"create-heading": "Sukurti atsarginę kopiją",
"delete-backup": "Ištrinti atsarginę kopiją",
@@ -747,7 +772,10 @@
"recipe-scraper-version": "Recipe Scraper Version",
"oidc-ready": "OIDC Ready",
"oidc-ready-error-text": "Not all OIDC Values are configured. This can be ignored if you are not using OIDC Authentication.",
"oidc-ready-success-text": "Required OIDC variables are all set."
"oidc-ready-success-text": "Required OIDC variables are all set.",
"openai-ready": "OpenAI Ready",
"openai-ready-error-text": "Not all OpenAI Values are configured. This can be ignored if you are not using OpenAI features.",
"openai-ready-success-text": "Required OpenAI variables are all set."
},
"shopping-list": {
"all-lists": "Visi sąrašai",
@@ -761,6 +789,7 @@
"food": "Maistas",
"note": "Pastaba",
"label": "Žyma",
"save-label": "Save Label",
"linked-item-warning": "Šis įrašas susietas su vienu ar keliais receptais. Jei pakeisite vienetus ar produktus, galimi nenumatyti rezultatai pridedant ar pašalinant receptą iš šio sąrašo.",
"toggle-food": "Įjungti produktą",
"manage-labels": "Tvarkyti žymas",
@@ -1001,6 +1030,12 @@
"delete-recipes": "Ištrinti receptus",
"source-unit-will-be-deleted": "Pirminis vienetas bus ištrintas"
},
"recipe-actions": {
"recipe-actions-data": "Recipe Actions Data",
"new-recipe-action": "New Recipe Action",
"edit-recipe-action": "Edit Recipe Action",
"action-type": "Action Type"
},
"create-alias": "Create Alias",
"manage-aliases": "Manage Aliases",
"seed-data": "Pradiniai duomenys",
@@ -1147,6 +1182,7 @@
"ingredients-natural-language-processor-explanation-2": "Šiuo metu funkcionalumo veikimas tobulinamas, bet jau duoda pakankamai gerus rezultatus ir yra nebloga pradžia rankiniu būdu skirstant ingredientus į atskirus laukelius. Taip pat galima pasinaudoti funkcija \"Netikslus apdorojimas\", kuri atpažįsta ingredientus pagal šabloninį algoritmą.",
"nlp": "NLP",
"brute": "Netikslus apdorojimas",
"openai": "OpenAI",
"show-individual-confidence": "Rodyti individualų patikimumą",
"ingredient-text": "Ingrediento tekstas",
"average-confident": "{0} patikimumas",

View File

@@ -1,18 +1,18 @@
{
"about": {
"about": "About",
"about-mealie": "About Mealie",
"api-docs": "API Docs",
"api-port": "API Port",
"application-mode": "Application Mode",
"database-type": "Database Type",
"database-url": "Database URL",
"default-group": "Default Group",
"about": "Par",
"about-mealie": "Par Mealie",
"api-docs": "API Dokumentācija",
"api-port": "API ports",
"application-mode": "Lietojumprogrammas režīms",
"database-type": "Datubāzes tips",
"database-url": "Datubāzes URL",
"default-group": "Noklusētā grupa",
"demo": "Demo",
"demo-status": "Demo Status",
"development": "Development",
"docs": "Docs",
"download-log": "Download Log",
"demo-status": "Demonstrācijas statuss",
"development": "Izstrāde",
"docs": "Dokumentācija",
"download-log": "Lejupielādēt žurnālu",
"download-recipe-json": "Last Scraped JSON",
"github": "Github",
"log-lines": "Log Lines",
@@ -64,6 +64,7 @@
"something-went-wrong": "Something Went Wrong!",
"subscribed-events": "Subscribed Events",
"test-message-sent": "Test Message Sent",
"message-sent": "Message Sent",
"new-notification": "New Notification",
"event-notifiers": "Event Notifiers",
"apprise-url-skipped-if-blank": "Apprise URL (skipped if blank)",
@@ -160,6 +161,7 @@
"test": "Test",
"themes": "Themes",
"thursday": "Thursday",
"title": "Title",
"token": "Token",
"tuesday": "Tuesday",
"type": "Type",
@@ -289,6 +291,8 @@
"mealplan-updated": "Mealplan Updated",
"no-meal-plan-defined-yet": "No meal plan defined yet",
"no-meal-planned-for-today": "No meal planned for today",
"numberOfDays-hint": "Number of days on page load",
"numberOfDays-label": "Default Days",
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "Only recipes with these categories will be used in Meal Plans",
"planner": "Planner",
"quick-week": "Quick Week",
@@ -375,6 +379,10 @@
"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."
},
"recipekeeper": {
"title": "Recipe Keeper",
"description-long": "Mealie can import recipes from Recipe Keeper. Export your recipes in zip format, then upload the .zip file below."
}
},
"new-recipe": {
@@ -582,7 +590,23 @@
"upload-image": "Upload image",
"screen-awake": "Keep Screen Awake",
"remove-image": "Remove image",
"nextStep": "Next step"
"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.",
"select-parser": "Select Parser",
"natural-language-processor": "Natural Language Processor",
"brute-parser": "Brute Parser",
"openai-parser": "OpenAI Parser",
"parse-all": "Parse All",
"no-unit": "No unit",
"missing-unit": "Create missing unit: {unit}",
"missing-food": "Create missing food: {food}",
"no-food": "No Food"
}
},
"search": {
"advanced-search": "Advanced Search",
@@ -611,6 +635,7 @@
"backup-created-at-response-export_path": "Backup Created at {path}",
"backup-deleted": "Backup deleted",
"restore-success": "Restore successful",
"restore-fail": "Restore failed. Check your server logs for more details",
"backup-tag": "Backup Tag",
"create-heading": "Create A Backup",
"delete-backup": "Delete Backup",
@@ -747,7 +772,10 @@
"recipe-scraper-version": "Recipe Scraper Version",
"oidc-ready": "OIDC Ready",
"oidc-ready-error-text": "Not all OIDC Values are configured. This can be ignored if you are not using OIDC Authentication.",
"oidc-ready-success-text": "Required OIDC variables are all set."
"oidc-ready-success-text": "Required OIDC variables are all set.",
"openai-ready": "OpenAI Ready",
"openai-ready-error-text": "Not all OpenAI Values are configured. This can be ignored if you are not using OpenAI features.",
"openai-ready-success-text": "Required OpenAI variables are all set."
},
"shopping-list": {
"all-lists": "All Lists",
@@ -761,6 +789,7 @@
"food": "Food",
"note": "Note",
"label": "Label",
"save-label": "Save Label",
"linked-item-warning": "This item is linked to one or more recipe. Adjusting the units or foods will yield unexpected results when adding or removing the recipe from this list.",
"toggle-food": "Toggle Food",
"manage-labels": "Manage Labels",
@@ -1001,6 +1030,12 @@
"delete-recipes": "Delete Recipes",
"source-unit-will-be-deleted": "Source Unit will be deleted"
},
"recipe-actions": {
"recipe-actions-data": "Recipe Actions Data",
"new-recipe-action": "New Recipe Action",
"edit-recipe-action": "Edit Recipe Action",
"action-type": "Action Type"
},
"create-alias": "Create Alias",
"manage-aliases": "Manage Aliases",
"seed-data": "Seed Data",
@@ -1147,6 +1182,7 @@
"ingredients-natural-language-processor-explanation-2": "It's not perfect, but it yields great results in general and is a good starting point for manually parsing ingredients into individual fields. Alternatively, you can also use the \"Brute\" processor that uses a pattern matching technique to identify ingredients.",
"nlp": "NLP",
"brute": "Brute",
"openai": "OpenAI",
"show-individual-confidence": "Show individual confidence",
"ingredient-text": "Ingredient Text",
"average-confident": "{0} Confident",

View File

@@ -64,6 +64,7 @@
"something-went-wrong": "Er is iets fout gegaan!",
"subscribed-events": "Geabonneerde gebeurtenissen",
"test-message-sent": "Testbericht verzonden",
"message-sent": "Bericht verstuurd",
"new-notification": "Nieuwe melding",
"event-notifiers": "Meldingen van gebeurtenissen",
"apprise-url-skipped-if-blank": "URL van Apprise (overgeslagen als veld leeg is)",
@@ -160,6 +161,7 @@
"test": "Test",
"themes": "Thema's",
"thursday": "donderdag",
"title": "Titel",
"token": "Token",
"tuesday": "dinsdag",
"type": "Soort",
@@ -289,6 +291,8 @@
"mealplan-updated": "Maaltijdplan bijgewerkt",
"no-meal-plan-defined-yet": "Nog geen maaltijdplan opgesteld",
"no-meal-planned-for-today": "Geen maaltijd gepland voor vandaag",
"numberOfDays-hint": "Aantal dagen bij laden van de pagina",
"numberOfDays-label": "Standaard aantal dagen",
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "Alleen recepten met deze categorieën zullen worden gebruikt in maaltijdplannen",
"planner": "Planner",
"quick-week": "Snelle week",
@@ -375,6 +379,10 @@
"myrecipebox": {
"title": "Mijn Receptenbox",
"description-long": "Mealie kan recepten importeren uit My Recipe Box. Exporteer je recepten in CSV formaat, upload daarna het .csv bestand hieronder."
},
"recipekeeper": {
"title": "Recipe Keeper",
"description-long": "Mealie kan recepten importeren van Recipe Keeper. Exporteer de recepten als .zip. Dat bestand kunt u hier dan uploaden."
}
},
"new-recipe": {
@@ -582,7 +590,23 @@
"upload-image": "Afbeelding uploaden",
"screen-awake": "Scherm aan laten staan",
"remove-image": "Afbeelding verwijderen",
"nextStep": "Volgende stap"
"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 u liever niet de bewerkte resultaten gebruikt, kunt u 'Annuleren' selecteren en de wijzigingen worden niet opgeslagen.",
"ingredient-parser": "Ingrediënt 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": "Selecteer parser",
"natural-language-processor": "Natural Language Processor",
"brute-parser": "Brute Parser",
"openai-parser": "OpenAI parser",
"parse-all": "Alles verwerken",
"no-unit": "Geen eenheid",
"missing-unit": "Create missing unit: {unit}",
"missing-food": "Create missing food: {food}",
"no-food": "Geen voedsel"
}
},
"search": {
"advanced-search": "Geavanceerd zoeken",
@@ -611,6 +635,7 @@
"backup-created-at-response-export_path": "Back-up gemaakt op {path}",
"backup-deleted": "Back-up verwijderd",
"restore-success": "Herstellen gelukt",
"restore-fail": "Herstel mislukt. Controleer de logbestanden van uw server voor meer informatie",
"backup-tag": "Back-uplabel",
"create-heading": "Back-up maken",
"delete-backup": "Back-up verwijderen",
@@ -745,9 +770,12 @@
"ldap-ready-success-text": "Vereiste LDAP variabelen zijn helemaal ingesteld.",
"build": "Bouw",
"recipe-scraper-version": "Versie van de receptenscraper",
"oidc-ready": "OIDC Ready",
"oidc-ready": "OIDC klaar",
"oidc-ready-error-text": "Not all OIDC Values are configured. This can be ignored if you are not using OIDC Authentication.",
"oidc-ready-success-text": "Required OIDC variables are all set."
"oidc-ready-success-text": "Required OIDC variables are all set.",
"openai-ready": "OpenAI staat klaar",
"openai-ready-error-text": "Niet alle tekstvakken voor OpenAI zijn ingevuld. Als je geen OpenAI gebruikt kun je dit leeg laten.",
"openai-ready-success-text": "Verplichte tekstvakken voor OpenAI zijn ingevuld."
},
"shopping-list": {
"all-lists": "Alle lijsten",
@@ -761,6 +789,7 @@
"food": "Voedsel",
"note": "Notitie",
"label": "Label",
"save-label": "Label opslaan",
"linked-item-warning": "Dit element is gekoppeld aan een of meer recepten. Het aanpassen van de eenheden of ingrediënten zal onverwachte resultaten opleveren bij het toevoegen of verwijderen van het recept uit deze lijst.",
"toggle-food": "Voedsel schakelen",
"manage-labels": "Labels beheren",
@@ -855,8 +884,8 @@
"link-id": "Koppeling ID",
"link-name": "Koppeling Naam",
"login": "Inloggen",
"login-oidc": "Login with",
"or": "or",
"login-oidc": "Login met",
"or": "of",
"logout": "Uitloggen",
"manage-users": "Beheer Gebruikers",
"manage-users-description": "Aanmaken en beheren van gebruikers.",
@@ -1001,6 +1030,12 @@
"delete-recipes": "Verwijder recepten",
"source-unit-will-be-deleted": "Broneenheid zal worden verwijderd"
},
"recipe-actions": {
"recipe-actions-data": "Gegevens voor acties met recepten",
"new-recipe-action": "Nieuwe actie met recept",
"edit-recipe-action": "Pas actie met recept aan",
"action-type": "Soort actie"
},
"create-alias": "Maak alias",
"manage-aliases": "Beheer aliassen ",
"seed-data": "Voorbeeldgegevens",
@@ -1147,6 +1182,7 @@
"ingredients-natural-language-processor-explanation-2": "Het is niet perfect, maar het levert uitstekende resultaten op in het algemeen en is een goed uitgangspunt voor het handmatig verwerken van ingrediënten in afzonderlijke velden. Je kunt ook de \"Brute\" processor gebruiken die een patroonovereenkomende techniek gebruikt om ingrediënten te identificeren.",
"nlp": "NLP",
"brute": "Brute",
"openai": "OpenAI kunstmatige intelligentie",
"show-individual-confidence": "Individuele overtuiging tonen",
"ingredient-text": "Ingrediënt tekst",
"average-confident": "{0} overtuigd",

View File

@@ -64,6 +64,7 @@
"something-went-wrong": "Noe gikk galt!",
"subscribed-events": "Abonnerte hendelser",
"test-message-sent": "Testmelding sendt",
"message-sent": "Melding sendt",
"new-notification": "Ny varsel",
"event-notifiers": "Hendelsesvarsler",
"apprise-url-skipped-if-blank": "Apprise URL (hoppes over hvis tom)",
@@ -160,6 +161,7 @@
"test": "Test",
"themes": "Temaer",
"thursday": "Torsdag",
"title": "Tittel",
"token": "Token",
"tuesday": "Tirsdag",
"type": "Type",
@@ -208,7 +210,7 @@
"unsaved-changes": "Du har ulagrede endringer. Ønsker du å lagre før du forlater? Trykk 'OK' for å lagre, 'Avbryt' for å forkaste endringene.",
"clipboard-copy-failure": "Kunne ikke kopiere til utklippstavlen.",
"confirm-delete-generic-items": "Er du sikker på at du vil følgende elementer?",
"organizers": "Organizers"
"organizers": "Organisatorer"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Er du sikker på at du vil slette <b>{groupName}<b/>?",
@@ -289,6 +291,8 @@
"mealplan-updated": "Måltidsplan oppdatert",
"no-meal-plan-defined-yet": "Ingen måltidsplan er definert ennå",
"no-meal-planned-for-today": "Ingen måltid planlagt i dag",
"numberOfDays-hint": "Number of days on page load",
"numberOfDays-label": "Default Days",
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "Kun oppskrifter med disse kategoriene vil bli brukt i måltidsplaner",
"planner": "Planlegger",
"quick-week": "Hurtigplan",
@@ -363,7 +367,7 @@
"choose-migration-type": "Velg type overføring",
"tag-all-recipes": "Merk alle oppskrifter med emneordet {tag-name}",
"nextcloud-text": "Oppskrifter fra Nextcloud kan importeres fra en zip-fil som inneholder dataene lagret i Nextcloud. Se eksempelet på mappestrukture nedenfor for å sikre at oppskriftene kan importeres.",
"chowdown-text": "Mealie natively supports the chowdown repository format. Download the code repository as a .zip file and upload it below.",
"chowdown-text": "Mealie støtter Chowdown-arkivformatet. Last ned kodearkivet som en .zip-fil og last den opp nedenfor.",
"recipe-1": "Oppskrift 1",
"recipe-2": "Oppskrift 2",
"paprika-text": "Mealie kan importere oppskrifter fra Paprika. Eksporter oppskriftene fra Paprika, endre filnavnutvidelsen til .zip og last den opp nedenfor.",
@@ -374,7 +378,11 @@
},
"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 kan importere oppskrifter fra My Recipe Box. Eksporter oppskrifter i CSV-format, og last deretter opp .csv-filen nedenfor."
},
"recipekeeper": {
"title": "Recipe Keeper",
"description-long": "Mealie can import recipes from Recipe Keeper. Export your recipes in zip format, then upload the .zip file below."
}
},
"new-recipe": {
@@ -582,7 +590,23 @@
"upload-image": "Last opp bilde",
"screen-awake": "Hold skjermen på",
"remove-image": "Slett bilde",
"nextStep": "Neste trinn"
"nextStep": "Neste trinn",
"recipe-actions": "Oppskriftshandlinger",
"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": "Ingrediens-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",
"natural-language-processor": "Natural Language Processor",
"brute-parser": "Brute Parser",
"openai-parser": "OpenAI Parser",
"parse-all": "Parse All",
"no-unit": "No unit",
"missing-unit": "Create missing unit: {unit}",
"missing-food": "Create missing food: {food}",
"no-food": "No Food"
}
},
"search": {
"advanced-search": "Avansert søk",
@@ -611,6 +635,7 @@
"backup-created-at-response-export_path": "Sikkerhetskopi opprettet i {path}",
"backup-deleted": "Sikkerhetskopi slettet",
"restore-success": "Gjenopprettingen var vellykket",
"restore-fail": "Restore failed. Check your server logs for more details",
"backup-tag": "Emneord for sikkerhetskopi",
"create-heading": "Opprett en sikkerhetskopi",
"delete-backup": "Slett sikkerhetskopi",
@@ -747,7 +772,10 @@
"recipe-scraper-version": "Versjon på oppskrift-scraper",
"oidc-ready": "OIDC klar",
"oidc-ready-error-text": "Ikke alle OIDC-verdier er konfigurert. Dette kan ignoreres hvis du ikke bruker OIDC-autentisering.",
"oidc-ready-success-text": "Alle obligratoriske OIDC-variabler er satt."
"oidc-ready-success-text": "Alle obligratoriske OIDC-variabler er satt.",
"openai-ready": "OpenAI Ready",
"openai-ready-error-text": "Not all OpenAI Values are configured. This can be ignored if you are not using OpenAI features.",
"openai-ready-success-text": "Required OpenAI variables are all set."
},
"shopping-list": {
"all-lists": "Alle lister",
@@ -761,6 +789,7 @@
"food": "Matvare",
"note": "Notat",
"label": "Etikett",
"save-label": "Save Label",
"linked-item-warning": "Dette elementet er koblet til én eller flere oppskrifter. Å endre enheter eller matvarer vil føre til uventede resultater når oppskriften legges til eller fjernes fra denne listen.",
"toggle-food": "Vis/skjul matvare",
"manage-labels": "Administrer etiketter",
@@ -1001,6 +1030,12 @@
"delete-recipes": "Slett oppskrifter",
"source-unit-will-be-deleted": "Kildeenheten vil bli slettet"
},
"recipe-actions": {
"recipe-actions-data": "Opppgavehandlings-data",
"new-recipe-action": "Ny oppskriftshandling",
"edit-recipe-action": "Rediger oppskriftshandling",
"action-type": "Handlingstype"
},
"create-alias": "Opprett alias",
"manage-aliases": "Administrer aliaser",
"seed-data": "Tilføringsdata",
@@ -1147,6 +1182,7 @@
"ingredients-natural-language-processor-explanation-2": "Modellen er ikke perfekt, men det gir generelt sett gode resultater og er et godt utgangspunkt for å manuelt analysere ingredienser i individuelle felt. Alternativt kan du også bruke 'Brute'-prosessoren som bruker mønstergjenkjennelsesteknikker for å identifisere ingredienser.",
"nlp": "NLP",
"brute": "Brute",
"openai": "OpenAI",
"show-individual-confidence": "Vis individuell konfidens",
"ingredient-text": "Ingredienstekst",
"average-confident": "{0} Troverdig",
@@ -1168,21 +1204,21 @@
}
},
"profile": {
"welcome-user": "👋 Welcome, {0}!",
"welcome-user": "Velkommen, {0}!",
"description": "Administrer din profil, oppskrifter og gruppeinnstillinger.",
"get-invite-link": "Få invitasjonslenke",
"get-public-link": "Få offentlig lenke",
"account-summary": "Kontosammendrag",
"account-summary-description": "Here's a summary of your group's information.",
"account-summary-description": "Her er en oppsummering av informasjonen til gruppen din.",
"group-statistics": "Gruppestatistikk",
"group-statistics-description": "Gruppestatistikken din gir deg et innblikk i hvordan du bruker Mealie.",
"storage-capacity": "Lagringskapasitet",
"storage-capacity-description": "Lagringskapasiteten er en beregning av bildene og ressursene du har lastet opp.",
"personal": "Personlig",
"personal-description": "These are settings that are personal to you. Changes here won't affect other users.",
"personal-description": "Dette er personlige innstillinger. Endringer gjort her påvirker ikke andre brukere.",
"user-settings": "Brukerinnstillinger",
"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": "Administrer innstillingene, endre passordet og oppdater e-postadressen din.",
"api-tokens-description": "Administrer dine API-tokens for tilgang fra eksterne programmer.",
"group-description": "Disse elementene deles innad i gruppen din. Redigering av elementenee vil føre til endringer for hele gruppen!",
"group-settings": "Gruppeinnstillinger",
"group-settings-description": "Administrer felles gruppeinnstillinger som innstillinger for måltidsplaner og personvern.",
@@ -1193,9 +1229,9 @@
"notifiers": "Varslingsagenter",
"notifiers-description": "Sett opp e-post- og pushvarsler som utløses av spesifikke hendelser.",
"manage-data": "Administrer data",
"manage-data-description": "Manage your Mealie data; Foods, Units, Categories, Tags and more.",
"manage-data-description": "Administrer dine Mealie-data; Ingredienser, enheter, kategorier, emneknagger og mer.",
"data-migrations": "Dataoverføringer",
"data-migrations-description": "Migrate your existing data from other applications like Nextcloud Recipes and Chowdown.",
"data-migrations-description": "Overfør eksisterende data fra andre programmer som Nextcloud Recipes og Chowdown.",
"email-sent": "E-post sendt",
"error-sending-email": "Feil ved sending av e-post",
"personal-information": "Personlig informasjon",

View File

@@ -64,6 +64,7 @@
"something-went-wrong": "Coś poszło nie tak!",
"subscribed-events": "Zasubskrybowane wydarzenia",
"test-message-sent": "Wiadomość została wysłana",
"message-sent": "Message Sent",
"new-notification": "Nowe powiadomienie",
"event-notifiers": "Powiadomienia o zdarzeniach",
"apprise-url-skipped-if-blank": "URL Apprise (pominięty, jeśli puste)",
@@ -160,6 +161,7 @@
"test": "Testuj",
"themes": "Motywy",
"thursday": "Czwartek",
"title": "Title",
"token": "Token",
"tuesday": "Wtorek",
"type": "Typ",
@@ -289,6 +291,8 @@
"mealplan-updated": "Plan posiłków został zaktualizowany",
"no-meal-plan-defined-yet": "Brak zdefiniowanego planu posiłków",
"no-meal-planned-for-today": "Brak zaplanowane posiłku na dziś",
"numberOfDays-hint": "Number of days on page load",
"numberOfDays-label": "Default Days",
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "Tylko przepisy z tych kategorii będą używane w planach posiłków",
"planner": "Planer",
"quick-week": "Szybki plan na tydzień",
@@ -375,6 +379,10 @@
"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."
},
"recipekeeper": {
"title": "Recipe Keeper",
"description-long": "Mealie can import recipes from Recipe Keeper. Export your recipes in zip format, then upload the .zip file below."
}
},
"new-recipe": {
@@ -582,7 +590,23 @@
"upload-image": "Prześlij obraz",
"screen-awake": "Pozostaw ekran włączony",
"remove-image": "Usuń obraz",
"nextStep": "Następny krok"
"nextStep": "Następny krok",
"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.",
"select-parser": "Select Parser",
"natural-language-processor": "Natural Language Processor",
"brute-parser": "Brute Parser",
"openai-parser": "OpenAI Parser",
"parse-all": "Parse All",
"no-unit": "No unit",
"missing-unit": "Create missing unit: {unit}",
"missing-food": "Create missing food: {food}",
"no-food": "No Food"
}
},
"search": {
"advanced-search": "Wyszukiwanie zaawansowane",
@@ -611,6 +635,7 @@
"backup-created-at-response-export_path": "Kopia zapasowa została utworzona w {path}",
"backup-deleted": "Kopia zapasowa została usunięta",
"restore-success": "Przywracanie zakończone sukcesem",
"restore-fail": "Restore failed. Check your server logs for more details",
"backup-tag": "Etykieta kopii zapasowej",
"create-heading": "Utwórz kopię zapasową",
"delete-backup": "Usuń kopię zapasową",
@@ -747,7 +772,10 @@
"recipe-scraper-version": "Wersja Scrapera Przepisów",
"oidc-ready": "OIDC Ready",
"oidc-ready-error-text": "Not all OIDC Values are configured. This can be ignored if you are not using OIDC Authentication.",
"oidc-ready-success-text": "Required OIDC variables are all set."
"oidc-ready-success-text": "Required OIDC variables are all set.",
"openai-ready": "OpenAI Ready",
"openai-ready-error-text": "Not all OpenAI Values are configured. This can be ignored if you are not using OpenAI features.",
"openai-ready-success-text": "Required OpenAI variables are all set."
},
"shopping-list": {
"all-lists": "Wszystkie listy",
@@ -761,6 +789,7 @@
"food": "Jedzenie",
"note": "Notatka",
"label": "Etykieta",
"save-label": "Save Label",
"linked-item-warning": "Ten przedmiot jest powiązany z jednym lub kilkoma przepisami. Dostosowanie jednostek lub żywności przyniesie niespodziewane wyniki podczas dodawania lub usuwania przepisu z tej listy.",
"toggle-food": "Przełącz Żywność",
"manage-labels": "Zarządzaj Etykietami",
@@ -1001,6 +1030,12 @@
"delete-recipes": "Usuń Przepisy",
"source-unit-will-be-deleted": "Jednostka źródłowa zostanie usunięta"
},
"recipe-actions": {
"recipe-actions-data": "Recipe Actions Data",
"new-recipe-action": "New Recipe Action",
"edit-recipe-action": "Edit Recipe Action",
"action-type": "Action Type"
},
"create-alias": "Utwórz alias",
"manage-aliases": "Zarządzaj aliasami",
"seed-data": "Dane przykładowe",
@@ -1147,6 +1182,7 @@
"ingredients-natural-language-processor-explanation-2": "Nie jest on idealny, ale na ogół daje świetne wyniki i jest dobrym punktem wyjścia do ręcznego przydzielania składników w poszczególne pola. Alternatywnie możesz również użyć procesora \"Brut\", który używa dopasowywujący schemat do identyfikacji składników.",
"nlp": "NLP",
"brute": "Brut",
"openai": "OpenAI",
"show-individual-confidence": "Pokaż pojedyncze pewności",
"ingredient-text": "Tekst składnika",
"average-confident": "Pewność {0}",

View File

@@ -5,9 +5,9 @@
"api-docs": "Documentação da API",
"api-port": "Porta da API",
"application-mode": "Modo do Aplicativo",
"database-type": "Tipo do banco de dados",
"database-url": "URL do servidor de banco de dados",
"default-group": "Grupo padrão",
"database-type": "Tipo do Banco de Dados",
"database-url": "URL do banco de dados",
"default-group": "Grupo Padrão",
"demo": "Demonstração",
"demo-status": "Status da Demonstração",
"development": "Desenvolvimento",
@@ -25,20 +25,20 @@
"sponsor": "Patrocinar"
},
"asset": {
"assets": "Arquivos",
"assets": "Ativos",
"code": "Código",
"file": "Arquivo",
"image": "Imagem",
"new-asset": "Novo Arquivo",
"pdf": "PDF",
"recipe": "Receita",
"show-assets": "Exibir Arquivos",
"show-assets": "Exibir Ativos",
"error-submitting-form": "Erro ao enviar o formulário"
},
"category": {
"categories": "Categorias",
"category-created": "Categoria criada",
"category-creation-failed": "Falha ao criar categoria",
"category-creation-failed": "Falha ao criar Categoria",
"category-deleted": "Categoria Excluída",
"category-deletion-failed": "Falha ao excluir a categoria",
"category-filter": "Filtro de categoria",
@@ -52,23 +52,24 @@
"events": {
"apprise-url": "URL do Apprise",
"database": "Banco de dados",
"delete-event": "Apagar evento",
"delete-event": "Excluir Evento",
"event-delete-confirmation": "Tem certeza de que quer excluir este evento?",
"event-deleted": "Evento Excluído",
"event-updated": "Evento Atualizado",
"new-notification-form-description": "Mealie usa a biblioteca Apprise para gerar notificações. Eles oferecem várias opções de serviços para serem usados para notificações. Consulte a wiki para um guia completo sobre como criar a URL para o seu serviço. Se disponível, selecionar o tipo de notificação pode incluir recursos extras.",
"new-notification-form-description": "Mealie usa a biblioteca Apprise para gerar notificações. Eles oferecem várias opções de serviços para usar em notificações. Consulte sua wiki para um guia completo sobre como criar a URL para o seu serviço. Se disponível, selecionar o tipo da sua notificação pode incluir recursos extras.",
"new-version": "Nova versão disponível!",
"notification": "Notificação",
"refresh": "Atualizar",
"refresh": "Recarregar",
"scheduled": "Agendado",
"something-went-wrong": "Algo deu errado!",
"subscribed-events": "Eventos Inscritos",
"test-message-sent": "Mensagem de teste enviada",
"message-sent": "Mensagem enviada",
"new-notification": "Nova Notificação",
"event-notifiers": "Notificações de Eventos",
"apprise-url-skipped-if-blank": "URL Apprise (ignorado se estiver em branco)",
"enable-notifier": "Habilitar Notificações",
"what-events": "Quais eventos esse notificador deve subscrever?",
"enable-notifier": "Habilitar Notificador",
"what-events": "A quais eventos este notificador deve subscrever?",
"user-events": "Eventos do usuário",
"mealplan-events": "Eventos do Plano Refeições",
"when-a-user-in-your-group-creates-a-new-mealplan": "Quando um usuário do seu grupo criar um plano de refeição",
@@ -80,12 +81,12 @@
"recipe-events": "Eventos da Receita"
},
"general": {
"add": "Add",
"add": "Adicionar",
"cancel": "Cancelar",
"clear": "Limpar",
"close": "Fechar",
"confirm": "Confirmar",
"confirm-how-does-everything-look": "How does everything look?",
"confirm-how-does-everything-look": "Como está tudo?",
"confirm-delete-generic": "Você tem certeza de que deseja apagar isto?",
"copied_message": "Copiado!",
"create": "Criar",
@@ -144,22 +145,23 @@
"save": "Salvar",
"settings": "Configurações",
"share": "Compartilhar",
"show-all": "Show All",
"show-all": "Exibir Tudo",
"shuffle": "Aleatório",
"sort": "Ordenar",
"sort-ascending": "Sort Ascending",
"sort-descending": "Sort Descending",
"sort-ascending": "Ordenação Crescente",
"sort-descending": "Ordenação Decrescente",
"sort-alphabetically": "Alfabética",
"status": "Estado",
"subject": "Assunto",
"submit": "Submeter",
"success-count": "Sucesso: {count}",
"sunday": "Domingo",
"system": "System",
"system": "Sistema",
"templates": "Modelos:",
"test": "Teste",
"themes": "Temas",
"thursday": "Quinta-feira",
"title": "Título",
"token": "Token",
"tuesday": "Terça-feira",
"type": "Tipo",
@@ -174,7 +176,7 @@
"units": "Unidades",
"back": "Voltar",
"next": "Avançar",
"start": "Start",
"start": "Iniciar",
"toggle-view": "Alternar Visualização",
"date": "Data",
"id": "Id",
@@ -206,9 +208,9 @@
"upload-file": "Enviar arquivo",
"created-on-date": "Criado em {0}",
"unsaved-changes": "Você possui alterações não salvas. Deseja salvar antes de sair? Ok para salvar, Cancelar para descartar alterações.",
"clipboard-copy-failure": "Failed to copy to the clipboard.",
"confirm-delete-generic-items": "Are you sure you want to delete the following items?",
"organizers": "Organizers"
"clipboard-copy-failure": "Falha ao copiar para a área de transferência.",
"confirm-delete-generic-items": "Tem certeza que quer excluir os itens seguintes?",
"organizers": "Organizadores"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Tem certeza que deseja excluir o grupo <b>{groupName}<b/>?",
@@ -244,8 +246,8 @@
"group-preferences": "Preferências de Grupo",
"private-group": "Grupo Privado",
"private-group-description": "Definir seu grupo para privado irá padronizar todas as opções de visualização para padrão. Isso substitui as configurações de visualização pública individuais.",
"enable-public-access": "Enable Public Access",
"enable-public-access-description": "Make group recipes public by default, and allow visitors to view recipes without logging-in",
"enable-public-access": "Ativar Acesso Público",
"enable-public-access-description": "Tornar receitas do grupo públicas por padrão, e permitir a sua visualização por visitantes não logados",
"allow-users-outside-of-your-group-to-see-your-recipes": "Permitir que usuários fora do seu grupo vejam suas receitas",
"allow-users-outside-of-your-group-to-see-your-recipes-description": "Quando habilitado, você pode usar um link de compartilhamento público para compartilhar receitas específicas sem autorizar o usuário. Quando desativado, você pode apenas compartilhar receitas com usuários que estão em seu grupo ou com um link privado pré-gerado",
"show-nutrition-information": "Mostrar informações nutricionais",
@@ -269,7 +271,7 @@
},
"meal-plan": {
"create-a-new-meal-plan": "Criar um novo plano de refeições",
"update-this-meal-plan": "Update this Meal Plan",
"update-this-meal-plan": "Atualizar este Plano de Refeição",
"dinner-this-week": "Jantar desta semana",
"dinner-today": "Jantar de hoje",
"dinner-tonight": "JANTAR DE HOJE À NOITE",
@@ -289,6 +291,8 @@
"mealplan-updated": "Plano de Refeições atualizado",
"no-meal-plan-defined-yet": "Nenhum Plano de Refeições definido ainda",
"no-meal-planned-for-today": "Nenhuma refeição planejada para hoje",
"numberOfDays-hint": "Número de dias ao carregar a página",
"numberOfDays-label": "Dias Padrões",
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "Apenas receitas com essas categorias serão usadas nos Planos de Refeições",
"planner": "Planejamento",
"quick-week": "Semana Rápida",
@@ -359,11 +363,11 @@
},
"recipe-data-migrations": "Migrações de Dados de Receita",
"recipe-data-migrations-explanation": "Receitas podem ser migradas de outro aplicativo suportado para o Mealie. Esta é uma ótima maneira de começar com Mealie.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Coming from another application or an even older version of Mealie? Check out migrations and see if your data can be imported.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Vindo de outra aplicação ou de uma versão mais antiga do Mealie? Confira as migrações e veja se seus dados podem ser importados.",
"choose-migration-type": "Escolher Tipo de Migração",
"tag-all-recipes": "Marcar todas as receitas com o marcador {tag-name}",
"nextcloud-text": "As receitas da Nextcloud podem ser importadas a partir de um arquivo .zip que contém os dados armazenados na Nextcloud. Veja abaixo o exemplo da estrutura da pasta para garantir que suas receitas possam ser importadas.",
"chowdown-text": "Mealie natively supports the chowdown repository format. Download the code repository as a .zip file and upload it below.",
"chowdown-text": "Mealie suporta nativamente o formato de repositório chowdown. Baixe o repositório de códigos como um arquivo ZIP e envie-o abaixo.",
"recipe-1": "Receita 1",
"recipe-2": "Receita 2",
"paprika-text": "Mealie pode importar receitas do aplicativo Paprika. Exporte suas receitas do Paprika, renomeie a extensão do arquivo para .zip e carregue-o abaixo.",
@@ -374,7 +378,11 @@
},
"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 pode importar receitas do My Recipe Box. Exporte suas receitas em formato CSV e envie o arquivo abaixo."
},
"recipekeeper": {
"title": "Recipe Keeper",
"description-long": "Mealie pode importar receitas do Recipe Keeper. Exporte suas receitas no formato ZIP, então envie o arquivo abaixo."
}
},
"new-recipe": {
@@ -489,11 +497,11 @@
"add-to-timeline": "Adicionar à linha do tempo",
"recipe-added-to-list": "Receita adicionada à lista",
"recipes-added-to-list": "Receitas adicionadas à lista",
"successfully-added-to-list": "Successfully added to list",
"successfully-added-to-list": "Sucesso ao adicionar à lista",
"recipe-added-to-mealplan": "Receita adicionada ao plano de refeições",
"failed-to-add-recipes-to-list": "Falha ao adicionar receita à lista",
"failed-to-add-recipe-to-mealplan": "Falha ao adicionar a receita ao plano de refeições",
"failed-to-add-to-list": "Failed to add to list",
"failed-to-add-to-list": "Falha ao adicionar à lista",
"yield": "Rendimento",
"quantity": "Quantidade",
"choose-unit": "Escolher unidades",
@@ -509,8 +517,8 @@
"cook-mode": "Modo Cozinheiro",
"link-ingredients": "Vincular ingredientes",
"merge-above": "Mesclar acima",
"move-to-bottom": "Move To Bottom",
"move-to-top": "Move To Top",
"move-to-bottom": "Mover para o Final",
"move-to-top": "Mover para o Topo",
"reset-scale": "Redefinir escala",
"decrease-scale-label": "Diminuir Escala por 1",
"increase-scale-label": "Aumentar Escala por 1",
@@ -526,14 +534,14 @@
"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!",
"timeline-no-events-found-try-adjusting-filters": "No events found. Try adjusting your search filters.",
"timeline-no-events-found-try-adjusting-filters": "Eventos não encontrados. Tente ajustar seus filtros de busca.",
"group-global-timeline": "{groupName} Linha do Tempo Global",
"open-timeline": "Abrir a Linha do Tempo",
"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": "Recipes extras are a key feature of the Mealie API. They allow you to create custom JSON key/value pairs within a recipe, to reference from 3rd party applications. You can use these keys to provide information, for example to trigger automations or custom messages to relay to your desired device.",
"api-extras-description": "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",
"attach-images-hint": "Anexe imagens arrastando e soltando-as no editor",
@@ -547,8 +555,8 @@
"looking-for-migrations": "Procurando por migrações?",
"import-with-url": "Importar a partir da URL",
"create-recipe": "Criar Receita",
"create-recipe-description": "Create a new recipe from scratch.",
"create-recipes": "Create Recipes",
"create-recipe-description": "Criar uma receita do zero.",
"create-recipes": "Criar Receitas",
"import-with-zip": "Importar a partir de .zip",
"create-recipe-from-an-image": "Criar Receita a partir de uma imagem",
"bulk-url-import": "Importação de URL em massa",
@@ -557,8 +565,8 @@
"new-recipe-names-must-be-unique": "Novos nomes de receitas devem ser únicos",
"scrape-recipe": "Extrair receita do site",
"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": "Have a lot of recipes you want to scrape at once?",
"scrape-recipe-suggest-bulk-importer": "Try out the bulk importer",
"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",
"import-original-keywords-as-tags": "Importar palavras-chave originais como marcadores",
"stay-in-edit-mode": "Permanecer no modo de edição",
"import-from-zip": "Importar do .zip",
@@ -582,7 +590,23 @@
"upload-image": "Enviar imagem",
"screen-awake": "Manter a tela ligada",
"remove-image": "Remover imagem",
"nextStep": "Next step"
"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.",
"select-parser": "Selecione um Analisador",
"natural-language-processor": "Processador de Linguagem Natural",
"brute-parser": "Analisador Bruto",
"openai-parser": "Analisador OpenAI",
"parse-all": "Analisar Tudo",
"no-unit": "Sem unidades",
"missing-unit": "Criar unidade ausente: {unit}",
"missing-food": "Criar comida ausente: {food}",
"no-food": "Sem Comida"
}
},
"search": {
"advanced-search": "Pesquisa avançada",
@@ -611,6 +635,7 @@
"backup-created-at-response-export_path": "Backup criado em {path}",
"backup-deleted": "Backup excluído",
"restore-success": "Restauração bem-sucedida",
"restore-fail": "Restauração falhou. Mais detalhes nos registros do servidor",
"backup-tag": "Etiqueta de Backup",
"create-heading": "Criar um Backup",
"delete-backup": "Excluir Backup",
@@ -619,7 +644,7 @@
"import-summary": "Resumo da importação",
"partial-backup": "Backup parcial",
"unable-to-delete-backup": "Não foi possível apagar o backup.",
"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": "Cópias de segurança são \"retratos\" do banco de dados e diretórios de dados do site. Isso inclui todos os dados e não pode segregar subconjuntos de dados. Pense como um retrato do Mealie num momento específico. Elas servem como uma forma agnóstica de exportar e importar dados, ou copiar o site para um local externo.",
"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.",
@@ -745,9 +770,12 @@
"ldap-ready-success-text": "As variáveis LDAP necessárias estão todas definidas.",
"build": "Compilaçāo",
"recipe-scraper-version": "Versão do receptor de receita",
"oidc-ready": "OIDC Ready",
"oidc-ready-error-text": "Not all OIDC Values are configured. This can be ignored if you are not using OIDC Authentication.",
"oidc-ready-success-text": "Required OIDC variables are all set."
"oidc-ready": "OIDC Pronto",
"oidc-ready-error-text": "Nem todos os valores OIDC estão configurados. Pode ser ignorado se não estiver usando Autenticação OIDC.",
"oidc-ready-success-text": "Variáveis OIDC necessárias estão todas definidas.",
"openai-ready": "OpenAI Pronta",
"openai-ready-error-text": "Nem todos os valores da OpenAI estão configurados. Pode ser ignorado se não estiver usando recursos OpenAI.",
"openai-ready-success-text": "Variáveis OpenAI necessárias estão todas definidas."
},
"shopping-list": {
"all-lists": "Todas as Listas",
@@ -761,6 +789,7 @@
"food": "Comida",
"note": "Nota",
"label": "Marcador",
"save-label": "Salvar Rótulo",
"linked-item-warning": "Este item está vinculado a uma ou mais receitas. Ajustar as unidades ou alimentos produzirá resultados inesperados ao adicionar ou remover a receita desta lista.",
"toggle-food": "Mostrar nome da Comida",
"manage-labels": "Gerenciar marcadores",
@@ -820,7 +849,7 @@
"untagged-count": "{count} sem marcador",
"create-a-tag": "Criar um marcador",
"tag-name": "Nome do Marcador",
"tag": "Tag"
"tag": "Etiqueta"
},
"tool": {
"tools": "Ferramentas",
@@ -830,7 +859,7 @@
"create-new-tool": "Criar Ferramenta",
"on-hand-checkbox-label": "Mostrar como disponível (checado)",
"required-tools": "Ferramentas necessárias",
"tool": "Tool"
"tool": "Utensílio"
},
"user": {
"admin": "Administrador",
@@ -855,11 +884,11 @@
"link-id": "ID do Link",
"link-name": "Nome do link",
"login": "Entrar",
"login-oidc": "Login with",
"or": "or",
"login-oidc": "Entrar com",
"or": "ou",
"logout": "Sair",
"manage-users": "Gerenciar Usuários",
"manage-users-description": "Create and manage users.",
"manage-users-description": "Criar e gerir usuários.",
"new-password": "Nova senha",
"new-user": "Novo Usuário",
"password-has-been-reset-to-the-default-password": "A senha foi redefinida para a senha padrão",
@@ -1001,6 +1030,12 @@
"delete-recipes": "Excluir Receitas",
"source-unit-will-be-deleted": "Unidade de origem será excluída"
},
"recipe-actions": {
"recipe-actions-data": "Dados de Ações de Receita",
"new-recipe-action": "Nova Ação de Receita",
"edit-recipe-action": "Alterar Ação de Receita",
"action-type": "Tipo de Ação"
},
"create-alias": "Criar Apelido",
"manage-aliases": "Gerenciar apelidos",
"seed-data": "Semear dados",
@@ -1147,6 +1182,7 @@
"ingredients-natural-language-processor-explanation-2": "Não é perfeito, mas produz grandes resultados em geral e é um bom ponto de partida para analisar ingredientes manualmente em campos individuais. Como alternativa, você também pode usar o processador \"Brute\" que usa uma técnica de correspondência de padrões para identificar ingredientes.",
"nlp": "PLN",
"brute": "Bruto",
"openai": "OpenAI",
"show-individual-confidence": "Mostrar confiança individual",
"ingredient-text": "Texto de Ingrediente",
"average-confident": "{0} confiante",
@@ -1157,32 +1193,32 @@
"no-logs-found": "Nenhum log encontrado",
"tasks": "Tarefas",
"setup": {
"first-time-setup": "First Time Setup",
"welcome-to-mealie-get-started": "Welcome to Mealie! Let's get started",
"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!",
"here-are-a-few-things-to-help-you-get-started": "Here are a few things to help you get started with Mealie",
"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."
"first-time-setup": "Primeira Configuração",
"welcome-to-mealie-get-started": "Bem-vindo(a) ao Mealie! Vamos começar",
"already-set-up-bring-to-homepage": "Já estou pronto, apenas me leve à página inicial",
"common-settings-for-new-sites": "Estas são algumas configurações comuns para novos sites",
"setup-complete": "Configuração Concluída!",
"here-are-a-few-things-to-help-you-get-started": "Aqui há algumas coisas para ajudá-lo a começar com o Mealie",
"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."
}
},
"profile": {
"welcome-user": "👋 Welcome, {0}!",
"welcome-user": "👋 Bem-vindo(a), {0}!",
"description": "Gerencie seu perfil, receitas e configurações de grupo.",
"get-invite-link": "Obter link de convite",
"get-public-link": "Obter link público",
"account-summary": "Resumo da conta",
"account-summary-description": "Here's a summary of your group's information.",
"account-summary-description": "Aqui está um resumo das informações do seu grupo.",
"group-statistics": "Estatísticas do Grupo",
"group-statistics-description": "Suas Estatísticas em Grupo fornecem algumas informações sobre como você está usando o Mealie.",
"storage-capacity": "Capacidade de armazenamento",
"storage-capacity-description": "Sua capacidade de armazenamento é um cálculo das imagens e arquivos que você carregou.",
"personal": "Pessoal",
"personal-description": "These are settings that are personal to you. Changes here won't affect other users.",
"personal-description": "Estas configurações são pessoais. Mudanças aqui não afetarão outros usuários.",
"user-settings": "Configurações de Usuário",
"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": "Gerencie suas preferências, altere sua senha, e atualize seu e-mail.",
"api-tokens-description": "Gerencie seus Tokens de API para acessar de aplicações externas.",
"group-description": "Esses itens são compartilhados dentro do seu grupo. Ao editar um deles vai mudá-lo para todo o grupo!",
"group-settings": "Configurações do Grupo",
"group-settings-description": "Gerencie suas configurações comuns de grupo como a refeição e as configurações de privacidade.",
@@ -1193,9 +1229,9 @@
"notifiers": "Notificadores",
"notifiers-description": "Configure e-mails e notificações push que desencadeiam eventos específicos.",
"manage-data": "Gerenciar dados",
"manage-data-description": "Manage your Mealie data; Foods, Units, Categories, Tags and more.",
"manage-data-description": "Gerencie seus dados do Mealie; Comidas, Unidades, Categorias, Tags e mais.",
"data-migrations": "Migrações de dados",
"data-migrations-description": "Migrate your existing data from other applications like Nextcloud Recipes and Chowdown.",
"data-migrations-description": "Migre seus dados existentes de outras aplicações, como Nextcloud Recipes e Chowdown.",
"email-sent": "E-mail enviado",
"error-sending-email": "Erro enviando email",
"personal-information": "Informações pessoais",
@@ -1223,7 +1259,7 @@
"require-all-tools": "Exigir todas as ferramentas",
"cookbook-name": "Nome do Livro de Receitas",
"cookbook-with-name": "Livro de Receitas {0}",
"create-a-cookbook": "Create a Cookbook",
"cookbook": "Cookbook"
"create-a-cookbook": "Criar um Livro de Receitas",
"cookbook": "Livro de Receitas"
}
}

View File

@@ -64,6 +64,7 @@
"something-went-wrong": "Algo correu mal!",
"subscribed-events": "Eventos Subscritos",
"test-message-sent": "Mensagem de teste enviada",
"message-sent": "Mensagem Enviada",
"new-notification": "Nova Notificação",
"event-notifiers": "Notificadores de eventos",
"apprise-url-skipped-if-blank": "URL da Apprise (ignorado se vazio)",
@@ -160,6 +161,7 @@
"test": "Teste",
"themes": "Temas",
"thursday": "Quinta-feira",
"title": "Título",
"token": "Token",
"tuesday": "Terça-feira",
"type": "Tipo",
@@ -289,6 +291,8 @@
"mealplan-updated": "Plano de Refeições atualizado",
"no-meal-plan-defined-yet": "Nenhum plano de refeições definido",
"no-meal-planned-for-today": "Nenhum plano de refeições definido para hoje",
"numberOfDays-hint": "Número de dias no carregamento da página",
"numberOfDays-label": "Dias predefinidos",
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "Só serão usadas receitas com estas categorias nos Planos de Refeições",
"planner": "Planeador",
"quick-week": "Semana Rápida",
@@ -375,6 +379,10 @@
"myrecipebox": {
"title": "My Recipe Box",
"description-long": "O Mealie pode importar receitas do My Recipe Box. Exporte as suas receitas em formato CSV e, em seguida, carregue o ficheiro .csv abaixo."
},
"recipekeeper": {
"title": "Recipe Keeper",
"description-long": "O Mealie pode importar receitas do Recipe Keeper. Exporte as suas receitas em formato zip e, em seguida, carregue o ficheiro .zip abaixo."
}
},
"new-recipe": {
@@ -582,7 +590,23 @@
"upload-image": "Carregar imagem",
"screen-awake": "Manter ecrã ligado",
"remove-image": "Remover imagem",
"nextStep": "Próximo passo"
"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.",
"select-parser": "Selecionar Analisador",
"natural-language-processor": "Processador de Linguagem Natural",
"brute-parser": "Analisador Bruto",
"openai-parser": "Analisador OpenAI",
"parse-all": "Analisar tudo",
"no-unit": "Nenhuma unidade",
"missing-unit": "Criar unidade em falta: {unit}",
"missing-food": "Criar ingrediente em falta: {food}",
"no-food": "Nenhum Ingrediente"
}
},
"search": {
"advanced-search": "Pesquisa Avançada",
@@ -611,6 +635,7 @@
"backup-created-at-response-export_path": "Backup criado em {path}",
"backup-deleted": "Backup eliminado",
"restore-success": "Restauro bem-sucedido",
"restore-fail": "O restauro falhou. Verifique os registos do servidor para obter mais detalhes",
"backup-tag": "Cópia de segurança de Etiqueta",
"create-heading": "Criar um Backup",
"delete-backup": "Eliminar Backup",
@@ -747,7 +772,10 @@
"recipe-scraper-version": "Versão do Scraper de receitas",
"oidc-ready": "Suporta OICD",
"oidc-ready-error-text": "Nem todos os valores OICD estão configurados. Pode ignorar isto se não estiver a utilizar autenticação OICD.",
"oidc-ready-success-text": "As variáveis OICD necessárias estão definidas."
"oidc-ready-success-text": "As variáveis OICD necessárias estão definidas.",
"openai-ready": "Preparado para OpenAI",
"openai-ready-error-text": "Nem todos os valores OpenAI estão configurados. Isto pode ser ignorado se não estiver a utilizar as funcionalidades OpenAI.",
"openai-ready-success-text": "As variáveis OpenAI necessárias estão todas definidas."
},
"shopping-list": {
"all-lists": "Todas as Listas",
@@ -761,6 +789,7 @@
"food": "Alimentos",
"note": "Nota",
"label": "Rótulo",
"save-label": "Guardar Rótulo",
"linked-item-warning": "Este item tem ligação a uma ou mais receitas. Ajustar as unidades ou alimentos irá produzir resultados inesperados quando adicionar ou remover a receita desta lista.",
"toggle-food": "Alternar Alimento",
"manage-labels": "Gerir Rótulos",
@@ -1001,6 +1030,12 @@
"delete-recipes": "Eliminar Receitas",
"source-unit-will-be-deleted": "Unidade de origem será eliminada"
},
"recipe-actions": {
"recipe-actions-data": "Dados das Ações da Receita",
"new-recipe-action": "Nova Ação da Receita",
"edit-recipe-action": "Editar Ação da Receita",
"action-type": "Tipo de Ação"
},
"create-alias": "Criar Pseudónimo",
"manage-aliases": "Gerir Pseudónimos",
"seed-data": "Gerar dados",
@@ -1147,6 +1182,7 @@
"ingredients-natural-language-processor-explanation-2": "Não é perfeito, mas produz bons resultados em geral e é um bom ponto de partida para, manualmente, fazer corresponder ingredientes a campos individuais. Em alternativa, também pode usar o processador \"Brute\" que usa uma técnica de correspondência de padrões para identificar ingredientes.",
"nlp": "PLN",
"brute": "Bruto",
"openai": "OpenAI",
"show-individual-confidence": "Mostrar confiança individual",
"ingredient-text": "Texto de Ingrediente",
"average-confident": "{0} Confiante",

View File

@@ -64,6 +64,7 @@
"something-went-wrong": "Ceva nu a funcţionat corect!",
"subscribed-events": "Evenimente la care ești Abonat",
"test-message-sent": "Mesaj de test trimis",
"message-sent": "Mesaj trimis",
"new-notification": "Notificare nouă",
"event-notifiers": "Notificatori de evenimente",
"apprise-url-skipped-if-blank": "URL Apprise (ignorat daca e gol)",
@@ -160,6 +161,7 @@
"test": "Testează",
"themes": "Teme",
"thursday": "Joi",
"title": "Titlu",
"token": "Token",
"tuesday": "Marţi",
"type": "Tip",
@@ -208,7 +210,7 @@
"unsaved-changes": "Aveți modificări nesalvate. Doriți să salvați înainte de a închide aplicația? Apăsați \"OK\" pentru a salva sau \"Anulare\" pentru a renunța la modificări.",
"clipboard-copy-failure": "Copierea în clipboard a eșuat.",
"confirm-delete-generic-items": "Sunteți sigur că doriți să ștergeți următoarele?",
"organizers": "Organizers"
"organizers": "Organizatori"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Sunteți sigur că doriți să ștergeți <b>{groupName}<b/>?",
@@ -289,6 +291,8 @@
"mealplan-updated": "Plan de mese actualizat",
"no-meal-plan-defined-yet": "Nici un plan de mese definit încă",
"no-meal-planned-for-today": "Nicio masă planificată pentru astăzi",
"numberOfDays-hint": "Number of days on page load",
"numberOfDays-label": "Default Days",
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "Numai rețetele cu aceste categorii vor fi utilizate în Planurile de mese",
"planner": "Planificator",
"quick-week": "Săptămână rapidă",
@@ -363,7 +367,7 @@
"choose-migration-type": "Alegeți tipul de migrare",
"tag-all-recipes": "Etichetați toate rețetele cu eticheta {tag-name}",
"nextcloud-text": "Rețetele din Nextcloud pot fi importate dintr-un fișier de tip \".ZIP\" ce conține toate datele stocate în Nextcloud. Vedeți structura directorului din exemplul de mai jos pentru a vă asigura că rețetele pot fi importate cu succes.",
"chowdown-text": "Mealie natively supports the chowdown repository format. Download the code repository as a .zip file and upload it below.",
"chowdown-text": "Mealie acceptă nativ formatul repo-ului Chowdown. Descărcați repository-ul de cod ca fișier \".zip\" și încărcați-l mai jos.",
"recipe-1": "Rețeta 1",
"recipe-2": "Rețeta 2",
"paprika-text": "Mealie poate importa rețete din aplicația Paprika. Exportă rețetele din Paprika, redenumește extensia de export în \".zip\" și încarcă-o folosind câmpul de mai jos.",
@@ -373,8 +377,12 @@
"description-long": "Mealie poate importa rețete din Planul de Masă."
},
"myrecipebox": {
"title": "My Recipe Box",
"title": "Cutia mea de rețete",
"description-long": "Mealie can import recipes from My Recipe Box. Export your recipes in CSV format, then upload the .csv file below."
},
"recipekeeper": {
"title": "Recipe Keeper",
"description-long": "Mealie can import recipes from Recipe Keeper. Export your recipes in zip format, then upload the .zip file below."
}
},
"new-recipe": {
@@ -582,7 +590,23 @@
"upload-image": "Încărcare imagine",
"screen-awake": "Păstrare ecran aprins",
"remove-image": "Șterge Imaginea",
"nextStep": "Pasul următor"
"nextStep": "Pasul următor",
"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.",
"select-parser": "Select Parser",
"natural-language-processor": "Natural Language Processor",
"brute-parser": "Brute Parser",
"openai-parser": "OpenAI Parser",
"parse-all": "Parse All",
"no-unit": "No unit",
"missing-unit": "Create missing unit: {unit}",
"missing-food": "Create missing food: {food}",
"no-food": "No Food"
}
},
"search": {
"advanced-search": "Căutare avansată",
@@ -611,6 +635,7 @@
"backup-created-at-response-export_path": "Backup creat la {path}",
"backup-deleted": "Backup şters",
"restore-success": "Restaurare efectuată",
"restore-fail": "Restore failed. Check your server logs for more details",
"backup-tag": "Backup la Tag-uri",
"create-heading": "Create a Backup",
"delete-backup": "Șterge Backup",
@@ -747,7 +772,10 @@
"recipe-scraper-version": "Recipe Scraper Version",
"oidc-ready": "OIDC Ready",
"oidc-ready-error-text": "Not all OIDC Values are configured. This can be ignored if you are not using OIDC Authentication.",
"oidc-ready-success-text": "Required OIDC variables are all set."
"oidc-ready-success-text": "Required OIDC variables are all set.",
"openai-ready": "OpenAI Ready",
"openai-ready-error-text": "Not all OpenAI Values are configured. This can be ignored if you are not using OpenAI features.",
"openai-ready-success-text": "Required OpenAI variables are all set."
},
"shopping-list": {
"all-lists": "All Lists",
@@ -761,6 +789,7 @@
"food": "Food",
"note": "Note",
"label": "Label",
"save-label": "Save Label",
"linked-item-warning": "This item is linked to one or more recipe. Adjusting the units or foods will yield unexpected results when adding or removing the recipe from this list.",
"toggle-food": "Toggle Food",
"manage-labels": "Manage Labels",
@@ -1001,6 +1030,12 @@
"delete-recipes": "Delete Recipes",
"source-unit-will-be-deleted": "Source Unit will be deleted"
},
"recipe-actions": {
"recipe-actions-data": "Recipe Actions Data",
"new-recipe-action": "New Recipe Action",
"edit-recipe-action": "Edit Recipe Action",
"action-type": "Action Type"
},
"create-alias": "Create Alias",
"manage-aliases": "Manage Aliases",
"seed-data": "Seed Data",
@@ -1147,6 +1182,7 @@
"ingredients-natural-language-processor-explanation-2": "It's not perfect, but it yields great results in general and is a good starting point for manually parsing ingredients into individual fields. Alternatively, you can also use the \"Brute\" processor that uses a pattern matching technique to identify ingredients.",
"nlp": "NLP",
"brute": "Brute",
"openai": "OpenAI",
"show-individual-confidence": "Show individual confidence",
"ingredient-text": "Ingredient Text",
"average-confident": "{0} Confident",

View File

@@ -64,6 +64,7 @@
"something-went-wrong": "Что-то пошло не так!",
"subscribed-events": "События с подпиской",
"test-message-sent": "Тестовое сообщение отправлено",
"message-sent": "Message Sent",
"new-notification": "Новое уведомление",
"event-notifiers": "Уведомления о событии",
"apprise-url-skipped-if-blank": "URL-адрес (пропущен, если пусто)",
@@ -160,6 +161,7 @@
"test": "Тест",
"themes": "Темы",
"thursday": "Четверг",
"title": "Title",
"token": "Токен",
"tuesday": "Вторник",
"type": "Тип",
@@ -289,6 +291,8 @@
"mealplan-updated": "План питания обновлен",
"no-meal-plan-defined-yet": "План питания еще не определен",
"no-meal-planned-for-today": "На сегодня нет запланированных блюд",
"numberOfDays-hint": "Number of days on page load",
"numberOfDays-label": "Default Days",
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "Только рецепты с этими категориями будут использоваться в планах питания",
"planner": "Планировщик",
"quick-week": "Быстрый план",
@@ -375,6 +379,10 @@
"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."
},
"recipekeeper": {
"title": "Recipe Keeper",
"description-long": "Mealie can import recipes from Recipe Keeper. Export your recipes in zip format, then upload the .zip file below."
}
},
"new-recipe": {
@@ -582,7 +590,23 @@
"upload-image": "Загрузить изображение",
"screen-awake": "Держать экран включенным",
"remove-image": "Удалить изображение",
"nextStep": "След. шаг"
"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.",
"select-parser": "Select Parser",
"natural-language-processor": "Natural Language Processor",
"brute-parser": "Brute Parser",
"openai-parser": "OpenAI Parser",
"parse-all": "Parse All",
"no-unit": "No unit",
"missing-unit": "Create missing unit: {unit}",
"missing-food": "Create missing food: {food}",
"no-food": "No Food"
}
},
"search": {
"advanced-search": "Расширенный поиск",
@@ -611,6 +635,7 @@
"backup-created-at-response-export_path": "Резервная копия создана в {path}",
"backup-deleted": "Резервная копия удалена",
"restore-success": "Восстановление прошло успешно",
"restore-fail": "Restore failed. Check your server logs for more details",
"backup-tag": "Тег резервной копии",
"create-heading": "Создать резервную копию",
"delete-backup": "Удалить резервную копию",
@@ -747,7 +772,10 @@
"recipe-scraper-version": "Версия скрейпера рецептов",
"oidc-ready": "OIDC Ready",
"oidc-ready-error-text": "Not all OIDC Values are configured. This can be ignored if you are not using OIDC Authentication.",
"oidc-ready-success-text": "Required OIDC variables are all set."
"oidc-ready-success-text": "Required OIDC variables are all set.",
"openai-ready": "OpenAI Ready",
"openai-ready-error-text": "Not all OpenAI Values are configured. This can be ignored if you are not using OpenAI features.",
"openai-ready-success-text": "Required OpenAI variables are all set."
},
"shopping-list": {
"all-lists": "Все списки",
@@ -761,6 +789,7 @@
"food": "Продукты",
"note": "Заметка",
"label": "Метка",
"save-label": "Save Label",
"linked-item-warning": "Этот предмет связан с одним или несколькими рецептами. Обновление единиц измерения или продуктов приведет к неожиданным результатам при добавлении или удалении рецепта из этого списка.",
"toggle-food": "Переключить продукты",
"manage-labels": "Настройки меток",
@@ -1001,6 +1030,12 @@
"delete-recipes": "Удалить рецепты",
"source-unit-will-be-deleted": "Первая единица измерения будет удалена"
},
"recipe-actions": {
"recipe-actions-data": "Recipe Actions Data",
"new-recipe-action": "New Recipe Action",
"edit-recipe-action": "Edit Recipe Action",
"action-type": "Action Type"
},
"create-alias": "Создать псевдоним",
"manage-aliases": "Управление псевдонимами",
"seed-data": "Заполнить данные",
@@ -1147,6 +1182,7 @@
"ingredients-natural-language-processor-explanation-2": "Он не совершенен, но, в целом, дает хорошие результаты и является хорошей отправной точкой для ручного разбора ингредиентов в отдельных полях. Иначе, для определения ингредиентов можно использовать процессор \"Brute\", использующий технику сопоставления образцов (pattern matching).",
"nlp": "NLP",
"brute": "Brute",
"openai": "OpenAI",
"show-individual-confidence": "Показать уверенность каждого поля",
"ingredient-text": "Описание ингредиента",
"average-confident": "Уверенность {0}",

View File

@@ -64,6 +64,7 @@
"something-went-wrong": "Vyskytla sa chyba",
"subscribed-events": "Prihlásené akcie",
"test-message-sent": "Testovacia správa bola odoslaná",
"message-sent": "Message Sent",
"new-notification": "Nové upozornenie",
"event-notifiers": "Upozornenia udalostí",
"apprise-url-skipped-if-blank": "Informačná URL (preskočená, ak je prázdna)",
@@ -160,6 +161,7 @@
"test": "Otestovať",
"themes": "Motívy",
"thursday": "Štvrtok",
"title": "Title",
"token": "Token",
"tuesday": "Utorok",
"type": "Typ",
@@ -289,6 +291,8 @@
"mealplan-updated": "Jedálniček aktualizovaný",
"no-meal-plan-defined-yet": "Nebol vytvorený žiadny jedálniček",
"no-meal-planned-for-today": "Pre dnešok žiadne jedlo v jedálničku",
"numberOfDays-hint": "Number of days on page load",
"numberOfDays-label": "Default Days",
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "V jedálničkoch budú použité iba recepty z nasledovných kategórií",
"planner": "Plánovač",
"quick-week": "Rýchly návrh týždňa",
@@ -375,6 +379,10 @@
"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."
},
"recipekeeper": {
"title": "Recipe Keeper",
"description-long": "Mealie can import recipes from Recipe Keeper. Export your recipes in zip format, then upload the .zip file below."
}
},
"new-recipe": {
@@ -582,7 +590,23 @@
"upload-image": "Nahrať obrázok",
"screen-awake": "Ponechať obrazovku stále zapnutú",
"remove-image": "Odstrániť obrázok",
"nextStep": "Ďalší krok"
"nextStep": "Ďalší krok",
"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.",
"select-parser": "Select Parser",
"natural-language-processor": "Natural Language Processor",
"brute-parser": "Brute Parser",
"openai-parser": "OpenAI Parser",
"parse-all": "Parse All",
"no-unit": "No unit",
"missing-unit": "Create missing unit: {unit}",
"missing-food": "Create missing food: {food}",
"no-food": "No Food"
}
},
"search": {
"advanced-search": "Rozšírené vyhľadávanie",
@@ -611,6 +635,7 @@
"backup-created-at-response-export_path": "Záloha vytvorená v {path}",
"backup-deleted": "Záloha bola odstránená",
"restore-success": "Obnovenie bolo úspešné",
"restore-fail": "Restore failed. Check your server logs for more details",
"backup-tag": "Označenie zálohy",
"create-heading": "Vytvoriť zálohu",
"delete-backup": "Odstrániť zálohu",
@@ -747,7 +772,10 @@
"recipe-scraper-version": "Verzia scrapera receptov",
"oidc-ready": "OIDC pripravené",
"oidc-ready-error-text": "Niektoré z OIDC hodnôt nie sú nakonfigurované. Toto varovanie je možné ignorovať, ak nepoužívate OIDC autentifikáciu.",
"oidc-ready-success-text": "Všetky potrebné OIDC premenné sú nastavené."
"oidc-ready-success-text": "Všetky potrebné OIDC premenné sú nastavené.",
"openai-ready": "OpenAI Ready",
"openai-ready-error-text": "Not all OpenAI Values are configured. This can be ignored if you are not using OpenAI features.",
"openai-ready-success-text": "Required OpenAI variables are all set."
},
"shopping-list": {
"all-lists": "Všetky zoznamy",
@@ -761,6 +789,7 @@
"food": "Jedlo",
"note": "Poznámka",
"label": "Štítok",
"save-label": "Save Label",
"linked-item-warning": "Táto položka je prepojená s jedným alebo viacerými receptami. Zmena jednotiek alebo jedál bude viesť k neželaným zmenám pri pridávaní alebo odoberaní receptov z tohto zoznamu.",
"toggle-food": "Prepnúť jedlo",
"manage-labels": "Spravovať štítky",
@@ -1001,6 +1030,12 @@
"delete-recipes": "Odstrániť recepty",
"source-unit-will-be-deleted": "Zdroj bude vymazaný"
},
"recipe-actions": {
"recipe-actions-data": "Recipe Actions Data",
"new-recipe-action": "New Recipe Action",
"edit-recipe-action": "Edit Recipe Action",
"action-type": "Action Type"
},
"create-alias": "Vytvoriť alias",
"manage-aliases": "Spravovať aliasy",
"seed-data": "Naplniť dáta",
@@ -1147,6 +1182,7 @@
"ingredients-natural-language-processor-explanation-2": "Napriek tomu, že nie je bezchybným, vo všeobecnosti poskytuje veľmi dobré výsledky, ktoré môžu slúžiť ako výborný štartovací bod manuálneho parsovania textov prísad do príslušných polí. Alternatívne tiež môžete využiť procesor založený na využití \"hrubej sily\", ktorý využíva na identifikáciu jednotlivých prísad metódu vyhľadávania vzorov v poskytnutom texte.",
"nlp": "NLP",
"brute": "Hrubá sila",
"openai": "OpenAI",
"show-individual-confidence": "Zobraziť individuálne miery spoľahlivosti",
"ingredient-text": "Text prísady",
"average-confident": "{0} Spoľahlivý",

View File

@@ -64,6 +64,7 @@
"something-went-wrong": "Nekaj je šlo narobe!",
"subscribed-events": "Naročeni dogodki",
"test-message-sent": "Testno sporočilo je bilo poslano",
"message-sent": "Sporočilo poslano",
"new-notification": "Novo obvestilo",
"event-notifiers": "Obvestila o dogodkih",
"apprise-url-skipped-if-blank": "Apprise URL (preskočeno, če je prazno)",
@@ -160,6 +161,7 @@
"test": "Test",
"themes": "Teme",
"thursday": "Četrtek",
"title": "Naslov",
"token": "Žeton",
"tuesday": "Torek",
"type": "Tip",
@@ -289,6 +291,8 @@
"mealplan-updated": "Jedilnik je posodobljen",
"no-meal-plan-defined-yet": "Za danes ni definiranjega načrta obroka",
"no-meal-planned-for-today": "Za danes ni planiranega načrta obroka",
"numberOfDays-hint": "Number of days on page load",
"numberOfDays-label": "Default Days",
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "Samo recepti v teh kategorija bodo uporabljeni v načrtu obroka",
"planner": "Načrtovalec",
"quick-week": "Hiter pogled tedna",
@@ -375,6 +379,10 @@
"myrecipebox": {
"title": "My Recipe Box",
"description-long": "Mealie lahko uvozi recepte iz aplikacije My Recipe Box. Izvozi recepte v CSV formatu, nato pa .csv datoteko naloži spodaj."
},
"recipekeeper": {
"title": "Recipe Keeper",
"description-long": "Mealie can import recipes from Recipe Keeper. Export your recipes in zip format, then upload the .zip file below."
}
},
"new-recipe": {
@@ -460,7 +468,7 @@
"recipe-deleted": "Recept je izbrisan",
"recipe-image": "Slika recepta",
"recipe-image-updated": "Slika recepta je posodobljena",
"recipe-name": "Ime recepta",
"recipe-name": "Naslov recepta",
"recipe-settings": "Nastavitve recepta",
"recipe-update-failed": "Napaka pri posodobitvi recepta",
"recipe-updated": "Recept je posodobljen",
@@ -582,7 +590,23 @@
"upload-image": "Naloži sliko",
"screen-awake": "Ohranjanje budnega zaslona",
"remove-image": "Odstrani sliko",
"nextStep": "Naslednji korak"
"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.",
"select-parser": "Izberi razčlenjevalnik",
"natural-language-processor": "Procesor naravnega jezika",
"brute-parser": "Brute Parser",
"openai-parser": "OpenAI Parser",
"parse-all": "Razčleni vse",
"no-unit": "Ni enote",
"missing-unit": "Ustvari manjkajočo enoto: {unit}",
"missing-food": "Ustvari manjkajoče živilo: {food}",
"no-food": "Ni živila"
}
},
"search": {
"advanced-search": "Napredno iskanje",
@@ -611,6 +635,7 @@
"backup-created-at-response-export_path": "Varnostna kopija ustvarjena v {path}",
"backup-deleted": "Varnostna kopija je izbrisana",
"restore-success": "Obnovitev uspešna",
"restore-fail": "Restore failed. Check your server logs for more details",
"backup-tag": "Oznaka varnostne kopije",
"create-heading": "Izdelaj varnostno kopijo",
"delete-backup": "Izbriši varnostno kopijo",
@@ -747,7 +772,10 @@
"recipe-scraper-version": "Verzija strgalnika receptov",
"oidc-ready": "OIDC Ready",
"oidc-ready-error-text": "Nekatere OIDC vrednosti niso nastavljene. To lahko ignoriraš, če ne uporabljaš OIDC avtentikacije.",
"oidc-ready-success-text": "Vse zahtevane OIDC spremenljivke so nastavljene."
"oidc-ready-success-text": "Vse zahtevane OIDC spremenljivke so nastavljene.",
"openai-ready": "OpenAI Ready",
"openai-ready-error-text": "Not all OpenAI Values are configured. This can be ignored if you are not using OpenAI features.",
"openai-ready-success-text": "Required OpenAI variables are all set."
},
"shopping-list": {
"all-lists": "Vsi seznami",
@@ -761,6 +789,7 @@
"food": "Živilo",
"note": "Opomba",
"label": "Oznaka",
"save-label": "Save Label",
"linked-item-warning": "Ta sestavina je povezana na en ali več receptov. Če spremenite enote količin, se lahko kaj podre, ko dodajate ali odstranjujete iz seznama.",
"toggle-food": "Preklopi med hrano",
"manage-labels": "Upravljanje oznak",
@@ -1001,6 +1030,12 @@
"delete-recipes": "Izbriši recepte",
"source-unit-will-be-deleted": "Izvorna enota bo izbrisana"
},
"recipe-actions": {
"recipe-actions-data": "Podatki o opravilu na receptu",
"new-recipe-action": "Novo opravilo na receptu",
"edit-recipe-action": "Urejaj opravilo na receptu",
"action-type": "Tip opravila"
},
"create-alias": "Ustvari alias",
"manage-aliases": "Upravljanje z aliasi",
"seed-data": "Napolni podatke",
@@ -1147,6 +1182,7 @@
"ingredients-natural-language-processor-explanation-2": "Rezultati niso popolni, ampak so v splošnem uporabni in služijo kot dobro izhodišče za ročno urejanje sestavin v posamezna polja. Kot alternativo lahko uporabiš \"Brute\" procesor, ki deluje na osnovi ujemanja vzorcev za identifikacijo sestavin.",
"nlp": "NLP",
"brute": "Brute",
"openai": "OpenAI",
"show-individual-confidence": "Pokaži zaupanje v posamezne postavke",
"ingredient-text": "Besedilo s sestavino",
"average-confident": "{0} zanesljivost",

View File

@@ -64,6 +64,7 @@
"something-went-wrong": "Нешто је кренуло погрешно!",
"subscribed-events": "Догађаји на које сте претплаћени",
"test-message-sent": "Тест порука је послата",
"message-sent": "Message Sent",
"new-notification": "Ново обавештење",
"event-notifiers": "Обавештавач о догађају",
"apprise-url-skipped-if-blank": "Apprise URL (прескочено ако је празно)",
@@ -160,6 +161,7 @@
"test": "Тест",
"themes": "Теме",
"thursday": "четвртак",
"title": "Title",
"token": "Токен",
"tuesday": "уторак",
"type": "Тип",
@@ -289,6 +291,8 @@
"mealplan-updated": "Јеловник је ажуриран",
"no-meal-plan-defined-yet": "No meal plan defined yet",
"no-meal-planned-for-today": "No meal planned for today",
"numberOfDays-hint": "Number of days on page load",
"numberOfDays-label": "Default Days",
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "Само рецепти са овим категоријама ће бити коришћени у јеловницима",
"planner": "Планер",
"quick-week": "Quick Week",
@@ -375,6 +379,10 @@
"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."
},
"recipekeeper": {
"title": "Recipe Keeper",
"description-long": "Mealie can import recipes from Recipe Keeper. Export your recipes in zip format, then upload the .zip file below."
}
},
"new-recipe": {
@@ -582,7 +590,23 @@
"upload-image": "Upload image",
"screen-awake": "Keep Screen Awake",
"remove-image": "Remove image",
"nextStep": "Next step"
"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.",
"select-parser": "Select Parser",
"natural-language-processor": "Natural Language Processor",
"brute-parser": "Brute Parser",
"openai-parser": "OpenAI Parser",
"parse-all": "Parse All",
"no-unit": "No unit",
"missing-unit": "Create missing unit: {unit}",
"missing-food": "Create missing food: {food}",
"no-food": "No Food"
}
},
"search": {
"advanced-search": "Напредна претрага",
@@ -611,6 +635,7 @@
"backup-created-at-response-export_path": "Резервна копија је креирана на {path}",
"backup-deleted": "Backup deleted",
"restore-success": "Restore successful",
"restore-fail": "Restore failed. Check your server logs for more details",
"backup-tag": "Backup Tag",
"create-heading": "Create a Backup",
"delete-backup": "Delete Backup",
@@ -747,7 +772,10 @@
"recipe-scraper-version": "Recipe Scraper Version",
"oidc-ready": "OIDC Ready",
"oidc-ready-error-text": "Not all OIDC Values are configured. This can be ignored if you are not using OIDC Authentication.",
"oidc-ready-success-text": "Required OIDC variables are all set."
"oidc-ready-success-text": "Required OIDC variables are all set.",
"openai-ready": "OpenAI Ready",
"openai-ready-error-text": "Not all OpenAI Values are configured. This can be ignored if you are not using OpenAI features.",
"openai-ready-success-text": "Required OpenAI variables are all set."
},
"shopping-list": {
"all-lists": "Сви спискови",
@@ -761,6 +789,7 @@
"food": "Храна",
"note": "Note",
"label": "Natpis",
"save-label": "Save Label",
"linked-item-warning": "This item is linked to one or more recipe. Adjusting the units or foods will yield unexpected results when adding or removing the recipe from this list.",
"toggle-food": "Toggle Food",
"manage-labels": "Управљај натписима",
@@ -1001,6 +1030,12 @@
"delete-recipes": "Delete Recipes",
"source-unit-will-be-deleted": "Source Unit will be deleted"
},
"recipe-actions": {
"recipe-actions-data": "Recipe Actions Data",
"new-recipe-action": "New Recipe Action",
"edit-recipe-action": "Edit Recipe Action",
"action-type": "Action Type"
},
"create-alias": "Create Alias",
"manage-aliases": "Manage Aliases",
"seed-data": "Seed Data",
@@ -1147,6 +1182,7 @@
"ingredients-natural-language-processor-explanation-2": "Није савршено, али даје одличне резултате и добра је почетна тачка за ручно разлагање саставних делова у појединачна поља. Као алтернативу, такође можете користити \"Брут\" процесор који користи технику усклађивања шаблона за идентификацију састојака.",
"nlp": "NLP",
"brute": "Brute",
"openai": "OpenAI",
"show-individual-confidence": "Show individual confidence",
"ingredient-text": "Ingredient Text",
"average-confident": "{0} Confident",

View File

@@ -64,6 +64,7 @@
"something-went-wrong": "Någonting gick fel",
"subscribed-events": "Prenumererade händelser",
"test-message-sent": "Testmeddelande Skickat",
"message-sent": "Meddelandet skickat",
"new-notification": "Ny avisering",
"event-notifiers": "Händelseavisering",
"apprise-url-skipped-if-blank": "Apprise-URL (hoppa över om tom)",
@@ -144,11 +145,11 @@
"save": "Spara",
"settings": "Inställningar",
"share": "Dela",
"show-all": "Show All",
"show-all": "Visa allt",
"shuffle": "Blanda",
"sort": "Sortering",
"sort-ascending": "Sort Ascending",
"sort-descending": "Sort Descending",
"sort-ascending": "Sortera stigande",
"sort-descending": "Sortera fallande",
"sort-alphabetically": "Alfabetisk",
"status": "Status",
"subject": "Ämne",
@@ -160,6 +161,7 @@
"test": "Test",
"themes": "Tema",
"thursday": "Torsdag",
"title": "Rubrik",
"token": "Token",
"tuesday": "Tisdag",
"type": "Typ",
@@ -208,7 +210,7 @@
"unsaved-changes": "Du har osparade ändringar. Vill du spara innan du lämnar? Tryck Okej att spara, Avbryt för att ignorera ändringar.",
"clipboard-copy-failure": "Det gick inte att kopiera till urklipp.",
"confirm-delete-generic-items": "Är du säker på att du vill radera följande objekt?",
"organizers": "Organizers"
"organizers": "Organisatörer"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Är du säker på att du vill radera <b>{groupName}<b/>?",
@@ -244,8 +246,8 @@
"group-preferences": "Gruppinställningar",
"private-group": "Privat grupp",
"private-group-description": "Sätta gruppen till privat kommer att sätta alla publika visningslägen till standard. Det skriver över publika inställningar för individuella recept.",
"enable-public-access": "Enable Public Access",
"enable-public-access-description": "Make group recipes public by default, and allow visitors to view recipes without logging-in",
"enable-public-access": "Tillåt offentlig åtkomst",
"enable-public-access-description": "Gör recept i grupp, offentliga som standard och tillåt besökare att se recept utan att logga in",
"allow-users-outside-of-your-group-to-see-your-recipes": "Tillåt användare utanför din grupp att se dina recept",
"allow-users-outside-of-your-group-to-see-your-recipes-description": "Om aktiverad kan du dela en publik länk för specifika recept utan att användaren behöver auktorisera sig. Om avaktiverad kan du bara dela med användare i din grupp eller med en systemskapad länk",
"show-nutrition-information": "Visa näringsinnehåll",
@@ -289,6 +291,8 @@
"mealplan-updated": "Måltidsplan uppdaterad",
"no-meal-plan-defined-yet": "Ingen måltidsplan definierad ännu",
"no-meal-planned-for-today": "Ingen måltidsplan för idag",
"numberOfDays-hint": "Number of days on page load",
"numberOfDays-label": "Default Days",
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "Endast recept med dessa kategorier kommer att användas i måltidsplaner",
"planner": "Planeringkalender",
"quick-week": "Snabb vecka",
@@ -359,7 +363,7 @@
},
"recipe-data-migrations": "Migrering av receptdata",
"recipe-data-migrations-explanation": "Recept kan migreras från en annan applikation som stöds till Mealie. Detta är ett bra sätt att komma igång med Mealie.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Coming from another application or an even older version of Mealie? Check out migrations and see if your data can be imported.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Kommer från en annan app, program eller tidigare version av Mealie? Kika på migrationer och se om din data kan bli importerad.",
"choose-migration-type": "Välj migrationstyp",
"tag-all-recipes": "Tagga alla recept med {tag-name} tagg",
"nextcloud-text": "Nextcloud-recept kan importeras från en zip-fil som innehåller data som lagras i Nextcloud. Se exempelmappens struktur nedan för att säkerställa att dina recept kan importeras.",
@@ -373,8 +377,12 @@
"description-long": "Mealie kan importera recept från Plan to Eat."
},
"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."
"title": "Min receptlåda",
"description-long": "Mealie kan importera recept från appen 'My Recipe Box'. Exportera dina recept i CSV format, och sen ladda upp .csv filen nedan."
},
"recipekeeper": {
"title": "Recipe Keeper",
"description-long": "Mealie can import recipes from Recipe Keeper. Export your recipes in zip format, then upload the .zip file below."
}
},
"new-recipe": {
@@ -526,7 +534,7 @@
"edit-timeline-event": "Redigera tidslinjehändelse",
"timeline": "Tidslinje",
"timeline-is-empty": "Inget på tidslinjen än. Försök att göra detta recept!",
"timeline-no-events-found-try-adjusting-filters": "No events found. Try adjusting your search filters.",
"timeline-no-events-found-try-adjusting-filters": "Inga händelser hittades. Försök justera filtren angivna i sökningen.",
"group-global-timeline": "{groupName} Global tidslinje",
"open-timeline": "Öppna tidslinje",
"made-this": "Jag lagade den här",
@@ -547,7 +555,7 @@
"looking-for-migrations": "Letar du efter migreringar?",
"import-with-url": "Importera från URL",
"create-recipe": "Skapa recept",
"create-recipe-description": "Create a new recipe from scratch.",
"create-recipe-description": "Skapa nytt recept från grunden.",
"create-recipes": "Skapa recept",
"import-with-zip": "Importera från .zip",
"create-recipe-from-an-image": "Skapa recept från en bild",
@@ -582,7 +590,23 @@
"upload-image": "Ladda upp bild",
"screen-awake": "Håll skärmen vaken",
"remove-image": "Ta bort bild",
"nextStep": "Nästa steg"
"nextStep": "Nästa steg",
"recipe-actions": "Recipe Actions",
"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.",
"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",
"brute-parser": "Brute Parser",
"openai-parser": "OpenAI Parser",
"parse-all": "Analysera allt",
"no-unit": "Ingen enhet",
"missing-unit": "Skapa saknad enhet: {unit}",
"missing-food": "Skapa saknad ingrediens: {food}",
"no-food": "No Food"
}
},
"search": {
"advanced-search": "Avancerad sökning",
@@ -611,6 +635,7 @@
"backup-created-at-response-export_path": "Backup skapad {path}",
"backup-deleted": "Backup raderad",
"restore-success": "Återställning slutförd",
"restore-fail": "Restore failed. Check your server logs for more details",
"backup-tag": "Backup tagg",
"create-heading": "Skapa en säkerhetskopia",
"delete-backup": "Ta bort säkerhetskopian",
@@ -745,9 +770,12 @@
"ldap-ready-success-text": "Alla obligatoriska LDAP-variabler är satta.",
"build": "Bygg",
"recipe-scraper-version": "Version av Recept-scraper",
"oidc-ready": "OIDC Ready",
"oidc-ready-error-text": "Not all OIDC Values are configured. This can be ignored if you are not using OIDC Authentication.",
"oidc-ready-success-text": "Required OIDC variables are all set."
"oidc-ready": "OIDC Klar",
"oidc-ready-error-text": "Alla OIDC-värden är inte konfigurerade. Detta kan ignoreras om du inte använder OIDC-autentisering.",
"oidc-ready-success-text": "Alla obligatoriska OIDC-variabler är satta.",
"openai-ready": "OpenAI Ready",
"openai-ready-error-text": "Not all OpenAI Values are configured. This can be ignored if you are not using OpenAI features.",
"openai-ready-success-text": "Required OpenAI variables are all set."
},
"shopping-list": {
"all-lists": "Visa alla listor",
@@ -761,6 +789,7 @@
"food": "Mat",
"note": "Anteckning",
"label": "Etikett",
"save-label": "Save Label",
"linked-item-warning": "Denna artikel är länkad till ett eller flera recept. Justering av enheter eller livsmedel ger oväntade resultat när du lägger till eller tar bort receptet från denna lista.",
"toggle-food": "Växla mat",
"manage-labels": "Hantera etiketter",
@@ -859,7 +888,7 @@
"or": "eller",
"logout": "Logga ut",
"manage-users": "Hantera användare",
"manage-users-description": "Create and manage users.",
"manage-users-description": "Skapa och hantera användare.",
"new-password": "Nytt lösenord",
"new-user": "Ny användare",
"password-has-been-reset-to-the-default-password": "Lösenordet har återställts till standardlösenordet",
@@ -1001,6 +1030,12 @@
"delete-recipes": "Radera recept",
"source-unit-will-be-deleted": "Källenheten kommer att raderas"
},
"recipe-actions": {
"recipe-actions-data": "Recipe Actions Data",
"new-recipe-action": "New Recipe Action",
"edit-recipe-action": "Edit Recipe Action",
"action-type": "Action Type"
},
"create-alias": "Skapa alias",
"manage-aliases": "Hantera alias",
"seed-data": "Exempeldata",
@@ -1147,6 +1182,7 @@
"ingredients-natural-language-processor-explanation-2": "Det är inte perfekt, men det ger bra resultat i allmänhet och är en bra utgångspunkt för att manuellt tolka ingredienser i enskilda områden. Alternativt kan du också använda \"Brute\" processor som använder en mönstermatchningsteknik för att identifiera ingredienser.",
"nlp": "NLP",
"brute": "Brute",
"openai": "OpenAI",
"show-individual-confidence": "Visa individuella självförtroende",
"ingredient-text": "Ingrediens text",
"average-confident": "{0} Säker",

View File

@@ -64,6 +64,7 @@
"something-went-wrong": "Bir sorun oluştu!",
"subscribed-events": "Abone Olunan Etkinlikler",
"test-message-sent": "Test Mesajı Gönderildi",
"message-sent": "Mesaj Gönderildi",
"new-notification": "Yeni bildirim",
"event-notifiers": "Etkinlik Bildirimleri",
"apprise-url-skipped-if-blank": "Apprise URL'si (boşsa geçilir)",
@@ -77,7 +78,7 @@
"tag-events": "Etiket Etkinlikleri",
"category-events": "Kategori Etkinlikleri",
"when-a-new-user-joins-your-group": "Grubunuza yeni bir kullanıcı katıldığında",
"recipe-events": "Recipe Events"
"recipe-events": "Tarif Etkinlikleri"
},
"general": {
"add": "Ekle",
@@ -160,6 +161,7 @@
"test": "Dene",
"themes": "Temalar",
"thursday": "Perşembe",
"title": "Başlık",
"token": "Anahtar",
"tuesday": "Salı",
"type": "Tür",
@@ -289,6 +291,8 @@
"mealplan-updated": "Öğün planı güncellendi",
"no-meal-plan-defined-yet": "Henüz bir öğün planı tanımlanmadı",
"no-meal-planned-for-today": "Bugün için öğün planı tanımlanmadı",
"numberOfDays-hint": "Number of days on page load",
"numberOfDays-label": "Default Days",
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "Sadece bu kategorilerdeki tarifler öğün planlarında kullanılacak",
"planner": "Planlayıcı",
"quick-week": "Hızlı Hafta",
@@ -330,7 +334,7 @@
"no-file-selected": "Dosya seçilmedi",
"no-migration-data-available": "No Migration Data Available",
"previous-migrations": "Önceki Yer Değiştirme",
"recipe-migration": "Recipe Migration",
"recipe-migration": "Tarif Taşıma",
"chowdown": {
"description": "Migrate data from Chowdown",
"description-long": "Mealie yerel olarak chowdown veri havuzu biçimini destekler. Kod havuzunu bir .zip dosyası olarak indirin ve aşağıya yükleyin.",
@@ -360,7 +364,7 @@
"recipe-data-migrations": "Recipe Data Migrations",
"recipe-data-migrations-explanation": "Recipes can be migrated from another supported application to Mealie. This is a great way to get started with Mealie.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Başka bir uygulamadan mı yoksa Mealie'nin daha eski bir sürümünden mi geliyorsunuz? Taşıma işlemlerine göz atın ve verilerinizin içe aktarılıp aktarılamayacağını görün.",
"choose-migration-type": "Choose Migration Type",
"choose-migration-type": "Taşıma Türünü Seçin",
"tag-all-recipes": "Tag all recipes with {tag-name} tag",
"nextcloud-text": "Nextcloud recipes can be imported from a zip file that contains the data stored in Nextcloud. See the example folder structure below to ensure your recipes are able to be imported.",
"chowdown-text": "Mealie yerel olarak chowdown veri havuzu formatını destekler. Kod deposunu .zip dosyası olarak indirin ve aşağıya yükleyin.",
@@ -375,6 +379,10 @@
"myrecipebox": {
"title": "Tarife Kutum",
"description-long": "Mealie Tarife Kutum'dan tarifleri içe aktarabilir. Tariflerinizi CSV formatında dışa aktarın, ardından .csv dosyasını aşağıya yükleyin."
},
"recipekeeper": {
"title": "Recipe Keeper",
"description-long": "Mealie can import recipes from Recipe Keeper. Export your recipes in zip format, then upload the .zip file below."
}
},
"new-recipe": {
@@ -535,7 +543,7 @@
"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": "Parse",
"parse": "Ayrıştırma",
"attach-images-hint": "Düzenleyiciye sürükleyip bırakarak görselleri ekleyin",
"drop-image": "Yüklenecek resimi sürükleyip bırakın",
"enable-ingredient-amounts-to-use-this-feature": "Enable ingredient amounts to use this feature",
@@ -582,7 +590,23 @@
"upload-image": "Resim yükleyin",
"screen-awake": "Ekranıık Tut",
"remove-image": "Resmi kaldır",
"nextStep": "Sonraki adım"
"nextStep": "Sonraki adım",
"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.",
"select-parser": "Select Parser",
"natural-language-processor": "Natural Language Processor",
"brute-parser": "Brute Parser",
"openai-parser": "OpenAI Parser",
"parse-all": "Parse All",
"no-unit": "No unit",
"missing-unit": "Create missing unit: {unit}",
"missing-food": "Create missing food: {food}",
"no-food": "No Food"
}
},
"search": {
"advanced-search": "Advanced Search",
@@ -611,6 +635,7 @@
"backup-created-at-response-export_path": "Backup Created at {path}",
"backup-deleted": "Yedekleme silindi",
"restore-success": "Geri yükleme başarılı",
"restore-fail": "Restore failed. Check your server logs for more details",
"backup-tag": "Yedek Etiketi",
"create-heading": "Create a Backup",
"delete-backup": "Yedeği Sil",
@@ -747,7 +772,10 @@
"recipe-scraper-version": "Recipe Scraper Version",
"oidc-ready": "OIDC Hazır",
"oidc-ready-error-text": "Tüm OIDC Değerleri yapılandırılmamıştır. OIDC Kimlik Doğrulamasını kullanmıyorsanız bu göz ardı edilebilir.",
"oidc-ready-success-text": "Gerekli OIDC değişkenlerinin tümü ayarlanmıştır."
"oidc-ready-success-text": "Gerekli OIDC değişkenlerinin tümü ayarlanmıştır.",
"openai-ready": "OpenAI Ready",
"openai-ready-error-text": "Not all OpenAI Values are configured. This can be ignored if you are not using OpenAI features.",
"openai-ready-success-text": "Required OpenAI variables are all set."
},
"shopping-list": {
"all-lists": "All Lists",
@@ -761,6 +789,7 @@
"food": "Food",
"note": "Not",
"label": "Etiket",
"save-label": "Save Label",
"linked-item-warning": "This item is linked to one or more recipe. Adjusting the units or foods will yield unexpected results when adding or removing the recipe from this list.",
"toggle-food": "Toggle Food",
"manage-labels": "Manage Labels",
@@ -1001,6 +1030,12 @@
"delete-recipes": "Delete Recipes",
"source-unit-will-be-deleted": "Source Unit will be deleted"
},
"recipe-actions": {
"recipe-actions-data": "Recipe Actions Data",
"new-recipe-action": "New Recipe Action",
"edit-recipe-action": "Edit Recipe Action",
"action-type": "Action Type"
},
"create-alias": "Takma Ad Oluştur",
"manage-aliases": "Takma Adları Yönet",
"seed-data": "Seed Data",
@@ -1147,6 +1182,7 @@
"ingredients-natural-language-processor-explanation-2": "Mükemmel değil, ancak genel olarak harika sonuçlar veriyor ve malzemeleri manuel olarak ayrı alanlara ayrıştırmak için iyi bir başlangıç noktası. Alternatif olarak, malzemeleri tanımlamak için bir model eşleştirme tekniği kullanan \"Brute\" işlemciyi de kullanabilirsiniz.",
"nlp": "NLP",
"brute": "Kaba",
"openai": "OpenAI",
"show-individual-confidence": "Show individual confidence",
"ingredient-text": "İçerik Metni",
"average-confident": "{0} Confident",

View File

@@ -64,6 +64,7 @@
"something-went-wrong": "Щось пішло не так!",
"subscribed-events": "Події, на які підписано",
"test-message-sent": "Тестове повідомлення надіслано",
"message-sent": "Повідомлення надіслано",
"new-notification": "Нове сповіщення",
"event-notifiers": "Сповіщувачі",
"apprise-url-skipped-if-blank": "Apprise URL (пропущено якщо порожній)",
@@ -160,6 +161,7 @@
"test": "Тест",
"themes": "Теми",
"thursday": "Четвер",
"title": "Назва",
"token": "Токен",
"tuesday": "Вівторок",
"type": "Тип",
@@ -289,6 +291,8 @@
"mealplan-updated": "План харчування оновлено",
"no-meal-plan-defined-yet": "Не створено жодного плану харчування",
"no-meal-planned-for-today": "Не заплановано харчування на сьогодні",
"numberOfDays-hint": "Number of days on page load",
"numberOfDays-label": "Default Days",
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "Лише рецепти з цими категоріями будуть використані в планах харчування",
"planner": "Планувальник",
"quick-week": "Швидкий тиждень",
@@ -375,6 +379,10 @@
"myrecipebox": {
"title": "My Recipe Box",
"description-long": "Mealie може імпортувати рецепти з My Recipe Box. Експортуйте ваші рецепти в форматі CSV, а потім відвантажте .csv файл нижче."
},
"recipekeeper": {
"title": "Recipe Keeper",
"description-long": "Mealie can import recipes from Recipe Keeper. Export your recipes in zip format, then upload the .zip file below."
}
},
"new-recipe": {
@@ -582,7 +590,23 @@
"upload-image": "Вивантажити зображення",
"screen-awake": "Тримати екран активним",
"remove-image": "Видалити зображення",
"nextStep": "Наступний крок"
"nextStep": "Наступний крок",
"recipe-actions": "Дії рецепту",
"parser": {
"experimental-alert-text": "Mealie використовує аналіз природної мови для аналізу та створення інгредієнтів та одиниць виміру. Це експериментальна функція і може не завжди працювати належним чином. Якщо ви не хочете використовувати результати аналізу виберіть \"Скасувати\", і зміни не будуть збережені.",
"ingredient-parser": "Аналізатор інгредієнтів",
"explanation": "Щоб використати аналізатор інгредієнтів, натисніть кнопку 'Аналізувати все', щоб запустити процес. Після того, як інгредієнти проаналізовані, ви можете їх переглянути та переконатися, що вони були проаналізовані правильно. Оцінка надійності аналізу відображена праворуч від назви елемента. Ця оцінка розраховується як середнє значення усіх індивідуальних оцінок і не завжди може бути абсолютно точним.",
"alerts-explainer": "Оповіщення будуть відображатися, якщо знайдені продукти або одиниці знайдені яких не існує в базі даних.",
"select-parser": "Вибрати аналізатор",
"natural-language-processor": "Аналізатор природної мови",
"brute-parser": "Простий аналізатор",
"openai-parser": "OpenAI аналізатор",
"parse-all": "Аналізувати все",
"no-unit": "Без одиниці",
"missing-unit": "Створити відсутню одиниці: {unit}",
"missing-food": "Створити відсутню їжу: {food}",
"no-food": "Немає їжі"
}
},
"search": {
"advanced-search": "Розширений пошук",
@@ -611,6 +635,7 @@
"backup-created-at-response-export_path": "Резервна копія створена {path}",
"backup-deleted": "Резервна копія видалена",
"restore-success": "Відновлення успішне",
"restore-fail": "Restore failed. Check your server logs for more details",
"backup-tag": "Мітка резервної копії",
"create-heading": "Створити резервну копію",
"delete-backup": "Видалити резервну копію",
@@ -747,7 +772,10 @@
"recipe-scraper-version": "Версія парсера рецептів",
"oidc-ready": "OIDC готово",
"oidc-ready-error-text": "Не всі значення OIDC налаштовано. Це можна ігнорувати, якщо ви не використовуєте авторизацію OIDC.",
"oidc-ready-success-text": "Всі необхідні змінні OIDC встановлені."
"oidc-ready-success-text": "Всі необхідні змінні OIDC встановлені.",
"openai-ready": "OpenAI готовий",
"openai-ready-error-text": "Не всі значення OpenAI налаштовано. Це можна ігнорувати, якщо ви не використовуєте функції OpenAI.",
"openai-ready-success-text": "Всі необхідні змінні OpenAI встановлені."
},
"shopping-list": {
"all-lists": "Всі списки",
@@ -761,6 +789,7 @@
"food": "Продукт",
"note": "Нотатка",
"label": "Етикетка",
"save-label": "Зберегти мітку",
"linked-item-warning": "Цей предмет зв'язано з одним або більше рецептами. Зміна одиниць виміру або продуктів дасть неочікувані результати при додаванні або видаленні рецепту з цього списку.",
"toggle-food": "Перемкнути продукт",
"manage-labels": "Керування етикетками",
@@ -794,7 +823,7 @@
"language": "Мова",
"maintenance": "Обслуговування",
"background-tasks": "Фонові завдання",
"parser": "Парсер",
"parser": "Синтаксичний аналізатор (парсер)",
"developer": "Розробник",
"cookbook": "Кулінарна книга",
"create-cookbook": "Створити нову кулінарну книгу"
@@ -1001,6 +1030,12 @@
"delete-recipes": "Видалити рецепти",
"source-unit-will-be-deleted": "Початкову одиницю вимірювання буде видалено"
},
"recipe-actions": {
"recipe-actions-data": "Дані дій рецепта",
"new-recipe-action": "Нова дія рецепту",
"edit-recipe-action": "Редагувати дії рецепта",
"action-type": "Тип Дії"
},
"create-alias": "Створити псевдонім",
"manage-aliases": "Керувати псевдонімами",
"seed-data": "Підготовлені дані",
@@ -1147,11 +1182,12 @@
"ingredients-natural-language-processor-explanation-2": "Модель не ідеальна, але дає непогані результати в загальному і є хорошим початковим пунктом для ручного парсингу інгредієнтів в окремі поля. Крім того, ви можете використовувати \"Brute\" процесор, який використовує метод підбору для визначення інгредієнтів.",
"nlp": "ОПМ",
"brute": "Брут",
"openai": "OpenAI",
"show-individual-confidence": "Показати індивідуальну впевненість",
"ingredient-text": "Текст інгредієнта",
"average-confident": "Впевненість {0}",
"try-an-example": "Спробувати приклад",
"parser": "Парсер",
"parser": "Синтаксичний аналізатор (парсер)",
"background-tasks": "Фонові задачі",
"background-tasks-description": "Тут ви можете переглянути всі запущені фонові задачі та їх статус",
"no-logs-found": "Журналів не знайдено",
@@ -1168,21 +1204,21 @@
}
},
"profile": {
"welcome-user": "👋 Welcome, {0}!",
"welcome-user": "👋 Ласкаво просимо, {0}!",
"description": "Керування вашим профілем, рецептами та налаштуваннями групи.",
"get-invite-link": "Отримати посилання-запрошення",
"get-public-link": "Отримати публічне посилання",
"account-summary": "Аккаунт",
"account-summary-description": "Here's a summary of your group's information.",
"account-summary-description": "Ось підсумок інформації про вашу групу.",
"group-statistics": "Статистика групи",
"group-statistics-description": "Статистика вашої групи дає можливість зрозуміти, як ви користуєтеся Mealie.",
"storage-capacity": "Обсяг сховища",
"storage-capacity-description": "Об'єм сховища це сума зображені та відвантажених медіаресурсів.",
"personal": "Особисте",
"personal-description": "These are settings that are personal to you. Changes here won't affect other users.",
"personal-description": "Це особисті налаштування. Зміни тут не впливають на інших користувачів.",
"user-settings": "Налаштування користувача",
"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": "Керуйте вашими налаштуваннями, змінюйте пароль і оновлюйте адресу електронної пошти.",
"api-tokens-description": "Керуйте своїми ключами API для доступу із зовнішніх програм.",
"group-description": "Ці елементи є спільними для вашої групи. Редагування одного з них змінить його для всієї групи!",
"group-settings": "Налаштування групи",
"group-settings-description": "Керуйте спільними налаштуванням груп, такими як плани харчування і налаштування конфіденційності.",
@@ -1193,9 +1229,9 @@
"notifiers": "Сповіщувачі",
"notifiers-description": "Налаштуйте email та push сповіщення, що спрацьовують для певних подій.",
"manage-data": "Керування даними",
"manage-data-description": "Manage your Mealie data; Foods, Units, Categories, Tags and more.",
"manage-data-description": "Керуйте своїми даними Mealie; їжа, одиниці, категорії, мітки та багато іншого.",
"data-migrations": "Міграції даних",
"data-migrations-description": "Migrate your existing data from other applications like Nextcloud Recipes and Chowdown.",
"data-migrations-description": "Перенести наявні дані з таких програм, як Nextcloud Recipes і Chowdown.",
"email-sent": "Лист надіслано",
"error-sending-email": "Помилка надсилання листа",
"personal-information": "Персональні данні",

View File

@@ -64,6 +64,7 @@
"something-went-wrong": "Something Went Wrong!",
"subscribed-events": "Subscribed Events",
"test-message-sent": "Test Message Sent",
"message-sent": "Message Sent",
"new-notification": "New Notification",
"event-notifiers": "Event Notifiers",
"apprise-url-skipped-if-blank": "Apprise URL (skipped if blank)",
@@ -160,6 +161,7 @@
"test": "Test",
"themes": "Themes",
"thursday": "Thursday",
"title": "Title",
"token": "Token",
"tuesday": "Tuesday",
"type": "Type",
@@ -289,6 +291,8 @@
"mealplan-updated": "Mealplan Updated",
"no-meal-plan-defined-yet": "No meal plan defined yet",
"no-meal-planned-for-today": "No meal planned for today",
"numberOfDays-hint": "Number of days on page load",
"numberOfDays-label": "Default Days",
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "Only recipes with these categories will be used in Meal Plans",
"planner": "Planner",
"quick-week": "Quick Week",
@@ -375,6 +379,10 @@
"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."
},
"recipekeeper": {
"title": "Recipe Keeper",
"description-long": "Mealie can import recipes from Recipe Keeper. Export your recipes in zip format, then upload the .zip file below."
}
},
"new-recipe": {
@@ -582,7 +590,23 @@
"upload-image": "Upload image",
"screen-awake": "Keep Screen Awake",
"remove-image": "Remove image",
"nextStep": "Next step"
"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.",
"select-parser": "Select Parser",
"natural-language-processor": "Natural Language Processor",
"brute-parser": "Brute Parser",
"openai-parser": "OpenAI Parser",
"parse-all": "Parse All",
"no-unit": "No unit",
"missing-unit": "Create missing unit: {unit}",
"missing-food": "Create missing food: {food}",
"no-food": "No Food"
}
},
"search": {
"advanced-search": "Advanced Search",
@@ -611,6 +635,7 @@
"backup-created-at-response-export_path": "Backup Created at {path}",
"backup-deleted": "Backup deleted",
"restore-success": "Restore successful",
"restore-fail": "Restore failed. Check your server logs for more details",
"backup-tag": "Backup Tag",
"create-heading": "Create a Backup",
"delete-backup": "Delete Backup",
@@ -747,7 +772,10 @@
"recipe-scraper-version": "Recipe Scraper Version",
"oidc-ready": "OIDC Ready",
"oidc-ready-error-text": "Not all OIDC Values are configured. This can be ignored if you are not using OIDC Authentication.",
"oidc-ready-success-text": "Required OIDC variables are all set."
"oidc-ready-success-text": "Required OIDC variables are all set.",
"openai-ready": "OpenAI Ready",
"openai-ready-error-text": "Not all OpenAI Values are configured. This can be ignored if you are not using OpenAI features.",
"openai-ready-success-text": "Required OpenAI variables are all set."
},
"shopping-list": {
"all-lists": "All Lists",
@@ -761,6 +789,7 @@
"food": "Food",
"note": "Note",
"label": "Label",
"save-label": "Save Label",
"linked-item-warning": "This item is linked to one or more recipe. Adjusting the units or foods will yield unexpected results when adding or removing the recipe from this list.",
"toggle-food": "Toggle Food",
"manage-labels": "Manage Labels",
@@ -1001,6 +1030,12 @@
"delete-recipes": "Delete Recipes",
"source-unit-will-be-deleted": "Source Unit will be deleted"
},
"recipe-actions": {
"recipe-actions-data": "Recipe Actions Data",
"new-recipe-action": "New Recipe Action",
"edit-recipe-action": "Edit Recipe Action",
"action-type": "Action Type"
},
"create-alias": "Create Alias",
"manage-aliases": "Manage Aliases",
"seed-data": "Seed Data",
@@ -1147,6 +1182,7 @@
"ingredients-natural-language-processor-explanation-2": "It's not perfect, but it yields great results in general and is a good starting point for manually parsing ingredients into individual fields. Alternatively, you can also use the \"Brute\" processor that uses a pattern matching technique to identify ingredients.",
"nlp": "NLP",
"brute": "Brute",
"openai": "OpenAI",
"show-individual-confidence": "Show individual confidence",
"ingredient-text": "Ingredient Text",
"average-confident": "{0} Confident",

View File

@@ -64,6 +64,7 @@
"something-went-wrong": "出错了\t#",
"subscribed-events": "订阅事件",
"test-message-sent": "测试消息已发送",
"message-sent": "已发送消息",
"new-notification": "新通知",
"event-notifiers": "事件通知器",
"apprise-url-skipped-if-blank": "Apprise URL (如果为空则跳过)",
@@ -160,6 +161,7 @@
"test": "测试",
"themes": "布景主题",
"thursday": "周四",
"title": "标题",
"token": "密钥",
"tuesday": "周二",
"type": "类型",
@@ -208,7 +210,7 @@
"unsaved-changes": "你有未保存的更改。你希望现在离开前保存吗?保存选择“是”,不保存选择“取消”。",
"clipboard-copy-failure": "未能复制到剪切板。",
"confirm-delete-generic-items": "你确定删除以下条目吗?",
"organizers": "组织者"
"organizers": "管理器"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "您确定要删除<b>{groupName}<b/>吗?",
@@ -289,6 +291,8 @@
"mealplan-updated": "已更新饮食计划",
"no-meal-plan-defined-yet": "还没有制定饮食计划",
"no-meal-planned-for-today": "今日没有饮食计划",
"numberOfDays-hint": "Number of days on page load",
"numberOfDays-label": "Default Days",
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "只有属于这些分类的食谱才会被用于饮食计划",
"planner": "计划人",
"quick-week": "快速创建周食谱计划",
@@ -375,6 +379,10 @@
"myrecipebox": {
"title": "My Recipe Box",
"description-long": "Mealie可以从“My Recipe Box\"导入食谱。把你的食谱导出为CSV模式然后在下面上传.csv文件。"
},
"recipekeeper": {
"title": "Recipe Keeper",
"description-long": "Mealie can import recipes from Recipe Keeper. Export your recipes in zip format, then upload the .zip file below."
}
},
"new-recipe": {
@@ -582,7 +590,23 @@
"upload-image": "上传图片",
"screen-awake": "保持屏幕唤醒",
"remove-image": "删除图片",
"nextStep": "下一步"
"nextStep": "下一步",
"recipe-actions": "食谱行为",
"parser": {
"experimental-alert-text": "Mealie使用自然语言处理解析食材并生成对应的计量单位和食物条目。此项功能尚在试验阶段并非每次都能达到预期效果。如果你不想使用解析结果可以选择取消此时修改将不会被保存。",
"ingredient-parser": "食材解析器",
"explanation": "若要使用食材解析器,请单击“全部解析”按钮。当解析结果出现时,你可以检查结果是否正确。解析模型的置信分数显示在条目名称的右侧。该分数是各项分数的平均值,且不总是准确的。",
"alerts-explainer": "当匹配到食物或计量单位,而该结果不在数据库中时,会显示提醒。",
"select-parser": "选取解析器",
"natural-language-processor": "自然语言处理器",
"brute-parser": "暴力解析器",
"openai-parser": "OpenAI Parser",
"parse-all": "全部解析",
"no-unit": "没有计量单位",
"missing-unit": "创建缺失的计量单位:{unit}",
"missing-food": "创建缺失的食物:{food}",
"no-food": "没有食物"
}
},
"search": {
"advanced-search": "高级搜索",
@@ -611,6 +635,7 @@
"backup-created-at-response-export_path": "备份创建于 {path}",
"backup-deleted": "备份已删除",
"restore-success": "还原成功",
"restore-fail": "Restore failed. Check your server logs for more details",
"backup-tag": "标签备份",
"create-heading": "创建备份",
"delete-backup": "删除备份",
@@ -747,7 +772,10 @@
"recipe-scraper-version": "食谱刮削器版本",
"oidc-ready": "OIDC 已就绪",
"oidc-ready-error-text": "某些OIDC环境变量尚未配置。如果你不使用OIDC验证可以忽略该报错",
"oidc-ready-success-text": "OIDC所需的环境变量均已配置。"
"oidc-ready-success-text": "OIDC所需的环境变量均已配置。",
"openai-ready": "OpenAI Ready",
"openai-ready-error-text": "Not all OpenAI Values are configured. This can be ignored if you are not using OpenAI features.",
"openai-ready-success-text": "Required OpenAI variables are all set."
},
"shopping-list": {
"all-lists": "所有购物清单",
@@ -761,6 +789,7 @@
"food": "食品",
"note": "备注",
"label": "标注",
"save-label": "Save Label",
"linked-item-warning": "此条目已经与一个或多个食谱有关。若强行变更它的单位或食品,会在增减下方关联食谱份数时产生意外结果。",
"toggle-food": "是否为数据库中的食品",
"manage-labels": "管理标签",
@@ -859,7 +888,7 @@
"or": "或",
"logout": "登出",
"manage-users": "管理用户",
"manage-users-description": "Create and manage users.",
"manage-users-description": "创建并管理用户。",
"new-password": "新密码",
"new-user": "新建用户",
"password-has-been-reset-to-the-default-password": "密码已被重置为默认密码",
@@ -1001,6 +1030,12 @@
"delete-recipes": "删除食谱",
"source-unit-will-be-deleted": "“待合并单位”将会被删除"
},
"recipe-actions": {
"recipe-actions-data": "食谱行为数据",
"new-recipe-action": "新建食谱行为",
"edit-recipe-action": "编辑食谱行为",
"action-type": "行为种类"
},
"create-alias": "创建别名",
"manage-aliases": "管理别名",
"seed-data": "初始数据",
@@ -1147,6 +1182,7 @@
"ingredients-natural-language-processor-explanation-2": "它不完美但通常来说结果还不错。推荐用它上手来把食材手动解析成独立字段。或者你也可以选择“Brute解析器“它使用一种模式匹配技术来识别食材。",
"nlp": "自然语言处理",
"brute": "Brute",
"openai": "OpenAI",
"show-individual-confidence": "显示个体置信度",
"ingredient-text": "食材文本",
"average-confident": "{0}置信度",
@@ -1162,9 +1198,9 @@
"already-set-up-bring-to-homepage": "我已经配置好了,直接跳转到主页",
"common-settings-for-new-sites": "这有一些新站点的常见设置",
"setup-complete": "配置完成!",
"here-are-a-few-things-to-help-you-get-started": "Here are a few things to help you get started with Mealie",
"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."
"here-are-a-few-things-to-help-you-get-started": "以下这些可以帮助你开始使用Mealie",
"restore-from-v1-backup": "有之前Mealie v1实例的备份数据你可以在这里恢复它们。",
"manage-profile-or-get-invite-link": "管理你自己的个人资料,或者获取邀请链接分享给其他人。"
}
},
"profile": {
@@ -1173,16 +1209,16 @@
"get-invite-link": "生成邀请链接",
"get-public-link": "生成公开链接",
"account-summary": "账户概况",
"account-summary-description": "Here's a summary of your group's information.",
"account-summary-description": "以下是你群组信息的摘要。",
"group-statistics": "群组统计",
"group-statistics-description": "群组统计为你如何使用Mealie提供一些深入信息。",
"storage-capacity": "总储存容量",
"storage-capacity-description": "你的存储容量基于你上传的图片和资源计算得出。",
"personal": "个人设置",
"personal-description": "These are settings that are personal to you. Changes here won't affect other users.",
"personal-description": "这些是你的个人设置。此处的更改不影响同组其他用户。",
"user-settings": "个人资料",
"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": "管理偏好、更换密码或邮箱",
"api-tokens-description": "管理用于外部程序访问的API令牌。",
"group-description": "这些项目已在你的群组中共享,一旦被编辑,更改之处会对所有群组成员生效!",
"group-settings": "基础选项",
"group-settings-description": "管理常见的群组设置,如饮食计划和隐私设置。",
@@ -1193,9 +1229,9 @@
"notifiers": "通知方案",
"notifiers-description": "设置基于特定事件触发的邮件提醒和通知推送。",
"manage-data": "数据库",
"manage-data-description": "Manage your Mealie data; Foods, Units, Categories, Tags and more.",
"manage-data-description": "管理Mealie数据包括食物种类、计量单位、分类、标签等",
"data-migrations": "数据迁移",
"data-migrations-description": "Migrate your existing data from other applications like Nextcloud Recipes and Chowdown.",
"data-migrations-description": "将其他应用(如Nextcloud RecipesChowdown的现有数据迁移至Mealie。",
"email-sent": "邮件已发送",
"error-sending-email": "发送邮件出错",
"personal-information": "个人信息",

View File

@@ -64,6 +64,7 @@
"something-went-wrong": "出了點問題...",
"subscribed-events": "關注的事件",
"test-message-sent": "測試訊息已發送",
"message-sent": "Message Sent",
"new-notification": "新通知",
"event-notifiers": "Event Notifiers",
"apprise-url-skipped-if-blank": "Apprise URL (skipped if blank)",
@@ -160,6 +161,7 @@
"test": "測試",
"themes": "佈景主題",
"thursday": "星期四",
"title": "Title",
"token": "密鑰",
"tuesday": "星期二",
"type": "類型",
@@ -289,6 +291,8 @@
"mealplan-updated": "用餐計劃已更新",
"no-meal-plan-defined-yet": "目前無用餐計畫",
"no-meal-planned-for-today": "本日無用餐計畫",
"numberOfDays-hint": "Number of days on page load",
"numberOfDays-label": "Default Days",
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "只有屬於這些類別的食譜會被用於用餐計畫",
"planner": "規劃師",
"quick-week": "快速規劃",
@@ -375,6 +379,10 @@
"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."
},
"recipekeeper": {
"title": "Recipe Keeper",
"description-long": "Mealie can import recipes from Recipe Keeper. Export your recipes in zip format, then upload the .zip file below."
}
},
"new-recipe": {
@@ -582,7 +590,23 @@
"upload-image": "Upload image",
"screen-awake": "Keep Screen Awake",
"remove-image": "Remove image",
"nextStep": "Next step"
"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.",
"select-parser": "Select Parser",
"natural-language-processor": "Natural Language Processor",
"brute-parser": "Brute Parser",
"openai-parser": "OpenAI Parser",
"parse-all": "Parse All",
"no-unit": "No unit",
"missing-unit": "Create missing unit: {unit}",
"missing-food": "Create missing food: {food}",
"no-food": "No Food"
}
},
"search": {
"advanced-search": "進階搜尋",
@@ -611,6 +635,7 @@
"backup-created-at-response-export_path": "已備份於:{path}",
"backup-deleted": "備份已刪除",
"restore-success": "Restore successful",
"restore-fail": "Restore failed. Check your server logs for more details",
"backup-tag": "備份標籤",
"create-heading": "創建備份",
"delete-backup": "刪除備份",
@@ -747,7 +772,10 @@
"recipe-scraper-version": "Recipe Scraper Version",
"oidc-ready": "OIDC Ready",
"oidc-ready-error-text": "Not all OIDC Values are configured. This can be ignored if you are not using OIDC Authentication.",
"oidc-ready-success-text": "Required OIDC variables are all set."
"oidc-ready-success-text": "Required OIDC variables are all set.",
"openai-ready": "OpenAI Ready",
"openai-ready-error-text": "Not all OpenAI Values are configured. This can be ignored if you are not using OpenAI features.",
"openai-ready-success-text": "Required OpenAI variables are all set."
},
"shopping-list": {
"all-lists": "所有清單",
@@ -761,6 +789,7 @@
"food": "Food",
"note": "Note",
"label": "Label",
"save-label": "Save Label",
"linked-item-warning": "This item is linked to one or more recipe. Adjusting the units or foods will yield unexpected results when adding or removing the recipe from this list.",
"toggle-food": "Toggle Food",
"manage-labels": "Manage Labels",
@@ -1001,6 +1030,12 @@
"delete-recipes": "Delete Recipes",
"source-unit-will-be-deleted": "Source Unit will be deleted"
},
"recipe-actions": {
"recipe-actions-data": "Recipe Actions Data",
"new-recipe-action": "New Recipe Action",
"edit-recipe-action": "Edit Recipe Action",
"action-type": "Action Type"
},
"create-alias": "Create Alias",
"manage-aliases": "Manage Aliases",
"seed-data": "Seed Data",
@@ -1147,6 +1182,7 @@
"ingredients-natural-language-processor-explanation-2": "It's not perfect, but it yields great results in general and is a good starting point for manually parsing ingredients into individual fields. Alternatively, you can also use the \"Brute\" processor that uses a pattern matching technique to identify ingredients.",
"nlp": "NLP",
"brute": "Brute",
"openai": "OpenAI",
"show-individual-confidence": "Show individual confidence",
"ingredient-text": "Ingredient Text",
"average-confident": "{0} Confident",

View File

@@ -85,12 +85,6 @@ export default defineComponent({
title: i18n.tc("sidebar.maintenance"),
restricted: true,
},
{
icon: $globals.icons.check,
to: "/admin/background-tasks",
title: i18n.tc("sidebar.background-tasks"),
restricted: true,
},
{
icon: $globals.icons.slotMachine,
to: "/admin/parser",

View File

@@ -1,19 +0,0 @@
import { BaseAPI } from "../base/base-clients";
import { ServerTask } from "~/lib/api/types/server";
import { PaginationData } from "~/lib/api/types/non-generated";
const prefix = "/api";
const routes = {
base: `${prefix}/admin/server-tasks`,
};
export class AdminTaskAPI extends BaseAPI {
async testTask() {
return await this.requests.post<ServerTask>(`${routes.base}`, {});
}
async getAll() {
return await this.requests.get<PaginationData<ServerTask>>(routes.base);
}
}

View File

@@ -1,5 +1,4 @@
import { AdminAboutAPI } from "./admin/admin-about";
import { AdminTaskAPI } from "./admin/admin-tasks";
import { AdminUsersApi } from "./admin/admin-users";
import { AdminGroupsApi } from "./admin/admin-groups";
import { AdminBackupsApi } from "./admin/admin-backups";
@@ -9,7 +8,6 @@ import { ApiRequestInstance } from "~/lib/api/types/non-generated";
export class AdminAPI {
public about: AdminAboutAPI;
public serverTasks: AdminTaskAPI;
public users: AdminUsersApi;
public groups: AdminGroupsApi;
public backups: AdminBackupsApi;
@@ -18,7 +16,6 @@ export class AdminAPI {
constructor(requests: ApiRequestInstance) {
this.about = new AdminAboutAPI(requests);
this.serverTasks = new AdminTaskAPI(requests);
this.users = new AdminUsersApi(requests);
this.groups = new AdminGroupsApi(requests);
this.backups = new AdminBackupsApi(requests);

View File

@@ -9,12 +9,12 @@ import { UtilsAPI } from "./user/utils";
import { FoodAPI } from "./user/recipe-foods";
import { UnitAPI } from "./user/recipe-units";
import { CookbookAPI } from "./user/group-cookbooks";
import { GroupRecipeActionsAPI } from "./user/group-recipe-actions";
import { WebhooksAPI } from "./user/group-webhooks";
import { RegisterAPI } from "./user/user-registration";
import { MealPlanAPI } from "./user/group-mealplan";
import { EmailAPI } from "./user/email";
import { BulkActionsAPI } from "./user/recipe-bulk-actions";
import { GroupServerTaskAPI } from "./user/group-tasks";
import { ToolsApi } from "./user/organizer-tools";
import { GroupMigrationApi } from "./user/group-migrations";
import { GroupReportsApi } from "./user/group-reports";
@@ -36,6 +36,7 @@ export class UserApiClient {
public foods: FoodAPI;
public units: UnitAPI;
public cookbooks: CookbookAPI;
public groupRecipeActions: GroupRecipeActionsAPI;
public groupWebhooks: WebhooksAPI;
public register: RegisterAPI;
public mealplans: MealPlanAPI;
@@ -44,7 +45,6 @@ export class UserApiClient {
public bulk: BulkActionsAPI;
public groupMigration: GroupMigrationApi;
public groupReports: GroupReportsApi;
public grouperServerTasks: GroupServerTaskAPI;
public tools: ToolsApi;
public shopping: ShoppingApi;
public multiPurposeLabels: MultiPurposeLabelsApi;
@@ -65,11 +65,11 @@ export class UserApiClient {
this.users = new UserApi(requests);
this.groups = new GroupAPI(requests);
this.cookbooks = new CookbookAPI(requests);
this.groupRecipeActions = new GroupRecipeActionsAPI(requests);
this.groupWebhooks = new WebhooksAPI(requests);
this.register = new RegisterAPI(requests);
this.mealplans = new MealPlanAPI(requests);
this.mealplanRules = new MealPlanRulesApi(requests);
this.grouperServerTasks = new GroupServerTaskAPI(requests);
// Group
this.groupMigration = new GroupMigrationApi(requests);

View File

@@ -13,6 +13,7 @@ export interface AdminAboutInfo {
enableOidc: boolean;
oidcRedirect: boolean;
oidcProviderName: string;
enableOpenai: boolean;
versionLatest: string;
apiPort: number;
apiDocs: boolean;
@@ -40,6 +41,7 @@ export interface AppInfo {
enableOidc: boolean;
oidcRedirect: boolean;
oidcProviderName: string;
enableOpenai: boolean;
}
export interface AppStartupInfo {
isFirstLogin: boolean;
@@ -80,6 +82,7 @@ export interface CheckAppConfig {
emailReady: boolean;
ldapReady: boolean;
oidcReady: boolean;
enableOpenai: boolean;
baseUrlSet: boolean;
isUpToDate: boolean;
}

View File

@@ -5,6 +5,9 @@
/* Do not modify it by hand - just update the pydantic models and then re-run the script
*/
export type RecipeActionType =
| "link"
| "post";
export type WebhookType = "mealplan";
export type SupportedMigrations =
| "nextcloud"
@@ -13,7 +16,8 @@ export type SupportedMigrations =
| "paprika"
| "mealie_alpha"
| "tandoor"
| "plantoeat";
| "plantoeat"
| "recipekeeper";
export interface CreateGroupPreferences {
privateGroup?: boolean;
@@ -26,6 +30,11 @@ export interface CreateGroupPreferences {
recipeDisableAmount?: boolean;
groupId: string;
}
export interface CreateGroupRecipeAction {
actionType: RecipeActionType;
title: string;
url: string;
}
export interface CreateInviteToken {
uses: number;
}
@@ -191,6 +200,13 @@ export interface GroupEventNotifierUpdate {
options?: GroupEventNotifierOptions;
id: string;
}
export interface GroupRecipeActionOut {
actionType: RecipeActionType;
title: string;
url: string;
groupId: string;
id: string;
}
export interface GroupStatistics {
totalRecipes: number;
totalUsers: number;
@@ -230,6 +246,12 @@ export interface ReadWebhook {
groupId: string;
id: string;
}
export interface SaveGroupRecipeAction {
actionType: RecipeActionType;
title: string;
url: string;
groupId: string;
}
export interface SaveInviteToken {
usesLeft: number;
groupId: string;

View File

@@ -6,7 +6,7 @@
*/
export type ExportTypes = "json";
export type RegisteredParser = "nlp" | "brute";
export type RegisteredParser = "nlp" | "brute" | "openai";
export type TimelineEventType = "system" | "info" | "comment";
export type TimelineEventImage = "has image" | "does not have image";

View File

@@ -1,25 +0,0 @@
/* tslint:disable */
/* eslint-disable */
/**
/* This file was automatically generated from pydantic models by running pydantic2ts.
/* Do not modify it by hand - just update the pydantic models and then re-run the script
*/
export type ServerTaskNames = "Background Task" | "Database Backup" | "Bulk Recipe Import";
export type ServerTaskStatus = "running" | "finished" | "failed";
export interface ServerTask {
groupId: string;
name?: ServerTaskNames & string;
createdAt?: string;
status?: ServerTaskStatus & string;
log?: string;
id: number;
}
export interface ServerTaskCreate {
groupId: string;
name?: ServerTaskNames & string;
createdAt?: string;
status?: ServerTaskStatus & string;
log?: string;
}

View File

@@ -0,0 +1,14 @@
import { BaseCRUDAPI } from "../base/base-clients";
import { CreateGroupRecipeAction, GroupRecipeActionOut } from "~/lib/api/types/group";
const prefix = "/api";
const routes = {
groupRecipeActions: `${prefix}/groups/recipe-actions`,
groupRecipeActionsId: (id: string | number) => `${prefix}/groups/recipe-actions/${id}`,
};
export class GroupRecipeActionsAPI extends BaseCRUDAPI<CreateGroupRecipeAction, GroupRecipeActionOut> {
baseRoute = routes.groupRecipeActions;
itemRoute = routes.groupRecipeActionsId;
}

View File

@@ -1,13 +0,0 @@
import { BaseAPI } from "../base/base-clients";
import { ServerTask } from "~/lib/api/types/server";
const prefix = "/api";
const routes = {
base: `${prefix}/groups/server-tasks`,
};
export class GroupServerTaskAPI extends BaseAPI {
async getAll() {
return await this.requests.get<ServerTask[]>(routes.base);
}
}

View File

@@ -17,7 +17,7 @@ import {
} from "~/lib/api/types/recipe";
import { ApiRequestInstance, PaginationData } from "~/lib/api/types/non-generated";
export type Parser = "nlp" | "brute";
export type Parser = "nlp" | "brute" | "openai";
export interface CreateAsset {
name: string;

View File

@@ -1,10 +1,9 @@
import { BaseCRUDAPI } from "../base/base-clients";
import { QueryValue, route } from "~/lib/api/base/route";
import { PaginationData, RequestResponse } from "~/lib/api/types/non-generated";
import { PaginationData } from "~/lib/api/types/non-generated";
import {
ChangePassword,
DeleteTokenResponse,
GroupInDB,
LongLiveTokenIn,
LongLiveTokenOut,
ResetPassword,
@@ -30,7 +29,6 @@ const routes = {
groupUsers: `${prefix}/users/group-users`,
usersSelf: `${prefix}/users/self`,
ratingsSelf: `${prefix}/users/self/ratings`,
groupsSelf: `${prefix}/users/self/group`,
passwordReset: `${prefix}/users/reset-password`,
passwordChange: `${prefix}/users/password`,
users: `${prefix}/users`,
@@ -57,10 +55,6 @@ export class UserApi extends BaseCRUDAPI<UserIn, UserOut, UserBase> {
return await this.requests.get<PaginationData<UserSummary>>(route(routes.groupUsers, { page, perPage, ...params }));
}
async getSelfGroup(): Promise<RequestResponse<GroupInDB>> {
return await this.requests.get(routes.groupsSelf, {});
}
async addFavorite(id: string, slug: string) {
return await this.requests.post(routes.usersIdFavoritesSlug(id, slug), {});
}

View File

@@ -9,6 +9,7 @@ import {
mdiSquareEditOutline,
mdiClose,
mdiTagArrowUpOutline,
mdiTagArrowRight,
mdiTagMultipleOutline,
mdiShapeOutline,
mdiBookOutline,
@@ -293,6 +294,7 @@ export const icons = {
// Organization
tags: mdiTagMultipleOutline,
tagArrowUp: mdiTagArrowUpOutline,
tagArrowRight: mdiTagArrowRight,
categories: mdiShapeOutline,
pages: mdiBookOutline,
book: mdiBookOpenPageVariant,

View File

@@ -156,6 +156,7 @@ export default {
propertyName: "access_token",
},
refresh: { url: "api/auth/refresh", method: "post" },
logout: { url: "api/auth/logout", method: "post" },
user: { url: "api/users/self", method: "get" },
},
},
@@ -260,6 +261,12 @@ export default {
"en-GB": require("./lang/dateTimeFormats/en-GB.json"),
"fi-FI": require("./lang/dateTimeFormats/fi-FI.json"),
"vi-VN": require("./lang/dateTimeFormats/vi-VN.json"),
"sl-SI": require("./lang/dateTimeFormats/sl-SI.json"),
"lv-LV": require("./lang/dateTimeFormats/lv-LV.json"),
"is-IS": require("./lang/dateTimeFormats/is-IS.json"),
"gl-ES": require("./lang/dateTimeFormats/gl-ES.json"),
"lt-LT": require("./lang/dateTimeFormats/lt-LT.json"),
"hr-HR": require("./lang/dateTimeFormats/hr-HR.json"),
// END: DATE_LOCALES
},
fallbackLocale: "en-US",

View File

@@ -1,87 +0,0 @@
<template>
<v-container class="narrow-container">
<BasePageTitle divider>
<template #header>
<v-img max-height="125" max-width="125" :src="require('~/static/svgs/manage-tasks.svg')"></v-img>
</template>
<template #title> {{ $t('admin.background-tasks') }} </template>
{{ $t('admin.background-tasks-description') }}
</BasePageTitle>
<v-card-actions>
<BaseButton color="info" :loading="loading" @click="refreshTasks">
<template #icon> {{ $globals.icons.refresh }} </template>
{{ $t('general.refresh') }}
</BaseButton>
<BaseButton color="info" @click="testTask">
<template #icon> {{ $globals.icons.testTube }} </template>
{{ $t('general.test') }}
</BaseButton>
</v-card-actions>
<v-expansion-panels class="mt-2">
<v-expansion-panel v-for="(task, i) in tasks" :key="i">
<v-expansion-panel-header>
<span>
<v-progress-circular v-if="task.status === 'running'" indeterminate color="info"></v-progress-circular>
<v-icon v-else-if="task.status === 'finished'" large color="success"> {{ $globals.icons.check }}</v-icon>
<v-icon v-else-if="task.status === 'failed'" large color="error"> {{ $globals.icons.close }}</v-icon>
<v-icon v-else-if="task.status === 'pending'" large color="gray"> {{ $globals.icons.pending }}</v-icon>
<span class="ml-2">
{{ task.name }}
</span>
</span>
{{ $d(Date.parse(task.createdAt), "short") }}
</v-expansion-panel-header>
<v-expansion-panel-content style="white-space: pre-line">
{{ task.log === "" ? $t('admin.no-logs-found') : task.log }}
</v-expansion-panel-content>
</v-expansion-panel>
</v-expansion-panels>
</v-container>
</template>
<script lang="ts">
import { defineComponent, onMounted, ref } from "@nuxtjs/composition-api";
import { ServerTask } from "~/lib/api/types/server";
import { useAdminApi } from "~/composables/api";
export default defineComponent({
layout: "admin",
setup() {
const api = useAdminApi();
const tasks = ref<ServerTask[]>([]);
const loading = ref(false);
async function refreshTasks() {
loading.value = true;
const { data } = await api.serverTasks.getAll();
if (data) {
tasks.value = data.items;
}
loading.value = false;
}
async function testTask() {
await api.serverTasks.testTask();
refreshTasks();
}
onMounted(async () => {
await refreshTasks();
});
return {
loading,
refreshTasks,
testTask,
tasks,
};
},
head() {
return {
title: this.$t("admin.tasks"),
};
},
});
</script>

View File

@@ -162,6 +162,8 @@ export default defineComponent({
if (error) {
console.log(error);
state.importDialog = false;
state.runningRestore = false;
alert.error(i18n.tc("settings.backup.restore-fail"));
} else {
alert.success(i18n.tc("settings.backup.restore-success"));
$auth.logout();

View File

@@ -13,6 +13,7 @@
<v-btn-toggle v-model="parser" dense mandatory @change="processIngredient">
<v-btn value="nlp"> {{ $t('admin.nlp') }} </v-btn>
<v-btn value="brute"> {{ $t('admin.brute') }} </v-btn>
<v-btn value="openai"> {{ $t('admin.openai') }} </v-btn>
</v-btn-toggle>
<v-checkbox v-model="showConfidence" class="ml-5" :label="$t('admin.show-individual-confidence')"></v-checkbox>
@@ -63,8 +64,8 @@
<script lang="ts">
import { defineComponent, reactive, ref, toRefs, useContext } from "@nuxtjs/composition-api";
import { IngredientConfidence } from "~/lib/api/types/recipe";
import { useUserApi } from "~/composables/api";
import { IngredientConfidence } from "~/lib/api/types/recipe";
import { Parser } from "~/lib/api/user/recipes/recipe";
type ConfidenceAttribute = "average" | "comment" | "name" | "unit" | "quantity" | "food";

View File

@@ -268,6 +268,15 @@ export default defineComponent({
color: appConfig.value.oidcReady ? goodColor : warningColor,
icon: appConfig.value.oidcReady ? goodIcon : warningIcon,
},
{
id: "openai-ready",
text: i18n.t("settings.openai-ready"),
status: appConfig.value.enableOpenai,
errorText: i18n.t("settings.openai-ready-error-text"),
successText: i18n.t("settings.openai-ready-success-text"),
color: appConfig.value.enableOpenai ? goodColor : warningColor,
icon: appConfig.value.enableOpenai ? goodIcon : warningIcon,
},
];
return data;
});

View File

@@ -2,109 +2,110 @@
<v-container v-if="recipe">
<v-container>
<v-alert dismissible border="left" colored-border type="warning" elevation="2" :icon="$globals.icons.alert">
<b>Experimental Feature</b>
<b>{{ $tc("banner-experimental.title") }}</b>
<div>
Mealie can use natural language processing to attempt to parse and create units, and foods for your Recipe
ingredients. This is experimental and may not work as expected. If you choose to not use the parsed results
you can select cancel and your changes will not be saved.
{{ $tc("recipe.parser.experimental-alert-text") }}
</div>
</v-alert>
<BaseCardSectionTitle title="Ingredients Processor">
To use the ingredient parser, click the "Parse All" button and the process will start. When the processed
ingredients are available, you can look through the items and verify that they were parsed correctly. The models
confidence score is displayed on the right of the title item. This is an average of all scores and may not be
wholely accurate.
<BaseCardSectionTitle :title="$tc('recipe.parser.ingredient-parser')">
<div class="mt-4">{{ $tc("recipe.parser.explanation") }}</div>
<div class="my-4">
Alerts will be displayed if a matching foods or unit is found but does not exists in the database.
{{ $tc("recipe.parser.alerts-explainer") }}
</div>
<div class="d-flex align-center mb-n4">
<div class="mb-4">Select Parser</div>
<div class="mb-4">{{ $tc("recipe.parser.select-parser") }}</div>
<BaseOverflowButton
v-model="parser"
btn-class="mx-2 mb-4"
:items="[
{
text: 'Natural Language Processor ',
value: 'nlp',
},
{
text: 'Brute Parser',
value: 'brute',
},
]"
:items="availableParsers"
/>
</div>
</BaseCardSectionTitle>
<div class="d-flex mt-n3 mb-4 justify-end" style="gap: 5px">
<BaseButton cancel class="mr-auto" @click="$router.go(-1)"></BaseButton>
<BaseButton color="info" @click="fetchParsed">
<BaseButton color="info" :disabled="parserLoading" @click="fetchParsed">
<template #icon> {{ $globals.icons.foods }}</template>
Parse All
{{ $tc("recipe.parser.parse-all") }}
</BaseButton>
<BaseButton save @click="saveAll"> Save All </BaseButton>
<BaseButton save :disabled="parserLoading" @click="saveAll" />
</div>
<v-expansion-panels v-model="panels" multiple>
<draggable
v-if="parsedIng.length > 0"
v-model="parsedIng"
handle=".handle"
:style="{ width: '100%' }"
ghost-class="ghost"
>
<v-expansion-panel v-for="(ing, index) in parsedIng" :key="index">
<v-expansion-panel-header class="my-0 py-0" disable-icon-rotate>
<template #default="{ open }">
<v-fade-transition>
<span v-if="!open" key="0"> {{ ing.input }} </span>
</v-fade-transition>
</template>
<template #actions>
<v-icon left :color="isError(ing) ? 'error' : 'success'">
{{ isError(ing) ? $globals.icons.alert : $globals.icons.check }}
</v-icon>
<div class="my-auto" :color="isError(ing) ? 'error-text' : 'success-text'">
{{ ing.confidence ? asPercentage(ing.confidence.average) : "" }}
</div>
</template>
</v-expansion-panel-header>
<v-expansion-panel-content class="pb-0 mb-0">
<RecipeIngredientEditor v-model="parsedIng[index].ingredient" allow-insert-ingredient @insert-ingredient="insertIngredient(index)" @delete="deleteIngredient(index)" />
{{ ing.input }}
<v-card-actions>
<v-spacer />
<BaseButton
v-if="errors[index].unitError && errors[index].unitErrorMessage !== ''"
color="warning"
small
@click="createUnit(ing.ingredient.unit, index)"
>
{{ errors[index].unitErrorMessage }}
</BaseButton>
<BaseButton
v-if="errors[index].foodError && errors[index].foodErrorMessage !== ''"
color="warning"
small
@click="createFood(ing.ingredient.food, index)"
>
{{ errors[index].foodErrorMessage }}
</BaseButton>
</v-card-actions>
</v-expansion-panel-content>
</v-expansion-panel>
</draggable>
</v-expansion-panels>
<div v-if="parserLoading">
<AppLoader
v-if="parserLoading"
:loading="parserLoading"
waiting-text=""
/>
</div>
<div v-else>
<v-expansion-panels v-model="panels" multiple>
<draggable
v-if="parsedIng.length > 0"
v-model="parsedIng"
handle=".handle"
:style="{ width: '100%' }"
ghost-class="ghost"
>
<v-expansion-panel v-for="(ing, index) in parsedIng" :key="index">
<v-expansion-panel-header class="my-0 py-0" disable-icon-rotate>
<template #default="{ open }">
<v-fade-transition>
<span v-if="!open" key="0"> {{ ing.input }} </span>
</v-fade-transition>
</template>
<template #actions>
<v-icon left :color="isError(ing) ? 'error' : 'success'">
{{ isError(ing) ? $globals.icons.alert : $globals.icons.check }}
</v-icon>
<div class="my-auto" :color="isError(ing) ? 'error-text' : 'success-text'">
{{ ing.confidence ? asPercentage(ing.confidence.average) : "" }}
</div>
</template>
</v-expansion-panel-header>
<v-expansion-panel-content class="pb-0 mb-0">
<RecipeIngredientEditor v-model="parsedIng[index].ingredient" allow-insert-ingredient @insert-ingredient="insertIngredient(index)" @delete="deleteIngredient(index)" />
{{ ing.input }}
<v-card-actions>
<v-spacer />
<BaseButton
v-if="errors[index].unitError && errors[index].unitErrorMessage !== ''"
color="warning"
small
@click="createUnit(ing.ingredient.unit, index)"
>
{{ errors[index].unitErrorMessage }}
</BaseButton>
<BaseButton
v-if="errors[index].foodError && errors[index].foodErrorMessage !== ''"
color="warning"
small
@click="createFood(ing.ingredient.food, index)"
>
{{ errors[index].foodErrorMessage }}
</BaseButton>
</v-card-actions>
</v-expansion-panel-content>
</v-expansion-panel>
</draggable>
</v-expansion-panels>
</div>
</v-container>
</v-container>
</template>
<script lang="ts">
import { computed, defineComponent, ref, useContext, useRoute, useRouter } from "@nuxtjs/composition-api";
import { computed, defineComponent, ref, useContext, useRoute, useRouter, watch } from "@nuxtjs/composition-api";
import { invoke, until } from "@vueuse/core";
import draggable from "vuedraggable";
import RecipeIngredientEditor from "~/components/Domain/Recipe/RecipeIngredientEditor.vue";
import { useAppInfo, useUserApi } from "~/composables/api";
import { useRecipe } from "~/composables/recipes";
import { useFoodData, useFoodStore, useUnitData, useUnitStore } from "~/composables/store";
import { useParsingPreferences } from "~/composables/use-users/preferences";
import { uuid4 } from "~/composables/use-utils";
import {
CreateIngredientFood,
CreateIngredientUnit,
@@ -113,12 +114,7 @@ import {
ParsedIngredient,
RecipeIngredient,
} from "~/lib/api/types/recipe";
import RecipeIngredientEditor from "~/components/Domain/Recipe/RecipeIngredientEditor.vue";
import { useUserApi } from "~/composables/api";
import { useRecipe } from "~/composables/recipes";
import { useFoodData, useFoodStore, useUnitStore, useUnitData } from "~/composables/store";
import { Parser } from "~/lib/api/user/recipes/recipe";
import { uuid4 } from "~/composables/use-utils";
interface Error {
ingredientIndex: number;
@@ -135,7 +131,7 @@ export default defineComponent({
},
middleware: ["auth", "group-only"],
setup() {
const { $auth } = useContext();
const { $auth, i18n } = useContext();
const panels = ref<number[]>([]);
const route = useRoute();
@@ -144,8 +140,10 @@ export default defineComponent({
const router = useRouter();
const slug = route.value.params.slug;
const api = useUserApi();
const appInfo = useAppInfo();
const { recipe, loading } = useRecipe(slug);
const parserLoading = ref(false);
invoke(async () => {
await until(recipe).not.toBeNull();
@@ -155,10 +153,32 @@ export default defineComponent({
const ingredients = ref<any[]>([]);
const availableParsers = computed(() => {
return [
{
"text": i18n.tc("recipe.parser.natural-language-processor"),
"value": "nlp",
},
{
"text": i18n.tc("recipe.parser.brute-parser"),
"value": "brute",
},
{
"text": i18n.tc("recipe.parser.openai-parser"),
"value": "openai",
"hide": !appInfo.value?.enableOpenai,
},
]
});
// =========================================================
// Parser Logic
const parser = ref<Parser>("nlp");
const parserPreferences = useParsingPreferences();
const parser = ref<Parser>(parserPreferences.value.parser || "nlp");
const parsedIng = ref<ParsedIngredient[]>([]);
watch(parser, (val) => {
parserPreferences.value.parser = val;
});
function processIngredientError(ing: ParsedIngredient, index: number): Error {
const unitError = !checkForUnit(ing.ingredient.unit);
@@ -170,13 +190,15 @@ export default defineComponent({
if (unitError || foodError) {
if (unitError) {
if (ing?.ingredient?.unit?.name) {
unitErrorMessage = `Create missing unit '${ing?.ingredient?.unit?.name || "No unit"}'`;
const unit = ing.ingredient.unit.name || i18n.tc("recipe.parser.no-unit");
unitErrorMessage = i18n.t("recipe.parser.missing-unit", { unit }).toString();
}
}
if (foodError) {
if (ing?.ingredient?.food?.name) {
foodErrorMessage = `Create missing food '${ing.ingredient.food.name || "No food"}'?`;
const food = ing.ingredient.food.name || i18n.tc("recipe.parser.no-food");
foodErrorMessage = i18n.t("recipe.parser.missing-food", { food }).toString();
}
}
}
@@ -196,7 +218,10 @@ export default defineComponent({
return;
}
const raw = recipe.value.recipeIngredient.map((ing) => ing.note ?? "");
parserLoading.value = true;
const { data } = await api.recipes.parseIngredients(parser.value, raw);
parserLoading.value = false;
if (data) {
// When we send the recipe ingredient text to be parsed, we lose the reference to the original unparsed ingredient.
@@ -344,6 +369,7 @@ export default defineComponent({
return {
parser,
availableParsers,
saveAll,
createFood,
createUnit,
@@ -359,12 +385,13 @@ export default defineComponent({
parsedIng,
recipe,
loading,
parserLoading,
ingredients,
};
},
head() {
return {
title: "Parser",
title: this.$tc("recipe.parser.ingredient-parser"),
};
},
});

View File

@@ -41,6 +41,7 @@ export default defineComponent({
const { i18n } = useContext();
const buttonLookup: { [key: string]: string } = {
recipes: i18n.tc("general.recipes"),
recipeActions: i18n.tc("recipe.recipe-actions"),
foods: i18n.tc("general.foods"),
units: i18n.tc("general.units"),
labels: i18n.tc("data-pages.labels.labels"),
@@ -53,46 +54,57 @@ export default defineComponent({
const DATA_TYPE_OPTIONS = computed(() => [
{
text: i18n.t("general.recipes"),
text: i18n.tc("general.recipes"),
value: "new",
to: "/group/data/recipes",
},
{
text: i18n.tc("recipe.recipe-actions"),
value: "new",
to: "/group/data/recipe-actions",
divider: true,
},
{
text: i18n.t("general.foods"),
text: i18n.tc("general.foods"),
value: "url",
to: "/group/data/foods",
},
{
text: i18n.t("general.units"),
text: i18n.tc("general.units"),
value: "new",
to: "/group/data/units",
},
{
text: i18n.t("data-pages.labels.labels"),
text: i18n.tc("data-pages.labels.labels"),
value: "new",
to: "/group/data/labels",
divider: true,
},
{
text: i18n.t("category.categories"),
text: i18n.tc("category.categories"),
value: "new",
to: "/group/data/categories",
},
{
text: i18n.t("tag.tags"),
text: i18n.tc("tag.tags"),
value: "new",
to: "/group/data/tags",
},
{
text: i18n.t("tool.tools"),
text: i18n.tc("tool.tools"),
value: "new",
to: "/group/data/tools",
}
]);
const buttonText = computed(() => {
const last = route.value.path.split("/").pop();
const last = route.value.path
.split("/")
.pop()
// convert hypenated-values to camelCase
?.replace(/-([a-z])/g, function (g) {
return g[1].toUpperCase();
})
if (last) {
return buttonLookup[last];

View File

@@ -17,6 +17,7 @@
v-model="state.editDialog"
:icon="$globals.icons.tags"
:title="$t('data-pages.labels.edit-label')"
:submit-icon="$globals.icons.save"
:submit-text="$tc('general.save')"
@submit="editSaveLabel"
>

View File

@@ -0,0 +1,265 @@
<template>
<div>
<!-- Create Dialog -->
<BaseDialog
v-model="state.createDialog"
:title="$t('data-pages.recipe-actions.new-recipe-action')"
:icon="$globals.icons.primary"
@submit="createAction"
>
<v-card-text>
<v-form ref="domNewActionForm">
<v-text-field
v-model="createTarget.title"
autofocus
:label="$t('general.title')"
:rules="[validators.required]"
/>
<v-text-field
v-model="createTarget.url"
:label="$t('general.url')"
:rules="[validators.required]"
/>
<v-select
v-model="createTarget.actionType"
:items="actionTypeOptions"
:label="$t('data-pages.recipe-actions.action-type')"
:rules="[validators.required]"
/>
</v-form>
</v-card-text>
</BaseDialog>
<!-- Edit Dialog -->
<BaseDialog
v-model="state.editDialog"
:icon="$globals.icons.primary"
:title="$t('data-pages.recipe-actions.edit-recipe-action')"
:submit-text="$tc('general.save')"
@submit="editSaveAction"
>
<v-card-text v-if="editTarget">
<div class="mt-4">
<v-text-field v-model="editTarget.title" :label="$t('general.title')"/>
</div>
<div class="mt-4">
<v-text-field v-model="editTarget.url" :label="$t('general.url')"/>
</div>
<div class="mt-4">
<v-select
v-model="editTarget.actionType"
:items="actionTypeOptions"
:label="$t('data-pages.recipe-actions.action-type')"
/>
</div>
</v-card-text>
</BaseDialog>
<!-- Delete Dialog -->
<BaseDialog
v-model="state.deleteDialog"
:title="$tc('general.confirm')"
:icon="$globals.icons.alertCircle"
color="error"
@confirm="deleteAction"
>
<v-card-text>
{{ $t("general.confirm-delete-generic") }}
<p v-if="deleteTarget" class="mt-4 ml-4">{{ deleteTarget.title }}</p>
</v-card-text>
</BaseDialog>
<!-- Bulk Delete Dialog -->
<BaseDialog
v-model="state.bulkDeleteDialog"
width="650px"
:title="$tc('general.confirm')"
:icon="$globals.icons.alertCircle"
color="error"
@confirm="deleteSelected"
>
<v-card-text>
<p class="h4">{{ $t('general.confirm-delete-generic-items') }}</p>
<v-card outlined>
<v-virtual-scroll height="400" item-height="25" :items="bulkDeleteTarget">
<template #default="{ item }">
<v-list-item class="pb-2">
<v-list-item-content>
<v-list-item-title>{{ item.name }}</v-list-item-title>
</v-list-item-content>
</v-list-item>
</template>
</v-virtual-scroll>
</v-card>
</v-card-text>
</BaseDialog>
<!-- Data Table -->
<BaseCardSectionTitle :icon="$globals.icons.primary" section :title="$tc('data-pages.recipe-actions.recipe-actions-data')"> </BaseCardSectionTitle>
<CrudTable
:table-config="tableConfig"
:headers.sync="tableHeaders"
:data="actions || []"
:bulk-actions="[{icon: $globals.icons.delete, text: $tc('general.delete'), event: 'delete-selected'}]"
@delete-one="deleteEventHandler"
@edit-one="editEventHandler"
@delete-selected="bulkDeleteEventHandler"
>
<template #button-row>
<BaseButton create @click="state.createDialog = true">{{ $t("general.create") }}</BaseButton>
</template>
<template #item.onHand="{ item }">
<v-icon :color="item.onHand ? 'success' : undefined">
{{ item.onHand ? $globals.icons.check : $globals.icons.close }}
</v-icon>
</template>
</CrudTable>
</div>
</template>
<script lang="ts">
import { defineComponent, reactive, ref, useContext } from "@nuxtjs/composition-api";
import { validators } from "~/composables/use-validators";
import { useGroupRecipeActions, useGroupRecipeActionData } from "~/composables/use-group-recipe-actions";
import { GroupRecipeActionOut } from "~/lib/api/types/group";
export default defineComponent({
setup() {
const { i18n } = useContext();
const tableConfig = {
hideColumns: true,
canExport: true,
};
const tableHeaders = [
{
text: i18n.t("general.id"),
value: "id",
show: false,
},
{
text: i18n.t("general.title"),
value: "title",
show: true,
},
{
text: i18n.t("general.url"),
value: "url",
show: true,
},
{
text: i18n.t("data-pages.recipe-actions.action-type"),
value: "actionType",
show: true,
},
];
const state = reactive({
createDialog: false,
editDialog: false,
deleteDialog: false,
bulkDeleteDialog: false,
});
const actionData = useGroupRecipeActionData();
const actionStore = useGroupRecipeActions(null, null);
const actionTypeOptions = ["link", "post"]
// ============================================================
// Create Action
async function createAction() {
// @ts-ignore groupId isn't required
await actionStore.actions.createOne({
actionType: actionData.data.actionType,
title: actionData.data.title,
url: actionData.data.url,
});
actionData.reset();
state.createDialog = false;
}
// ============================================================
// Edit Action
const editTarget = ref<GroupRecipeActionOut | null>(null);
function editEventHandler(item: GroupRecipeActionOut) {
state.editDialog = true;
editTarget.value = item;
}
async function editSaveAction() {
if (!editTarget.value) {
return;
}
await actionStore.actions.updateOne(editTarget.value);
state.editDialog = false;
}
// ============================================================
// Delete Action
const deleteTarget = ref<GroupRecipeActionOut | null>(null);
function deleteEventHandler(item: GroupRecipeActionOut) {
state.deleteDialog = true;
deleteTarget.value = item;
}
async function deleteAction() {
if (!deleteTarget.value || deleteTarget.value.id === undefined) {
return;
}
await actionStore.actions.deleteOne(deleteTarget.value.id);
state.deleteDialog = false;
}
// ============================================================
// Bulk Delete Action
const bulkDeleteTarget = ref<GroupRecipeActionOut[]>([]);
function bulkDeleteEventHandler(selection: GroupRecipeActionOut[]) {
bulkDeleteTarget.value = selection;
state.bulkDeleteDialog = true;
}
async function deleteSelected() {
for (const item of bulkDeleteTarget.value) {
await actionStore.actions.deleteOne(item.id);
}
bulkDeleteTarget.value = [];
}
return {
state,
tableConfig,
tableHeaders,
actionTypeOptions,
actions: actionStore.recipeActions,
validators,
// create
createTarget: actionData.data,
createAction,
// edit
editTarget,
editEventHandler,
editSaveAction,
// delete
deleteTarget,
deleteEventHandler,
deleteAction,
// bulk delete
bulkDeleteTarget,
bulkDeleteEventHandler,
deleteSelected,
};
},
});
</script>

View File

@@ -23,6 +23,13 @@
:first-day-of-week="firstDayOfWeek"
:local="$i18n.locale"
>
<v-text-field
v-model="numberOfDays"
type="number"
:label="$t('meal-plan.numberOfDays-label')"
:hint="$t('meal-plan.numberOfDays-hint')"
persistent-hint
/>
<v-spacer></v-spacer>
<v-btn text color="primary" @click="state.picker = false">
{{ $t("general.ok") }}
@@ -47,10 +54,11 @@
</template>
<script lang="ts">
import { computed, defineComponent, ref, useRoute, useRouter } from "@nuxtjs/composition-api";
import { computed, defineComponent, ref, useRoute, useRouter, watch } from "@nuxtjs/composition-api";
import { isSameDay, addDays, parseISO } from "date-fns";
import { useGroupSelf } from "~/composables/use-groups";
import { useMealplans } from "~/composables/use-group-mealplan";
import { useUserMealPlanPreferences } from "~/composables/use-users/preferences";
export default defineComponent({
middleware: ["auth"],
@@ -59,6 +67,12 @@ export default defineComponent({
const router = useRouter();
const { group } = useGroupSelf();
const mealPlanPreferences = useUserMealPlanPreferences();
const numberOfDays = ref<number>(mealPlanPreferences.value.numberOfDays || 7);
watch(numberOfDays, (val) => {
mealPlanPreferences.value.numberOfDays = Number(val);
});
// Force to /view if current route is /planner
if (route.value.path === "/group/mealplan/planner") {
router.push("/group/mealplan/planner/view");
@@ -74,18 +88,16 @@ export default defineComponent({
}
const state = ref({
range: [fmtYYYYMMDD(new Date()), fmtYYYYMMDD(addDays(new Date(), 6))] as [string, string],
range: [fmtYYYYMMDD(new Date()), fmtYYYYMMDD(addDays(new Date(), adjustForToday(numberOfDays.value)))] as [string, string],
start: new Date(),
picker: false,
end: addDays(new Date(), 6),
end: addDays(new Date(), adjustForToday(numberOfDays.value)),
});
const firstDayOfWeek = computed(() => {
return group.value?.preferences?.firstDayOfWeek || 0;
});
const recipeSearchTerm = ref("");
const weekRange = computed(() => {
const sorted = state.value.range.sort((a, b) => {
return parseYYYYMMDD(a).getTime() - parseYYYYMMDD(b).getTime();
@@ -99,7 +111,7 @@ export default defineComponent({
}
return {
start: new Date(),
end: addDays(new Date(), 6),
end: addDays(new Date(), adjustForToday(numberOfDays.value)),
};
});
@@ -113,6 +125,12 @@ export default defineComponent({
});
}
function adjustForToday(days: number) {
// The use case for this function is "how many days are we adding to 'today'?"
// e.g. If the user wants 7 days, we substract one to do "today + 6"
return days > 0 ? days - 1 : days + 1
}
const days = computed(() => {
const numDays =
Math.floor((weekRange.value.end.getTime() - weekRange.value.start.getTime()) / (1000 * 60 * 60 * 24)) + 1;
@@ -141,7 +159,7 @@ export default defineComponent({
mealsByDate,
weekRange,
firstDayOfWeek,
recipeSearchTerm,
numberOfDays,
};
},
head() {

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