Compare commits

..

154 Commits

Author SHA1 Message Date
Carter
f709d11952 fix: (OAuth) redirect to direct login on failure (#3406) 2024-04-02 15:13:30 +00:00
Hayden
2a3463b746 security: gh security recs (#3368)
* change ALLOW_SIGNUP to default to false

* add 1.4.0 tag for OIDC docs

* new notes on security inline with security/policy review

* safer transport for external requests

* fix linter errors

* docs: Tidy up wording/formatting

* fix request errors

* whoops

* fix implementation with std lib

* format

* Remove check on netloc_parts. It only includes URL after any @

---------

Co-authored-by: boc-the-git <3479092+boc-the-git@users.noreply.github.com>
Co-authored-by: Brendan <b.oconnell14@gmail.com>
2024-04-02 07:04:42 -08:00
boc-the-git
737a370874 Merge pull request #3408 from mealie-recipes/renovate/fastapi-0.x-lockfile
fix(deps): update dependency fastapi to v0.110.1
2024-04-02 22:01:13 +11:00
boc-the-git
2a2b6f312b Merge branch 'mealie-next' into renovate/fastapi-0.x-lockfile 2024-04-02 21:54:02 +11:00
boc-the-git
96d220acbd Merge pull request #3407 from mealie-recipes/renovate/mkdocs-material-9.x-lockfile
chore(deps): update dependency mkdocs-material to v9.5.17
2024-04-02 21:52:45 +11:00
renovate[bot]
b9a9b8695d fix(deps): update dependency fastapi to v0.110.1 2024-04-02 08:13:19 +00:00
renovate[bot]
e80c8a50e6 chore(deps): update dependency mkdocs-material to v9.5.17 2024-04-02 08:13:05 +00:00
renovate[bot]
41795799e6 chore(deps): update dependency ruff to v0.3.5 (#3405)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-01 20:52:36 +00:00
renovate[bot]
9980e49eef fix(deps): update dependency pillow to v10.3.0 (#3402)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-01 15:42:02 -05:00
Kuchenpirat
a283828461 refactor: Sidebar UI (#3390)
* Refactor sidebar links in DefaultLayout.vue

* 🧹
2024-04-01 10:16:52 +02:00
Hayden
7c365b7c03 New translations en-us.json (German) (#3400) 2024-03-31 18:43:59 -08:00
renovate[bot]
16da55f58b chore(deps): update dependency mkdocs-material to v9.5.16 (#3397)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-31 18:02:16 -08:00
boc-the-git
e280734e33 Merge pull request #3394 from mealie-recipes/renovate/apprise-1.x-lockfile
fix(deps): update dependency apprise to v1.7.5
2024-03-31 09:33:06 +11:00
renovate[bot]
a312c4dbf3 fix(deps): update dependency apprise to v1.7.5 2024-03-30 16:50:07 +00:00
renovate[bot]
79fb1fb299 fix(deps): update dependency tzdata to v2024 (#3386)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-28 18:00:15 -05:00
boc-the-git
b7c1cdfd46 Merge pull request #3383 from mealie-recipes/renovate/orjson-3.x-lockfile
fix(deps): update dependency orjson to v3.10.0
2024-03-28 21:53:13 +11:00
renovate[bot]
09873d4814 fix(deps): update dependency orjson to v3.10.0 2024-03-28 01:13:59 +00:00
Hayden
7f596c653b New Crowdin updates (#3381)
* New translations en-us.json (Greek)

* New translations en-us.json (Japanese)

* New translations en-us.json (Korean)

* New translations en-us.json (Greek)

* New translations en-us.json (Greek)

* New translations en-us.json (Japanese)

* New translations en-us.json (Japanese)

* New translations en-us.json (Japanese)

* New translations en-us.json (Japanese)
2024-03-27 17:36:23 +01:00
boc-the-git
bb06b0414b Housekeeping (#3380) 2024-03-27 10:40:13 +01:00
Hayden
6b720bafd6 New Crowdin updates (#3379)
* New translations en-us.json (Japanese)

* New translations en-us.json (Korean)
2024-03-26 17:59:38 +01:00
Kuchenpirat
6449591143 feat: cookbook editor on cookbook page (#3378)
* remove unnecessairy string

* add edit functionality to cookbook page

* restrict to own group
2024-03-26 08:02:20 -05:00
Kuchenpirat
8fb43246b2 fix: add auto-select-first attribute to RecipeOrganizerSelector.vue (#3376) 2024-03-25 16:52:41 +00:00
Hayden
95d3fd4958 New Crowdin updates (#3377)
* New translations en-us.json (German)

* New translations en-us.json (Portuguese)
2024-03-25 16:38:04 +00:00
Michael Genson
dfbc890f2c fix: Recipe Search URL State (#3332)
* fix several state issues with explore page
- update state when there are no query params
- only call search if the query params actually changed
- wait until ready to call API

* store last search query in user prefs

* restore chip tag click to anonymous user
2024-03-25 16:04:42 +00:00
renovate[bot]
21886ab4b8 Update dependency rapidfuzz to v3.7.0 (#3370)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-25 14:56:10 +00:00
Kuchenpirat
4b0df3ace8 Reset the search input after selection on the RecipeOrganizerSelector (#3373)
* Reset the search input after selection on the RecipeOrganizerSelector

* remove unused import
2024-03-25 14:47:10 +00:00
renovate[bot]
7505b5cf65 Update dependency pre-commit to v3.7.0 (#3369)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-25 14:39:35 +00:00
renovate[bot]
45e71da402 Update dependency SQLAlchemy to v2.0.29 (#3362)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-25 09:30:02 -05:00
Hayden
3ded63dfdf New translations en-us.json (Bulgarian) (#3366) 2024-03-24 17:35:12 +01:00
boc-the-git
735c3e3146 Merge pull request #3358 from mealie-recipes/renovate/mkdocs-material-9.x-lockfile
Update dependency mkdocs-material to v9.5.15
2024-03-24 21:27:35 +11:00
boc-the-git
83861cfcb8 Merge branch 'mealie-next' into renovate/mkdocs-material-9.x-lockfile 2024-03-24 21:21:16 +11:00
boc-the-git
c22ff8ccad Merge pull request #3361 from mealie-recipes/l10n_mealie-next
New Crowdin updates
2024-03-24 21:21:01 +11:00
Hayden
9a17a484f3 New translations en-us.json (Turkish) 2024-03-23 11:13:55 -05:00
renovate[bot]
bc6734399f Update dependency mkdocs-material to v9.5.15 2024-03-23 06:44:01 +00:00
boc-the-git
8e6f2a3d61 Merge pull request #3355 from mealie-recipes/l10n_mealie-next
New Crowdin updates
2024-03-23 07:12:01 +11:00
Hayden
20fa3a25f2 New translations en-us.json (French, Canada) 2024-03-22 11:15:57 -05:00
Hayden
1a9f5470ca New translations en-us.json (Latvian) 2024-03-22 11:15:56 -05:00
Hayden
2254d114be New translations en-us.json (Croatian) 2024-03-22 11:15:55 -05:00
Hayden
ef22d29ef1 New translations en-us.json (Portuguese, Brazilian) 2024-03-22 11:15:54 -05:00
Hayden
ef165cd276 New translations en-us.json (Icelandic) 2024-03-22 11:15:53 -05:00
Hayden
e6477920ce New translations en-us.json (Galician) 2024-03-22 11:15:52 -05:00
Hayden
c49584d027 New translations en-us.json (Vietnamese) 2024-03-22 11:15:50 -05:00
Hayden
e56eabf1e2 New translations en-us.json (Chinese Traditional) 2024-03-22 11:15:49 -05:00
Hayden
a35f2ae56a New translations en-us.json (Chinese Simplified) 2024-03-22 11:15:49 -05:00
Hayden
2a4a195dcb New translations en-us.json (Ukrainian) 2024-03-22 11:15:48 -05:00
Hayden
6318e8d1c6 New translations en-us.json (Turkish) 2024-03-22 11:15:46 -05:00
Hayden
b7a4899302 New translations en-us.json (Serbian (Cyrillic)) 2024-03-22 11:15:46 -05:00
Hayden
7fe6ef4da5 New translations en-us.json (Slovenian) 2024-03-22 11:15:45 -05:00
Hayden
0391763d18 New translations en-us.json (Slovak) 2024-03-22 11:15:44 -05:00
Hayden
3250384862 New translations en-us.json (Russian) 2024-03-22 11:15:43 -05:00
Hayden
1bf496751c New translations en-us.json (Portuguese) 2024-03-22 11:15:42 -05:00
Hayden
580700458c New translations en-us.json (Norwegian) 2024-03-22 11:15:41 -05:00
Hayden
6c6276cb79 New translations en-us.json (Dutch) 2024-03-22 11:15:40 -05:00
Hayden
787f9293fb New translations en-us.json (Lithuanian) 2024-03-22 11:15:38 -05:00
Hayden
aa0547ae69 New translations en-us.json (Korean) 2024-03-22 11:15:37 -05:00
Hayden
1c6b0f1122 New translations en-us.json (Japanese) 2024-03-22 11:15:36 -05:00
Hayden
014721b6f7 New translations en-us.json (Italian) 2024-03-22 11:15:35 -05:00
Hayden
692d8a5681 New translations en-us.json (Hungarian) 2024-03-22 11:15:34 -05:00
Hayden
120d4cfc5a New translations en-us.json (Hebrew) 2024-03-22 11:15:33 -05:00
Hayden
e3b3f70621 New translations en-us.json (Finnish) 2024-03-22 11:15:32 -05:00
Hayden
c5e55a2207 New translations en-us.json (Greek) 2024-03-22 11:15:31 -05:00
Hayden
f6d508af92 New translations en-us.json (German) 2024-03-22 11:15:30 -05:00
Hayden
516a732b12 New translations en-us.json (Danish) 2024-03-22 11:15:28 -05:00
Hayden
dfd4943304 New translations en-us.json (Czech) 2024-03-22 11:15:27 -05:00
Hayden
511e08e7e9 New translations en-us.json (Catalan) 2024-03-22 11:15:26 -05:00
Hayden
ed50dfc145 New translations en-us.json (Bulgarian) 2024-03-22 11:15:25 -05:00
Hayden
ee542255a5 New translations en-us.json (Arabic) 2024-03-22 11:15:24 -05:00
Hayden
32fa9d4439 New translations en-us.json (Afrikaans) 2024-03-22 11:15:23 -05:00
Hayden
f2be3383ac New translations en-us.json (French) 2024-03-22 11:15:22 -05:00
Hayden
fd6874e8dd New translations en-us.json (Romanian) 2024-03-22 11:15:21 -05:00
Hayden
09e514fa84 New translations en-us.json (Polish) 2024-03-22 11:15:20 -05:00
Hayden
f4678f99ed New translations en-us.json (English, United Kingdom) 2024-03-22 11:15:19 -05:00
Hayden
4e9670acf6 New translations en-us.json (Swedish) 2024-03-22 11:15:18 -05:00
Hayden
fb097ca095 New translations en-us.json (Spanish) 2024-03-22 11:15:16 -05:00
boc-the-git
8f40d13f20 Merge pull request #3352 from michael-genson/feat/migrate-from-my-recipe-box
feat: Migrate from My Recipe Box
2024-03-22 20:40:01 +11:00
boc-the-git
2aaef9ae54 Merge branch 'mealie-next' into feat/migrate-from-my-recipe-box 2024-03-22 20:33:37 +11:00
boc-the-git
a6d31638e2 Merge pull request #3354 from cmintey/signing-algorithm-env-var
Add OIDC environment variable for specififying the signing algorithm
2024-03-22 20:21:59 +11:00
Carter Mintey
f73aefce4e lint 2024-03-22 01:46:45 +00:00
Carter Mintey
ff5131018b add new environment variable for specififying the signing algorithm 2024-03-22 01:32:33 +00:00
renovate[bot]
1c6c5042ae chore(deps): update dependency ruff to v0.3.4 (#3353)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-21 18:23:58 -05:00
Michael Genson
d770009e0d added reactive accepted file types 2024-03-21 16:21:37 +00:00
Michael Genson
4a0b211f27 added test 2024-03-21 16:17:01 +00:00
Michael Genson
7dcf2ca33d added migration to frontend and cleaned up migration page 2024-03-21 16:11:33 +00:00
Michael Genson
95c15504d0 fixed BaseOverflowButton divider 2024-03-21 16:11:18 +00:00
Michael Genson
4e38625bde added backend for myrecipebox migration 2024-03-21 16:11:06 +00:00
Hayden
4a411f0483 New Crowdin updates (#3351)
* New translations en-us.json (Danish)

* New translations en-us.json (Norwegian)

* New translations en-us.json (Norwegian)
2024-03-21 15:59:50 +00:00
boc-the-git
95b6d901bf Merge pull request #3323 from cmintey/authelia-docs-update
OIDC Docs Updates
2024-03-21 08:08:36 +11:00
boc-the-git
c9d74e25ac Merge branch 'mealie-next' into authelia-docs-update 2024-03-21 08:01:58 +11:00
Hayden
54aef24caf New translations en-us.json (Danish) (#3347)
Co-authored-by: Michael Genson <71845777+michael-genson@users.noreply.github.com>
2024-03-20 15:44:33 +00:00
renovate[bot]
6050b1e25a fix(deps): update dependency uvicorn to ^0.29.0 (#3346)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-20 10:36:47 -05:00
boc-the-git
b54cef2702 Merge pull request #3328 from mealie-recipes/l10n_mealie-next
New Crowdin updates
2024-03-20 20:53:22 +11:00
boc-the-git
abb2c8110c Merge branch 'mealie-next' into l10n_mealie-next 2024-03-20 20:47:13 +11:00
boc-the-git
f1e8d633fc Merge pull request #3321 from michael-genson/fix/repeated-calls-to-groups-self
fix: Repeated calls to group self
2024-03-20 20:44:55 +11:00
boc-the-git
c4f60942b5 Merge branch 'mealie-next' into l10n_mealie-next 2024-03-20 20:41:03 +11:00
boc-the-git
abbaf12e9e Merge branch 'mealie-next' into fix/repeated-calls-to-groups-self 2024-03-20 20:38:31 +11:00
renovate[bot]
04e6601d5b fix(deps): update dependency uvicorn to v0.28.1 (#3342)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-19 13:37:08 +00:00
renovate[bot]
1ebc7d27d4 chore(deps): update dependency pytest-asyncio to v0.23.6 (#3341)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-19 08:27:04 -05:00
Carter
59d53a02b3 Dicsussion Template: OAuth example template (#3340)
* Create oauth_example.yaml

* Update and rename oauth_example.yaml to oauth-provider-example.yaml
2024-03-19 01:21:53 +00:00
Carter Mintey
370da5aee3 update links 2024-03-19 01:06:45 +00:00
Ikko Eltociear Ashimine
af2992eee9 docs: Update maintainers.md (#3339)
reviered -> reviewed
2024-03-18 17:42:02 +00:00
Carter Mintey
e17b8b813c Remove examples from docs and link to GH discussions 2024-03-18 15:04:01 +00:00
renovate[bot]
9b4e0dd0d9 chore(deps): update dependency mkdocs-material to v9.5.14 (#3333)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-18 02:19:35 +00:00
Carter Mintey
d7bc1c75da add redirect uri required for idps with rp-initiated logout 2024-03-17 15:21:15 +00:00
Hayden
b963b99a4c New translations en-us.json (Japanese) 2024-03-17 05:46:58 -05:00
Carter Mintey
9270e22f19 clarify docs 2024-03-16 01:41:38 +00:00
Carter Mintey
7df34890d4 update authelia example config 2024-03-16 01:37:55 +00:00
renovate[bot]
36b0661e1d chore(deps): update dependency black to v24.3.0 (#3322)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-15 20:28:22 +00:00
Michael Genson
6da50b576f remove unused import 2024-03-15 20:21:43 +00:00
Michael Genson
517491e507 Merge branch 'mealie-next' into fix/repeated-calls-to-groups-self 2024-03-15 15:17:31 -05:00
renovate[bot]
82aca1f77f chore(deps): update dependency ruff to v0.3.3 (#3261)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-15 20:16:53 +00:00
Michael Genson
8c4f657aa7 Merge branch 'mealie-next' into fix/repeated-calls-to-groups-self 2024-03-15 15:02:46 -05:00
renovate[bot]
4352762e93 chore(deps): update dependency coverage to v7.4.4 (#3316)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-15 15:00:37 -05:00
Michael Genson
ad0ea09be9 better model inheritance 2024-03-15 19:57:57 +00:00
Michael Genson
52c6fe34b2 remove potentially sensitive fields from group self 2024-03-15 19:50:39 +00:00
Michael Genson
b6ccb9fbdb add shared group self to composable 2024-03-15 19:41:26 +00:00
Hayden
f83ab6ecc1 New Crowdin updates (#3319)
* New translations en-us.json (Japanese)

* New translations en-us.json (Slovak)

* New translations en-us.json (Slovak)
2024-03-15 16:15:41 +01:00
Hayden
1af0f426ae fix: remove deprecated lifecycle and consolidate startup actions (#3311)
* remove deprecated lifecycle and consolidate startup actions

* fix import
2024-03-14 19:27:26 +00:00
Michael Genson
d960947258 fix: Purge Group Exports type mismatch (#3314)
* cast string to datetime

* added test
2024-03-14 11:20:59 -08:00
Hayden
f2735ba22b proxy get_all to page_all (#3312) 2024-03-14 15:30:38 +00:00
Hayden
aa4c02ef30 New Crowdin updates (#3313)
* New translations en-us.json (Romanian)

* New translations en-us.json (Dutch)
2024-03-14 15:31:55 +01:00
Michael Genson
f1fbf0d120 fix: delete shopping list if no users are found (#3290) 2024-03-14 00:29:47 +00:00
Michael Genson
63a362a48a fix: Limit shopping list owners to current group (#3305)
* add route for getting group-only users

* add new api route to frontend

* update shopping list user getAll call

* tests

* fixed bad import

* replace UserOut with UserSummary

* fix params
2024-03-13 18:29:00 +00:00
Hayden
e0d7341139 New Crowdin updates (#3307)
* New translations en-us.json (Spanish)

* New translations en-us.json (Swedish)

* New translations en-us.json (English, United Kingdom)

* New translations en-us.json (Polish)

* New translations en-us.json (Romanian)

* New translations en-us.json (French)

* New translations en-us.json (Afrikaans)

* New translations en-us.json (Arabic)

* New translations en-us.json (Bulgarian)

* New translations en-us.json (Catalan)

* New translations en-us.json (Czech)

* New translations en-us.json (Danish)

* New translations en-us.json (German)

* New translations en-us.json (Greek)

* New translations en-us.json (Finnish)

* New translations en-us.json (Hebrew)

* New translations en-us.json (Hungarian)

* New translations en-us.json (Italian)

* New translations en-us.json (Japanese)

* New translations en-us.json (Korean)

* New translations en-us.json (Lithuanian)

* New translations en-us.json (Dutch)

* New translations en-us.json (Norwegian)

* New translations en-us.json (Portuguese)

* New translations en-us.json (Russian)

* New translations en-us.json (Slovak)

* New translations en-us.json (Slovenian)

* New translations en-us.json (Serbian (Cyrillic))

* New translations en-us.json (Turkish)

* New translations en-us.json (Ukrainian)

* New translations en-us.json (Chinese Simplified)

* New translations en-us.json (Chinese Traditional)

* New translations en-us.json (Vietnamese)

* New translations en-us.json (Galician)

* New translations en-us.json (Icelandic)

* New translations en-us.json (Portuguese, Brazilian)

* New translations en-us.json (Croatian)

* New translations en-us.json (Latvian)

* New translations en-us.json (French, Canada)
2024-03-13 15:34:58 +01:00
Michael Genson
5f5b06683a fix: add locale and first day of week to all date pickers (#3303) 2024-03-12 22:46:34 +00:00
Michael Genson
42523bbfc9 fix: Only call store APIs once (#3306)
* move loading value to inside async function

* share loading state and use it for throttling
2024-03-12 14:36:30 -08:00
Michael Genson
0a344731c8 feat: Timeline Filters (#3284)
* added timeline event filters

* updated empty timeline text

* simplify icons/labels for event types

* added missing translations

* cloned sort improvements to explore page

* added filter indicator

* lint

* removed lint warning

* add top margin to "no events found" text

Co-authored-by: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com>

* fixed reversed sort icons

Co-authored-by: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com>

* fixed sort dir on timeline filter

* sync checkbox state with preferences state

---------

Co-authored-by: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com>
2024-03-12 15:20:48 +00:00
renovate[bot]
e83fa89ec4 fix(deps): update dependency pydantic to v2.6.4 (#3300)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-12 14:26:11 +00:00
Hayden
13cd7a1c0f New Crowdin updates (#3299)
* New translations en-us.json (French)

* New translations en-us.json (German)

* New translations en-us.json (Hungarian)

* New translations en-us.json (Dutch)

* New translations en-us.json (Portuguese)

* New translations en-us.json (Turkish)

* New translations en-us.json (Ukrainian)

* New translations en-us.json (French, Canada)
2024-03-12 14:16:34 +00:00
Hayden
0e23a41bdb New Crowdin updates (#3286)
* New translations en-us.json (Spanish)

* New translations en-us.json (Swedish)

* New translations en-us.json (English, United Kingdom)

* New translations en-us.json (Polish)

* New translations en-us.json (Romanian)

* New translations en-us.json (French)

* New translations en-us.json (Afrikaans)

* New translations en-us.json (Arabic)

* New translations en-us.json (Bulgarian)

* New translations en-us.json (Catalan)

* New translations en-us.json (Czech)

* New translations en-us.json (Danish)

* New translations en-us.json (German)

* New translations en-us.json (Greek)

* New translations en-us.json (Finnish)

* New translations en-us.json (Hebrew)

* New translations en-us.json (Hungarian)

* New translations en-us.json (Italian)

* New translations en-us.json (Japanese)

* New translations en-us.json (Korean)

* New translations en-us.json (Lithuanian)

* New translations en-us.json (Dutch)

* New translations en-us.json (Norwegian)

* New translations en-us.json (Portuguese)

* New translations en-us.json (Russian)

* New translations en-us.json (Slovak)

* New translations en-us.json (Slovenian)

* New translations en-us.json (Serbian (Cyrillic))

* New translations en-us.json (Turkish)

* New translations en-us.json (Ukrainian)

* New translations en-us.json (Chinese Simplified)

* New translations en-us.json (Chinese Traditional)

* New translations en-us.json (Vietnamese)

* New translations en-us.json (Galician)

* New translations en-us.json (Icelandic)

* New translations en-us.json (Portuguese, Brazilian)

* New translations en-us.json (Croatian)

* New translations en-us.json (Latvian)

* New translations en-us.json (French, Canada)
2024-03-11 14:13:19 +00:00
renovate[bot]
e17b320dc8 fix(deps): update dependency tzdata to v2024 (#3281)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-11 13:37:22 +00:00
Michael Genson
403038a5b2 feat: First Time Setup Wizard (#3204)
* extract user registration form into a composable

* added base wizard component

* added partial setup implementation

* removed unused attrs

* added setup bypass

* made setup page more readable

* add checkbox hints to autoform

* added common settings pages and initial submit logic

* bypass setup in demo

* add full name to user registration

* added fullname and pw handling to setup

* fixed wizard indentation

* added post-setup suggestions

* added tests for backend changes

* renamed Wizard to BaseWizard

* lint fixes

* pass hardcoded default password instead of backend nonsense

* removed old test

* fix e2e

* added setup skip to e2e testing for all admin users

---------

Co-authored-by: Hayden <64056131+hay-kot@users.noreply.github.com>
2024-03-11 13:28:54 +00:00
boc-the-git
430e1d7d4e Merge pull request #3283 from michael-genson/fix/recipe-favorite-slug-handling
fix: Allow UserOut to accept list of slugs for recipe favorites
2024-03-11 21:31:43 +11:00
boc-the-git
c44cd7ffab Merge branch 'mealie-next' into fix/recipe-favorite-slug-handling 2024-03-11 21:25:16 +11:00
boc-the-git
73dfb523ec Fix typos (#3285) 2024-03-11 09:08:32 +00:00
Michael Genson
21d57735c9 added failsafe for bad input data 2024-03-11 00:25:44 +00:00
Michael Genson
05e13e6078 account for slugs or recipes when constructing user favorites 2024-03-11 00:13:57 +00:00
Hayden
5f6844eceb feat: Login with OAuth via OpenID Connect (OIDC) (#3280)
* initial oidc implementation

* add dynamic scheme

* e2e test setup

* add caching

* fix

* try this

* add libldap-2.5 to runtime dependencies (#2849)

* New translations en-us.json (Norwegian) (#2851)

* New Crowdin updates (#2855)

* New translations en-us.json (Italian)

* New translations en-us.json (Norwegian)

* New translations en-us.json (Portuguese)

* fix

* remove cache

* cache yarn deps

* cache docker image

* cleanup action

* lint

* fix tests

* remove not needed variables

* run code gen

* fix tests

* add docs

* move code into custom scheme

* remove unneeded type

* fix oidc admin

* add more tests

* add better spacing on login page

* create auth providers

* clean up testing stuff

* type fixes

* add OIDC auth method to postgres enum

* add option to bypass login screen and go directly to iDP

* remove check so we can fallback to another auth method oauth fails

* Add provider name to be shown at the login screen

* add new properties to admin about api

* fix spec

* add a prompt to change auth method when changing password

* Create new auth section. Add more info on auth methods

* update docs

* run ruff

* update docs

* format

* docs gen

* formatting

* initialize logger in class

* mypy type fixes

* docs gen

* add models to get proper fields in docs and fix serialization

* validate id token before using it

* only request a mealie token on initial callback

* remove unused method

* fix unit tests

* docs gen

* check for valid idToken before getting token

* add iss to mealie token

* check to see if we already have a mealie token before getting one

* fix lock file

* update authlib

* update lock file

* add remember me environment variable

* add user group setting to allow only certain groups to log in

---------

Co-authored-by: Carter Mintey <cmintey8@gmail.com>
Co-authored-by: Carter <35710697+cmintey@users.noreply.github.com>
2024-03-10 13:51:36 -05:00
github-actions[bot]
bea1a592d7 docs: Update image tag, for release v1.3.2 (#3279)
Co-authored-by: hay-kot <64056131+hay-kot@users.noreply.github.com>
2024-03-10 10:14:48 -08:00
Hayden
b54cdf6425 fix: sync locales in user registration validation (#3278)
* Add ability to inject into Python files

* Update outdated references to gen_global_components.py

* Add code gen for registration locale validation

* sort validators

* update for pydantic 2

* run generator again

---------

Co-authored-by: Gasper Gril <gasper@gril.si>
Co-authored-by: Michael Genson <71845777+michael-genson@users.noreply.github.com>
2024-03-10 09:58:52 -08:00
Hayden
02da2114f9 New Crowdin updates (#3277)
* New translations en-us.json (Spanish)

* New translations en-us.json (Swedish)

* New translations en-us.json (English, United Kingdom)

* New translations en-us.json (Polish)

* New translations en-us.json (Romanian)

* New translations en-us.json (French)

* New translations en-us.json (Afrikaans)

* New translations en-us.json (Arabic)

* New translations en-us.json (Bulgarian)

* New translations en-us.json (Catalan)

* New translations en-us.json (Czech)

* New translations en-us.json (Danish)

* New translations en-us.json (German)

* New translations en-us.json (Greek)

* New translations en-us.json (Finnish)

* New translations en-us.json (Hebrew)

* New translations en-us.json (Hungarian)

* New translations en-us.json (Italian)

* New translations en-us.json (Japanese)

* New translations en-us.json (Korean)

* New translations en-us.json (Lithuanian)

* New translations en-us.json (Dutch)

* New translations en-us.json (Norwegian)

* New translations en-us.json (Portuguese)

* New translations en-us.json (Russian)

* New translations en-us.json (Slovak)

* New translations en-us.json (Slovenian)

* New translations en-us.json (Serbian (Cyrillic))

* New translations en-us.json (Turkish)

* New translations en-us.json (Ukrainian)

* New translations en-us.json (Chinese Simplified)

* New translations en-us.json (Chinese Traditional)

* New translations en-us.json (Vietnamese)

* New translations en-us.json (Galician)

* New translations en-us.json (Icelandic)

* New translations en-us.json (Portuguese, Brazilian)

* New translations en-us.json (Croatian)

* New translations en-us.json (Latvian)

* New translations en-us.json (French, Canada)
2024-03-10 15:01:47 +01:00
boc-the-git
a67533a778 Merge pull request #3276 from mealie-recipes/renovate/apprise-1.x-lockfile
fix(deps): update dependency apprise to v1.7.4
2024-03-10 21:37:15 +11:00
renovate[bot]
59ad834c12 fix(deps): update dependency apprise to v1.7.4 2024-03-09 23:19:43 +00:00
Michael Genson
315d5b370e fix: bump ruff (#3275)
* bump ruff

* updated deprecated cli usage

* fixed deprecated pyproject layout

* fixed .format string

* fixed another deprecated setting
2024-03-09 18:40:08 +00:00
Michael Genson
130813ffe4 fix: Make Meal Planner Notes Not Clickable (#3274)
* selectively remove recipe card components when there is no recipe

* copied changes to regular card
2024-03-09 09:29:41 -09:00
renovate[bot]
65ddb7c9e2 chore(deps): update dependency pytest to v8.1.1 (#3244)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-09 11:55:16 -06:00
renovate[bot]
dbe29e15ae fix(deps): update dependency uvicorn to ^0.28.0 (#3273)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-09 16:36:18 +00:00
boc-the-git
980b3c634b Change "New" to "Add" (#3271) 2024-03-09 10:26:55 -06:00
renovate[bot]
457d8c93ce chore(deps): update dependency mypy to v1.9.0 (#3270)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-08 13:22:54 -06:00
Hayden
23aad6358c New Crowdin updates (#3269)
* New translations en-us.json (French)

* New translations en-us.json (Italian)

* New translations en-us.json (Slovenian)

* New translations en-us.json (Turkish)

* New translations en-us.json (Ukrainian)
2024-03-08 14:05:19 +01:00
boc-the-git
7c896361f2 Merge pull request #3268 from mealie-recipes/docs/newrelease-update-version-v1.3.1
docs(auto): Update image tag, for release v1.3.1
2024-03-08 19:26:51 +11:00
boc-the-git
5b7f5738e3 Add a comment to kick PR3268 along, and for future reference 2024-03-08 19:20:31 +11:00
boc-the-git
5bfcb80c98 Update image tag, for release v1.3.1 2024-03-08 02:50:52 +00:00
Michael Genson
b1278b45e2 fix: Invalid Pydantic Definition On Group Model (#3264)
* fixed ambiguous pydantic definition

* removed unused import
2024-03-07 14:25:26 -09:00
Hayden
e7ae76ea48 New Crowdin updates (#3262)
* New translations en-us.json (Spanish)

* New translations en-us.json (Swedish)

* New translations en-us.json (English, United Kingdom)

* New translations en-us.json (Polish)

* New translations en-us.json (Romanian)

* New translations en-us.json (French)

* New translations en-us.json (Afrikaans)

* New translations en-us.json (Arabic)

* New translations en-us.json (Bulgarian)

* New translations en-us.json (Catalan)

* New translations en-us.json (Czech)

* New translations en-us.json (Danish)

* New translations en-us.json (German)

* New translations en-us.json (Greek)

* New translations en-us.json (Finnish)

* New translations en-us.json (Hebrew)

* New translations en-us.json (Hungarian)

* New translations en-us.json (Italian)

* New translations en-us.json (Japanese)

* New translations en-us.json (Korean)

* New translations en-us.json (Lithuanian)

* New translations en-us.json (Dutch)

* New translations en-us.json (Norwegian)

* New translations en-us.json (Portuguese)

* New translations en-us.json (Russian)

* New translations en-us.json (Slovak)

* New translations en-us.json (Slovenian)

* New translations en-us.json (Serbian (Cyrillic))

* New translations en-us.json (Turkish)

* New translations en-us.json (Ukrainian)

* New translations en-us.json (Chinese Simplified)

* New translations en-us.json (Chinese Traditional)

* New translations en-us.json (Vietnamese)

* New translations en-us.json (Galician)

* New translations en-us.json (Icelandic)

* New translations en-us.json (Portuguese, Brazilian)

* New translations en-us.json (Croatian)

* New translations en-us.json (Latvian)

* New translations en-us.json (French, Canada)
2024-03-07 13:55:36 +01:00
194 changed files with 7567 additions and 3060 deletions

View File

@@ -0,0 +1,9 @@
---
title: OAuth setup with <PROVIDER>
body:
- type: textarea
attributes:
label: Configuration Example
description: Add your example configuration. You can provide code blocks, screenshots, and links.
validations:
required: true

View File

@@ -1,7 +1,7 @@
---
name: v1.0.0b Task
name: Task
description: "CONTRIBUTORS ONLY: Submit a Task that needs to be completed"
title: "[v1.0.0b] [Task] - TASK DESCRIPTION"
title: "[Task] - TASK DESCRIPTION"
labels:
- task
- v1
@@ -11,17 +11,17 @@ body:
value: |
Thanks for your interest in Mealie! 🚀
This is a place for Mealie contributors to find tasks that need to get done around the repository. Tasks are different than issues as they are generally related to providing a new feature or improve an existing feature. They are _generally_ not related to an issue.
This is a place for Mealie contributors to find tasks that need to get done around the repository. Tasks are different than issues as they are generally related to providing a new feature or improving an existing feature. They are _generally_ not related to an issue.
**DO NOT** create a task unless
- You are a contributors who has prior approval via discord/discussions
- You are a contributor who has prior approval via discord/discussions
- You have otherwise been given approval to post the tasks
Otherwise, your post will be closed/deleted.
**Interested in Taking This?**
If you're interested in completing this tasks and it hasn't already been taken, comment below and to let others know you're working on it. As you work through the task, I ask that you submit a draft pull request as soon as possible, and tag this issue so we can all collaborate as best as possible.
If you're interested in completing this task and it hasn't already been taken, comment below and to let others know you're working on it. As you work through the task, I ask that you submit a draft pull request as soon as possible, and tag this issue so we can all collaborate as best as possible.
- type: textarea
id: problem
attributes:
@@ -33,6 +33,6 @@ body:
id: solution
attributes:
label: Proposed/Possible Solution(s)?
placeholder: Provide as much context around the idea as possible with potential files and roadblocks that may come up
placeholder: Provide as much context around the idea as possible with potential files and roadblocks that may come up.
validations:
required: true

46
.github/workflows/e2e.yml vendored Normal file
View File

@@ -0,0 +1,46 @@
name: E2E Tests
on:
pull_request:
branches:
- mealie-next
jobs:
test:
timeout-minutes: 60
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./tests/e2e
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 18
cache: 'yarn'
cache-dependency-path: ./tests/e2e/yarn.lock
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build Image
uses: docker/build-push-action@v5
with:
file: ./docker/Dockerfile
context: .
push: false
load: true
tags: mealie:e2e
cache-from: type=gha
cache-to: type=gha,mode=max
- name: Deploy E2E Test Environment
run: docker compose up -d
working-directory: ./tests/e2e/docker
- name: Install dependencies
run: npm install -g yarn && yarn
- name: Install Playwright Browsers
run: yarn playwright install --with-deps
- name: Check test environment
run: docker ps
- name: Run Playwright tests
run: yarn playwright test
- name: Destroy Test Environment
if: always()
run: docker compose down --volumes
working-directory: ./tests/e2e/docker

View File

@@ -68,6 +68,9 @@ jobs:
- name: Create Pull Request
uses: peter-evans/create-pull-request@v6
# This doesn't currently work for us because it creates the PR but the workflows don't run.
# TODO: Provide a personal access token as a parameter here, that solves that problem.
# https://github.com/peter-evans/create-pull-request
with:
commit-message: "Update image tag, for release ${{ github.event.release.tag_name }}"
branch: "docs/newrelease-update-version-${{ github.event.release.tag_name }}"

10
.vscode/tasks.json vendored
View File

@@ -24,16 +24,6 @@
},
"problemMatcher": []
},
{
"label": "Init Database",
"command": "poetry run python mealie/db/init_db.py",
"type": "shell",
"presentation": {
"reveal": "always",
"group": "groupA"
},
"problemMatcher": []
},
{
"label": "Dev: Start Frontend",
"command": "task ui",

View File

@@ -110,7 +110,7 @@ tasks:
py:lint:
desc: runs python linter
cmds:
- poetry run ruff mealie
- poetry run ruff check mealie
py:check:
desc: runs all linters, type checkers, and formatters
@@ -132,7 +132,6 @@ tasks:
py:
desc: runs the backend server
cmds:
- poetry run python mealie/db/init_db.py
- poetry run python mealie/app.py
py:postgres:
@@ -145,7 +144,6 @@ tasks:
POSTGRES_PORT: 5432
POSTGRES_DB: mealie
cmds:
- poetry run python mealie/db/init_db.py
- poetry run python mealie/app.py
ui:build:

View File

@@ -13,6 +13,9 @@ from sqlalchemy import orm
import mealie.db.migration_types
from alembic import op
from mealie.core.root_logger import get_logger
logger = get_logger()
# revision identifiers, used by Alembic.
revision = "2298bb460ffd"
@@ -37,13 +40,20 @@ def find_user_id_for_group(group_id: UUID):
with session:
try:
# try to find an admin user
user_id = session.execute(sa.text(stmt).bindparams(group_id=group_id)).scalar_one()
return session.execute(sa.text(stmt).bindparams(group_id=group_id)).scalar_one()
except orm.exc.NoResultFound:
pass
try:
# fallback to any user
user_id = session.execute(
return session.execute(
sa.text("SELECT id FROM users WHERE group_id=:group_id LIMIT 1").bindparams(group_id=group_id)
).scalar_one()
return user_id
except orm.exc.NoResultFound:
pass
# no user could be found
return None
def populate_shopping_list_users():
@@ -54,11 +64,17 @@ def populate_shopping_list_users():
list_ids_and_group_ids = session.execute(sa.text("SELECT id, group_id FROM shopping_lists")).all()
for list_id, group_id in list_ids_and_group_ids:
user_id = find_user_id_for_group(group_id)
session.execute(
sa.text(f"UPDATE shopping_lists SET user_id=:user_id WHERE id=:id").bindparams(
user_id=user_id, id=list_id
if user_id:
session.execute(
sa.text(f"UPDATE shopping_lists SET user_id=:user_id WHERE id=:id").bindparams(
user_id=user_id, id=list_id
)
)
)
else:
logger.warning(
f"No user found for shopping list {list_id} with group {group_id}; deleting shopping list"
)
session.execute(sa.text(f"DELETE FROM shopping_lists WHERE id=:id").bindparams(id=list_id))
def upgrade():

View File

@@ -0,0 +1,31 @@
"""add OIDC auth method
Revision ID: 09aba125b57a
Revises: 2298bb460ffd
Create Date: 2024-03-10 05:08:32.397027
"""
import sqlalchemy as sa
import mealie.db.migration_types
from alembic import op
# revision identifiers, used by Alembic.
revision = "09aba125b57a"
down_revision = "2298bb460ffd"
branch_labels = None
depends_on = None
def is_postgres():
return op.get_context().dialect.name == "postgresql"
def upgrade():
if is_postgres():
op.execute("ALTER TYPE authmethod ADD VALUE 'OIDC'")
def downgrade():
pass

View File

@@ -3,8 +3,8 @@ from pathlib import Path
from fastapi import FastAPI
from jinja2 import Template
from pydantic import BaseModel
from utils import PROJECT_DIR, CodeTemplates, HTTPRequest, RouteObject
from pydantic import BaseModel, ConfigDict
from utils import PROJECT_DIR, CodeTemplates, HTTPRequest, RouteObject, RequestType
CWD = Path(__file__).parent
@@ -12,23 +12,25 @@ OUTFILE = PROJECT_DIR / "tests" / "utils" / "api_routes" / "__init__.py"
class PathObject(BaseModel):
model_config = ConfigDict(arbitrary_types_allowed=True)
route_object: RouteObject
http_verbs: list[HTTPRequest]
class Config:
arbitrary_types_allowed = True
def get_path_objects(app: FastAPI):
paths = []
for key, value in app.openapi().items():
if key == "paths":
for key, value in value.items():
for key, value2 in value.items():
verbs = []
for k, v in value2.items():
verbs.append(HTTPRequest(request_type=k, **v))
paths.append(
PathObject(
route_object=RouteObject(key),
http_verbs=[HTTPRequest(request_type=k, **v) for k, v in value.items()],
http_verbs=verbs,
)
)

View File

@@ -5,7 +5,7 @@ from pathlib import Path
import dotenv
import requests
from jinja2 import Template
from pydantic import Extra
from pydantic import ConfigDict
from requests import Response
from utils import CodeDest, CodeKeys, inject_inline, log
@@ -56,7 +56,7 @@ LOCALE_DATA: dict[str, LocaleData] = {
"zh-TW": LocaleData(name="繁體中文 (Chinese traditional)"),
}
LOCALE_TEMPLATE = """// This Code is auto generated by gen_global_components.py
LOCALE_TEMPLATE = """// This Code is auto generated by gen_ts_locales.py
export const LOCALES = [{% for locale in locales %}
{
name: "{{ locale.name }}",
@@ -70,6 +70,8 @@ export const LOCALES = [{% for locale in locales %}
class TargetLanguage(MealieModel):
model_config = ConfigDict(populate_by_name=True, extra="allow")
id: str
name: str
locale: str
@@ -78,10 +80,6 @@ class TargetLanguage(MealieModel):
twoLettersCode: str
progress: float = 0.0
class Config:
extra = Extra.allow
allow_population_by_field_name = True
class CrowdinApi:
project_name = "Mealie"
@@ -152,6 +150,7 @@ PROJECT_DIR = Path(__file__).parent.parent.parent
datetime_dir = PROJECT_DIR / "frontend" / "lang" / "dateTimeFormats"
locales_dir = PROJECT_DIR / "frontend" / "lang" / "messages"
nuxt_config = PROJECT_DIR / "frontend" / "nuxt.config.js"
reg_valid = PROJECT_DIR / "mealie" / "schema" / "_mealie" / "validators.py"
"""
This snippet walks the message and dat locales directories and generates the import information
@@ -175,6 +174,19 @@ def inject_nuxt_values():
inject_inline(nuxt_config, CodeKeys.nuxt_local_dates, all_date_locales)
def inject_registration_validation_values():
all_langs = []
for match in locales_dir.glob("*.json"):
lang_string = f'"{match.stem}",'
all_langs.append(lang_string)
# sort
all_langs.sort()
log.debug(f"injecting locales into user registration validation -> {reg_valid}")
inject_inline(reg_valid, CodeKeys.nuxt_local_messages, all_langs)
def generate_locales_ts_file():
api = CrowdinApi("")
models = api.get_languages()
@@ -193,6 +205,7 @@ def main():
generate_locales_ts_file()
inject_nuxt_values()
inject_registration_validation_values()
if __name__ == "__main__":

View File

@@ -6,7 +6,7 @@ from utils import log
# ============================================================
template = """// This Code is auto generated by gen_global_components.py
template = """// This Code is auto generated by gen_ts_types.py
{% for name in global %}import {{ name }} from "@/components/global/{{ name }}.vue";
{% endfor %}{% for name in layout %}import {{ name }} from "@/components/layout/{{ name }}.vue";
{% endfor %}

View File

@@ -1,9 +1,8 @@
import re
from enum import Enum
from typing import Optional
from humps import camelize
from pydantic import BaseModel, Extra, Field
from pydantic import BaseModel, ConfigDict, Field
from slugify import slugify
@@ -34,33 +33,30 @@ class ParameterIn(str, Enum):
class RouterParameter(BaseModel):
model_config = ConfigDict(extra="allow")
required: bool = False
name: str
location: ParameterIn = Field(..., alias="in")
class Config:
extra = Extra.allow
class RequestBody(BaseModel):
required: bool = False
model_config = ConfigDict(extra="allow")
class Config:
extra = Extra.allow
required: bool = False
class HTTPRequest(BaseModel):
model_config = ConfigDict(extra="allow", populate_by_name=True)
request_type: RequestType
description: str = ""
summary: str
requestBody: Optional[RequestBody]
request_body: RequestBody | None = None
parameters: list[RouterParameter] = []
tags: list[str] | None = []
class Config:
extra = Extra.allow
def list_as_js_object_string(self, parameters, braces=True):
if len(parameters) == 0:
return ""
@@ -71,11 +67,11 @@ class HTTPRequest(BaseModel):
return ", ".join(parameters)
def payload(self):
return "payload" if self.requestBody else ""
return "payload" if self.request_body else ""
def function_args(self):
all_params = [p.name for p in self.parameters]
if self.requestBody:
if self.request_body:
all_params.append("payload")
return self.list_as_js_object_string(all_params)

View File

@@ -50,7 +50,7 @@ class CodeSlicer:
self._next_line += 1
def get_indentation_of_string(line: str, comment_char: str = "//") -> str:
def get_indentation_of_string(line: str, comment_char: str = "//|#") -> str:
return re.sub(rf"{comment_char}.*", "", line).removesuffix("\n")

View File

@@ -33,9 +33,6 @@ init() {
# Activate our virtual environment here
. /opt/pysetup/.venv/bin/activate
# Initialize Database Prerun
poetry run python /app/mealie/db/init_db.py
}
change_user

View File

@@ -6,7 +6,7 @@ This is the start of the maintainers guide for Mealie developers. Those who have
If you are working on issues, it can be helpful to understand the workflow for our repository. When an issue comes in it is tagged with the `bug` and `triage` flags. This is to indicate that they need to be reviewed by a maintainer to determine validity.
After you've reviered an issue it will generally move into one of two states:
After you've reviewed an issue it will generally move into one of two states:
`bug:confirmed`
: Your were able to verify the issue and we determined we need to fix it

View File

@@ -0,0 +1,63 @@
# OpenID Connect (OIDC) Authentication
:octicons-tag-24: v1.4.0
Mealie supports 3rd party authentication via [OpenID Connect (OIDC)](https://openid.net/connect/), an identity layer built on top of OAuth2. OIDC is supported by many Identity Providers (IdP), including:
- [Authentik](https://goauthentik.io/integrations/sources/oauth/#openid-connect)
- [Authelia](https://www.authelia.com/configuration/identity-providers/open-id-connect/)
- [Keycloak](https://www.keycloak.org/docs/latest/securing_apps/#_oidc)
- [Okta](https://www.okta.com/openid-connect/)
## Account Linking
Signing in with OAuth will automatically find your account in Mealie and link to it. If a user does not exist in Mealie, then one will be created (if enabled), but will be unable to log in with any other authentication method. An admin can configure another authentication method for such a user.
## Provider Setup
Before you can start using OIDC Authentication, you must first configure a new client application in your identity provider. Your identity provider must support the OAuth **Authorization Code flow with PKCE**. The steps will vary by provider, but generally, the steps are as follows.
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 Client type should be `public`
2. Configure redirect URI
The redirect URI(s) that are needed:
1. `http(s)://DOMAIN:PORT/login`
2. `https(s)://DOMAIN:PORT/login?direct=1`
1. This URI is only required if your IdP supports [RP-Initiated Logout](https://openid.net/specs/openid-connect-rpinitiated-1_0.html) such as Keycloak. You may also be able to combine this into the previous URI by using a wildcard: `http(s)://DOMAIN:PORT/login*`
The redirect URI(s) should include any URL that Mealie is accessible from. Some examples include
http://localhost:9091/login
https://mealie.example.com/login
3. Configure origins
If your identity provider enforces CORS on any endpoints, you will need to specify your Mealie URL as an Allowed Origin.
4. Configure allowed scopes
The scopes required are `openid profile email groups`
## Mealie Setup
Take the client id and your discovery URL and update your environment variables to include the required OIDC variables described in [Installation - Backend Configuration](../installation/backend-config.md#openid-connect-oidc).
### 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.
`OIDC_USER_GROUP`: Users must be a part of this group (within your IdP) to be able to log in.
`OIDC_ADMIN_GROUP`: Users that are in this group (within your IdP) will be made an **admin** in Mealie.
## Examples
Example configurations for several Identity Providers have been provided by the Community in the [GitHub Discussions](https://github.com/mealie-recipes/mealie/discussions/categories/oauth-provider-example).
If you don't see your provider and have successfully set it up, please consider [creating your own example](https://github.com/mealie-recipes/mealie/discussions/new?category=oauth-provider-example) so that others can have a smoother setup.

View File

@@ -94,6 +94,10 @@ docker exec -it mealie-next bash
python /app/mealie/scripts/change_password.py
```
## I can't log in with external auth. How can I change my authentication method?
Follow the [steps above](#how-can-i-change-my-password) for changing your password. You will be prompted if you would like to switch your authentication method back to local auth so you can log in again.
## How do private groups and recipes work?
Managing private groups and recipes can be confusing. The following diagram and notes should help explain how they work to determine if a recipe can be shared publicly.

View File

@@ -4,17 +4,19 @@
### General
| Variables | Default | Description |
| ------------- | :-------------------: | ----------------------------------------------------------------------------------- |
| PUID | 911 | UserID permissions between host OS and container |
| PGID | 911 | GroupID permissions between host OS and container |
| DEFAULT_GROUP | Home | The default group for users |
| BASE_URL | http://localhost:8080 | Used for Notifications |
| TOKEN_TIME | 48 | The time in hours that a login/auth token is valid |
| API_PORT | 9000 | The port exposed by backend API. **Do not change this if you're running in Docker** |
| API_DOCS | True | Turns on/off access to the API documentation locally. |
| TZ | UTC | Must be set to get correct date/time on the server |
| ALLOW_SIGNUP | true | Allow user sign-up without token |
| Variables | Default | Description |
| ----------------------------- | :-------------------: | ----------------------------------------------------------------------------------- |
| PUID | 911 | UserID permissions between host OS and container |
| PGID | 911 | GroupID permissions between host OS and container |
| DEFAULT_GROUP | Home | The default group for users |
| BASE_URL | http://localhost:8080 | Used for Notifications |
| TOKEN_TIME | 48 | The time in hours that a login/auth token is valid |
| API_PORT | 9000 | The port exposed by backend API. **Do not change this if you're running in Docker** |
| API_DOCS | True | Turns on/off access to the API documentation locally. |
| TZ | UTC | Must be set to get correct date/time on the server |
| ALLOW_SIGNUP<super>\*</super> | false | Allow user sign-up without token |
<super>\*</super> Starting in v1.4.0 this was changed to default to `false` as apart of a security review of the application.
### Security
@@ -75,6 +77,25 @@ Changing the webworker settings may cause unforeseen memory leak issues with Mea
| LDAP_NAME_ATTRIBUTE | name | The LDAP attribute that maps to the user's name |
| LDAP_MAIL_ATTRIBUTE | mail | The LDAP attribute that maps to the user's email |
### OpenID Connect (OIDC)
:octicons-tag-24: v1.4.0
For usage, see [Usage - OpenID Connect](../authentication/oidc.md)
| Variables | Default | Description |
| ---------------------- | :-----: | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| OIDC_AUTH_ENABLED | False | Enables authentication via OpenID Connect |
| OIDC_SIGNUP_ENABLED | True | Enables new users to be created when signing in for the first time with OIDC |
| OIDC_CONFIGURATION_URL | None | The URL to the OIDC configuration of your provider. This is usually something like https://auth.example.com/.well-known/openid-configuration |
| OIDC_CLIENT_ID | None | The client id of your configured client in your provider |
| OIDC_USER_GROUP | None | If specified, only users belonging to this group will be able to successfully authenticate, regardless of the `OIDC_ADMIN_GROUP`. For more information see [this page](../authentication/oidc.md#groups) |
| OIDC_ADMIN_GROUP | None | If specified, users belonging to this group will be made an admin. For more information see [this page](../authentication/oidc.md#groups) |
| OIDC_AUTO_REDIRECT | False | If `True`, then the login page will be bypassed an you will be sent directly to your Identity Provider. You can still get to the login page by adding `?direct=1` to the login URL |
| OIDC_PROVIDER_NAME | OAuth | The provider name is shown in SSO login button. "Login with <OIDC_PROVIDER_NAME\>" |
| OIDC_REMEMBER_ME | False | Because redirects bypass the login screen, you cant extend your session by clicking the "Remember Me" checkbox. By setting this value to true, a session will be extended as if "Remember Me" was checked |
| OIDC_SIGNING_ALGORITHM | RS256 | The algorithm used to sign the id token (examples: RS256, HS256) |
### Themeing
Setting the following environmental variables will change the theme of the frontend. Note that the themes are the same for all users. This is a break-change when migration from v0.x.x -> 1.x.x.
@@ -96,7 +117,6 @@ 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 |
[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

@@ -9,7 +9,7 @@ PostgreSQL might be considered if you need to support many concurrent users. In
version: "3.7"
services:
mealie:
image: ghcr.io/mealie-recipes/mealie:v1.1.0 # (3)
image: ghcr.io/mealie-recipes/mealie:v1.3.2 # (3)
container_name: mealie
ports:
- "9925:9000" # (1)

View File

@@ -0,0 +1,43 @@
---
tags:
- Security
---
# Security Considerations
This page is a collection of security considerations for Mealie. It mostly deals with reported issues and how it's possible to mitigate them. Note that this page is for you to use as a guide for how secure you want to make your deployment. It's important to note that most of these will not apply to you, if you:
1. Run behind a VPN
2. Use a strong password
3. Disable Sign-Ups
4. Don't host for malicious users
Use your best judgement when deciding what to do.
## Denial of Service
By default, the API is **not** rate limited. This leaves Mealie open to a potential **Denial of Service Attack**. While it's possible to perform a **Denial of Service Attack** on any endpoint, there are a few key endpoints that are more vulnerable than others.
- `/api/recipes/create-url`
- `/api/recipes/{id}/image`
These endpoints are used to scrape data based off a user provided URL. It is possible for a malicious user to issue multiple requests to download an arbitrarily large external file (e.g a Debian ISO) and sufficiently saturate a CPU assigned to the container. While we do implement some protections against this by chunking the response, and using a timeout strategy, it's still possible to overload the CPU if an attacker issues multiple requests concurrently.
### Mitigation
If you'd like to mitigate this risk, we suggest that you rate limit the API in general, and apply strict rate limits to these endpoints. You can do this by utilizing a reverse proxy. See the following links to get started:
- [Traefik](https://doc.traefik.io/traefik/middlewares/http/ratelimit/)
- [Nginx](https://nginx.org/en/docs/http/ngx_http_limit_req_module.html)
- [Caddy](https://caddyserver.com/docs/modules/http.handlers.rate_limit)
## Server Side Request Forgery
- `/api/recipes/create-url`
- `/api/recipes/{id}/image`
Given the nature of these APIs it's possible to perform a **Server Side Request Forgery** attack. This is where a malicious user can issue a request to an internal network resource, and potentially exfiltrate data. We _do_ perform some checks to mitigate access to resources within your network but at the end of the day, users of Mealie are allowed to trigger HTTP requests on **your server**.
### Mitigation
If you'd like to mitigate this risk, we suggest that you isolate the container that Mealie is running in to ensure that it's access to internal resources is limited only to what is required. _Note that Mealie does require access to the internet for recipe imports._ You might consider isolating Mealie from your home network entirely and only allowing access to the external internet.

View File

@@ -13,7 +13,7 @@ SQLite is a popular, open source, self-contained, zero-configuration database th
version: "3.7"
services:
mealie:
image: ghcr.io/mealie-recipes/mealie:v1.1.0 # (3)
image: ghcr.io/mealie-recipes/mealie:v1.3.2 # (3)
container_name: mealie
ports:
- "9925:9000" # (1)

View File

@@ -1,7 +1,7 @@
# Permissions and Public Access
Mealie provides various levels of user access and permissions. This includes:
- Authentication and registration ([check out the LDAP guide](./ldap.md) for how to configure access using LDAP)
- Authentication and registration ([LDAP](../authentication/ldap.md) and [OpenID Connect](../authentication/oidc.md) are both supported)
- Customizable user permissions
- Fine-tuned public access for non-users

File diff suppressed because one or more lines are too long

View File

@@ -41,7 +41,8 @@ markdown_extensions:
custom_checkbox: true
- admonition
- attr_list
- pymdownx.tabbed
- pymdownx.tabbed:
alternate_style: true
- pymdownx.superfences:
custom_fences:
- name: mermaid
@@ -71,9 +72,14 @@ nav:
- SQLite (Recommended): "documentation/getting-started/installation/sqlite.md"
- PostgreSQL: "documentation/getting-started/installation/postgres.md"
- Backend Configuration: "documentation/getting-started/installation/backend-config.md"
- Security: "documentation/getting-started/installation/security.md"
- Usage:
- Backup and Restoring: "documentation/getting-started/usage/backups-and-restoring.md"
- LDAP Authentication: "documentation/getting-started/usage/ldap.md"
- Permissions and Public Access: "documentation/getting-started/usage/permissions-and-public-access.md"
- Authentication:
- LDAP: "documentation/getting-started/authentication/ldap.md"
- OpenID Connect: "documentation/getting-started/authentication/oidc.md"
- Community Guides:
- iOS Shortcuts: "documentation/community-guide/ios.md"

View File

@@ -1,8 +1,33 @@
<template>
<div>
<!-- Edit Dialog -->
<BaseDialog
v-if="editTarget"
v-model="dialogStates.edit"
:width="650"
:icon="$globals.icons.pages"
:title="$t('general.edit')"
:submit-icon="$globals.icons.save"
:submit-text="$tc('general.save')"
@submit="editCookbook"
>
<v-card-text>
<CookbookEditor :cookbook="editTarget" :actions="actions" />
</v-card-text>
</BaseDialog>
<!-- Page -->
<v-container v-if="book" fluid>
<v-app-bar color="transparent" flat class="mt-n1 rounded">
<v-app-bar color="transparent" flat class="mt-n1">
<v-icon large left> {{ $globals.icons.pages }} </v-icon>
<v-toolbar-title class="headline"> {{ book.name }} </v-toolbar-title>
<v-spacer></v-spacer>
<BaseButton
v-if="isOwnGroup"
class="mx-1"
:edit="true"
@click="handleEditCookbook"
/>
</v-app-bar>
<v-card flat>
<v-card-text class="py-0">
@@ -22,17 +47,20 @@
/>
</v-container>
</v-container>
</template>
</div>
</template>
<script lang="ts">
import { computed, defineComponent, useRoute, ref, useContext, useMeta } from "@nuxtjs/composition-api";
import { computed, defineComponent, useRoute, ref, useContext, useMeta, reactive, useRouter } from "@nuxtjs/composition-api";
import { useLazyRecipes } from "~/composables/recipes";
import RecipeCardSection from "@/components/Domain/Recipe/RecipeCardSection.vue";
import { useCookbook } from "~/composables/use-group-cookbooks";
import { useCookbook, useCookbooks } from "~/composables/use-group-cookbooks";
import { useLoggedInState } from "~/composables/use-logged-in-state";
import { RecipeCookBook } from "~/lib/api/types/cookbook";
import CookbookEditor from "~/components/Domain/Cookbook/CookbookEditor.vue";
export default defineComponent({
components: { RecipeCardSection },
components: { RecipeCardSection, CookbookEditor },
setup() {
const { $auth } = useContext();
const { isOwnGroup } = useLoggedInState();
@@ -43,10 +71,36 @@
const { recipes, appendRecipes, assignSorted, removeRecipe, replaceRecipes } = useLazyRecipes(isOwnGroup.value ? null : groupSlug.value);
const slug = route.value.params.slug;
const { getOne } = useCookbook(isOwnGroup.value ? null : groupSlug.value);
const { actions } = useCookbooks();
const router = useRouter();
const tab = ref(null);
const book = getOne(slug);
const dialogStates = reactive({
edit: false,
});
const editTarget = ref<RecipeCookBook | null>(null);
function handleEditCookbook() {
dialogStates.edit = true;
editTarget.value = book.value;
}
async function editCookbook() {
if (!editTarget.value) {
return;
}
const response = await actions.updateOne(editTarget.value);
// if name changed, redirect to new slug
if (response?.slug && book.value?.slug !== response?.slug) {
router.push(`/g/${route.value.params.groupSlug}/cookbooks/${response?.slug}`);
}
dialogStates.edit = false;
editTarget.value = null;
}
useMeta(() => {
return {
title: book?.value?.name || "Cookbook",
@@ -62,6 +116,12 @@
recipes,
removeRecipe,
replaceRecipes,
isOwnGroup,
dialogStates,
editTarget,
handleEditCookbook,
editCookbook,
actions,
};
},
head: {}, // Must include for useMeta

View File

@@ -3,8 +3,9 @@
<v-hover v-slot="{ hover }" :open-delay="50">
<v-card
:class="{ 'on-hover': hover }"
:style="{ cursor }"
:elevation="hover ? 12 : 2"
:to="route ? recipeRoute : ''"
:to="recipeRoute"
:min-height="imageHeight + 75"
@click="$emit('click')"
>
@@ -33,7 +34,7 @@
</v-card-title>
<slot name="actions">
<v-card-actions class="px-1">
<v-card-actions v-if="showRecipeContent" class="px-1">
<RecipeFavoriteBadge v-if="isOwnGroup" class="absolute" :slug="slug" show-always />
<RecipeRating class="pb-1" :value="rating" :name="name" :slug="slug" :small="true" />
@@ -101,10 +102,6 @@ export default defineComponent({
required: false,
default: "abc123",
},
route: {
type: Boolean,
default: true,
},
tags: {
type: Array,
default: () => [],
@@ -123,14 +120,18 @@ export default defineComponent({
const { isOwnGroup } = useLoggedInState();
const route = useRoute();
const groupSlug = computed(() => route.value.params.groupSlug || $auth.user?.groupSlug || "")
const groupSlug = computed(() => route.value.params.groupSlug || $auth.user?.groupSlug || "");
const showRecipeContent = computed(() => props.recipeId && props.slug);
const recipeRoute = computed<string>(() => {
return `/g/${groupSlug.value}/r/${props.slug}`;
return showRecipeContent.value ? `/g/${groupSlug.value}/r/${props.slug}` : "";
});
const cursor = computed(() => showRecipeContent.value ? "pointer" : "auto");
return {
isOwnGroup,
recipeRoute,
showRecipeContent,
cursor,
};
},
});

View File

@@ -3,6 +3,7 @@
<v-card
:ripple="false"
:class="isFlat ? 'mx-auto flat' : 'mx-auto'"
:style="{ cursor }"
hover
:to="$listeners.selected ? undefined : recipeRoute"
@click="$emit('selected')"
@@ -37,8 +38,9 @@
</v-list-item-subtitle>
<div class="d-flex flex-wrap justify-end align-center">
<slot name="actions">
<RecipeFavoriteBadge v-if="isOwnGroup" :slug="slug" show-always />
<RecipeFavoriteBadge v-if="isOwnGroup && showRecipeContent" :slug="slug" show-always />
<v-rating
v-if="showRecipeContent"
color="secondary"
:class="isOwnGroup ? 'ml-auto' : 'ml-auto pb-2'"
background-color="secondary lighten-3"
@@ -52,7 +54,7 @@
<!-- If we're not logged-in, no items display, so we hide this menu -->
<!-- We also add padding to the v-rating above to compensate -->
<RecipeContextMenu
v-if="isOwnGroup"
v-if="isOwnGroup && showRecipeContent"
:slug="slug"
:menu-icon="$globals.icons.dotsHorizontal"
:name="name"
@@ -113,10 +115,6 @@ export default defineComponent({
required: false,
default: "abc123",
},
route: {
type: Boolean,
default: true,
},
recipeId: {
type: String,
required: true,
@@ -135,14 +133,19 @@ export default defineComponent({
const { isOwnGroup } = useLoggedInState();
const route = useRoute();
const groupSlug = computed(() => route.value.params.groupSlug || $auth.user?.groupSlug || "")
const groupSlug = computed(() => route.value.params.groupSlug || $auth.user?.groupSlug || "");
const showRecipeContent = computed(() => props.recipeId && props.slug);
const recipeRoute = computed<string>(() => {
return `/g/${groupSlug.value}/r/${props.slug}`;
return showRecipeContent.value ? `/g/${groupSlug.value}/r/${props.slug}` : "";
});
const cursor = computed(() => showRecipeContent.value ? "pointer" : "auto");
return {
isOwnGroup,
recipeRoute,
showRecipeContent,
cursor,
};
},
});

View File

@@ -9,7 +9,7 @@
color="accent"
:small="small"
dark
:to="isOwnGroup ? `${baseRecipeRoute}?${urlPrefix}=${category.id}` : undefined"
:to="`${baseRecipeRoute}?${urlPrefix}=${category.id}`"
>
{{ truncateText(category.name) }}
</v-chip>
@@ -18,7 +18,6 @@
<script lang="ts">
import { computed, defineComponent, useContext, useRoute } from "@nuxtjs/composition-api";
import { useLoggedInState } from "~/composables/use-logged-in-state";
import { RecipeCategory, RecipeTag, RecipeTool } from "~/lib/api/types/user";
export type UrlPrefixParam = "tags" | "categories" | "tools";
@@ -56,7 +55,6 @@ export default defineComponent({
},
setup(props) {
const { $auth } = useContext();
const { isOwnGroup } = useLoggedInState();
const route = useRoute();
const groupSlug = computed(() => route.value.params.groupSlug || $auth.user?.groupSlug || "")
@@ -74,7 +72,6 @@ export default defineComponent({
return {
baseRecipeRoute,
isOwnGroup,
truncateText,
};
},

View File

@@ -59,7 +59,13 @@
v-on="on"
></v-text-field>
</template>
<v-date-picker v-model="newMealdate" no-title @input="pickerMenu = false"></v-date-picker>
<v-date-picker
v-model="newMealdate"
no-title
:first-day-of-week="firstDayOfWeek"
:local="$i18n.locale"
@input="pickerMenu = false"
/>
</v-menu>
<v-select
v-model="newMealType"
@@ -111,6 +117,7 @@ import RecipeDialogPrintPreferences from "./RecipeDialogPrintPreferences.vue";
import RecipeDialogShare from "./RecipeDialogShare.vue";
import { useLoggedInState } from "~/composables/use-logged-in-state";
import { useUserApi } from "~/composables/api";
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";
@@ -224,11 +231,16 @@ export default defineComponent({
});
const { i18n, $auth, $globals } = useContext();
const { group } = useGroupSelf();
const { isOwnGroup } = useLoggedInState();
const route = useRoute();
const groupSlug = computed(() => route.value.params.groupSlug || $auth.user?.groupSlug || "");
const firstDayOfWeek = computed(() => {
return group.value?.preferences?.firstDayOfWeek || 0;
});
// ===========================================================================
// Context Menu Setup
@@ -432,6 +444,7 @@ export default defineComponent({
addRecipeToPlan,
icon,
planTypeOptions,
firstDayOfWeek,
};
},
});

View File

@@ -45,7 +45,6 @@
:rating="recipe.rating"
:image="recipe.image"
:recipe-id="recipe.id"
:route="true"
v-on="$listeners.selected ? { selected: () => handleSelect(recipe) } : {}"
/>
</v-card>

View File

@@ -22,7 +22,13 @@
v-on="on"
></v-text-field>
</template>
<v-date-picker v-model="expirationDate" no-title @input="datePickerMenu = false"></v-date-picker>
<v-date-picker
v-model="expirationDate"
no-title
:first-day-of-week="firstDayOfWeek"
:local="$i18n.locale"
@input="datePickerMenu = false"
/>
</v-menu>
</v-card-text>
<v-card-actions class="justify-end">
@@ -60,6 +66,7 @@ import { defineComponent, computed, toRefs, reactive, useContext, useRoute } fro
import { useClipboard, useShare, whenever } from "@vueuse/core";
import { RecipeShareToken } from "~/lib/api/types/recipe";
import { useUserApi } from "~/composables/api";
import { useGroupSelf } from "~/composables/use-groups";
import { alert } from "~/composables/use-toast";
export default defineComponent({
@@ -106,9 +113,14 @@ export default defineComponent({
);
const { $auth, i18n } = useContext();
const { group } = useGroupSelf();
const route = useRoute();
const groupSlug = computed(() => route.value.params.groupSlug || $auth.user?.groupSlug || "");
const firstDayOfWeek = computed(() => {
return group.value?.preferences?.firstDayOfWeek || 0;
});
// ============================================================
// Token Actions
@@ -185,6 +197,7 @@ export default defineComponent({
dialog,
createNewToken,
deleteToken,
firstDayOfWeek,
shareRecipe,
copyTokenLink,
};

View File

@@ -67,12 +67,16 @@
<v-list>
<v-list-item @click="toggleOrderDirection()">
<v-icon left>
{{ $globals.icons.sort }}
{{
state.orderDirection === "asc" ?
$globals.icons.sortDescending : $globals.icons.sortAscending
}}
</v-icon>
<v-list-item-title>
{{ state.orderDirection === "asc" ? "Sort Descending" : "Sort Ascending" }}
{{ state.orderDirection === "asc" ? $tc("general.sort-descending") : $tc("general.sort-ascending") }}
</v-list-item-title>
</v-list-item>
<v-divider />
<v-list-item
v-for="v in sortable"
:key="v.name"
@@ -120,11 +124,12 @@
<v-divider></v-divider>
<v-container class="mt-6 px-md-6">
<RecipeCardSection
v-if="state.ready"
class="mt-n5"
:icon="$globals.icons.search"
:title="$tc('search.results')"
:recipes="recipes"
:query="passedQuery"
:query="passedQueryWithSeed"
@replaceRecipes="replaceRecipes"
@appendRecipes="appendRecipes"
/>
@@ -133,11 +138,12 @@
</template>
<script lang="ts">
import { ref, defineComponent, useRouter, onMounted, useContext, computed, Ref, useRoute } from "@nuxtjs/composition-api";
import { ref, defineComponent, useRouter, onMounted, useContext, computed, Ref, useRoute, watch } from "@nuxtjs/composition-api";
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 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";
@@ -157,6 +163,7 @@ export default defineComponent({
const { isOwnGroup } = useLoggedInState();
const state = ref({
auto: true,
ready: false,
search: "",
orderBy: "created_at",
orderDirection: "desc" as "asc" | "desc",
@@ -170,6 +177,7 @@ export default defineComponent({
const route = useRoute();
const groupSlug = computed(() => route.value.params.groupSlug || $auth.user?.groupSlug || "");
const preferences = useUserSortPreferences();
const { recipes, appendRecipes, assignSorted, removeRecipe, replaceRecipes } = useLazyRecipes(isOwnGroup.value ? null : groupSlug.value);
const categories = isOwnGroup.value ? useCategoryStore() : usePublicCategoryStore(groupSlug.value);
@@ -184,7 +192,30 @@ export default defineComponent({
const tools = isOwnGroup.value ? useToolStore() : usePublicToolStore(groupSlug.value);
const selectedTools = ref<NoUndefinedField<RecipeTool>[]>([]);
const passedQuery = ref<RecipeSearchQuery | null>(null);
function calcPassedQuery(): RecipeSearchQuery {
return {
search: state.value.search,
categories: toIDArray(selectedCategories.value),
foods: toIDArray(selectedFoods.value),
tags: toIDArray(selectedTags.value),
tools: toIDArray(selectedTools.value),
requireAllCategories: state.value.requireAllCategories,
requireAllTags: state.value.requireAllTags,
requireAllTools: state.value.requireAllTools,
requireAllFoods: state.value.requireAllFoods,
orderBy: state.value.orderBy,
orderDirection: state.value.orderDirection,
};
}
const passedQuery = ref<RecipeSearchQuery>(calcPassedQuery());
// we calculate this separately because otherwise we can't check for query changes
const passedQueryWithSeed = computed(() => {
return {
...passedQuery.value,
_searchSeed: Date.now().toString()
};
})
function reset() {
state.value.search = "";
@@ -199,10 +230,6 @@ export default defineComponent({
selectedTags.value = [];
selectedTools.value = [];
router.push({
query: {},
});
search();
}
@@ -211,7 +238,8 @@ export default defineComponent({
}
function toIDArray(array: { id: string }[]) {
return array.map((item) => item.id);
// we sort the array to make sure the query is always the same
return array.map((item) => item.id).sort();
}
function hideKeyboard() {
@@ -221,40 +249,33 @@ export default defineComponent({
const input: Ref<any> = ref(null);
async function search() {
await router.push({
query: {
categories: toIDArray(selectedCategories.value),
foods: toIDArray(selectedFoods.value),
tags: toIDArray(selectedTags.value),
tools: toIDArray(selectedTools.value),
// Only add the query param if it's or not default
...{
auto: state.value.auto ? undefined : "false",
search: state.value.search === "" ? undefined : state.value.search,
orderBy: state.value.orderBy === "createdAt" ? undefined : state.value.orderBy,
orderDirection: state.value.orderDirection === "desc" ? undefined : state.value.orderDirection,
requireAllCategories: state.value.requireAllCategories ? "true" : undefined,
requireAllTags: state.value.requireAllTags ? "true" : undefined,
requireAllTools: state.value.requireAllTools ? "true" : undefined,
requireAllFoods: state.value.requireAllFoods ? "true" : undefined,
},
},
});
const oldQueryValueString = JSON.stringify(passedQuery.value);
const newQueryValue = calcPassedQuery();
const newQueryValueString = JSON.stringify(newQueryValue);
if (oldQueryValueString === newQueryValueString) {
return;
}
passedQuery.value = {
search: state.value.search,
categories: toIDArray(selectedCategories.value),
foods: toIDArray(selectedFoods.value),
tags: toIDArray(selectedTags.value),
tools: toIDArray(selectedTools.value),
requireAllCategories: state.value.requireAllCategories,
requireAllTags: state.value.requireAllTags,
requireAllTools: state.value.requireAllTools,
requireAllFoods: state.value.requireAllFoods,
orderBy: state.value.orderBy,
orderDirection: state.value.orderDirection,
_searchSeed: Date.now().toString()
};
passedQuery.value = newQueryValue;
const query = {
categories: passedQuery.value.categories,
foods: passedQuery.value.foods,
tags: passedQuery.value.tags,
tools: passedQuery.value.tools,
// Only add the query param if it's or not default
...{
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,
requireAllCategories: passedQuery.value.requireAllCategories ? "true" : undefined,
requireAllTags: passedQuery.value.requireAllTags ? "true" : undefined,
requireAllTools: passedQuery.value.requireAllTools ? "true" : undefined,
requireAllFoods: passedQuery.value.requireAllFoods ? "true" : undefined,
},
}
await router.push({ query });
preferences.value.searchQuery = JSON.stringify(query);
}
function waitUntilAndExecute(
@@ -325,13 +346,20 @@ export default defineComponent({
},
];
onMounted(() => {
// Hydrate Search
// wait for stores to be hydrated
watch(
() => route.value.query,
() => {
if (state.value.ready) {
hydrateSearch();
}
},
{
deep: true,
},
)
// read query params
async function hydrateSearch() {
const query = router.currentRoute.query;
if (query.auto) {
state.value.auto = query.auto === "true";
}
@@ -363,6 +391,8 @@ export default defineComponent({
}
)
);
} else {
selectedCategories.value = [];
}
if (query.foods) {
@@ -380,6 +410,8 @@ export default defineComponent({
}
)
);
} else {
selectedFoods.value = [];
}
if (query.tags) {
@@ -392,6 +424,8 @@ export default defineComponent({
}
)
);
} else {
selectedTags.value = [];
}
if (query.tools) {
@@ -404,11 +438,28 @@ export default defineComponent({
}
)
);
} else {
selectedTools.value = [];
}
Promise.allSettled(promises).then(() => {
search();
});
await Promise.allSettled(promises);
};
onMounted(async () => {
// restore the user's last search query
if (preferences.value.searchQuery && !(Object.keys(route.value.query).length > 0)) {
try {
const query = JSON.parse(preferences.value.searchQuery);
await router.replace({ query });
} catch (error) {
preferences.value.searchQuery = "";
router.replace({ query: {} });
}
}
await hydrateSearch();
await search();
state.value.ready = true;
});
watchDebounced(
@@ -426,7 +477,7 @@ export default defineComponent({
selectedTools,
],
async () => {
if (state.value.auto) {
if (state.value.ready && state.value.auto) {
await search();
}
},
@@ -459,7 +510,7 @@ export default defineComponent({
recipes,
removeRecipe,
replaceRecipes,
passedQuery,
passedQueryWithSeed,
};
},
head: {},

View File

@@ -41,6 +41,7 @@
<v-date-picker
v-model="newTimelineEventTimestamp"
no-title
:first-day-of-week="firstDayOfWeek"
:local="$i18n.locale"
@input="datePickerMenu = false"
/>
@@ -109,10 +110,11 @@
</template>
<script lang="ts">
import { defineComponent, reactive, ref, toRefs, useContext } from "@nuxtjs/composition-api";
import { computed, defineComponent, reactive, ref, toRefs, useContext } from "@nuxtjs/composition-api";
import { whenever } from "@vueuse/core";
import { VForm } from "~/types/vuetify";
import { useUserApi } from "~/composables/api";
import { useGroupSelf } from "~/composables/use-groups";
import { Recipe, RecipeTimelineEventIn } from "~/lib/api/types/recipe";
export default defineComponent({
@@ -129,6 +131,7 @@ export default defineComponent({
setup(props, context) {
const madeThisDialog = ref(false);
const userApi = useUserApi();
const { group } = useGroupSelf();
const { $auth, i18n } = useContext();
const domMadeThisForm = ref<VForm>();
const newTimelineEvent = ref<RecipeTimelineEventIn>({
@@ -153,6 +156,10 @@ export default defineComponent({
}
);
const firstDayOfWeek = computed(() => {
return group.value?.preferences?.firstDayOfWeek || 0;
});
function clearImage() {
newTimelineEventImage.value = undefined;
newTimelineEventImageName.value = "";
@@ -226,6 +233,7 @@ export default defineComponent({
...toRefs(state),
domMadeThisForm,
madeThisDialog,
firstDayOfWeek,
newTimelineEvent,
newTimelineEventImage,
newTimelineEventImagePreviewUrl,

View File

@@ -24,7 +24,7 @@
</div>
<div v-if="edit" class="d-flex justify-end">
<BaseButton class="ml-auto my-2" @click="addNote"> {{ $t("general.new") }}</BaseButton>
<BaseButton class="ml-auto my-2" @click="addNote"> {{ $t("general.add") }}</BaseButton>
</div>
</div>
</template>

View File

@@ -13,6 +13,9 @@
$globals.icons.tags"
return-object
v-bind="inputAttrs"
auto-select-first
:search-input.sync="searchInput"
@change="resetSearchInput"
>
<template #selection="data">
<v-chip
@@ -138,7 +141,6 @@ export default defineComponent({
}
function appendCreated(item: RecipeTag | RecipeCategory | RecipeTool) {
console.log(item);
if (selected.value === undefined) {
return;
}
@@ -148,6 +150,12 @@ export default defineComponent({
const dialog = ref(false);
const searchInput = ref("");
function resetSearchInput() {
searchInput.value = "";
}
return {
Organizer,
appendCreated,
@@ -156,6 +164,8 @@ export default defineComponent({
label,
selected,
removeByIndex,
searchInput,
resetSearchInput,
};
},
});

View File

@@ -51,7 +51,7 @@
/>
<div v-if="isEditForm" class="d-flex">
<RecipeDialogBulkAdd class="ml-auto my-2 mr-1" @bulk-data="addStep" />
<BaseButton class="my-2" @click="addStep()"> {{ $t("general.new") }}</BaseButton>
<BaseButton class="my-2" @click="addStep()"> {{ $t("general.add") }}</BaseButton>
</div>
<div v-if="!$vuetify.breakpoint.mdAndUp">
<RecipePageOrganizers :recipe="recipe" />

View File

@@ -47,7 +47,7 @@
<span>{{ parserToolTip }}</span>
</v-tooltip>
<RecipeDialogBulkAdd class="mx-1 mb-1" @bulk-data="addIngredient" />
<BaseButton class="mb-1" @click="addIngredient" > {{ $t("general.new") }} </BaseButton>
<BaseButton class="mb-1" @click="addIngredient" > {{ $t("general.add") }} </BaseButton>
</div>
</div>
</template>

View File

@@ -3,9 +3,53 @@
<v-row class="my-0 mx-7">
<v-spacer />
<v-col class="text-right">
<v-btn fab small color="info" @click="reverseSort">
<v-icon> {{ preferences.orderDirection === "asc" ? $globals.icons.sortCalendarAscending : $globals.icons.sortCalendarDescending }} </v-icon>
</v-btn>
<!-- Filters -->
<v-menu offset-y bottom left nudge-bottom="3" :close-on-content-click="false">
<template #activator="{ on, attrs }">
<v-badge :content="filterBadgeCount" :value="filterBadgeCount" bordered overlap>
<v-btn fab small color="info" v-bind="attrs" v-on="on">
<v-icon> {{ $globals.icons.filter }} </v-icon>
</v-btn>
</v-badge>
</template>
<v-card>
<v-list>
<v-list-item @click="reverseSort">
<v-icon left>
{{
preferences.orderDirection === "asc" ?
$globals.icons.sortCalendarDescending : $globals.icons.sortCalendarAscending
}}
</v-icon>
<v-list-item-title>
{{ preferences.orderDirection === "asc" ? $tc("general.sort-descending") : $tc("general.sort-ascending") }}
</v-list-item-title>
</v-list-item>
<v-divider />
<v-list-item class="pa-0">
<v-list class="py-0" style="width: 100%;">
<v-list-item
v-for="option, idx in eventTypeFilterState"
:key="idx"
>
<v-checkbox
:input-value="option.checked"
readonly
@click="toggleEventTypeOption(option.value)"
>
<template #label>
<v-icon left>
{{ option.icon }}
</v-icon>
{{ option.label }}
</template>
</v-checkbox>
</v-list-item>
</v-list>
</v-list-item>
</v-list>
</v-card>
</v-menu>
</v-col>
</v-row>
<v-divider class="mx-2"/>
@@ -29,9 +73,9 @@
/>
</v-timeline>
</div>
<v-card v-else-if="!loading">
<v-card v-else-if="!loading" class="mt-2">
<v-card-title class="justify-center pa-9">
{{ $t("recipe.timeline-is-empty") }}
{{ $t("recipe.timeline-no-events-found-try-adjusting-filters") }}
</v-card-title>
</v-card>
<div v-if="loading" class="mb-3 text-center">
@@ -41,14 +85,15 @@
</template>
<script lang="ts">
import { defineComponent, onMounted, ref, useAsync, useContext } from "@nuxtjs/composition-api";
import { computed, defineComponent, onMounted, ref, useAsync, useContext } from "@nuxtjs/composition-api";
import { useThrottleFn, whenever } from "@vueuse/core";
import RecipeTimelineItem from "./RecipeTimelineItem.vue"
import { useTimelinePreferences } from "~/composables/use-users/preferences";
import { useTimelineEventTypes } from "~/composables/recipes/use-recipe-timeline-events";
import { useAsyncKey } from "~/composables/use-utils";
import { alert } from "~/composables/use-toast";
import { useUserApi } from "~/composables/api";
import { Recipe, RecipeTimelineEventOut, RecipeTimelineEventUpdate } from "~/lib/api/types/recipe"
import { Recipe, RecipeTimelineEventOut, RecipeTimelineEventUpdate, TimelineEventType } from "~/lib/api/types/recipe";
export default defineComponent({
components: { RecipeTimelineItem },
@@ -76,6 +121,7 @@ export default defineComponent({
const api = useUserApi();
const { i18n } = useContext();
const preferences = useTimelinePreferences();
const { eventTypeOptions } = useTimelineEventTypes();
const loading = ref(true);
const ready = ref(false);
@@ -85,6 +131,15 @@ export default defineComponent({
const timelineEvents = ref([] as RecipeTimelineEventOut[]);
const recipes = new Map<string, Recipe>();
const filterBadgeCount = computed(() => eventTypeOptions.value.length - preferences.value.types.length);
const eventTypeFilterState = computed(() => {
return eventTypeOptions.value.map(option => {
return {
...option,
checked: preferences.value.types.includes(option.value),
}
});
});
interface ScrollEvent extends Event {
target: HTMLInputElement;
@@ -112,7 +167,7 @@ export default defineComponent({
}
);
// Sorting
// Preferences
function reverseSort() {
if (loading.value) {
return;
@@ -122,6 +177,21 @@ export default defineComponent({
initializeTimelineEvents();
}
function toggleEventTypeOption(option: TimelineEventType) {
if (loading.value) {
return;
}
const index = preferences.value.types.indexOf(option);
if (index === -1) {
preferences.value.types.push(option);
} else {
preferences.value.types.splice(index, 1);
}
initializeTimelineEvents();
}
// Timeline Actions
async function updateTimelineEvent(index: number) {
const event = timelineEvents.value[index]
@@ -179,8 +249,11 @@ export default defineComponent({
async function scrollTimelineEvents() {
const orderBy = "timestamp";
const orderDirection = preferences.value.orderDirection === "asc" ? "asc" : "desc";
// eslint-disable-next-line quotes
const eventTypeValue = `["${preferences.value.types.join('", "')}"]`;
const queryFilter = `(${props.queryFilter}) AND eventType IN ${eventTypeValue}`
const response = await api.recipes.getAllTimelineEvents(page.value, perPage, { orderBy, orderDirection, queryFilter: props.queryFilter });
const response = await api.recipes.getAllTimelineEvents(page.value, perPage, { orderBy, orderDirection, queryFilter });
page.value += 1;
if (!response?.data) {
return;
@@ -256,11 +329,14 @@ export default defineComponent({
return {
deleteTimelineEvent,
filterBadgeCount,
loading,
onScroll,
preferences,
eventTypeFilterState,
recipes,
reverseSort,
toggleEventTypeOption,
timelineEvents,
updateTimelineEvent,
};

View File

@@ -99,6 +99,7 @@ import { computed, defineComponent, ref, useContext, useRoute } from "@nuxtjs/co
import RecipeCardMobile from "./RecipeCardMobile.vue";
import RecipeTimelineContextMenu from "./RecipeTimelineContextMenu.vue";
import { useStaticRoutes } from "~/composables/api";
import { useTimelineEventTypes } from "~/composables/recipes/use-recipe-timeline-events";
import { Recipe, RecipeTimelineEventOut } from "~/lib/api/types/recipe"
import UserAvatar from "~/components/Domain/User/UserAvatar.vue";
import SafeMarkdown from "~/components/global/SafeMarkdown.vue";
@@ -124,6 +125,7 @@ export default defineComponent({
setup(props) {
const { $auth, $globals, $vuetify } = useContext();
const { recipeTimelineEventImage } = useStaticRoutes();
const { eventTypeOptions } = useTimelineEventTypes();
const timelineEvents = ref([] as RecipeTimelineEventOut[]);
const route = useRoute();
@@ -164,21 +166,10 @@ export default defineComponent({
}
})
const icon = computed( () => {
switch (props.event.eventType) {
case "comment":
return $globals.icons.commentTextMultiple;
case "info":
return $globals.icons.informationVariant;
case "system":
return $globals.icons.cog;
default:
return $globals.icons.informationVariant;
};
})
const icon = computed(() => {
const option = eventTypeOptions.value.find((option) => option.value === props.event.eventType);
return option ? option.icon : $globals.icons.informationVariant;
});
const hideImage = ref(false);
const eventImageUrl = computed<string>( () => {

View File

@@ -0,0 +1,160 @@
<template>
<div>
<v-card-title>
<v-icon large class="mr-3"> {{ $globals.icons.user }}</v-icon>
<span class="headline"> {{ $t("user-registration.account-details") }}</span>
</v-card-title>
<v-divider />
<v-card-text>
<v-form ref="domAccountForm" @submit.prevent>
<v-text-field
v-model="accountDetails.username.value"
autofocus
v-bind="inputAttrs"
:label="$tc('user.username')"
:prepend-icon="$globals.icons.user"
:rules="[validators.required]"
:error-messages="usernameErrorMessages"
@blur="validateUsername"
/>
<v-text-field
v-model="accountDetails.fullName.value"
v-bind="inputAttrs"
:label="$tc('user.full-name')"
:prepend-icon="$globals.icons.user"
:rules="[validators.required]"
/>
<v-text-field
v-model="accountDetails.email.value"
v-bind="inputAttrs"
:prepend-icon="$globals.icons.email"
:label="$tc('user.email')"
:rules="[validators.required, validators.email]"
:error-messages="emailErrorMessages"
@blur="validateEmail"
/>
<v-text-field
v-model="credentials.password1.value"
v-bind="inputAttrs"
:type="pwFields.inputType.value"
:append-icon="pwFields.passwordIcon.value"
:prepend-icon="$globals.icons.lock"
:label="$tc('user.password')"
:rules="[validators.required, validators.minLength(8), validators.maxLength(258)]"
@click:append="pwFields.togglePasswordShow"
/>
<UserPasswordStrength :value="credentials.password1.value" />
<v-text-field
v-model="credentials.password2.value"
v-bind="inputAttrs"
:type="pwFields.inputType.value"
:append-icon="pwFields.passwordIcon.value"
:prepend-icon="$globals.icons.lock"
:label="$tc('user.confirm-password')"
:rules="[validators.required, credentials.passwordMatch]"
@click:append="pwFields.togglePasswordShow"
/>
<div class="px-2">
<v-checkbox
v-model="accountDetails.advancedOptions.value"
:label="$tc('user.enable-advanced-content')"
/>
<p class="text-caption mt-n4">
{{ $tc("user.enable-advanced-content-description") }}
</p>
</div>
</v-form>
</v-card-text>
</div>
</template>
<script lang="ts">
import { defineComponent, ref } from "@nuxtjs/composition-api";
import { useDark } from "@vueuse/core";
import { validators } from "~/composables/use-validators";
import { useUserRegistrationForm } from "~/composables/use-users/user-registration-form";
import { usePasswordField } from "~/composables/use-passwords";
import UserPasswordStrength from "~/components/Domain/User/UserPasswordStrength.vue";
const inputAttrs = {
filled: true,
rounded: true,
validateOnBlur: true,
class: "rounded-lg",
};
export default defineComponent({
components: { UserPasswordStrength },
layout: "blank",
setup() {
const isDark = useDark();
const langDialog = ref(false);
const pwFields = usePasswordField();
const {
accountDetails,
credentials,
emailErrorMessages,
usernameErrorMessages,
validateUsername,
validateEmail,
domAccountForm,
} = useUserRegistrationForm();
return {
accountDetails,
credentials,
emailErrorMessages,
inputAttrs,
isDark,
langDialog,
pwFields,
usernameErrorMessages,
validators,
// Validators
validateUsername,
validateEmail,
// Dom Refs
domAccountForm,
};
},
});
</script>
<style lang="css" scoped>
.icon-primary {
fill: var(--v-primary-base);
}
.icon-white {
fill: white;
}
.icon-container {
display: flex;
flex-direction: column;
align-items: center;
width: 100%;
position: relative;
margin-top: 2.5rem;
}
.icon-divider {
width: 100%;
margin-bottom: -2.5rem;
}
.icon-avatar {
border-color: rgba(0, 0, 0, 0.12);
border: 2px;
}
.bg-off-white {
background: #f5f8fa;
}
.preferred-width {
width: 840px;
}
</style>

View File

@@ -6,8 +6,6 @@
v-model="sidebar"
absolute
:top-link="topLinks"
:secondary-header="cookbookLinks.length ? $tc('sidebar.cookbooks') : undefined"
:secondary-header-link="isOwnGroup && cookbookLinks.length ? `/g/${groupSlug}/cookbooks` : undefined"
:secondary-links="cookbookLinks || []"
:bottom-links="isAdmin ? bottomLinks : []"
>
@@ -146,14 +144,6 @@
to: `/g/${groupSlug.value}/r/create/new`,
restricted: true,
},
{
insertDivider: true,
icon: $globals.icons.pages,
title: i18n.tc("sidebar.cookbook"),
subtitle: i18n.tc("sidebar.create-cookbook"),
to: `/g/${groupSlug.value}/cookbooks`,
restricted: true,
},
]);
const bottomLinks = computed<SidebarLinks>(() => [
@@ -191,22 +181,35 @@
restricted: true,
},
{
icon: $globals.icons.categories,
to: `/g/${groupSlug.value}/recipes/categories`,
title: i18n.tc("sidebar.categories"),
icon: $globals.icons.book,
to: `/g/${groupSlug.value}/cookbooks`,
title: i18n.tc("cookbook.cookbooks"),
restricted: true,
},
{
icon: $globals.icons.tags,
to: `/g/${groupSlug.value}/recipes/tags`,
title: i18n.tc("sidebar.tags"),
restricted: true,
},
{
icon: $globals.icons.potSteam,
to: `/g/${groupSlug.value}/recipes/tools`,
title: i18n.tc("tool.tools"),
icon: $globals.icons.organizers,
title: "Organizers",
restricted: true,
children: [
{
icon: $globals.icons.categories,
to: `/g/${groupSlug.value}/recipes/categories`,
title: i18n.tc("sidebar.categories"),
restricted: true,
},
{
icon: $globals.icons.tags,
to: `/g/${groupSlug.value}/recipes/tags`,
title: i18n.tc("sidebar.tags"),
restricted: true,
},
{
icon: $globals.icons.potSteam,
to: `/g/${groupSlug.value}/recipes/tools`,
title: i18n.tc("tool.tools"),
restricted: true,
},
],
},
]);

View File

@@ -39,13 +39,12 @@
<v-list-item-title>{{ nav.title }}</v-list-item-title>
</template>
<v-list-item v-for="child in nav.children" :key="child.title" exact :to="child.to">
<v-list-item v-for="child in nav.children" :key="child.title" exact :to="child.to" class="ml-2">
<v-list-item-icon>
<v-icon>{{ child.icon }}</v-icon>
</v-list-item-icon>
<v-list-item-title>{{ child.title }}</v-list-item-title>
</v-list-item>
<v-divider class="mb-4"></v-divider>
</v-list-group>
<!-- Single Item -->
@@ -68,18 +67,8 @@
</template>
<!-- Secondary Links -->
<template v-if="secondaryLinks">
<router-link v-if="secondaryHeader && secondaryHeaderLink" :to="secondaryHeaderLink" style="text-decoration: none;">
<v-subheader :to="secondaryHeaderLink" class="pb-0">
{{ secondaryHeader }}
</v-subheader>
</router-link>
<div v-else-if="secondaryHeader">
<v-subheader :to="secondaryHeaderLink" class="pb-0">
{{ secondaryHeader }}
</v-subheader>
</div>
<v-divider v-if="secondaryHeader"></v-divider>
<template v-if="secondaryLinks.length > 0">
<v-divider class="mt-2"></v-divider>
<v-list nav dense exact>
<template v-for="nav in secondaryLinks">
<div v-if="!nav.restricted || isOwnGroup" :key="nav.title">
@@ -179,14 +168,6 @@ export default defineComponent({
required: false,
default: null,
},
secondaryHeader: {
type: String,
default: null,
},
secondaryHeaderLink: {
type: String,
default: null,
},
},
setup(props, context) {
// V-Model Support

View File

@@ -15,12 +15,22 @@
v-if="inputField.type === fieldTypes.BOOLEAN"
v-model="value[inputField.varName]"
class="my-0 py-0"
:label="inputField.label"
:name="inputField.varName"
:hint="inputField.hint || ''"
:disabled="(inputField.disableUpdate && updateMode) || (!updateMode && inputField.disableCreate) || (disabledFields && disabledFields.includes(inputField.varName))"
@change="emitBlur"
/>
>
<template #label>
<div>
<v-card-text class="text-body-1 my-0 py-0">
{{ inputField.label }}
</v-card-text>
<v-card-text v-if="inputField.hint" class="text-caption my-0 py-0">
{{ inputField.hint }}
</v-card-text>
</div>
</template>
</v-checkbox>
<!-- Text Field -->
<v-text-field

View File

@@ -20,8 +20,8 @@
<v-icon>{{ item.icon }}</v-icon>
</v-list-item-icon>
<v-list-item-title>{{ item.text }}</v-list-item-title>
<v-divider v-if="item.divider" :key="`divider-${index}`" class="my-1" ></v-divider>
</v-list-item>
<v-divider v-if="item.divider" :key="`divider-${index}`" class="my-1" ></v-divider>
</template>
</v-list-item-group>
</v-list>
@@ -47,8 +47,8 @@
<v-icon>{{ item.icon }}</v-icon>
</v-list-item-icon>
<v-list-item-title>{{ item.text }}</v-list-item-title>
<v-divider v-if="item.divider" :key="`divider-${index}`" class="my-1" ></v-divider>
</v-list-item>
<v-divider v-if="item.divider" :key="`divider-${index}`" class="my-1" ></v-divider>
</template>
</v-list>
</v-menu>

View File

@@ -0,0 +1,259 @@
<template>
<div :style="`width: ${width}; height: 100%;`">
<LanguageDialog v-model="langDialog" />
<v-card>
<div>
<v-toolbar width="100%" color="primary" class="d-flex justify-center" style="margin-bottom: 4rem" dark>
<v-toolbar-title class="headline text-h4"> Mealie </v-toolbar-title>
</v-toolbar>
<div class="icon-container">
<v-divider class="icon-divider"></v-divider>
<v-avatar class="pa-2 icon-avatar" color="primary" size="75">
<svg class="icon-white" style="width: 75" viewBox="0 0 24 24">
<path
d="M8.1,13.34L3.91,9.16C2.35,7.59 2.35,5.06 3.91,3.5L10.93,10.5L8.1,13.34M13.41,13L20.29,19.88L18.88,21.29L12,14.41L5.12,21.29L3.71,19.88L13.36,10.22L13.16,10C12.38,9.23 12.38,7.97 13.16,7.19L17.5,2.82L18.43,3.74L15.19,7L16.15,7.94L19.39,4.69L20.31,5.61L17.06,8.85L18,9.81L21.26,6.56L22.18,7.5L17.81,11.84C17.03,12.62 15.77,12.62 15,11.84L14.78,11.64L13.41,13Z"
/>
</svg>
</v-avatar>
</div>
</div>
<div class="d-flex justify-center grow items-center my-4">
<slot :width="pageWidth"></slot>
</div>
<div class="mx-2 my-4">
<v-progress-linear
v-if="value > 0"
:value="Math.ceil((value/maxPageNumber)*100)"
striped
height="10"
/>
</div>
<v-divider class="ma-2" />
<v-card-actions width="100%">
<v-btn
v-if="prevButtonShow"
:disabled="!prevButtonEnable"
:color="prevButtonColor"
@click="decrementPage"
>
<v-icon v-if="prevButtonIconRef">
{{ prevButtonIconRef }}
</v-icon>
{{ prevButtonTextRef }}
</v-btn>
<v-spacer />
<v-btn
v-if="nextButtonShow"
:disabled="!nextButtonEnable"
:color="nextButtonColorRef"
@click="incrementPage"
>
<div v-if="isSubmitting">
<v-progress-circular indeterminate color="white" size="24" />
</div>
<div v-else>
<v-icon v-if="nextButtonIconRef && !nextButtonIconAfter">
{{ nextButtonIconRef }}
</v-icon>
{{ nextButtonTextRef }}
<v-icon v-if="nextButtonIconRef && nextButtonIconAfter">
{{ nextButtonIconRef }}
</v-icon>
</div>
</v-btn>
</v-card-actions>
<v-card-actions class="justify-center flex-column py-8">
<BaseButton large color="primary" @click="langDialog = true">
<template #icon> {{ $globals.icons.translate }}</template>
{{ $t("language-dialog.choose-language") }}
</BaseButton>
</v-card-actions>
</v-card>
</div>
</template>
<script lang="ts">
import { computed, defineComponent, ref, useContext } from "@nuxtjs/composition-api";
export default defineComponent({
props: {
value: {
type: Number,
required: true,
},
minPageNumber: {
type: Number,
default: 0,
},
maxPageNumber: {
type: Number,
required: true,
},
width: {
type: [String, Number],
default: "1200px",
},
pageWidth: {
type: [String, Number],
default: "600px",
},
prevButtonText: {
type: String,
default: undefined,
},
prevButtonIcon: {
type: String,
default: null,
},
prevButtonColor: {
type: String,
default: "grey-darken-3",
},
prevButtonShow: {
type: Boolean,
default: true,
},
prevButtonEnable: {
type: Boolean,
default: true,
},
nextButtonText: {
type: String,
default: undefined,
},
nextButtonIcon: {
type: String,
default: null,
},
nextButtonIconAfter: {
type: Boolean,
default: true,
},
nextButtonColor: {
type: String,
default: undefined,
},
nextButtonShow: {
type: Boolean,
default: true,
},
nextButtonEnable: {
type: Boolean,
default: true,
},
nextButtonIsSubmit: {
type: Boolean,
default: false,
},
title: {
type: String,
required: true,
},
icon: {
type: String,
default: null,
},
isSubmitting: {
type: Boolean,
default: false,
}
},
setup(props, context) {
const { $globals, i18n } = useContext();
const ready = ref(false);
const langDialog = ref(false);
const prevButtonTextRef = computed(() => props.prevButtonText || i18n.tc("general.back"));
const prevButtonIconRef = computed(() => props.prevButtonIcon || $globals.icons.back);
const nextButtonTextRef = computed(
() => props.nextButtonText || (
props.nextButtonIsSubmit ? i18n.tc("general.submit") : i18n.tc("general.next")
)
);
const nextButtonIconRef = computed(
() => props.nextButtonIcon || (
props.nextButtonIsSubmit ? $globals.icons.createAlt : $globals.icons.forward
)
);
const nextButtonColorRef = computed(
() => props.nextButtonColor || (props.nextButtonIsSubmit ? "success" : "info")
);
function goToPage(page: number) {
if (page < props.minPageNumber) {
goToPage(props.minPageNumber);
return;
} else if (page > props.maxPageNumber) {
goToPage(props.maxPageNumber);
return;
}
context.emit("input", page);
}
function decrementPage() {
goToPage(props.value - 1);
}
function incrementPage() {
if (props.nextButtonIsSubmit) {
context.emit("submit", props.value);
} else {
goToPage(props.value + 1);
}
}
ready.value = true;
return {
ready,
langDialog,
prevButtonTextRef,
prevButtonIconRef,
nextButtonTextRef,
nextButtonIconRef,
nextButtonColorRef,
decrementPage,
incrementPage,
};
}
});
</script>
<style lang="css" scoped>
.icon-primary {
fill: var(--v-primary-base);
}
.icon-white {
fill: white;
}
.icon-container {
display: flex;
flex-direction: column;
align-items: center;
width: 100%;
position: relative;
margin-top: 2.5rem;
}
.icon-divider {
width: 100%;
margin-bottom: -2.5rem;
}
.icon-avatar {
border-color: rgba(0, 0, 0, 0.12);
border: 2px;
}
.bg-off-white {
background: #f5f8fa;
}
.preferred-width {
width: 840px;
}
</style>

View File

@@ -37,6 +37,7 @@ export function usePublicStoreActions<T extends BoundT>(
loading.value = true;
const allItems = useAsync(async () => {
const { data } = await api.getAll(page, perPage, params);
loading.value = false;
if (data && allRef) {
allRef.value = data.items;
@@ -49,7 +50,6 @@ export function usePublicStoreActions<T extends BoundT>(
}
}, useAsyncKey());
loading.value = false;
return allItems;
}
@@ -88,6 +88,7 @@ export function useStoreActions<T extends BoundT>(
loading.value = true;
const allItems = useAsync(async () => {
const { data } = await api.getAll(page, perPage, params);
loading.value = false;
if (data && allRef) {
allRef.value = data.items;
@@ -100,7 +101,6 @@ export function useStoreActions<T extends BoundT>(
}
}, useAsyncKey());
loading.value = false;
return allItems;
}

View File

@@ -0,0 +1,35 @@
import { computed, useContext } from "@nuxtjs/composition-api";
import { TimelineEventType } from "~/lib/api/types/recipe";
export interface TimelineEventTypeData {
value: TimelineEventType;
label: string;
icon: string;
}
export const useTimelineEventTypes = () => {
const { $globals, i18n } = useContext();
const eventTypeOptions = computed<TimelineEventTypeData[]>(() => {
return [
{
value: "comment",
label: i18n.tc("recipe.comment"),
icon: $globals.icons.commentTextMultiple,
},
{
value: "info",
label: i18n.tc("settings.theme.info"),
icon: $globals.icons.informationVariant,
},
{
value: "system",
label: i18n.tc("general.system"),
icon: $globals.icons.cog,
},
];
});
return {
eventTypeOptions,
}
}

View File

@@ -5,6 +5,8 @@ import { useUserApi } from "~/composables/api";
import { RecipeCategory } from "~/lib/api/types/admin";
const categoryStore: Ref<RecipeCategory[]> = ref([]);
const publicStoreLoading = ref(false);
const storeLoading = ref(false);
export function useCategoryData() {
const data = reactive({
@@ -27,7 +29,7 @@ export function useCategoryData() {
export function usePublicCategoryStore(groupSlug: string) {
const api = usePublicExploreApi(groupSlug).explore;
const loading = ref(false);
const loading = publicStoreLoading;
const actions = {
...usePublicStoreActions<RecipeCategory>(api.categories, categoryStore, loading),
@@ -36,7 +38,7 @@ export function usePublicCategoryStore(groupSlug: string) {
},
};
if (!categoryStore.value || categoryStore.value?.length === 0) {
if (!loading.value && (!categoryStore.value || categoryStore.value?.length === 0)) {
actions.getAll();
}
@@ -50,7 +52,7 @@ export function usePublicCategoryStore(groupSlug: string) {
export function useCategoryStore() {
// passing the group slug switches to using the public API
const api = useUserApi();
const loading = ref(false);
const loading = storeLoading;
const actions = {
...useStoreActions<RecipeCategory>(api.categories, categoryStore, loading),
@@ -59,7 +61,7 @@ export function useCategoryStore() {
},
};
if (!categoryStore.value || categoryStore.value?.length === 0) {
if (!loading.value && (!categoryStore.value || categoryStore.value?.length === 0)) {
actions.getAll();
}

View File

@@ -5,6 +5,8 @@ import { useUserApi } from "~/composables/api";
import { IngredientFood } from "~/lib/api/types/recipe";
let foodStore: Ref<IngredientFood[] | null> = ref([]);
const publicStoreLoading = ref(false);
const storeLoading = ref(false);
/**
* useFoodData returns a template reactive object
@@ -34,7 +36,7 @@ export const useFoodData = function () {
export const usePublicFoodStore = function (groupSlug: string) {
const api = usePublicExploreApi(groupSlug).explore;
const loading = ref(false);
const loading = publicStoreLoading;
const actions = {
...usePublicStoreActions(api.foods, foodStore, loading),
@@ -43,7 +45,7 @@ export const usePublicFoodStore = function (groupSlug: string) {
},
};
if (!foodStore.value || foodStore.value.length === 0) {
if (!loading.value && (!foodStore.value || foodStore.value.length === 0)) {
foodStore = actions.getAll();
}
@@ -52,7 +54,7 @@ export const usePublicFoodStore = function (groupSlug: string) {
export const useFoodStore = function () {
const api = useUserApi();
const loading = ref(false);
const loading = storeLoading;
const actions = {
...useStoreActions(api.foods, foodStore, loading),
@@ -61,7 +63,7 @@ export const useFoodStore = function () {
},
};
if (!foodStore.value || foodStore.value.length === 0) {
if (!loading.value && (!foodStore.value || foodStore.value.length === 0)) {
foodStore = actions.getAll();
}

View File

@@ -4,6 +4,7 @@ import { MultiPurposeLabelOut } from "~/lib/api/types/labels";
import { useUserApi } from "~/composables/api";
let labelStore: Ref<MultiPurposeLabelOut[] | null> = ref([]);
const storeLoading = ref(false);
export function useLabelData() {
const data = reactive({
@@ -28,7 +29,7 @@ export function useLabelData() {
export function useLabelStore() {
const api = useUserApi();
const loading = ref(false);
const loading = storeLoading;
const actions = {
...useStoreActions<MultiPurposeLabelOut>(api.multiPurposeLabels, labelStore, loading),
@@ -37,7 +38,7 @@ export function useLabelStore() {
},
};
if (!labelStore.value || labelStore.value?.length === 0) {
if (!loading.value && (!labelStore.value || labelStore.value?.length === 0)) {
labelStore = actions.getAll();
}

View File

@@ -5,6 +5,8 @@ import { useUserApi } from "~/composables/api";
import { RecipeTag } from "~/lib/api/types/admin";
const items: Ref<RecipeTag[]> = ref([]);
const publicStoreLoading = ref(false);
const storeLoading = ref(false);
export function useTagData() {
const data = reactive({
@@ -27,7 +29,7 @@ export function useTagData() {
export function usePublicTagStore(groupSlug: string) {
const api = usePublicExploreApi(groupSlug).explore;
const loading = ref(false);
const loading = publicStoreLoading;
const actions = {
...usePublicStoreActions<RecipeTag>(api.tags, items, loading),
@@ -36,7 +38,7 @@ export function usePublicTagStore(groupSlug: string) {
},
};
if (!items.value || items.value?.length === 0) {
if (!loading.value && (!items.value || items.value?.length === 0)) {
actions.getAll();
}
@@ -49,7 +51,7 @@ export function usePublicTagStore(groupSlug: string) {
export function useTagStore() {
const api = useUserApi();
const loading = ref(false);
const loading = storeLoading;
const actions = {
...useStoreActions<RecipeTag>(api.tags, items, loading),
@@ -58,7 +60,7 @@ export function useTagStore() {
},
};
if (!items.value || items.value?.length === 0) {
if (!loading.value && (!items.value || items.value?.length === 0)) {
actions.getAll();
}

View File

@@ -5,6 +5,8 @@ import { useUserApi } from "~/composables/api";
import { RecipeTool } from "~/lib/api/types/recipe";
const toolStore: Ref<RecipeTool[]> = ref([]);
const publicStoreLoading = ref(false);
const storeLoading = ref(false);
export function useToolData() {
const data = reactive({
@@ -29,7 +31,7 @@ export function useToolData() {
export function usePublicToolStore(groupSlug: string) {
const api = usePublicExploreApi(groupSlug).explore;
const loading = ref(false);
const loading = publicStoreLoading;
const actions = {
...usePublicStoreActions<RecipeTool>(api.tools, toolStore, loading),
@@ -38,7 +40,7 @@ export function usePublicToolStore(groupSlug: string) {
},
};
if (!toolStore.value || toolStore.value?.length === 0) {
if (!loading.value && (!toolStore.value || toolStore.value?.length === 0)) {
actions.getAll();
}
@@ -51,7 +53,7 @@ export function usePublicToolStore(groupSlug: string) {
export function useToolStore() {
const api = useUserApi();
const loading = ref(false);
const loading = storeLoading;
const actions = {
...useStoreActions<RecipeTool>(api.tools, toolStore, loading),
@@ -60,7 +62,7 @@ export function useToolStore() {
},
};
if (!toolStore.value || toolStore.value?.length === 0) {
if (!loading.value && (!toolStore.value || toolStore.value?.length === 0)) {
actions.getAll();
}

View File

@@ -4,6 +4,7 @@ import { useUserApi } from "~/composables/api";
import { IngredientUnit } from "~/lib/api/types/recipe";
let unitStore: Ref<IngredientUnit[] | null> = ref([]);
const storeLoading = ref(false);
/**
* useUnitData returns a template reactive object
@@ -35,7 +36,7 @@ export const useUnitData = function () {
export const useUnitStore = function () {
const api = useUserApi();
const loading = ref(false);
const loading = storeLoading;
const actions = {
...useStoreActions<IngredientUnit>(api.units, unitStore, loading),
@@ -44,7 +45,7 @@ export const useUnitStore = function () {
},
};
if (!unitStore.value || unitStore.value.length === 0) {
if (!loading.value && (!unitStore.value || unitStore.value.length === 0)) {
unitStore = actions.getAll();
}

View File

@@ -122,6 +122,7 @@ export const useCookbooks = function () {
this.refreshAll();
}
loading.value = false;
return data;
},
async updateOrder() {

View File

@@ -1,30 +1,39 @@
import { useAsync, ref } from "@nuxtjs/composition-api";
import { useAsyncKey } from "./use-utils";
import { useUserApi } from "~/composables/api";
import { GroupBase } from "~/lib/api/types/user";
import { GroupBase, GroupSummary } from "~/lib/api/types/user";
const groupSelfRef = ref<GroupSummary | null>(null);
const loading = ref(false);
export const useGroupSelf = function () {
const api = useUserApi();
async function refreshGroupSelf() {
loading.value = true;
const { data } = await api.groups.getCurrentUserGroup();
groupSelfRef.value = data;
loading.value = false;
}
const actions = {
get() {
const group = useAsync(async () => {
const { data } = await api.groups.getCurrentUserGroup();
if (!(groupSelfRef.value || loading.value)) {
refreshGroupSelf();
}
return data;
}, useAsyncKey());
return group;
return groupSelfRef;
},
async updatePreferences() {
if (!group.value?.preferences) {
if (!groupSelfRef.value) {
await refreshGroupSelf();
}
if (!groupSelfRef.value?.preferences) {
return;
}
const { data } = await api.groups.setPreferences(group.value.preferences);
const { data } = await api.groups.setPreferences(groupSelfRef.value.preferences);
if (data) {
group.value.preferences = data;
groupSelfRef.value.preferences = data;
}
},
};

View File

@@ -1,9 +1,9 @@
// This Code is auto generated by gen_global_components.py
// This Code is auto generated by gen_ts_locales.py
export const LOCALES = [
{
name: "繁體中文 (Chinese traditional)",
value: "zh-TW",
progress: 30,
progress: 29,
dir: "ltr",
},
{
@@ -15,7 +15,7 @@ export const LOCALES = [
{
name: "Tiếng Việt (Vietnamese)",
value: "vi-VN",
progress: 1,
progress: 0,
dir: "ltr",
},
{
@@ -27,43 +27,43 @@ export const LOCALES = [
{
name: "Türkçe (Turkish)",
value: "tr-TR",
progress: 53,
progress: 62,
dir: "ltr",
},
{
name: "Svenska (Swedish)",
value: "sv-SE",
progress: 94,
progress: 99,
dir: "ltr",
},
{
name: "српски (Serbian)",
value: "sr-SP",
progress: 32,
progress: 31,
dir: "ltr",
},
{
name: "Slovenian",
value: "sl-SI",
progress: 47,
progress: 49,
dir: "ltr",
},
{
name: "Slovak",
value: "sk-SK",
progress: 93,
progress: 91,
dir: "ltr",
},
{
name: "Pусский (Russian)",
value: "ru-RU",
progress: 98,
progress: 99,
dir: "ltr",
},
{
name: "Română (Romanian)",
value: "ro-RO",
progress: 42,
progress: 44,
dir: "ltr",
},
{
@@ -75,19 +75,19 @@ export const LOCALES = [
{
name: "Português do Brasil (Brazilian Portuguese)",
value: "pt-BR",
progress: 97,
progress: 95,
dir: "ltr",
},
{
name: "Polski (Polish)",
value: "pl-PL",
progress: 98,
progress: 100,
dir: "ltr",
},
{
name: "Norsk (Norwegian)",
value: "no-NO",
progress: 99,
progress: 97,
dir: "ltr",
},
{
@@ -99,25 +99,25 @@ export const LOCALES = [
{
name: "Latvian",
value: "lv-LV",
progress: 1,
progress: 0,
dir: "ltr",
},
{
name: "Lithuanian",
value: "lt-LT",
progress: 93,
progress: 91,
dir: "ltr",
},
{
name: "한국어 (Korean)",
value: "ko-KR",
progress: 5,
progress: 3,
dir: "ltr",
},
{
name: "日本語 (Japanese)",
value: "ja-JP",
progress: 12,
progress: 11,
dir: "ltr",
},
{
@@ -135,25 +135,25 @@ export const LOCALES = [
{
name: "Magyar (Hungarian)",
value: "hu-HU",
progress: 100,
progress: 98,
dir: "ltr",
},
{
name: "Croatian",
value: "hr-HR",
progress: 93,
progress: 91,
dir: "ltr",
},
{
name: "עברית (Hebrew)",
value: "he-IL",
progress: 97,
progress: 98,
dir: "rtl",
},
{
name: "Galician",
value: "gl-ES",
progress: 1,
progress: 3,
dir: "ltr",
},
{
@@ -165,19 +165,19 @@ export const LOCALES = [
{
name: "French, Canada",
value: "fr-CA",
progress: 97,
progress: 95,
dir: "ltr",
},
{
name: "Suomi (Finnish)",
value: "fi-FI",
progress: 91,
progress: 89,
dir: "ltr",
},
{
name: "Español (Spanish)",
value: "es-ES",
progress: 79,
progress: 93,
dir: "ltr",
},
{
@@ -189,13 +189,13 @@ export const LOCALES = [
{
name: "British English",
value: "en-GB",
progress: 3,
progress: 2,
dir: "ltr",
},
{
name: "Ελληνικά (Greek)",
value: "el-GR",
progress: 34,
progress: 33,
dir: "ltr",
},
{
@@ -219,7 +219,7 @@ export const LOCALES = [
{
name: "Català (Catalan)",
value: "ca-ES",
progress: 75,
progress: 74,
dir: "ltr",
},
{
@@ -231,13 +231,13 @@ export const LOCALES = [
{
name: "العربية (Arabic)",
value: "ar-SA",
progress: 20,
progress: 18,
dir: "rtl",
},
{
name: "Afrikaans (Afrikaans)",
value: "af-ZA",
progress: 92,
progress: 90,
dir: "ltr",
},
]

View File

@@ -0,0 +1,30 @@
import { useContext } from "@nuxtjs/composition-api";
import { fieldTypes } from "../forms";
import { AutoFormItems } from "~/types/auto-forms";
export const useCommonSettingsForm = () => {
const { i18n } = useContext();
const commonSettingsForm: AutoFormItems = [
{
section: i18n.tc("profile.group-settings"),
label: i18n.tc("group.enable-public-access"),
hint: i18n.tc("group.enable-public-access-description"),
varName: "makeGroupRecipesPublic",
type: fieldTypes.BOOLEAN,
rules: ["required"],
},
{
section: i18n.tc("data-pages.data-management"),
label: i18n.tc("user-registration.use-seed-data"),
hint: i18n.tc("user-registration.use-seed-data-description"),
varName: "useSeedData",
type: fieldTypes.BOOLEAN,
rules: ["required"],
},
];
return {
commonSettingsForm,
}
}

View File

@@ -0,0 +1 @@
export { useCommonSettingsForm } from "./common-settings-form";

View File

@@ -1 +1,2 @@
export { useUserForm } from "./user-form";
export { useUserRegistrationForm } from "./user-registration-form";

View File

@@ -1,5 +1,6 @@
import { Ref, useContext } from "@nuxtjs/composition-api";
import { useLocalStorage } from "@vueuse/core";
import { TimelineEventType } from "~/lib/api/types/recipe";
export interface UserPrintPreferences {
imagePosition: string;
@@ -19,6 +20,7 @@ export interface UserRecipePreferences {
filterNull: boolean;
sortIcon: string;
useMobileCards: boolean;
searchQuery: string;
}
export interface UserShoppingListPreferences {
@@ -28,6 +30,7 @@ export interface UserShoppingListPreferences {
export interface UserTimelinePreferences {
orderDirection: string;
types: TimelineEventType[];
}
export function useUserPrintPreferences(): Ref<UserPrintPreferences> {
@@ -57,6 +60,7 @@ 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
@@ -87,6 +91,7 @@ export function useTimelinePreferences(): Ref<UserTimelinePreferences> {
"timeline-preferences",
{
orderDirection: "asc",
types: ["info", "system", "comment"] as TimelineEventType[],
},
{ mergeDefaults: true }
// we cast to a Ref because by default it will return an optional type ref

View File

@@ -38,7 +38,7 @@ export const useUserForm = () => {
type: fieldTypes.SELECT,
hint: i18n.tc("user.authentication-method-hint"),
disableCreate: true,
options: [{ text: "Mealie" }, { text: "LDAP" }],
options: [{ text: "Mealie" }, { text: "LDAP" }, { text: "OIDC" }],
},
{
section: i18n.tc("user.permissions"),

View File

@@ -0,0 +1,87 @@
import { ref, Ref, useContext } from "@nuxtjs/composition-api";
import { useAsyncValidator } from "~/composables/use-validators";
import { VForm } from "~/types/vuetify";
import { usePublicApi } from "~/composables/api/api-client";
const domAccountForm = ref<VForm | null>(null);
const username = ref("");
const fullName = ref("");
const email = ref("");
const password1 = ref("");
const password2 = ref("");
const advancedOptions = ref(false);
export const useUserRegistrationForm = () => {
const { i18n } = useContext();
function safeValidate(form: Ref<VForm | null>) {
if (form.value && form.value.validate) {
return form.value.validate();
}
return false;
}
// ================================================================
// Provide Group Details
const publicApi = usePublicApi();
// ================================================================
// Provide Account Details
const usernameErrorMessages = ref<string[]>([]);
const { validate: validateUsername, valid: validUsername } = useAsyncValidator(
username,
(v: string) => publicApi.validators.username(v),
i18n.tc("validation.username-is-taken"),
usernameErrorMessages
);
const emailErrorMessages = ref<string[]>([]);
const { validate: validateEmail, valid: validEmail } = useAsyncValidator(
email,
(v: string) => publicApi.validators.email(v),
i18n.tc("validation.email-is-taken"),
emailErrorMessages
);
const accountDetails = {
username,
fullName,
email,
advancedOptions,
validate: async () => {
if (!(validUsername.value && validEmail.value)) {
await Promise.all([validateUsername(), validateEmail()]);
}
return (safeValidate(domAccountForm as Ref<VForm>) && validUsername.value && validEmail.value);
},
reset: () => {
accountDetails.username.value = "";
accountDetails.fullName.value = "";
accountDetails.email.value = "";
accountDetails.advancedOptions.value = false;
},
};
// ================================================================
// Provide Credentials
const passwordMatch = () => password1.value === password2.value || i18n.tc("user.password-must-match");
const credentials = {
password1,
password2,
passwordMatch,
reset: () => {
credentials.password1.value = "";
credentials.password2.value = "";
}
};
return {
accountDetails,
credentials,
emailErrorMessages,
usernameErrorMessages,
// Fields
advancedOptions,
// Validators
validateUsername,
validateEmail,
// Dom Refs
domAccountForm,
};
};

View File

@@ -80,10 +80,12 @@
"recipe-events": "Recipe Events"
},
"general": {
"add": "Add",
"cancel": "Kanselleer",
"clear": "Maak skoon",
"close": "Maak toe",
"confirm": "Bevestig",
"confirm-how-does-everything-look": "How does everything look?",
"confirm-delete-generic": "Is jy seker jy wil dit uitvee?",
"copied_message": "Gekopieër!",
"create": "Skep",
@@ -142,14 +144,18 @@
"save": "Stoor",
"settings": "Verstellings",
"share": "Deel",
"show-all": "Show All",
"shuffle": "Skommel",
"sort": "Sorteer",
"sort-ascending": "Sort Ascending",
"sort-descending": "Sort Descending",
"sort-alphabetically": "Alfabeties",
"status": "Status",
"subject": "Onderwerp",
"submit": "Dien in",
"success-count": "Sukses: {count}",
"sunday": "Sondag",
"system": "System",
"templates": "Sjablone:",
"test": "Toets",
"themes": "Temas",
@@ -168,6 +174,7 @@
"units": "Eenhede",
"back": "Terug",
"next": "Volgende",
"start": "Start",
"toggle-view": "Wissel aansig",
"date": "Datum",
"id": "Id",
@@ -236,6 +243,8 @@
"group-preferences": "Groepvoorkeure",
"private-group": "Privaat group",
"private-group-description": "Deur jou groep op privaat te stel, stel alle publieke kykopsies op verstek. Dit oorskryf die verstellings per resep.",
"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": "Laat gebruikers buite jou groep toe om jou resepte te sien",
"allow-users-outside-of-your-group-to-see-your-recipes-description": "Indien hierdie opsie aangeskakel is, kan jy 'n resep met enigiemand deel. Sonder dat hulle 'n rekening het. As hierdie opsie afgeskakel is, kan jy net 'n resep met mense in jou groep deel. Of met 'n voorafgemaakte private skakel",
"show-nutrition-information": "Wys voedingsinligting",
@@ -349,10 +358,11 @@
},
"recipe-data-migrations": "Resep migrasie",
"recipe-data-migrations-explanation": "Jy kan resepte vanaf 'n ander program in Mealie invoer. Op hierdie manier kan jy vinnig aan die gang kom.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Coming from another application or an even older version of Mealie? Check out migrations and see if your data can be imported.",
"choose-migration-type": "Kies die tipe migrasie",
"tag-all-recipes": "Merk alle resepte met {tag-name}-merker",
"nextcloud-text": "Nextcloud-resepte kan ingevoer word vanaf 'n zip-dokument wat die data bevat wat in Nextcloud gestoor is. Sien die voorbeeldstruktuur hieronder om te verseker dat jou resepte ingevoer kan word.",
"chowdown-text": "Mealie kan invoer vanaf Chowdown. Laai die .zip-dokument daar af. En laai dit hier op",
"chowdown-text": "Mealie natively supports the chowdown repository format. Download the code repository as a .zip file and upload it below.",
"recipe-1": "Resep 1",
"recipe-2": "Resep 2",
"paprika-text": "Mealie kan resepte vanaf die Paprika-program invoer. Voer jou resepte uit Paprika uit, hernoem die uitvoeruitbreiding na .zip en laai dit hieronder op.",
@@ -360,6 +370,10 @@
"plantoeat": {
"title": "Plan to Eat",
"description-long": "Mealie kan resepte invoer vanaf 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."
}
},
"new-recipe": {
@@ -511,6 +525,7 @@
"edit-timeline-event": "Wysig tydlyn gebeurtenis",
"timeline": "Tydlyn",
"timeline-is-empty": "Nog niks op die tydlyn nie. Probeer hierdie resep maak!",
"timeline-no-events-found-try-adjusting-filters": "No events found. Try adjusting your search filters.",
"group-global-timeline": "{groupName} Algemene tydlyn",
"open-timeline": "Maak tydlyn oop",
"made-this": "Ek het dit gemaak",
@@ -531,6 +546,8 @@
"looking-for-migrations": "Op soek na migrasies?",
"import-with-url": "Voer in via URL",
"create-recipe": "Skep resep",
"create-recipe-description": "Create a new recipe from scratch.",
"create-recipes": "Create Recipes",
"import-with-zip": "Voer in met .zip",
"create-recipe-from-an-image": "Skep 'n resep vanaf 'n foto",
"bulk-url-import": "Grootmaat-URL-invoer",
@@ -726,7 +743,10 @@
"ldap-ready-error-text": "Nie alle LDAP-waardes is opgestel nie. Dit kan geïgnoreer word as jy nie LDAP-verifikasie gebruik nie.",
"ldap-ready-success-text": "Vereiste LDAP-veranderlikes is volledig ingestel.",
"build": "Build",
"recipe-scraper-version": "Resep skraper weergawe"
"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."
},
"shopping-list": {
"all-lists": "Alle lyste",
@@ -834,8 +854,11 @@
"link-id": "Skakel ID",
"link-name": "Skakel naam",
"login": "Meld aan",
"login-oidc": "Log ind med",
"or": "eller",
"logout": "Teken uit",
"manage-users": "Bestuur gebruikers",
"manage-users-description": "Create and manage users.",
"new-password": "Nuwe wagwoord",
"new-user": "Nuwe gebruiker",
"password-has-been-reset-to-the-default-password": "Wagwoord is teruggestel na die verstekwagwoord",
@@ -1131,7 +1154,17 @@
"background-tasks": "Agtergrond take",
"background-tasks-description": "Hier kan jy al die lopende agtergrond take en hul status sien",
"no-logs-found": "Geen logs gevind",
"tasks": "Take"
"tasks": "Take",
"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."
}
},
"profile": {
"welcome-user": "Welkom, {0}",

View File

@@ -80,10 +80,12 @@
"recipe-events": "Recipe Events"
},
"general": {
"add": "Add",
"cancel": "إلغاء",
"clear": "مسح",
"close": "إغلاق",
"confirm": "تأكيد",
"confirm-how-does-everything-look": "How does everything look?",
"confirm-delete-generic": "هل انت متأكد من حذف هذا؟",
"copied_message": "تم النسخ!",
"create": "إنشاء",
@@ -142,14 +144,18 @@
"save": "حفظ",
"settings": "الإعدادات",
"share": "مشاركة",
"show-all": "Show All",
"shuffle": "ترتيب عشوائي",
"sort": "ترتيب",
"sort-ascending": "Sort Ascending",
"sort-descending": "Sort Descending",
"sort-alphabetically": "ترتيب حَسَبَ الحروف الأبجدية",
"status": "الحالة",
"subject": "الموضوع",
"submit": "إرسال",
"success-count": "نجحت: {count}",
"sunday": "الأحد",
"system": "System",
"templates": "القوالب:",
"test": "تجربة",
"themes": "السمات",
@@ -168,6 +174,7 @@
"units": "الوحدات",
"back": "عودة",
"next": "التالي",
"start": "Start",
"toggle-view": "تبديل طريقة العرض",
"date": "التاريخ",
"id": "المعرف",
@@ -236,6 +243,8 @@
"group-preferences": "إعدادات المجموعة",
"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-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": "عرض معلومات التغذية",
@@ -349,10 +358,11 @@
},
"recipe-data-migrations": "Recipe Data Migrations",
"recipe-data-migrations-explanation": "Recipes can be migrated from another supported application to Mealie. This is a great way to get started with Mealie.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Coming from another application or an even older version of Mealie? Check out migrations and see if your data can be imported.",
"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 natively supports the chowdown repository format. Download the code repository as a .zip file and upload it below.",
"recipe-1": "Recipe 1",
"recipe-2": "Recipe 2",
"paprika-text": "Mealie can import recipes from the Paprika application. Export your recipes from paprika, rename the export extension to .zip and upload it below.",
@@ -360,6 +370,10 @@
"plantoeat": {
"title": "Plan to Eat",
"description-long": "Mealie can import recipies from 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."
}
},
"new-recipe": {
@@ -511,6 +525,7 @@
"edit-timeline-event": "Edit Timeline Event",
"timeline": "Timeline",
"timeline-is-empty": "Nothing on the timeline yet. Try making this recipe!",
"timeline-no-events-found-try-adjusting-filters": "No events found. Try adjusting your search filters.",
"group-global-timeline": "{groupName} Global Timeline",
"open-timeline": "Open Timeline",
"made-this": "I Made This",
@@ -531,6 +546,8 @@
"looking-for-migrations": "Looking For Migrations?",
"import-with-url": "Import with URL",
"create-recipe": "Create Recipe",
"create-recipe-description": "Create a new recipe from scratch.",
"create-recipes": "Create Recipes",
"import-with-zip": "Import with .zip",
"create-recipe-from-an-image": "Create recipe from an image",
"bulk-url-import": "Bulk URL Import",
@@ -726,7 +743,10 @@
"ldap-ready-error-text": "Not all LDAP Values are configured. This can be ignored if you are not using LDAP Authentication.",
"ldap-ready-success-text": "Required LDAP variables are all set.",
"build": "Build",
"recipe-scraper-version": "Recipe Scraper Version"
"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."
},
"shopping-list": {
"all-lists": "All Lists",
@@ -834,8 +854,11 @@
"link-id": "Link ID",
"link-name": "Link Name",
"login": "Login",
"login-oidc": "Login with",
"or": "or",
"logout": "Logout",
"manage-users": "Manage Users",
"manage-users-description": "Create and manage users.",
"new-password": "New Password",
"new-user": "New User",
"password-has-been-reset-to-the-default-password": "Password has been reset to the default password",
@@ -1131,7 +1154,17 @@
"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",
"tasks": "Tasks"
"tasks": "Tasks",
"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."
}
},
"profile": {
"welcome-user": "👋 Welcome, {0}",

View File

@@ -80,10 +80,12 @@
"recipe-events": "Събития на рецептата"
},
"general": {
"add": "Добави",
"cancel": "Откажи",
"clear": "Изчисти",
"close": "Затвори",
"confirm": "Потвърди",
"confirm-how-does-everything-look": "Как изглежда всичко?",
"confirm-delete-generic": "Сигурни ли сте, че желаете да изтриете това?",
"copied_message": "Копирано!",
"create": "Добави",
@@ -142,14 +144,18 @@
"save": "Запази",
"settings": "Настройки",
"share": "Сподели",
"show-all": "Покажи всички",
"shuffle": "Разбъркано",
"sort": "Сортирай",
"sort-ascending": "Сортирай възходящо",
"sort-descending": "Сортирай низходящо",
"sort-alphabetically": "По азбучен ред",
"status": "състояние",
"subject": "Относно",
"submit": "Изпрати",
"success-count": "Успешни: {count}",
"sunday": "Неделя",
"system": "Система",
"templates": "Шаблони:",
"test": "Тест",
"themes": "Теми",
@@ -168,6 +174,7 @@
"units": "Мерни единици",
"back": "Назад",
"next": "Напред",
"start": "Начало",
"toggle-view": "Превключване на режим",
"date": "Дата",
"id": "Id",
@@ -236,6 +243,8 @@
"group-preferences": "Настройки на групите",
"private-group": "Частна група",
"private-group-description": "Задаването на групата като лична ще зададе всички настройки за публично виждане към стандартните. Това е с по-висок приоритет от индивидуалните настройки за публично виждане на всяка една рецепта.",
"enable-public-access": "Включи публичния достъп",
"enable-public-access-description": "Направи груповите рецепти публични по подразбиране и позволи на посетителите да преглеждат рецептите без да се вписват",
"allow-users-outside-of-your-group-to-see-your-recipes": "Разрешете на потребители извън вашата група да виждат рецептите Ви",
"allow-users-outside-of-your-group-to-see-your-recipes-description": "Когато е пуснато ще може да генерирате публичен линк за споделяне на рецепти без да е нужно потребителя да се нуждае от вписване. Когато е изключено, ще можете да споделяте рецепти само с потребители, които са във Вашата група или чрез предварително генериран личен линк за споделяне.",
"show-nutrition-information": "Показвай информация за хранителните стойности",
@@ -349,10 +358,11 @@
},
"recipe-data-migrations": "Миграция на данни на рецепти",
"recipe-data-migrations-explanation": "Рецептите могат да бъдат мигрирани от други приложения поддържани от Mealie. Това е добър начин да започнете използването си на Mealie.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Идваш от друго приложение или дори по-стара версия на Mealie? Провери миграциите и виж дали данните ти могат да бъдат импорторани.",
"choose-migration-type": "Избери тип на миграцията",
"tag-all-recipes": "Добави {tag-name} като етикет във всички рецепти",
"nextcloud-text": "Nextcloud рецептите могат да бъдат импортирани от .zip файл, който съдържа данни съхранени в Nextcloud. Вижте примерната структура на папките по-долу за да се подсигурите, че рецептите Ви могат да бъдат импортирани.",
"chowdown-text": "Mealie поддържа формата на хранилището на Chowdown. Свалете кода на хранилището като .zip файл и го качете по-долу",
"chowdown-text": "Mealie поддържа формата на хранилището на Chowdown. Свалете кода на хранилището като .zip файл и го качете по-долу.",
"recipe-1": "Рецепта 1",
"recipe-2": "Рецепта 2",
"paprika-text": "Mealie може да импортирай рецепти от приложението Paprika. Експортирайте рецептите си от Paprika, преименувате файловото разширение на .zip и го качете по-долу.",
@@ -360,6 +370,10 @@
"plantoeat": {
"title": "Планиране на меню",
"description-long": "Mealie може да импортира рецепти от Plan to Eat."
},
"myrecipebox": {
"title": "Моята кутия с рецепти",
"description-long": "Mealie може да импортира рецепти от Моята кутия за рецепти. Експортирайте рецептите си в CSV формат, после качете .csv файлът по-долу."
}
},
"new-recipe": {
@@ -511,6 +525,7 @@
"edit-timeline-event": "Редактирай събитие",
"timeline": "Хронология на събитията",
"timeline-is-empty": "Няма история на събитията. Опитайте да приготвите рецептата!",
"timeline-no-events-found-try-adjusting-filters": "Няма намерени събития. Опитайте да промените филтрите си за търсене.",
"group-global-timeline": "{groupName} История на събитията",
"open-timeline": "Отвори историята на събитията",
"made-this": "Сготвих рецептата",
@@ -531,6 +546,8 @@
"looking-for-migrations": "Миграция на данни",
"import-with-url": "Импортирай от линк",
"create-recipe": "Добави рецепта",
"create-recipe-description": "Създайте нова рецепта от чернова.",
"create-recipes": "Създайте рецепти",
"import-with-zip": "Импортирай от .zip",
"create-recipe-from-an-image": "Добави рецепта от снимка",
"bulk-url-import": "Импортиране на рецепти от линк",
@@ -726,7 +743,10 @@
"ldap-ready-error-text": "Не всички LDAP стойности са конфигурирани. Това може да бъде игнорирано, ако не използвате LDAP удостоверяване.",
"ldap-ready-success-text": "Задължителните LDAP променливи са зададени.",
"build": "Компилинирана версия",
"recipe-scraper-version": "Версия на скрепер на рецепти"
"recipe-scraper-version": "Версия на скрепер на рецепти",
"oidc-ready": "Готов за OIDC",
"oidc-ready-error-text": "Не всички OIDC стойности са конфигурирани. Това може да бъде игнорирано, ако не използвате OIDC удостоверяване.",
"oidc-ready-success-text": "Задължителните OIDC променливи са зададени."
},
"shopping-list": {
"all-lists": "Всички списъци",
@@ -834,8 +854,11 @@
"link-id": "ID на линка",
"link-name": "Има на линка",
"login": "Вход",
"login-oidc": "Впиши се с",
"or": "или",
"logout": "Изход",
"manage-users": "Управление на потребителите",
"manage-users-description": "Създавайте и управлявайте потребители.",
"new-password": "Нова парола",
"new-user": "Нов потребител",
"password-has-been-reset-to-the-default-password": "Паролата беше възстановена до паролата по подразбиране",
@@ -1131,7 +1154,17 @@
"background-tasks": "Задачи на заден фон",
"background-tasks-description": "Тук можете да видите всички изпълнявани задачи на заден фон и техния статус",
"no-logs-found": "Няма намерени логове",
"tasks": "Задачи"
"tasks": "Задачи",
"setup": {
"first-time-setup": "Настройка за първи път",
"welcome-to-mealie-get-started": "Добре дошли в Mealie! Да започваме",
"already-set-up-bring-to-homepage": "Вече съм настроен, просто ме отведете до началната страница",
"common-settings-for-new-sites": "Ето някои общи настройки за нови сайтове",
"setup-complete": "Настройката е завършена!",
"here-are-a-few-things-to-help-you-get-started": "Ето няколко неща, които ще Ви помогнат да започнете с Mealie",
"restore-from-v1-backup": "Имате резервно копие от предишна инстанция на Mealie v1? Можете да го възстановите тук.",
"manage-profile-or-get-invite-link": "Управлявайте собствения си профил или вземете връзка за покана, която да споделите с други."
}
},
"profile": {
"welcome-user": "👋 Добре дошъл(а), {0}",

View File

@@ -80,10 +80,12 @@
"recipe-events": "Esdeveniments de receptes"
},
"general": {
"add": "Add",
"cancel": "Anuŀla",
"clear": "Neteja",
"close": "Tanca",
"confirm": "Confirma",
"confirm-how-does-everything-look": "How does everything look?",
"confirm-delete-generic": "Esteu segur de voler suprimir-lo?",
"copied_message": "S'ha copiat!",
"create": "Crea",
@@ -142,14 +144,18 @@
"save": "Desa",
"settings": "Configuració",
"share": "Compartiu",
"show-all": "Show All",
"shuffle": "Barreja",
"sort": "Ordena",
"sort-ascending": "Sort Ascending",
"sort-descending": "Sort Descending",
"sort-alphabetically": "Alfabèticament",
"status": "Estat",
"subject": "Assumpte",
"submit": "Envia",
"success-count": "Amb èxit: {count}",
"sunday": "Diumenge",
"system": "System",
"templates": "Plantilles:",
"test": "Prova",
"themes": "Temes",
@@ -168,6 +174,7 @@
"units": "Unitats",
"back": "Torna",
"next": "Següent",
"start": "Start",
"toggle-view": "Commuta la visualització",
"date": "Data",
"id": "Id",
@@ -236,6 +243,8 @@
"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-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",
"show-nutrition-information": "Mostra la informació nutricional",
@@ -349,10 +358,11 @@
},
"recipe-data-migrations": "Migració de receptes",
"recipe-data-migrations-explanation": "Les receptes es poden migrar des d'una altra aplicació suportada cap a Mealie. És una manera genial de començar a utilitzar el Mealie.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Coming from another application or an even older version of Mealie? Check out migrations and see if your data can be imported.",
"choose-migration-type": "Elegeix un tipus de migració",
"tag-all-recipes": "Etiqueta totes les receptes amb {tag-name}",
"nextcloud-text": "Les receptes de Nextcloud poden ser importades d'un fitxer ZIP que contingui les dades emmagatzemades en Nextcloud. Segueix l'exemple d'estructura de directori de sota per assegurar que les receptes podran ser importades.",
"chowdown-text": "Mealie suporta de forma nativa el format de Chowdown. Descarrega el codi del repositori com a .zip i carrega'l a sota",
"chowdown-text": "Mealie natively supports the chowdown repository format. Download the code repository as a .zip file and upload it below.",
"recipe-1": "Recepta 1",
"recipe-2": "Recepta 2",
"paprika-text": "Mealie pot importar receptes des de l'aplicació Paprika. Exporta les teves receptes de Paprika, reanomena l'extensió de l'arxiu a .zip i penja'l aquí sota.",
@@ -360,6 +370,10 @@
"plantoeat": {
"title": "Plan to Eat",
"description-long": "Mealie pot importar receptes 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."
}
},
"new-recipe": {
@@ -511,6 +525,7 @@
"edit-timeline-event": "Edita l'esdeveniment de la cronologia",
"timeline": "Cronologia",
"timeline-is-empty": "Encara no hi ha res a la cronologia. Prova de fer aquesta recepta!",
"timeline-no-events-found-try-adjusting-filters": "No events found. Try adjusting your search filters.",
"group-global-timeline": "{groupName} Global Timeline",
"open-timeline": "Obrir la cronologia",
"made-this": "Ho he fet",
@@ -531,6 +546,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",
"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",
@@ -726,7 +743,10 @@
"ldap-ready-error-text": "Not all LDAP Values are configured. This can be ignored if you are not using LDAP Authentication.",
"ldap-ready-success-text": "Required LDAP variables are all set.",
"build": "Build",
"recipe-scraper-version": "Recipe Scraper Version"
"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."
},
"shopping-list": {
"all-lists": "Totes les llistes",
@@ -834,8 +854,11 @@
"link-id": "Id de l'enllaç",
"link-name": "Nom de l'enllaç",
"login": "Inicieu sessió",
"login-oidc": "Login with",
"or": "or",
"logout": "Tanca la sessió",
"manage-users": "Gestionar usuaris",
"manage-users-description": "Create and manage users.",
"new-password": "Nova contrasenya",
"new-user": "Nou Usuari",
"password-has-been-reset-to-the-default-password": "S'ha restablert la contrasenya al seu valor per defecte",
@@ -1131,7 +1154,17 @@
"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",
"tasks": "Tasks"
"tasks": "Tasks",
"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."
}
},
"profile": {
"welcome-user": "👋 Benvingut, {0}",

View File

@@ -80,10 +80,12 @@
"recipe-events": "Recipe Events"
},
"general": {
"add": "Add",
"cancel": "Zrušit",
"clear": "Vymazat",
"close": "Zavřít",
"confirm": "Potvrdit",
"confirm-how-does-everything-look": "How does everything look?",
"confirm-delete-generic": "Jste si jistý, že to chcete smazat?",
"copied_message": "Zkopírováno!",
"create": "Vytvořit",
@@ -142,14 +144,18 @@
"save": "Uložit",
"settings": "Nastavení",
"share": "Sdílet",
"show-all": "Show All",
"shuffle": "Náhodně",
"sort": "Seřadit",
"sort-ascending": "Sort Ascending",
"sort-descending": "Sort Descending",
"sort-alphabetically": "Abecedně",
"status": "Stav",
"subject": "Předmět",
"submit": "Odeslat",
"success-count": "Úspěšné: {count}",
"sunday": "Neděle",
"system": "System",
"templates": "Šablony:",
"test": "Test",
"themes": "Motivy",
@@ -168,6 +174,7 @@
"units": "Jednotky",
"back": "Zpět",
"next": "Další",
"start": "Start",
"toggle-view": "Přepnout zobrazení",
"date": "Datum",
"id": "Id",
@@ -236,6 +243,8 @@
"group-preferences": "Nastavení skupiny",
"private-group": "Soukromá skupina",
"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": "Povolit uživatelům mimo vaši skupinu vidět vaše recepty",
"allow-users-outside-of-your-group-to-see-your-recipes-description": "When enabled you can use a public share link to share specific recipes without authorizing the user. When disabled, you can only share recipes with users who are in your group or with a pre-generated private link",
"show-nutrition-information": "Show nutrition information",
@@ -349,10 +358,11 @@
},
"recipe-data-migrations": "Recipe Data Migrations",
"recipe-data-migrations-explanation": "Recepty mohou být migrovány z jiné podporované aplikace na Mealie. To je skvělý způsob, jak začít s Mealie.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Coming from another application or an even older version of Mealie? Check out migrations and see if your data can be imported.",
"choose-migration-type": "Zvolte si typ migrace",
"tag-all-recipes": "Tag all recipes with {tag-name} tag",
"nextcloud-text": "Nextcloud recepty lze importovat ze souboru zip, který obsahuje data uložená v Nextcloudu. Podívejte se na příklad struktury složek níže, abyste se ujistili, že vaše recepty lze importovat.",
"chowdown-text": "Mealie nativně podporuje formát chowdown. Stáhněte si z repozitáře kód jako .zip soubor a nahrajte ho níže",
"chowdown-text": "Mealie natively supports the chowdown repository format. Download the code repository as a .zip file and upload it below.",
"recipe-1": "Recept 1",
"recipe-2": "Recept 2",
"paprika-text": "Mealie může importovat recepty z aplikace Paprika. Exportujte své recepty z papriky, přejmenujte příponu exportovaného souboru na .zip a nahrajte jej níže.",
@@ -360,6 +370,10 @@
"plantoeat": {
"title": "Plan to Eat",
"description-long": "Mealie can import recipies from 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."
}
},
"new-recipe": {
@@ -511,6 +525,7 @@
"edit-timeline-event": "Upravit událost časové osy",
"timeline": "Časová osa",
"timeline-is-empty": "Zatím nic na časové ose není. Zkuste vytvořit tento recept!",
"timeline-no-events-found-try-adjusting-filters": "No events found. Try adjusting your search filters.",
"group-global-timeline": "{groupName} Globální časová osa",
"open-timeline": "Otevřít časovou osu",
"made-this": "Toto jsem uvařil",
@@ -531,6 +546,8 @@
"looking-for-migrations": "Looking For Migrations?",
"import-with-url": "Import with URL",
"create-recipe": "Vytvořit recept",
"create-recipe-description": "Create a new recipe from scratch.",
"create-recipes": "Create Recipes",
"import-with-zip": "Importovat pomocí .zip",
"create-recipe-from-an-image": "Vytvořit recept z obrázku",
"bulk-url-import": "Bulk URL Import",
@@ -726,7 +743,10 @@
"ldap-ready-error-text": "Not all LDAP Values are configured. This can be ignored if you are not using LDAP Authentication.",
"ldap-ready-success-text": "Required LDAP variables are all set.",
"build": "Build",
"recipe-scraper-version": "Recipe Scraper Version"
"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."
},
"shopping-list": {
"all-lists": "Všechny seznamy",
@@ -834,8 +854,11 @@
"link-id": "ID odkazu",
"link-name": "Název odkazu",
"login": "Přihlášení",
"login-oidc": "Login with",
"or": "or",
"logout": "Odhlášení",
"manage-users": "Spravovat uživatele",
"manage-users-description": "Create and manage users.",
"new-password": "Nové heslo",
"new-user": "Nový uživatel",
"password-has-been-reset-to-the-default-password": "Heslo bylo obnoveno na výchozí heslo",
@@ -1131,7 +1154,17 @@
"background-tasks": "Úlohy na pozadí",
"background-tasks-description": "Here you can view all the running background tasks and their status",
"no-logs-found": "Nenalezeny žádné záznamy",
"tasks": "Tasks"
"tasks": "Tasks",
"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."
}
},
"profile": {
"welcome-user": "👋 Vítejte, {0}",

View File

@@ -80,10 +80,12 @@
"recipe-events": "Hændelser for opskrifter"
},
"general": {
"add": "Tilføj",
"cancel": "Annuller",
"clear": "Ryd",
"close": "Luk",
"confirm": "Bekræft",
"confirm-how-does-everything-look": "How does everything look?",
"confirm-delete-generic": "Er du sikker på, du vil slette dette?",
"copied_message": "Kopieret!",
"create": "Opret",
@@ -142,14 +144,18 @@
"save": "Gem",
"settings": "Indstillinger",
"share": "Del",
"show-all": "Vis alle",
"shuffle": "Bland",
"sort": "Sorter",
"sort-ascending": "Sorter stigende",
"sort-descending": "Sorter Faldende",
"sort-alphabetically": "Alfabetisk",
"status": "Status",
"subject": "Emne",
"submit": "Indsend",
"success-count": "Succes: {count}",
"sunday": "Søndag",
"system": "System",
"templates": "Skabeloner:",
"test": "Afprøv",
"themes": "Temaer",
@@ -168,6 +174,7 @@
"units": "Enheder",
"back": "Tilbage",
"next": "Næste",
"start": "Start",
"toggle-view": "Skift visning",
"date": "Dato",
"id": "Id",
@@ -236,6 +243,8 @@
"group-preferences": "Gruppe Indstillinger",
"private-group": "Privat Gruppe",
"private-group-description": "Indstilling af din gruppe til privat, vil ændre alle indstillinger for offentlig visning. Dette tilsidesætter individuelle opskrifters indstillinger for offentlig visning.",
"enable-public-access": "Aktiver Offentlig Adgang",
"enable-public-access-description": "Gør gruppeopskrifter offentlige som standard, og tillade besøgende at se opskrifter uden at logge ind",
"allow-users-outside-of-your-group-to-see-your-recipes": "Tillad brugere udenfor din gruppe at se dine opskrifter",
"allow-users-outside-of-your-group-to-see-your-recipes-description": "Når aktiveret kan du bruge et link til offentlig deling til at dele specifikke opskrifter uden at oprette en bruger. Når deaktiveret, kan du kun dele opskrifter med brugere, der er i din gruppe eller med et prægenereret privat link",
"show-nutrition-information": "Vis ernæringsoplysninger",
@@ -349,10 +358,11 @@
},
"recipe-data-migrations": "Migrering af opskrifter",
"recipe-data-migrations-explanation": "Opskrifter kan migreres fra et andet understøttet program til Mealie. Dette er en fantastisk måde at komme i gang med Mealie.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Kommer fra en anden applikation eller en endnu ældre version af Mealie? Tjek migrationer og se om dine data kan importeres.",
"choose-migration-type": "Vælg Migreringstype",
"tag-all-recipes": "Tag alle opskrifter med {tag-name} tag",
"nextcloud-text": "Nextcloud opskrifter kan importeres fra en zip-fil, der indeholder data lagret i Nextcloud. Se eksempelmappestrukturen nedenfor for at sikre, at dine opskrifter kan importeres.",
"chowdown-text": "Mealie understøtter indbygget chowdown repository format. Download repositoriet som en .zip-fil og upload den nedenfor",
"chowdown-text": "Mealie natively supports the chowdown repository format. Download the code repository as a .zip file and upload it below.",
"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.",
@@ -360,6 +370,10 @@
"plantoeat": {
"title": "Planlæg at spise",
"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."
}
},
"new-recipe": {
@@ -511,6 +525,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.",
"group-global-timeline": "{groupName} Global Tidslinje",
"open-timeline": "Åbn tidslinje",
"made-this": "Jeg har lavet denne",
@@ -531,6 +546,8 @@
"looking-for-migrations": "Kigger du efter data migrering?",
"import-with-url": "Importér via URL",
"create-recipe": "Opret opskrift",
"create-recipe-description": "Opret ny opskrift fra bunden.",
"create-recipes": "Opret opskrift",
"import-with-zip": "Importér fra ZIP-fil",
"create-recipe-from-an-image": "Opret opskrift ud fra et billede",
"bulk-url-import": "Import fra flere URL-adresser",
@@ -540,7 +557,7 @@
"scrape-recipe": "Scrape Opskrift",
"scrape-recipe-description": "Hent en opskrift fra en hjemmeside. Angiv URL'en til den hjemmeside, du vil hente data fra, og Mealie vil forsøge at hente opskriften og tilføje den til din samling.",
"scrape-recipe-have-a-lot-of-recipes": "Har du en masse opskrifter, du ønsker at scrappe på en gang?",
"scrape-recipe-suggest-bulk-importer": "Try out the bulk importer",
"scrape-recipe-suggest-bulk-importer": "Prøv masse import",
"import-original-keywords-as-tags": "Importér originale nøgleord som mærker",
"stay-in-edit-mode": "Bliv i redigeringstilstand",
"import-from-zip": "Importer fra zip-fil",
@@ -564,7 +581,7 @@
"upload-image": "Upload billede",
"screen-awake": "Hold skærmen tændt",
"remove-image": "Fjern billede",
"nextStep": "Next step"
"nextStep": "Næste trin"
},
"search": {
"advanced-search": "Avanceret søgning",
@@ -601,7 +618,7 @@
"import-summary": "Importer resumé",
"partial-backup": "Delvis backup",
"unable-to-delete-backup": "Ude af stand til at slette 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": "Backups er samlede snapshots af databasen og datamappe på installationen. Dette omfatter alle data og kan ikke indstilles til at udelukke undergrupper af data. Du kan tænke på dette som et øjebliksbillede af Mealie på et bestemt tidspunkt. Disse fungerer som en database agnostisk måde at eksportere og importere data, eller sikkerhedskopiere installationen til en ekstern placering.",
"backup-restore": "Backup / gendannelse",
"back-restore-description": "Gendannelse af denne sikkerhedskopi vil overskrive alle de aktuelle data i din database og i datamappen og erstatte dem med indholdet af denne sikkerhedskopi. {cannot-be-undone} Hvis gendannelsen lykkes, vil du blive logget ud.",
"cannot-be-undone": "Denne handling kan ikke fortrydes - brug med forsigtighed.",
@@ -726,7 +743,10 @@
"ldap-ready-error-text": "Ikke alle LDAP- værdier er konfigureret. Dette kan ignoreres, hvis du ikke bruger LDAP- godkendelse.",
"ldap-ready-success-text": "Påkrævede LDAP-variabler er alle angivet.",
"build": "Build",
"recipe-scraper-version": "Version på opskrift-indsamler"
"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."
},
"shopping-list": {
"all-lists": "Alle lister",
@@ -809,7 +829,7 @@
"create-new-tool": "Opret et nyt værktøj",
"on-hand-checkbox-label": "Vis som \"Har allerede\" (afkrydset)",
"required-tools": "Nødvendige Værktøjer",
"tool": "Tool"
"tool": "Værktøj"
},
"user": {
"admin": "Administrator",
@@ -834,8 +854,11 @@
"link-id": "Link ID",
"link-name": "Linknavn",
"login": "Log på",
"login-oidc": "Log ind med",
"or": "eller",
"logout": "Log ud",
"manage-users": "Administrer brugere",
"manage-users-description": "Opret og administrér brugere.",
"new-password": "Ny adgangskode",
"new-user": "Ny bruger",
"password-has-been-reset-to-the-default-password": "Adgangskode er blevet nulstillet til systemstandarden",
@@ -1131,7 +1154,17 @@
"background-tasks": "Baggrundsopgaver",
"background-tasks-description": "Her kan du se status på alle opgaver, der afvikles i baggrunden",
"no-logs-found": "Ingen logfiler fundet",
"tasks": "Opgaver"
"tasks": "Opgaver",
"setup": {
"first-time-setup": "Første Opsætning",
"welcome-to-mealie-get-started": "Velkommen til Mealie! Lad os starte",
"already-set-up-bring-to-homepage": "Jeg er allerede oprettet, bare bringe mig til hjemmesiden",
"common-settings-for-new-sites": "Her er nogle almindelige indstillinger for nye sites",
"setup-complete": "Opsætning fuldført!",
"here-are-a-few-things-to-help-you-get-started": "Her er et par ting, der kan hjælpe dig i gang med Mealie",
"restore-from-v1-backup": "Har du en sikkerhedskopi fra en tidligere udgave af Mealie v1? Du kan gendanne den her.",
"manage-profile-or-get-invite-link": "Administrer din egen profil, eller tag et invitationslink til at dele med andre."
}
},
"profile": {
"welcome-user": "👋 Velkommen, {0}",

View File

@@ -80,10 +80,12 @@
"recipe-events": "Rezept-Ereignisse"
},
"general": {
"add": "Hinzufügen",
"cancel": "Abbrechen",
"clear": "Zurücksetzen",
"close": "Schließen",
"confirm": "Bestätigen",
"confirm-how-does-everything-look": "Wie sieht alles aus?",
"confirm-delete-generic": "Bist du dir sicher, dass du dies löschen möchtest?",
"copied_message": "Kopiert!",
"create": "Erstellen",
@@ -142,14 +144,18 @@
"save": "Speichern",
"settings": "Einstellungen",
"share": "Teilen",
"show-all": "Alle anzeigen",
"shuffle": "Mischen",
"sort": "Sortierung",
"sort-ascending": "Aufsteigend sortieren",
"sort-descending": "Absteigend sortieren",
"sort-alphabetically": "Alphabetisch",
"status": "Status",
"subject": "Ereignis",
"submit": "Absenden",
"success-count": "Erfolgreich: {count}",
"sunday": "Sonntag",
"system": "System",
"templates": "Vorlagen:",
"test": "Testen",
"themes": "Themen",
@@ -168,6 +174,7 @@
"units": "Einheiten",
"back": "Zurück",
"next": "Weiter",
"start": "Starten",
"toggle-view": "Ansicht wechseln",
"date": "Datum",
"id": "ID",
@@ -236,6 +243,8 @@
"group-preferences": "Gruppeneinstellungen",
"private-group": "Private Gruppe",
"private-group-description": "Wenn du deine Gruppe auf privat stellst, werden alle Einstellungen für den öffentlichen Zugriff zurückgesetzt. Individuelle Einstellungen für einzelne Rezepte werden überschrieben.",
"enable-public-access": "Öffentlichen Zugriff aktivieren",
"enable-public-access-description": "Gruppenrezepte standardmäßig öffentlich machen und es Besuchern erlauben, Rezepte ohne Anmeldung anzuzeigen",
"allow-users-outside-of-your-group-to-see-your-recipes": "Erlaube Benutzern außerhalb deiner Gruppe deine Rezepte zu sehen",
"allow-users-outside-of-your-group-to-see-your-recipes-description": "Wenn aktiviert, kannst du einen öffentlichen Link verwenden, um ausgewählte Rezepte zu teilen, ohne dass Benutzer sich anmelden müssen. Wenn deaktiviert, kannst du nur Rezepte mit Benutzern teilen, die in deiner Gruppe sind oder einen vorher erstellten privaten Link verwenden",
"show-nutrition-information": "Nährwerttabelle anzeigen",
@@ -349,6 +358,7 @@
},
"recipe-data-migrations": "Rezeptdatenmigration",
"recipe-data-migrations-explanation": "Rezepte können aus unterstützten Programmen nach Mealie migriert werden. Das ist eine gute Möglichkeit, um mit Mealie loszulegen.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Wechselst du von einer anderen Anwendung oder einer noch älteren Version von Mealie? Prüfe die Migrations-Optionen, vielleicht können deine Daten importiert werden.",
"choose-migration-type": "Migrationsart wählen",
"tag-all-recipes": "Alle Rezepte mit Schlagwort {tag-name} versehen",
"nextcloud-text": "Nextcloud Rezepte können aus einer Zip-Datei importiert werden, die die in Nextcloud gespeicherten Daten enthält. Vergleiche die Beispiel-Ordnerstruktur unten um sicherzustellen, dass deine Rezepte importiert werden können.",
@@ -360,6 +370,10 @@
"plantoeat": {
"title": "Plan to Eat",
"description-long": "Mealie kann Rezepte von Plan to Eat importieren."
},
"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."
}
},
"new-recipe": {
@@ -408,7 +422,7 @@
"carbohydrate-content": "Kohlenhydrate",
"categories": "Kategorien",
"comment-action": "Kommentieren",
"comment": "Kommentieren",
"comment": "Kommentar",
"comments": "Kommentare",
"delete-confirmation": "Bist du dir sicher, dass du dieses Rezept löschen möchtest?",
"delete-recipe": "Rezept löschen",
@@ -494,8 +508,8 @@
"cook-mode": "Koch-Modus",
"link-ingredients": "Zutaten verlinken",
"merge-above": "Mit Eintrag darüber zusammenführen",
"move-to-bottom": "Move To Bottom",
"move-to-top": "Move To Top",
"move-to-bottom": "Ganz nach unten",
"move-to-top": "Ganz nach oben",
"reset-scale": "Maßstab zurücksetzen",
"decrease-scale-label": "Maßstab um 1 verringern",
"increase-scale-label": "Maßstab um 1 erhöhen",
@@ -511,13 +525,14 @@
"edit-timeline-event": "Zeitstrahl-Ereignis bearbeiten",
"timeline": "Zeitstrahl",
"timeline-is-empty": "Noch nichts auf dem Zeitstrahl. Probier dieses Rezept aus!",
"timeline-no-events-found-try-adjusting-filters": "Keine Ereignisse gefunden. Probiere es mit anderen Suchfiltern.",
"group-global-timeline": "{groupName} Globaler Zeitstrahl",
"open-timeline": "Zeitstrahl öffnen",
"made-this": "Ich hab's gemacht",
"how-did-it-turn-out": "Wie ist es geworden?",
"user-made-this": "{user} hat's gemacht",
"last-made-date": "Zuletzt gemacht {date}",
"api-extras-description": "Rezepte-Extras sind ein Hauptmerkmal der Mealie API. Sie ermöglichen es dir, benutzerdefinierte JSON Key-Value-Paare zu einem Rezept zu erstellen, um Drittanbietern-Anwendungen zu steuern. Du kannst diese dazu verwenden, um Automatisierungen auszulösen oder benutzerdefinierte Nachrichten an bestimmte Geräte zu senden.",
"api-extras-description": "Rezepte-Extras sind ein Hauptmerkmal der Mealie API. Sie ermöglichen es dir, benutzerdefinierte JSON Key-Value-Paare zu einem Rezept zu erstellen, um Drittanbieter-Anwendungen zu steuern. Du kannst diese dazu verwenden, um Automatisierungen auszulösen oder benutzerdefinierte Nachrichten an bestimmte Geräte zu senden.",
"message-key": "Nachrichten-Schlüssel",
"parse": "Parse",
"attach-images-hint": "Bilder durch Ziehen & Ablegen in den Editor hinzufügen",
@@ -531,6 +546,8 @@
"looking-for-migrations": "Suchst du nach Migrationen?",
"import-with-url": "Von URL importieren",
"create-recipe": "Rezept erstellen",
"create-recipe-description": "Erstelle ein neues Rezept von Grund auf.",
"create-recipes": "Rezepte erstellen",
"import-with-zip": "Von .zip importieren",
"create-recipe-from-an-image": "Rezept von Foto erstellen",
"bulk-url-import": "URL Massenimport",
@@ -601,7 +618,7 @@
"import-summary": "Zusammenfassung des Imports",
"partial-backup": "Teilsicherung",
"unable-to-delete-backup": "Sicherung kann nicht gelöscht werden.",
"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": "Backups sind vollständige Schnappschüsse der Datenbank und des Datenverzeichnisses der Website. Darin sind sämtliche Daten enthalten, es können keine Teile von Daten ausgeschlossen werden. Es ist wie ein Schnappschuss von Mealie zu einem bestimmten Zeitpunkt. Es handelt sich um eine von der Datenbank unabhängige Möglichkeit, Daten zu exportieren und zu importieren oder die Webseite an einem externen Ort zu sichern.",
"backup-restore": "Wiederherstellen aus Sicherung",
"back-restore-description": "Das Wiederherstellen dieser Sicherung wird alle vorhandenen Daten in deiner Datenbank und im Datenverzeichnis überschreiben und durch den Inhalt dieser Sicherung ersetzen. {cannot-be-undone} Wenn die Wiederherstellung erfolgreich war, wirst du abgemeldet.",
"cannot-be-undone": "Diese Aktion kann nicht rückgängig gemacht werden - verwende sie mit Vorsicht.",
@@ -723,10 +740,13 @@
"server-side-base-url-error-text": "`BASE_URL` ist immer noch der Standardwert auf dem API-Server. Das verursacht Probleme mit Benachrichtigungslinks auf dem Server für E-Mails, etc.",
"server-side-base-url-success-text": "Serverseitige URL entspricht nicht der Standardeinstellung",
"ldap-ready": "LDAP bereit",
"ldap-ready-error-text": "Nicht alle LDAP-Werte sind konfiguriert. Das kann ignoriert werden, wenn du keine LDAP-Authentifizierung verwendest.",
"ldap-ready-error-text": "Es sind nicht alle LDAP-Werte konfiguriert. Wenn du keine LDAP-Authentifizierung benutzt, kannst du das ignorieren.",
"ldap-ready-success-text": "Alle erforderlichen LDAP-Variablen sind hinterlegt.",
"build": "Build",
"recipe-scraper-version": "Rezept Scraper Version"
"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."
},
"shopping-list": {
"all-lists": "Alle Listen",
@@ -834,8 +854,11 @@
"link-id": "Linkkennung",
"link-name": "Linkname",
"login": "Anmeldung",
"login-oidc": "Anmelden mit",
"or": "oder",
"logout": "Abmelden",
"manage-users": "Benutzer verwalten",
"manage-users-description": "Benutzer erstellen und verwalten.",
"new-password": "Neues Passwort",
"new-user": "Neuer Benutzer",
"password-has-been-reset-to-the-default-password": "Passwort wurde auf das Standardpasswort zurückgesetzt",
@@ -1131,7 +1154,17 @@
"background-tasks": "Hintergrundaufgaben",
"background-tasks-description": "Hier kannst du alle laufenden Hintergrundaufgaben und ihren Status beobachten",
"no-logs-found": "Keine Protokolle gefunden",
"tasks": "Aufgaben"
"tasks": "Aufgaben",
"setup": {
"first-time-setup": "Erstmalige Einrichtung",
"welcome-to-mealie-get-started": "Willkommen bei Mealie! Los geht's",
"already-set-up-bring-to-homepage": "Ich habe schon alles eingerichtet, bring mich zur Startseite",
"common-settings-for-new-sites": "Hier sind einige allgemeine Einstellungen für neue Seiten",
"setup-complete": "Einrichtung abgeschlossen!",
"here-are-a-few-things-to-help-you-get-started": "Hier sind einige Funktionen, die dich beim Start mit Mealie unterstützen",
"restore-from-v1-backup": "Hast du ein Backup von einer früheren v1 Instanz von Mealie? Hier kannst du es wiederherstellen.",
"manage-profile-or-get-invite-link": "Verwalte dein eigenes Profil oder erstelle einen Einladungslink, den du an andere weitergeben kannst."
}
},
"profile": {
"welcome-user": "👋 Willkommen, {0}",

View File

@@ -53,7 +53,7 @@
"apprise-url": "URL Έκπληξης",
"database": "Βάση δεδομένων",
"delete-event": "Διαγραφή γεγονότος",
"event-delete-confirmation": "Σίγουρα θέλετε να διαγράψετε αυτό το γεγονός;",
"event-delete-confirmation": "Θέλετε σίγουρα να διαγράψετε αυτό το γεγονός;",
"event-deleted": "Το γεγονός Διαγράφηκε",
"event-updated": "Το γεγονός ενημερώθηκε",
"new-notification-form-description": "Η Mealie χρησιμοποιεί τη βιβλιοθήκη Apprise για τη δημιουργία ειδοποιήσεων. Προσφέρουν πολλές επιλογές για τις υπηρεσίες που θα χρησιμοποιηθούν για ειδοποιήσεις. Ανατρέξτε στο wiki τους για έναν ολοκληρωμένο οδηγό για το πώς να δημιουργήσετε τη διεύθυνση URL για την υπηρεσία σας. Αν είναι διαθέσιμο, η επιλογή του τύπου της ειδοποίησής σας μπορεί να περιλαμβάνει επιπλέον χαρακτηριστικά.",
@@ -76,15 +76,17 @@
"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",
"when-a-new-user-joins-your-group": "Οταν ένας νέος χρήστης ενταχθεί στην ομάδα σας",
"recipe-events": "Recipe Events"
},
"general": {
"add": "Προσθήκη",
"cancel": "Άκυρο",
"clear": "Εκκαθάριση",
"close": "Κλείσιμο",
"confirm": "Επιβεβαίωση",
"confirm-delete-generic": "Είστε βέβαιοι ότι θέλετε να γίνει διαγραφή;",
"confirm-how-does-everything-look": "Πώς φαίνονται τα πράγματα;",
"confirm-delete-generic": "Θέλετε σίγουρα να γίνει διαγραφή;",
"copied_message": "Αντιγράφηκε!",
"create": "Δημιουργία",
"created": "Δημιουργήθηκε",
@@ -114,10 +116,10 @@
"json": "JSON",
"keyword": "Λέξη-κλειδί",
"link-copied": "Ο Σύνδεσμος Αντιγράφηκε",
"loading": "Loading",
"loading": "Φόρτωση",
"loading-events": "Loading Events",
"loading-recipe": "Loading recipe...",
"loading-ocr-data": "Loading OCR data...",
"loading-recipe": "Φόρτωση συνταγών...",
"loading-ocr-data": "Φόρτωση δεδομένων OCR...",
"loading-recipes": "Φόρτωση Συνταγών",
"message": "Μήνυμα",
"monday": "Δευτέρα",
@@ -128,7 +130,7 @@
"no-recipe-found": "Δεν βρέθηκαν συνταγές",
"ok": "ΟΚ",
"options": "Επιλογές:",
"plural-name": "Plural Name",
"plural-name": "Ονομα στον πληθυντικό",
"print": "Εκτύπωση",
"print-preferences": "Προτιμήσεις Εκτύπωσης",
"random": "Τυχαίο",
@@ -142,14 +144,18 @@
"save": "Αποθήκευση",
"settings": "Ρυθμίσεις",
"share": "Κοινοποίηση",
"show-all": "Προβολή Ολων",
"shuffle": "Τυχαία",
"sort": "Ταξινόμηση",
"sort-ascending": "Αύξουσα Ταξινόμηση",
"sort-descending": "Φθίνουσα Ταξινόμηση",
"sort-alphabetically": "Αλφαβητική",
"status": "Κατάσταση",
"subject": "Θέμα",
"submit": "Υποβολή",
"success-count": "Επιτυχία: {count}",
"sunday": "Κυριακή",
"system": "Σύστημα",
"templates": "Πρότυπα:",
"test": "Δοκιμή",
"themes": "Θέματα",
@@ -168,6 +174,7 @@
"units": "Μονάδες",
"back": "Πίσω",
"next": "Επόμενο",
"start": "Start",
"toggle-view": "Εναλλαγή προβολής",
"date": "Ημερομηνία",
"id": "Αναγνωριστικό",
@@ -178,19 +185,19 @@
"menu": "Μενού",
"a-name-is-required": "Απαιτείται όνομα",
"delete-with-name": "Διαγραφή {name}",
"confirm-delete-generic-with-name": "Σίγουρα θέλετε να διαγράψετε το εξής: {name};",
"confirm-delete-generic-with-name": "Θέλετε σίγουρα να διαγράψετε το εξής: {name};",
"confirm-delete-own-admin-account": "Παρακαλώ σημειώστε ότι προσπαθείτε να διαγράψετε το δικό σας λογαριασμό διαχειριστή! Αυτή η ενέργεια δεν μπορεί να αναιρεθεί και θα διαγράψει οριστικά τον λογαριασμό σας;",
"organizer": "Μηχανισμός οργάνωσης",
"transfer": "Μεταφορά",
"copy": "Αντιγραφή",
"color": "Χρώμα",
"timestamp": "Χρονική σήμανση",
"last-made": "Τελευταία Δημιουργία",
"last-made": "Τελευταία παρασκευή",
"learn-more": "Μάθετε Περισσότερα",
"this-feature-is-currently-inactive": "Αυτή η λειτουργία είναι αυτή τη στιγμή απενεργοποιημένη",
"clipboard-not-supported": "Δεν υποστηρίζεται το πρόχειρο",
"copied-to-clipboard": "Αντιγράφηκε στο πρόχειρο",
"your-browser-does-not-support-clipboard": "Your browser does not support clipboard",
"your-browser-does-not-support-clipboard": "Το πρόγραμμα περιήγησής σας δεν υποστηρίζει πρόχειρο",
"copied-items-to-clipboard": "Κανένα στοιχείο δεν αντιγράφηκε στο πρόχειρο| Ένα στοιχείο αντιγράφηκε στο πρόχειρο|Αντιγράφηκαν {count} στοιχεία στο πρόχειρο",
"actions": "Ενέργειες",
"selected-count": "Επιλεγμένα: {count}",
@@ -198,12 +205,12 @@
"refresh": "Ανανέωση",
"upload-file": "Μεταφόρτωση αρχείου",
"created-on-date": "Δημιουργήθηκε στις: {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?"
"unsaved-changes": "Εχετε μη αποθηκευμένες αλλαγές. Θέλετε να κάνετε αποθήκευση πριν από την αποχώρηση; Εντάξει για αποθήκευση, Ακυρο για απόρριψη των αλλαγών.",
"clipboard-copy-failure": "Η αντιγραφή στο πρόχειρο απέτυχε.",
"confirm-delete-generic-items": "Θέλετε σίγουρα να διαγράψετε τα ακόλουθα αντικείμενα;"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτό τον ασφαλή σύνδεσμο <b>{groupName}<b/>;",
"are-you-sure-you-want-to-delete-the-group": "Θέλετε σίγουρα να διαγράψετε αυτό τον ασφαλή σύνδεσμο <b>{groupName}<b/>;",
"cannot-delete-default-group": "Δεν μπορείς να διαγράψεις την προεπιλεγμένη ομάδα",
"cannot-delete-group-with-users": "Δεν είναι δυνατή η διαγραφή ομάδας με χρήστες",
"confirm-group-deletion": "Επιβεβαίωση Διαγραφής Ομάδας",
@@ -236,6 +243,8 @@
"group-preferences": "Προτιμήσεις Ομάδας",
"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-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": "Εμφάνιση διατροφικών πληροφοριών",
@@ -349,10 +358,11 @@
},
"recipe-data-migrations": "Recipe Data Migrations",
"recipe-data-migrations-explanation": "Recipes can be migrated from another supported application to Mealie. This is a great way to get started with Mealie.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Coming from another application or an even older version of Mealie? Check out migrations and see if your data can be imported.",
"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 υποστηρίζει εγγενώς τη μορφή αποθετηρίου. Κατεβάστε το αποθετήριο κώδικα ως αρχείο .zip και ανεβάστε το παρακάτω.",
"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.",
@@ -360,12 +370,16 @@
"plantoeat": {
"title": "Plan to Eat",
"description-long": "Mealie can import recipies from Plan to Eat."
},
"myrecipebox": {
"title": "Κιβώτιο Συνταγών",
"description-long": "Το Mealie μπορεί να εισάγει συνταγές από το Κουτί Συνταγών. Εξάγετε τις συνταγές σας σε μορφή CSV, στη συνέχεια, ανεβάστε το αρχείο .csv παρακάτω."
}
},
"new-recipe": {
"bulk-add": "Μαζική Προσθήκη",
"error-details": "Μόνο ιστοσελίδες που περιέχουν ld+json ή μικροδεδομένα μπορούν να εισαχθούν από την Mealie. Οι πιο σημαντικές ιστοσελίδες συνταγών υποστηρίζουν αυτή τη δομή δεδομένων. Αν το site σας δεν μπορεί να εισαχθεί, αλλά υπάρχουν δεδομένα json στο αρχείο καταγραφής, παρακαλούμε να υποβάλετε ένα github πρόβλημα με το URL και τα δεδομένα.",
"error-title": "Φαίνεται Όπως Δεν Μπορούσαμε Να βρούμε Οτιδήποτε",
"error-title": "Φαίνεται πως δεν μπορέσαμε να βρούμε τίποτα",
"from-url": "Εισαγωγή συνταγής",
"github-issues": "Σφάλματα GitHub",
"google-ld-json-info": "Google ld+json Info",
@@ -377,9 +391,9 @@
"upload-individual-zip-file": "Ανεβάστε ένα μεμονωμένο αρχείο .zip που εξάγεται από μια άλλη περίπτωση Mealie.",
"url-form-hint": "Αντιγράψτε και επικολλήστε έναν σύνδεσμο από την αγαπημένη σας ιστοσελίδα συνταγών",
"view-scraped-data": "Προβολή Παραγόμενων Δεδομένων",
"trim-whitespace-description": "Περικοπή αιχμής και διαδρομής κενών καθώς και κενών γραμμών",
"trim-whitespace-description": "Περικοπή κενών στην αρχή και το τέλος καθώς και των κενών γραμμών",
"trim-prefix-description": "Περικοπή πρώτου χαρακτήρα από κάθε γραμμή",
"split-by-numbered-line-description": "Προσπάθεια για χωρισμό μιας παραγράφου ταιριάζοντας μοτίβα '1)' ή '1'",
"split-by-numbered-line-description": "Προσπάθεια για χωρισμό μιας παραγράφου ταιριάζοντας μοτίβα '1)' ή '1.'",
"import-by-url": "Import a recipe by URL",
"create-manually": "Create a recipe manually",
"make-recipe-image": "Make this the recipe image"
@@ -401,7 +415,7 @@
},
"recipe": {
"add-key": "Προσθήκη Κλειδιού",
"add-to-favorites": "Προσθήκη στα αγαπημένα",
"add-to-favorites": "Προσθήκη στα Aγαπημένα",
"api-extras": "API Extras",
"calories": "Θερμίδες",
"calories-suffix": "θερμίδες",
@@ -410,7 +424,7 @@
"comment-action": "Σχόλιο",
"comment": "Comment",
"comments": "Σχόλια",
"delete-confirmation": "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτή τη συνταγή;",
"delete-confirmation": "Θέλετε σίγουρα να διαγράψετε αυτή τη συνταγή;",
"delete-recipe": "Διαγραφή Συνταγής",
"description": "Περιγραφή",
"disable-amount": "Απενεργοποίηση Ποσών Συστατικών",
@@ -435,7 +449,7 @@
"nutrition": "Διατροφή",
"object-key": "Κλειδί Αντικειμένου",
"object-value": "Τιμή αντικειμένου",
"original-url": "Αρχική URL",
"original-url": "Αρχική διεύθυνση URL",
"perform-time": "Χρόνος Μαγειρέματος",
"prep-time": "Χρόνος Προετοιμασίας",
"protein-content": "Πρωτεΐνες",
@@ -471,7 +485,7 @@
"date-format-hint-yyyy-mm-dd": "YYYY-MM-DD format",
"add-to-list": "Add to List",
"add-to-plan": "Add to Plan",
"add-to-timeline": "Add to Timeline",
"add-to-timeline": "Προσθήκη στο χρονοδιάγραμμα",
"recipe-added-to-list": "Recipe added to list",
"recipes-added-to-list": "Recipes added to list",
"successfully-added-to-list": "Successfully added to list",
@@ -482,7 +496,7 @@
"yield": "Yield",
"quantity": "Quantity",
"choose-unit": "Choose Unit",
"press-enter-to-create": "Press Enter to Create",
"press-enter-to-create": "Πατήστε Enter για δημιουργία",
"choose-food": "Choose Food",
"notes": "Notes",
"toggle-section": "Toggle Section",
@@ -508,29 +522,32 @@
"resume-timer": "Resume Timer",
"stop-timer": "Stop Timer"
},
"edit-timeline-event": "Edit Timeline Event",
"timeline": "Timeline",
"timeline-is-empty": "Nothing on the timeline yet. Try making this recipe!",
"edit-timeline-event": "Επεξεργασία συμβάντος χρονοδιαγράμματος",
"timeline": "Χρονοδιάγραμμα",
"timeline-is-empty": "Δεν υπάρχει τίποτα ακόμα στο χρονοδιάγραμμα. Δοκιμάστε να κάνετε αυτή τη συνταγή!",
"timeline-no-events-found-try-adjusting-filters": "No events found. Try adjusting your search filters.",
"group-global-timeline": "{groupName} Global Timeline",
"open-timeline": "Open Timeline",
"made-this": "I Made This",
"open-timeline": "Ανοιγμα χρονοδιαγράμματος",
"made-this": "Το έφτιαξα",
"how-did-it-turn-out": "How did it turn out?",
"user-made-this": "{user} made this",
"last-made-date": "Last Made {date}",
"user-made-this": "Ο{user} το έφτιαξε αυτό",
"last-made-date": "Τελευταία παρασκευή {date}",
"api-extras-description": "Recipes extras are a key feature of the Mealie API. They allow you to create custom JSON key/value pairs within a recipe, to reference from 3rd party applications. You can use these keys to provide information, for example to trigger automations or custom messages to relay to your desired device.",
"message-key": "Message Key",
"parse": "Parse",
"parse": "Ανάλυση",
"attach-images-hint": "Attach images by dragging & dropping them into the editor",
"drop-image": "Drop image",
"enable-ingredient-amounts-to-use-this-feature": "Enable ingredient amounts to use this feature",
"recipes-with-units-or-foods-defined-cannot-be-parsed": "Recipes with units or foods defined cannot be parsed.",
"parse-ingredients": "Parse ingredients",
"recipes-with-units-or-foods-defined-cannot-be-parsed": "Δεν είναι δυνατή η ανάλυση συνταγών με καθορισμένες μονάδες ή φαγητά.",
"parse-ingredients": "Ανάλυση συστατικών",
"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?",
"import-with-url": "Import with URL",
"create-recipe": "Create Recipe",
"create-recipe-description": "Create a new recipe from scratch.",
"create-recipes": "Create Recipes",
"import-with-zip": "Import with .zip",
"create-recipe-from-an-image": "Create recipe from an image",
"bulk-url-import": "Bulk URL Import",
@@ -577,11 +594,11 @@
"has-all": "Has All",
"results": "Αποτελέσματα",
"search": "Αναζήτηση",
"search-mealie": "Αναζήτηση Mealie (πατήστε /)",
"search-mealie": "Αναζήτηση στο Mealie (πατήστε /)",
"search-placeholder": "Αναζήτηση...",
"tag-filter": "Φίλτρο Ετικέτας",
"search-hint": "Press '/'",
"advanced": "Advanced",
"search-hint": "Πατήστε '/'",
"advanced": "Για προχωρημένους",
"auto-search": "Auto Search",
"no-results": "No results found"
},
@@ -590,14 +607,14 @@
"admin-settings": "Ρυθμίσεις Διαχειριστή",
"backup": {
"backup-created": "Backup created successfully",
"backup-created-at-response-export_path": "Αντίγραφο ασφαλείας αποθηκεύτηκαν στο: {path}",
"backup-deleted": "Το Αντίγραφο διαγράφηκε",
"backup-created-at-response-export_path": "Δημιουργήθηκε αντίγραφο ασφαλείας στο: {path}",
"backup-deleted": "Το αντίγραφο ασφαλείας διαγράφηκε",
"restore-success": "Restore successful",
"backup-tag": "Αντίγραφο Ετικέτας",
"backup-tag": "Ετικέτα Αντιγράφου Ασφαλείας",
"create-heading": "Δημιουργία αντιγράφου ασφαλείας",
"delete-backup": "Διαγραφή Αντιγράφου Ασφαλείας",
"error-creating-backup-see-log-file": "Σφάλμα Δημιουργίας Αντιγράφου Ασφαλείας. Δείτε Το Αρχείο Καταγραφής",
"full-backup": "Πλήρες αντίγραφο ασφαλείας",
"full-backup": "Πλήρης Αντίγραφο Ασφαλείας",
"import-summary": "Εισαγωγή Περίληψης",
"partial-backup": "Μερικό Αντίγραφο Ασφαλείας",
"unable-to-delete-backup": "Αδυναμία διαγραφής αντιγράφου ασφαλείας.",
@@ -643,14 +660,14 @@
"site-settings": "Ρυθμίσεις Ιστοσελίδας",
"theme": {
"accent": "Έμφαση",
"dark": "Σκούρο",
"dark": "Σκοτεινό",
"default-to-system": "Προεπιλογή στο σύστημα",
"error": "Σφάλμα",
"error-creating-theme-see-log-file": "Σφάλμα δημιουργίας θέματος. Δείτε το αρχείο καταγραφής.",
"error-deleting-theme": "Σφάλμα διαγραφής θέματος",
"error-updating-theme": "Σφάλμα ενημέρωσης θέματος",
"info": "Πληροφορίες",
"light": "Ελαφρύ",
"light": "Φωτεινό",
"primary": "Πρωτεύον",
"secondary": "Δευτερεύων",
"success": "Επιτυχής",
@@ -662,8 +679,8 @@
"theme-saved": "Το Θέμα Αποθηκεύτηκε",
"theme-updated": "Το θέμα ενημερώθηκε",
"warning": "Προσοχή",
"light-mode": "Light Mode",
"dark-mode": "Dark Mode"
"light-mode": "Φωτεινή Λειτουργία",
"dark-mode": "Σκοτεινή Λειτουργία"
},
"token": {
"active-tokens": "ΕΝΕΡΓΑ TOKENS",
@@ -726,7 +743,10 @@
"ldap-ready-error-text": "Not all LDAP Values are configured. This can be ignored if you are not using LDAP Authentication.",
"ldap-ready-success-text": "Required LDAP variables are all set.",
"build": "Build",
"recipe-scraper-version": "Recipe Scraper Version"
"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."
},
"shopping-list": {
"all-lists": "Όλες οι λίστες",
@@ -773,7 +793,7 @@
"language": "Γλώσσα",
"maintenance": "Maintenance",
"background-tasks": "Background Tasks",
"parser": "Parser",
"parser": "Αναλυτής",
"developer": "Developer",
"cookbook": "Cookbook",
"create-cookbook": "Create a new cookbook"
@@ -803,18 +823,18 @@
},
"tool": {
"tools": "Εργαλεία",
"on-hand": "On Hand",
"on-hand": "Το έχω στο χέρι",
"create-a-tool": "Create a Tool",
"tool-name": "Tool Name",
"create-new-tool": "Create New Tool",
"on-hand-checkbox-label": "Show as On Hand (Checked)",
"required-tools": "Required Tools",
"on-hand-checkbox-label": "Εμφάνιση ως Στο Χέρι (επιλεγμένο)",
"required-tools": "Απαιτούμενα Εργαλεία",
"tool": "Tool"
},
"user": {
"admin": "Διαχειριστής",
"are-you-sure-you-want-to-delete-the-link": "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτό τον ασφαλή σύνδεσμο <b>{link}<b/>;",
"are-you-sure-you-want-to-delete-the-user": "Είστε βέβαιοι ότι θέλετε να διαγράψετε τον χρήστη <b>{activeName} ID: {activeId}<b/>;",
"are-you-sure-you-want-to-delete-the-link": "Θέλετε σίγουρα να διαγράψετε αυτό τον ασφαλή σύνδεσμο <b>{link}<b/>;",
"are-you-sure-you-want-to-delete-the-user": "Θέλετε σίγουρα να διαγράψετε τον χρήστη <b>{activeName} ID: {activeId}<b/>;",
"auth-method": "Auth Method",
"confirm-link-deletion": "Επιβεβαίωση διαγραφής",
"confirm-password": "Επιβεβαίωση Κωδικού",
@@ -834,8 +854,11 @@
"link-id": "Σύνδεσμος ID",
"link-name": "Όνομα συνδέσμου",
"login": "Σύνδεση",
"login-oidc": "Login with",
"or": "ή",
"logout": "Αποσύνδεση",
"manage-users": "Διαχείριση χρηστών",
"manage-users-description": "Create and manage users.",
"new-password": "Νέος Κωδικός",
"new-user": "Νέος χρήστης",
"password-has-been-reset-to-the-default-password": "Ο κωδικός πρόσβασης έχει επαναφερθεί στον προεπιλεγμένο κωδικό",
@@ -844,7 +867,7 @@
"password-updated": "Ο κωδικός πρόσβασης ενημερώθηκε",
"password": "Κωδικός",
"password-strength": "Ο κωδικός είναι {strength}",
"please-enter-password": "Please enter your new password.",
"please-enter-password": "Παρακαλούμε εισάγετε το νέο κωδικό πρόσβασης.",
"register": "Εγγραφή",
"reset-password": "Επαναφορά Κωδικού",
"sign-in": "Είσοδος",
@@ -872,18 +895,18 @@
"you-are-not-allowed-to-delete-this-user": "Δεν επιτρέπεται να διαγράψετε αυτόν τον χρήστη",
"enable-advanced-content": "Ενεργοποίηση Προηγμένου Περιεχομένου",
"enable-advanced-content-description": "Ενεργοποιεί προηγμένες λειτουργίες όπως κλιμάκωση συνταγής, κλειδιά API, Webhooks και διαχείριση δεδομένων. Μην ανησυχείτε, μπορείτε πάντα να το αλλάξετε αργότερα",
"favorite-recipes": "Favorite Recipes",
"favorite-recipes": "Αγαπημένες Συνταγές",
"email-or-username": "Email or Username",
"remember-me": "Remember Me",
"please-enter-your-email-and-password": "Please enter your email and password",
"invalid-credentials": "Invalid Credentials",
"account-locked-please-try-again-later": "Account Locked. Please try again later",
"user-favorites": "User Favorites",
"user-favorites": "Αγαπημένα Χρήστη",
"password-strength-values": {
"weak": "Weak",
"good": "Good",
"strong": "Strong",
"very-strong": "Very Strong"
"weak": "Αδύναμος",
"good": "Καλός",
"strong": "Ισχυρός",
"very-strong": "Πολύ Ισχυρός"
},
"user-management": "User Management",
"reset-locked-users": "Reset Locked Users",
@@ -892,13 +915,13 @@
"user-details": "User Details",
"user-name": "User Name",
"authentication-method": "Authentication Method",
"authentication-method-hint": "This specifies how a user will authenticate with Mealie. If you're not sure, choose 'Mealie",
"authentication-method-hint": "Αυτό καθορίζει τον τρόπο με τον οποίο ένας χρήστης θα ταυτοποιηθεί με το Mealie. Αν δεν είστε σίγουροι, επιλέξτε 'Mealie'",
"permissions": "Permissions",
"administrator": "Administrator",
"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",
"enable-advanced-features": "Enable advanced features",
"enable-advanced-features": "Ενεργοποίηση χαρακτηριστικών για προχωρημένους",
"it-looks-like-this-is-your-first-time-logging-in": "It looks like this is your first time logging in.",
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Don't want to see this anymore? Be sure to change your email in your user settings!",
"forgot-password": "Forgot Password",
@@ -945,8 +968,8 @@
"unit-data": "Unit Data",
"use-abbv": "Use Abbv.",
"fraction": "Fraction",
"example-unit-singular": "ex: Tablespoon",
"example-unit-plural": "ex: Tablespoons",
"example-unit-singular": "π.χ.: Κουταλιά της σούπας",
"example-unit-plural": "π.χ.: Κουταλιές της σούπας",
"example-unit-abbreviation-singular": "ex: Tbsp",
"example-unit-abbreviation-plural": "ex: Tbsps"
},
@@ -1004,7 +1027,7 @@
}
},
"user-registration": {
"user-registration": "User Registration",
"user-registration": "Εγγραφή χρήστη",
"registration-success": "Registration Success",
"join-a-group": "Join a Group",
"create-a-new-group": "Create a New Group",
@@ -1085,7 +1108,7 @@
"admin": {
"maintenance": {
"storage-details": "Storage Details",
"page-title": "Site Maintenance",
"page-title": "Συντήρηση Ιστοσελίδας",
"summary-title": "Summary",
"button-label-get-summary": "Get Summary",
"button-label-open-details": "Details",
@@ -1127,11 +1150,21 @@
"ingredient-text": "Ingredient Text",
"average-confident": "{0} Confident",
"try-an-example": "Try an example",
"parser": "Parser",
"parser": "Αναλυτής",
"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",
"tasks": "Tasks"
"tasks": "Tasks",
"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."
}
},
"profile": {
"welcome-user": "👋 Welcome, {0}",
@@ -1147,7 +1180,7 @@
"personal": "Personal",
"personal-description": "These are settings that are personal to you. Changes here won't affect other users",
"user-settings": "User Settings",
"user-settings-description": "Manage your preferences, change your password, and update your email",
"user-settings-description": "Διαχειριστείτε τις προτιμήσεις σας, αλλάξτε τον κωδικό πρόσβασής σας και ενημερώστε το 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!",
"group-settings": "Group Settings",
@@ -1165,8 +1198,8 @@
"email-sent": "Email Sent",
"error-sending-email": "Error Sending Email",
"personal-information": "Personal Information",
"preferences": "Preferences",
"show-advanced-description": "Show advanced features (API Keys, Webhooks, and Data Management)",
"preferences": "Προτιμήσεις",
"show-advanced-description": "Εμφάνιση χαρακτηριστικών για προχωρημένους (Κλειδιά API, Webhooks, και Διαχείριση Δεδομένων)",
"back-to-profile": "Back to Profile",
"looking-for-privacy-settings": "Looking for Privacy Settings?",
"manage-your-api-tokens": "Manage Your API Tokens",

View File

@@ -80,10 +80,12 @@
"recipe-events": "Recipe Events"
},
"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",
@@ -142,14 +144,18 @@
"save": "Save",
"settings": "Settings",
"share": "Share",
"show-all": "Show All",
"shuffle": "Shuffle",
"sort": "Sort",
"sort-ascending": "Sort Ascending",
"sort-descending": "Sort Descending",
"sort-alphabetically": "Alphabetical",
"status": "Status",
"subject": "Subject",
"submit": "Submit",
"success-count": "Success: {count}",
"sunday": "Sunday",
"system": "System",
"templates": "Templates:",
"test": "Test",
"themes": "Themes",
@@ -168,6 +174,7 @@
"units": "Units",
"back": "Back",
"next": "Next",
"start": "Start",
"toggle-view": "Toggle View",
"date": "Date",
"id": "Id",
@@ -236,6 +243,8 @@
"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",
@@ -349,10 +358,11 @@
},
"recipe-data-migrations": "Recipe Data Migrations",
"recipe-data-migrations-explanation": "Recipes can be migrated from another supported application to Mealie. This is a great way to get started with Mealie.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Coming from another application or an even older version of Mealie? Check out migrations and see if your data can be imported.",
"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 natively supports the chowdown repository format. Download the code repository as a .zip file and upload it below.",
"recipe-1": "Recipe 1",
"recipe-2": "Recipe 2",
"paprika-text": "Mealie can import recipes from the Paprika application. Export your recipes from paprika, rename the export extension to .zip and upload it below.",
@@ -360,6 +370,10 @@
"plantoeat": {
"title": "Plan to Eat",
"description-long": "Mealie can import recipies from 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."
}
},
"new-recipe": {
@@ -511,6 +525,7 @@
"edit-timeline-event": "Edit Timeline Event",
"timeline": "Timeline",
"timeline-is-empty": "Nothing on the timeline yet. Try making this recipe!",
"timeline-no-events-found-try-adjusting-filters": "No events found. Try adjusting your search filters.",
"group-global-timeline": "{groupName} Global Timeline",
"open-timeline": "Open Timeline",
"made-this": "I Made This",
@@ -531,6 +546,8 @@
"looking-for-migrations": "Looking For Migrations?",
"import-with-url": "Import with URL",
"create-recipe": "Create Recipe",
"create-recipe-description": "Create a new recipe from scratch.",
"create-recipes": "Create Recipes",
"import-with-zip": "Import with .zip",
"create-recipe-from-an-image": "Create recipe from an image",
"bulk-url-import": "Bulk URL Import",
@@ -726,7 +743,10 @@
"ldap-ready-error-text": "Not all LDAP Values are configured. This can be ignored if you are not using LDAP Authentication.",
"ldap-ready-success-text": "Required LDAP variables are all set.",
"build": "Build",
"recipe-scraper-version": "Recipe Scraper Version"
"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."
},
"shopping-list": {
"all-lists": "All Lists",
@@ -834,8 +854,11 @@
"link-id": "Link ID",
"link-name": "Link Name",
"login": "Login",
"login-oidc": "Login with",
"or": "or",
"logout": "Logout",
"manage-users": "Manage Users",
"manage-users-description": "Create and manage users.",
"new-password": "New Password",
"new-user": "New User",
"password-has-been-reset-to-the-default-password": "Password has been reset to the default password",
@@ -1131,7 +1154,17 @@
"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",
"tasks": "Tasks"
"tasks": "Tasks",
"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."
}
},
"profile": {
"welcome-user": "👋 Welcome, {0}",

View File

@@ -80,10 +80,12 @@
"recipe-events": "Recipe Events"
},
"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",
@@ -145,12 +147,15 @@
"show-all": "Show All",
"shuffle": "Shuffle",
"sort": "Sort",
"sort-ascending": "Sort Ascending",
"sort-descending": "Sort Descending",
"sort-alphabetically": "Alphabetical",
"status": "Status",
"subject": "Subject",
"submit": "Submit",
"success-count": "Success: {count}",
"sunday": "Sunday",
"system": "System",
"templates": "Templates:",
"test": "Test",
"themes": "Themes",
@@ -169,6 +174,7 @@
"units": "Units",
"back": "Back",
"next": "Next",
"start": "Start",
"toggle-view": "Toggle View",
"date": "Date",
"id": "Id",
@@ -237,6 +243,8 @@
"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",
@@ -350,10 +358,11 @@
},
"recipe-data-migrations": "Recipe Data Migrations",
"recipe-data-migrations-explanation": "Recipes can be migrated from another supported application to Mealie. This is a great way to get started with Mealie.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Coming from another application or an even older version of Mealie? Check out migrations and see if your data can be imported.",
"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 natively supports the chowdown repository format. Download the code repository as a .zip file and upload it below.",
"recipe-1": "Recipe 1",
"recipe-2": "Recipe 2",
"paprika-text": "Mealie can import recipes from the Paprika application. Export your recipes from paprika, rename the export extension to .zip and upload it below.",
@@ -361,6 +370,10 @@
"plantoeat": {
"title": "Plan to Eat",
"description-long": "Mealie can import recipies from 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."
}
},
"new-recipe": {
@@ -512,6 +525,7 @@
"edit-timeline-event": "Edit Timeline Event",
"timeline": "Timeline",
"timeline-is-empty": "Nothing on the timeline yet. Try making this recipe!",
"timeline-no-events-found-try-adjusting-filters": "No events found. Try adjusting your search filters.",
"group-global-timeline": "{groupName} Global Timeline",
"open-timeline": "Open Timeline",
"made-this": "I Made This",
@@ -532,6 +546,8 @@
"looking-for-migrations": "Looking For Migrations?",
"import-with-url": "Import with URL",
"create-recipe": "Create Recipe",
"create-recipe-description": "Create a new recipe from scratch.",
"create-recipes": "Create Recipes",
"import-with-zip": "Import with .zip",
"create-recipe-from-an-image": "Create recipe from an image",
"bulk-url-import": "Bulk URL Import",
@@ -727,7 +743,10 @@
"ldap-ready-error-text": "Not all LDAP Values are configured. This can be ignored if you are not using LDAP Authentication.",
"ldap-ready-success-text": "Required LDAP variables are all set.",
"build": "Build",
"recipe-scraper-version": "Recipe Scraper Version"
"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."
},
"shopping-list": {
"all-lists": "All Lists",
@@ -835,8 +854,11 @@
"link-id": "Link ID",
"link-name": "Link Name",
"login": "Login",
"login-oidc": "Login with",
"or": "or",
"logout": "Logout",
"manage-users": "Manage Users",
"manage-users-description": "Create and manage users.",
"new-password": "New Password",
"new-user": "New User",
"password-has-been-reset-to-the-default-password": "Password has been reset to the default password",
@@ -1132,7 +1154,17 @@
"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",
"tasks": "Tasks"
"tasks": "Tasks",
"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."
}
},
"profile": {
"welcome-user": "👋 Welcome, {0}",

View File

@@ -80,10 +80,12 @@
"recipe-events": "Eventos de receta"
},
"general": {
"add": "Add",
"cancel": "Cancelar",
"clear": "Eliminar",
"close": "Cerrar",
"confirm": "Confirmar",
"confirm-how-does-everything-look": "How does everything look?",
"confirm-delete-generic": "¿Estás seguro de que quieres eliminarlo?",
"copied_message": "¡Copiado!",
"create": "Crear",
@@ -142,14 +144,18 @@
"save": "Guardar",
"settings": "Ajustes",
"share": "Compartir",
"show-all": "Show All",
"shuffle": "Aleatorio",
"sort": "Ordenar",
"sort-ascending": "Sort Ascending",
"sort-descending": "Sort Descending",
"sort-alphabetically": "Alfabéticamente",
"status": "Estado",
"subject": "Asunto",
"submit": "Enviar",
"success-count": "Éxito: {count}",
"sunday": "Domingo",
"system": "System",
"templates": "Plantillas:",
"test": "Prueba",
"themes": "Temas",
@@ -168,6 +174,7 @@
"units": "Unidades",
"back": "Volver",
"next": "Siguiente",
"start": "Start",
"toggle-view": "Cambiar vista",
"date": "Fecha",
"id": "Id",
@@ -236,6 +243,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",
"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",
@@ -349,10 +358,11 @@
},
"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.",
"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 soporta nativamente el formato de repositorio chowdown. Descarga el código del repositorio como un archivo .zip y súbelo a continuación",
"chowdown-text": "Mealie natively supports the chowdown repository format. Download the code repository as a .zip file and upload it below.",
"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.",
@@ -360,6 +370,10 @@
"plantoeat": {
"title": "Plan to Eat",
"description-long": "Mealie puede importar recetas de Plan a Comer."
},
"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."
}
},
"new-recipe": {
@@ -511,6 +525,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.",
"group-global-timeline": "Línea de tiempo global de {groupName}",
"open-timeline": "Abrir línea de tiempo",
"made-this": "Lo hice",
@@ -531,6 +546,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",
"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",
@@ -726,7 +743,10 @@
"ldap-ready-error-text": "No todos los valores LDAP están configurados. Esto puede ignorarse si no está usando autenticación LDAP.",
"ldap-ready-success-text": "Las variables LDAP requeridas están todas definidas.",
"build": "Compilación",
"recipe-scraper-version": "Versión de Analizador de Recetas"
"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."
},
"shopping-list": {
"all-lists": "Todas las listas",
@@ -834,8 +854,11 @@
"link-id": "ID del enlace",
"link-name": "Nombre del enlace",
"login": "Iniciar sesión",
"login-oidc": "Login with",
"or": "or",
"logout": "Cerrar Sesión",
"manage-users": "Administrar usuarios",
"manage-users-description": "Create and manage users.",
"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",
@@ -1131,7 +1154,17 @@
"background-tasks": "Tareas en Segundo Plano",
"background-tasks-description": "Aquí puedes ver todas las tareas de fondo en ejecución y su estado",
"no-logs-found": "No se encontraron registros",
"tasks": "Tareas"
"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."
}
},
"profile": {
"welcome-user": "👋 Hola, {0}",

View File

@@ -80,10 +80,12 @@
"recipe-events": "Recipe Events"
},
"general": {
"add": "Add",
"cancel": "Peruuta",
"clear": "Tyhjennä",
"close": "Sulje",
"confirm": "Vahvista",
"confirm-how-does-everything-look": "How does everything look?",
"confirm-delete-generic": "Haluatko varmasti poistaa tämän?",
"copied_message": "Kopioitu!",
"create": "Luo",
@@ -142,14 +144,18 @@
"save": "Tallenna",
"settings": "Asetukset",
"share": "Jaa",
"show-all": "Show All",
"shuffle": "Sekoita",
"sort": "Järjestä",
"sort-ascending": "Sort Ascending",
"sort-descending": "Sort Descending",
"sort-alphabetically": "Aakkosjärjestyksessä",
"status": "Tila",
"subject": "Aihe",
"submit": "Lähetä",
"success-count": "Onnistui: {count}",
"sunday": "Sunnuntai",
"system": "System",
"templates": "Mallipohjat:",
"test": "Testi",
"themes": "Teemat",
@@ -168,6 +174,7 @@
"units": "Yksiköt",
"back": "Takaisin",
"next": "Seuraava",
"start": "Start",
"toggle-view": "Vaihda näkymää",
"date": "Päivämäärä",
"id": "Id",
@@ -236,6 +243,8 @@
"group-preferences": "Ryhmän oletusasetukset",
"private-group": "Yksityinen ryhmä",
"private-group-description": "Jos asetat ryhmäsi yksityiseksi, kaikki julkisen näkymän asetukset ovat oletusarvoisia. Tämä ohittaa yksittäisten reseptien julkisen näkymän asetukset.",
"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": "Anna muiden kuin ryhmäsi jäsenten nähdä reseptisi",
"allow-users-outside-of-your-group-to-see-your-recipes-description": "Kun tämä on käytössä, voit käyttää julkista jakolinkkiä tiettyjen reseptien jakamiseen ilman käyttäjän valtuutusta. Kun se on poistettu käytöstä, voit jakaa reseptejä vain käyttäjien kanssa, jotka ovat ryhmässäsi tai joilla on ennalta luotu yksityinen linkki",
"show-nutrition-information": "Näytä ravintotiedot",
@@ -349,10 +358,11 @@
},
"recipe-data-migrations": "Reseptien tietojen migraatiot",
"recipe-data-migrations-explanation": "Reseptit voidaan siirtää toisesta tuetusta sovelluksesta Mealie -sovellukseen. Tämä on hyvä tapa päästä alkuun Mealiella.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Coming from another application or an even older version of Mealie? Check out migrations and see if your data can be imported.",
"choose-migration-type": "Valitse migraatiotyyppi",
"tag-all-recipes": "Merkitse kaikki reseptit tunnisteella {tag-name}",
"nextcloud-text": "Nextcloud reseptejä voidaan tuoda zip-tiedostosta, joka sisältää Nextcloudiin tallennetut tiedot. Katso esimerkkikansiorakenne alla varmistaaksesi, että reseptisi voidaan tuoda.",
"chowdown-text": "Mealie tukee natiivisti chowdown arkiston muotoa. Lataa koodiarkisto .zip tiedostoksi ja lataa se alta",
"chowdown-text": "Mealie natively supports the chowdown repository format. Download the code repository as a .zip file and upload it below.",
"recipe-1": "Resepti 1",
"recipe-2": "Resepti 2",
"paprika-text": "Mealie voi tuoda reseptejä Paprika-sovelluksesta. Vie reseptisi ohjelmasta ulos, nimeä tiedoston pääte uudelleen .zip ja lataa se alla.",
@@ -360,6 +370,10 @@
"plantoeat": {
"title": "Plan to Eat",
"description-long": "Mealieen voi tuoda reseptejä Plan to Eat -sovelluksesta."
},
"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."
}
},
"new-recipe": {
@@ -511,6 +525,7 @@
"edit-timeline-event": "Muokkaa Aikajanan Tapahtumaa",
"timeline": "Aikajana",
"timeline-is-empty": "Aikajana on tyhjä. Tee resepti.",
"timeline-no-events-found-try-adjusting-filters": "No events found. Try adjusting your search filters.",
"group-global-timeline": "{groupName} Yleinen Aikajana",
"open-timeline": "Avaa aikajana",
"made-this": "Tein tämän",
@@ -531,6 +546,8 @@
"looking-for-migrations": "Etsitkö Migraatioita?",
"import-with-url": "Tuo URL-osoitteesta",
"create-recipe": "Luo Resepti",
"create-recipe-description": "Create a new recipe from scratch.",
"create-recipes": "Create Recipes",
"import-with-zip": "Tuo .zip:llä",
"create-recipe-from-an-image": "Luo resepti kuvasta",
"bulk-url-import": "Massa tuonti URL-osoitteesta",
@@ -726,7 +743,10 @@
"ldap-ready-error-text": "Kaikkia LDAP-arvoja ei ole määritetty. Tämä voidaan ohittaa, jos et käytä LDAP-todennusta.",
"ldap-ready-success-text": "Kaikki vaaditut LDAP-muuttujat on asetettu.",
"build": "Koonti",
"recipe-scraper-version": "Reseptikaappaimen versio"
"recipe-scraper-version": "Reseptikaappaimen versio",
"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."
},
"shopping-list": {
"all-lists": "Kaikki ostoslistat",
@@ -834,8 +854,11 @@
"link-id": "Linkin ID",
"link-name": "Linkin nimi",
"login": "Kirjaudu",
"login-oidc": "Login with",
"or": "or",
"logout": "Uloskirjaudu",
"manage-users": "Käyttäjien hallinta",
"manage-users-description": "Create and manage users.",
"new-password": "Uusi salasana",
"new-user": "Uusi käyttäjä",
"password-has-been-reset-to-the-default-password": "Salasana on palautettu oletussalasanaksi",
@@ -1131,7 +1154,17 @@
"background-tasks": "Taustatehtävät",
"background-tasks-description": "Täältä voit tarkastella kaikkia käynnissä olevia taustatehtäviä ja niiden tilaa",
"no-logs-found": "Lokeja Ei Löytynyt",
"tasks": "Tehtävät"
"tasks": "Tehtävät",
"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."
}
},
"profile": {
"welcome-user": "👋 Tervetuloa, {0}",

View File

@@ -80,10 +80,12 @@
"recipe-events": "Événements de recette"
},
"general": {
"add": "Ajouter",
"cancel": "Annuler",
"clear": "Effacer",
"close": "Fermer",
"confirm": "Confirmer",
"confirm-how-does-everything-look": "À quoi ressemble le tout ?",
"confirm-delete-generic": "Voulez-vous vraiment supprimer ceci?",
"copied_message": "Copié!",
"create": "Créer",
@@ -142,14 +144,18 @@
"save": "Sauvegarder",
"settings": "Paramètres",
"share": "Partager",
"show-all": "Tout afficher",
"shuffle": "Mélanger",
"sort": "Trier",
"sort-ascending": "Tri croissant",
"sort-descending": "Tri décroissant",
"sort-alphabetically": "Alphabétique",
"status": "Statut",
"subject": "Sujet",
"submit": "Soumettre",
"success-count": "Succès : {count}",
"sunday": "Dimanche",
"system": "Système",
"templates": "Modèles :",
"test": "Tester",
"themes": "Thèmes",
@@ -168,6 +174,7 @@
"units": "Unités",
"back": "Précédent",
"next": "Suivant",
"start": "Démarrer",
"toggle-view": "Activer/désactiver la vue",
"date": "Date",
"id": "Identifiant",
@@ -236,6 +243,8 @@
"group-preferences": "Préférences du groupe",
"private-group": "Groupe privé",
"private-group-description": "Rendre votre groupe privé va réinitialiser toutes les options de vue publique à leur valeur par défaut. Cela écrase les paramètres de vue publique d'une recette individuelle.",
"enable-public-access": "Permettre l'accès public",
"enable-public-access-description": "Les recettes de groupes deviennent publiques par défaut, cela permet aux visiteurs de les voir sans sidentifier",
"allow-users-outside-of-your-group-to-see-your-recipes": "Autoriser les utilisateurs en dehors de votre groupe à voir vos recettes",
"allow-users-outside-of-your-group-to-see-your-recipes-description": "Si activé, vous pouvez utiliser un lien de partage public pour partager des recettes spécifiques sans autoriser l'utilisateur. Lorsque cette option est désactivée, vous ne pouvez partager des recettes qu'avec les utilisateurs qui sont dans votre groupe ou avec un lien privé pré-généré",
"show-nutrition-information": "Afficher les informations nutritionnelles",
@@ -349,10 +358,11 @@
},
"recipe-data-migrations": "Migration des données de recettes",
"recipe-data-migrations-explanation": "Les recettes peuvent être migrées depuis une autre application prise en charge vers Mealie. C'est une excellente façon de commencer avec Mealie.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "En provenance dune autre application une dune version encore plus vieille de Mealie ? Regardez du côté des migrations pour voir si vos données peuvent être importées.",
"choose-migration-type": "Choisissez le type de migration",
"tag-all-recipes": "Étiquetez toutes les recettes avec le mot-clé {tag-name}",
"nextcloud-text": "Les recettes Nextcloud peuvent être importées depuis un fichier zip qui contient les données stockées dans Nextcloud. Consultez la structure de dossiers d'exemple ci-dessous pour vous assurer que vos recettes peuvent être importées.",
"chowdown-text": "Mealie supporte nativement le format du dépôt chowdown. Téléchargez le dépôt de code en tant que fichier .zip et téléchargez-le ci-dessous",
"chowdown-text": "Mealie prend en charge nativement le format de dépôt chowdown. Téléchargez le dépôt de code en tant que fichier .zip et téléchargez-le ci-dessous.",
"recipe-1": "Recette 1",
"recipe-2": "Recette 2",
"paprika-text": "Mealie peut importer des recettes depuis l'application Paprika. Exportez vos recettes de paprika, renommez l'extension d'exportation en .zip et téléchargez-les ci-dessous.",
@@ -360,6 +370,10 @@
"plantoeat": {
"title": "Plan to Eat",
"description-long": "Mealie peut importer des recettes depuis Plan to Eat."
},
"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."
}
},
"new-recipe": {
@@ -494,8 +508,8 @@
"cook-mode": "Mode Cuisine",
"link-ingredients": "Ingrédients du lien",
"merge-above": "Fusionner avec au-dessus",
"move-to-bottom": "Move To Bottom",
"move-to-top": "Move To Top",
"move-to-bottom": "Déplacer à la fin",
"move-to-top": "Déplacer au début",
"reset-scale": "Réinitialiser échelle",
"decrease-scale-label": "Diminuer l'échelle de 1",
"increase-scale-label": "Augmenter l'échelle de 1",
@@ -511,6 +525,7 @@
"edit-timeline-event": "Modifier lévénement dans lhistorique",
"timeline": "Historique",
"timeline-is-empty": "Pas encore dhistorique. Essayez de cuisiner cette recette!",
"timeline-no-events-found-try-adjusting-filters": "Aucun événement trouvé. Essayez dajuster vos filtres de recherche.",
"group-global-timeline": "Chronologie globale de {groupName}",
"open-timeline": "Ouvrir lhistorique",
"made-this": "Je lai cuisiné",
@@ -531,6 +546,8 @@
"looking-for-migrations": "Vous cherchez les migrations ?",
"import-with-url": "Importer depuis une URL",
"create-recipe": "Créer une recette",
"create-recipe-description": "Créer une nouvelle recette à partir de zéro.",
"create-recipes": "Créer des recettes",
"import-with-zip": "Importer un .zip",
"create-recipe-from-an-image": "Créer une recette à partir d'une image",
"bulk-url-import": "Importation en masse d'URL",
@@ -726,7 +743,10 @@
"ldap-ready-error-text": "Toutes les valeurs LDAP ne sont pas configurées. Vous pouvez ignorer cet avertissement si vous n'utilisez pas l'authentification LDAP.",
"ldap-ready-success-text": "Les variables LDAP obligatoires sont toutes définies.",
"build": "Build",
"recipe-scraper-version": "Version du Scraper de recette"
"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."
},
"shopping-list": {
"all-lists": "Toutes les listes",
@@ -834,8 +854,11 @@
"link-id": "ID du lien",
"link-name": "Nom du lien",
"login": "Connexion",
"login-oidc": "Se connecter avec",
"or": "ou",
"logout": "Déconnexion",
"manage-users": "Gérer les utilisateurs",
"manage-users-description": "Créer et gérer les utilisateurs.",
"new-password": "Nouveau mot de passe",
"new-user": "Nouvel utilisateur",
"password-has-been-reset-to-the-default-password": "Le mot de passe a été réinitialisé à la valeur par défaut",
@@ -1131,7 +1154,17 @@
"background-tasks": "Tâches en arrière plan",
"background-tasks-description": "Ici vous pouvez voir toutes les tâches en arrière-plan en cours et leur statut",
"no-logs-found": "Pas de journaux trouvés",
"tasks": "Tâches"
"tasks": "Tâches",
"setup": {
"first-time-setup": "Première configuration",
"welcome-to-mealie-get-started": "Bienvenue à Mealie ! Commençons",
"already-set-up-bring-to-homepage": "Jai déjà tout configuré, amenez moi à lécran daccueil",
"common-settings-for-new-sites": "Voici quelques paramètres communs pour les nouveaux sites",
"setup-complete": "Configuration terminée!",
"here-are-a-few-things-to-help-you-get-started": "Voici quelques trucs pour vous aider à commencer avec Mealie",
"restore-from-v1-backup": "Vous avez une sauvegarde dune précédente instance de Mealie v1 ? Vous pouvez la restaurer ici.",
"manage-profile-or-get-invite-link": "Gérez votre propre profil, ou récupérez un lien dinvitation à partager avec dautres."
}
},
"profile": {
"welcome-user": "👋 Bienvenue, {0}",

View File

@@ -80,10 +80,12 @@
"recipe-events": "Événements de recette"
},
"general": {
"add": "Ajouter",
"cancel": "Annuler",
"clear": "Effacer",
"close": "Fermer",
"confirm": "Confirmer",
"confirm-how-does-everything-look": "À quoi ressemble le tout ?",
"confirm-delete-generic": "Voulez-vous vraiment supprimer ceci?",
"copied_message": "Copié!",
"create": "Créer",
@@ -142,14 +144,18 @@
"save": "Sauvegarder",
"settings": "Paramètres",
"share": "Partager",
"show-all": "Tout afficher",
"shuffle": "Aléatoire",
"sort": "Trier",
"sort-ascending": "Tri croissant",
"sort-descending": "Tri décroissant",
"sort-alphabetically": "Alphabétique",
"status": "Statut",
"subject": "Sujet",
"submit": "Envoyer",
"success-count": "Succès: {count}",
"sunday": "Dimanche",
"system": "Système",
"templates": "Modèles:",
"test": "Tester",
"themes": "Thèmes",
@@ -168,6 +174,7 @@
"units": "Unités",
"back": "Précédent",
"next": "Suivant",
"start": "Démarrer",
"toggle-view": "Basculer laffichage",
"date": "Date",
"id": "Identifiant",
@@ -236,6 +243,8 @@
"group-preferences": "Préférences du groupe",
"private-group": "Groupe privé",
"private-group-description": "Rendre votre groupe privé va réinitialiser toutes les options de vue publique à leur valeur par défaut. Cela écrase les paramètres de vue publique d'une recette individuelle.",
"enable-public-access": "Activer laccès public",
"enable-public-access-description": "Les recettes de groupes deviennent publiques par défaut, cela permet aux visiteurs de les voir sans sidentifier",
"allow-users-outside-of-your-group-to-see-your-recipes": "Autoriser les utilisateurs en dehors de votre groupe à voir vos recettes",
"allow-users-outside-of-your-group-to-see-your-recipes-description": "Si activé, vous pouvez utiliser un lien de partage public pour partager des recettes spécifiques sans autoriser l'utilisateur. Lorsque cette option est désactivée, vous ne pouvez partager des recettes qu'avec les utilisateurs qui sont dans votre groupe ou avec un lien privé pré-généré",
"show-nutrition-information": "Afficher les informations nutritionnelles",
@@ -349,10 +358,11 @@
},
"recipe-data-migrations": "Migration des données de recettes",
"recipe-data-migrations-explanation": "Les recettes peuvent être migrées depuis une autre application prise en charge vers Mealie. C'est une excellente façon de commencer avec Mealie.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "En provenance dune autre application une dune version encore plus vieille de Mealie ? Regardez du côté des migrations pour voir si vos données peuvent être importées.",
"choose-migration-type": "Choisissez le type de migration",
"tag-all-recipes": "Étiquetez toutes les recettes avec le mot-clé {tag-name}",
"nextcloud-text": "Les recettes Nextcloud peuvent être importées depuis un fichier zip qui contient les données stockées dans Nextcloud. Consultez la structure de dossiers d'exemple ci-dessous pour vous assurer que vos recettes peuvent être importées.",
"chowdown-text": "Mealie supporte nativement le format du dépôt chowdown. Téléchargez le dépôt de code en tant que fichier .zip et téléchargez-le ci-dessous",
"chowdown-text": "Mealie prend en charge nativement le format de dépôt chowdown. Téléchargez le dépôt de code en tant que fichier .zip et téléchargez-le ci-dessous.",
"recipe-1": "Recette 1",
"recipe-2": "Recette 2",
"paprika-text": "Mealie peut importer des recettes depuis l'application Paprika. Exportez vos recettes de paprika, renommez l'extension d'exportation en .zip et téléchargez-les ci-dessous.",
@@ -360,6 +370,10 @@
"plantoeat": {
"title": "Plan to Eat",
"description-long": "Mealie peut importer des recettes depuis Plan to Eat."
},
"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."
}
},
"new-recipe": {
@@ -511,6 +525,7 @@
"edit-timeline-event": "Modifier lévénement dans lhistorique",
"timeline": "Historique",
"timeline-is-empty": "Pas encore dhistorique. Essayez de cuisiner cette recette!",
"timeline-no-events-found-try-adjusting-filters": "Aucun événement trouvé. Essayez dajuster vos filtres de recherche.",
"group-global-timeline": "Chronologie globale de {groupName}",
"open-timeline": "Ouvrir lhistorique",
"made-this": "Je lai cuisiné",
@@ -531,6 +546,8 @@
"looking-for-migrations": "Vous cherchez les migrations ?",
"import-with-url": "Importer depuis une URL",
"create-recipe": "Créer une recette",
"create-recipe-description": "Créer une nouvelle recette de zéro.",
"create-recipes": "Créer des recettes",
"import-with-zip": "Importer un .zip",
"create-recipe-from-an-image": "Créer une recette à partir d'une image",
"bulk-url-import": "Importation en masse d'URL",
@@ -726,7 +743,10 @@
"ldap-ready-error-text": "Toutes les valeurs LDAP ne sont pas configurées. Vous pouvez ignorer cet avertissement si vous n'utilisez pas l'authentification LDAP.",
"ldap-ready-success-text": "Les variables LDAP obligatoires sont toutes définies.",
"build": "Build",
"recipe-scraper-version": "Version du Scraper de recette"
"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."
},
"shopping-list": {
"all-lists": "Toutes les listes",
@@ -834,8 +854,11 @@
"link-id": "ID du lien",
"link-name": "Nom du lien",
"login": "Connexion",
"login-oidc": "Se connecter avec",
"or": "ou",
"logout": "Déconnexion",
"manage-users": "Gérer les utilisateurs",
"manage-users-description": "Créer et gérer les utilisateurs.",
"new-password": "Nouveau mot de passe",
"new-user": "Nouvel utilisateur",
"password-has-been-reset-to-the-default-password": "Le mot de passe a été réinitialisé à la valeur par défaut",
@@ -1131,7 +1154,17 @@
"background-tasks": "Tâches en arrière plan",
"background-tasks-description": "Ici vous pouvez voir toutes les tâches en arrière-plan en cours et leur statut",
"no-logs-found": "Pas de journaux trouvés",
"tasks": "Tâches"
"tasks": "Tâches",
"setup": {
"first-time-setup": "Premier démarrage",
"welcome-to-mealie-get-started": "Bienvenue dans Mealie ! Nous pouvons commencer",
"already-set-up-bring-to-homepage": "Jai déjà tout configuré, amenez moi à lécran daccueil",
"common-settings-for-new-sites": "Voici quelques paramètres courants pour les nouveaux sites",
"setup-complete": "Configuration terminée !",
"here-are-a-few-things-to-help-you-get-started": "Voici quelques trucs pour vous aider à commencer avec Mealie",
"restore-from-v1-backup": "Vous avez une sauvegarde dune précédente instance de Mealie v1 ? Vous pouvez la restaurer ici.",
"manage-profile-or-get-invite-link": "Gérez votre propre profil, ou récupérez un lien dinvitation à partager avec dautres."
}
},
"profile": {
"welcome-user": "👋 Bienvenue, {0}",

View File

@@ -80,10 +80,12 @@
"recipe-events": "Recipe Events"
},
"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",
@@ -142,14 +144,18 @@
"save": "Gardar",
"settings": "Axustes",
"share": "Compartir",
"show-all": "Show All",
"shuffle": "Barallar",
"sort": "Ordenar",
"sort-ascending": "Sort Ascending",
"sort-descending": "Sort Descending",
"sort-alphabetically": "Alfabético",
"status": "Estado",
"subject": "Asunto",
"submit": "Enviar",
"success-count": "Éxito: {count}",
"sunday": "Domingo",
"system": "System",
"templates": "Modelos:",
"test": "Probar",
"themes": "Temas",
@@ -168,6 +174,7 @@
"units": "Units",
"back": "Back",
"next": "Next",
"start": "Start",
"toggle-view": "Toggle View",
"date": "Date",
"id": "Id",
@@ -236,6 +243,8 @@
"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",
@@ -349,10 +358,11 @@
},
"recipe-data-migrations": "Recipe Data Migrations",
"recipe-data-migrations-explanation": "Recipes can be migrated from another supported application to Mealie. This is a great way to get started with Mealie.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Coming from another application or an even older version of Mealie? Check out migrations and see if your data can be imported.",
"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 natively supports the chowdown repository format. Download the code repository as a .zip file and upload it below.",
"recipe-1": "Recipe 1",
"recipe-2": "Recipe 2",
"paprika-text": "Mealie can import recipes from the Paprika application. Export your recipes from paprika, rename the export extension to .zip and upload it below.",
@@ -360,6 +370,10 @@
"plantoeat": {
"title": "Plan to Eat",
"description-long": "Mealie can import recipies from 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."
}
},
"new-recipe": {
@@ -511,6 +525,7 @@
"edit-timeline-event": "Edit Timeline Event",
"timeline": "Timeline",
"timeline-is-empty": "Nothing on the timeline yet. Try making this recipe!",
"timeline-no-events-found-try-adjusting-filters": "No events found. Try adjusting your search filters.",
"group-global-timeline": "{groupName} Global Timeline",
"open-timeline": "Open Timeline",
"made-this": "I Made This",
@@ -531,6 +546,8 @@
"looking-for-migrations": "Looking For Migrations?",
"import-with-url": "Import with URL",
"create-recipe": "Create Recipe",
"create-recipe-description": "Create a new recipe from scratch.",
"create-recipes": "Create Recipes",
"import-with-zip": "Import with .zip",
"create-recipe-from-an-image": "Create recipe from an image",
"bulk-url-import": "Bulk URL Import",
@@ -726,7 +743,10 @@
"ldap-ready-error-text": "Not all LDAP Values are configured. This can be ignored if you are not using LDAP Authentication.",
"ldap-ready-success-text": "Required LDAP variables are all set.",
"build": "Build",
"recipe-scraper-version": "Recipe Scraper Version"
"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."
},
"shopping-list": {
"all-lists": "All Lists",
@@ -834,8 +854,11 @@
"link-id": "Link ID",
"link-name": "Link Name",
"login": "Login",
"login-oidc": "Login with",
"or": "or",
"logout": "Logout",
"manage-users": "Manage Users",
"manage-users-description": "Create and manage users.",
"new-password": "New Password",
"new-user": "New User",
"password-has-been-reset-to-the-default-password": "Password has been reset to the default password",
@@ -1131,7 +1154,17 @@
"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",
"tasks": "Tasks"
"tasks": "Tasks",
"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."
}
},
"profile": {
"welcome-user": "👋 Welcome, {0}",

View File

@@ -80,10 +80,12 @@
"recipe-events": "אירועי מתכון"
},
"general": {
"add": "Add",
"cancel": "ביטול",
"clear": "נקה",
"close": "סגירה",
"confirm": "אישור",
"confirm-how-does-everything-look": "How does everything look?",
"confirm-delete-generic": "האם את/ה בטוח/ה שברצונך למחוק את זה?",
"copied_message": "הועתק!",
"create": "יצירה",
@@ -142,14 +144,18 @@
"save": "שמירה",
"settings": "הגדרות",
"share": "שיתוף",
"show-all": "Show All",
"shuffle": "אקראי",
"sort": "מיון",
"sort-ascending": "Sort Ascending",
"sort-descending": "Sort Descending",
"sort-alphabetically": "א-ת",
"status": "מצב",
"subject": "נושא",
"submit": "שמירה",
"success-count": "הצליחו: {count}",
"sunday": "ראשון",
"system": "System",
"templates": "תבניות:",
"test": "ניסיון",
"themes": "ערכות נושא",
@@ -168,6 +174,7 @@
"units": "יחידות",
"back": "חזרה",
"next": "הבא",
"start": "Start",
"toggle-view": "החלף תצוגה",
"date": "תאריך",
"id": "מזהה",
@@ -236,6 +243,8 @@
"group-preferences": "העדפות קבוצה",
"private-group": "קבוצה פרטית",
"private-group-description": "הגדרת הקבוצה כפרטית תחיל כברירת מחדל את כל התצוגות הפומביות. זה יחול על הגדרות תצוגה פומבית של מתכונים יחידים.",
"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-description": "כאשר מאופשר, ניתן לבצע שיתוף ציבורי עבור מתכונים ספציפיים מבלי לאשר משתמשים.\nכאשר מבוטל, ניתן לשתף מתכונים רק עם משתמשים הנמצאים באותה הקבוצה או באמצעות יצירת קישור פרטי",
"show-nutrition-information": "הצג ערכים תזונתיים",
@@ -349,10 +358,11 @@
},
"recipe-data-migrations": "מגרציית מידע מתכונים",
"recipe-data-migrations-explanation": "ניתן לייבא מתכונים מאפליקציות תומכות אחרות אל 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.",
"choose-migration-type": "בחר סוג מיגרציה",
"tag-all-recipes": "תייג את כל המתכונים עם תגית {tag-name}",
"nextcloud-text": "ייבוא מתכונים מ- Nextcould יכול להתבצע בקובץ zip שמכיל את המידע מ- Nextcloud. ראה את דוגמת מבנה התיקיות למטה כדי לוודא שניתן לייבא את המתכון.",
"chowdown-text": "מילי תומכת באופן טבעי בפורמט Chowndown. הורד את הקוד של הריפוסיטורי כ-zip והעלה אותו",
"chowdown-text": "Mealie natively supports the chowdown repository format. Download the code repository as a .zip file and upload it below.",
"recipe-1": "מתכון 1",
"recipe-2": "מתכון 2",
"paprika-text": "מילי יכולה לייבא מתכונים מאפליקציית Paprika. ייצא את המתכונים מהאפליקציה, שנה את סיומת הקובץ ל- zip והעלה אותו למטה.",
@@ -360,6 +370,10 @@
"plantoeat": {
"title": "Plan to Eat",
"description-long": "Mealie יכולה לייבא מתכונים מהאתר- 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."
}
},
"new-recipe": {
@@ -511,6 +525,7 @@
"edit-timeline-event": "עריכת אירוע ציר זמן",
"timeline": "ציר זמן",
"timeline-is-empty": "אין כלום בציר הזמן. נסה לעשות את המתכון הזה!",
"timeline-no-events-found-try-adjusting-filters": "No events found. Try adjusting your search filters.",
"group-global-timeline": "{groupName} ציר זמן גלובלי",
"open-timeline": "פתח ציר זמן",
"made-this": "הכנתי את זה",
@@ -531,6 +546,8 @@
"looking-for-migrations": "מחפש מיגרציות?",
"import-with-url": "ייבא באמצעות לינק",
"create-recipe": "יצירת מתכון",
"create-recipe-description": "Create a new recipe from scratch.",
"create-recipes": "Create Recipes",
"import-with-zip": "ייבא באמצעות zip",
"create-recipe-from-an-image": "יצירת מתכון באמצעות תמונה",
"bulk-url-import": "ייבוא מספר לינקים",
@@ -726,7 +743,10 @@
"ldap-ready-error-text": "לא כל ערכי ה- LDAP מוגדרים. ניתן להתעלם אם אינך משתמשת באימות LDAP.",
"ldap-ready-success-text": "כל משתני ה- LDAP הנחוצים מוגדרים.",
"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."
},
"shopping-list": {
"all-lists": "כל הרשימות",
@@ -834,8 +854,11 @@
"link-id": "מזהה קישור",
"link-name": "שם קישור",
"login": "התחברות",
"login-oidc": "Login with",
"or": "or",
"logout": "התנתקות",
"manage-users": "ניהול משתמשים",
"manage-users-description": "Create and manage users.",
"new-password": "סיסמה חדשה",
"new-user": "משתמש חדש",
"password-has-been-reset-to-the-default-password": "הסיסמה אופסה לברירת המחדל",
@@ -1131,7 +1154,17 @@
"background-tasks": "משימות רקע",
"background-tasks-description": "כאן ניתן לצפות בכל הפעולות הקורות ברקע",
"no-logs-found": "לא נמצאו לוגים",
"tasks": "משימות"
"tasks": "משימות",
"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."
}
},
"profile": {
"welcome-user": "👋 שלום, {0}",

View File

@@ -80,10 +80,12 @@
"recipe-events": "Recipe Events"
},
"general": {
"add": "Add",
"cancel": "Odustani",
"clear": "Očisti",
"close": "Zatvori",
"confirm": "Potvrdi",
"confirm-how-does-everything-look": "How does everything look?",
"confirm-delete-generic": "Jeste li sigurni da želite izbrisati ovo?",
"copied_message": "Kopirano!",
"create": "Kreiraj",
@@ -142,14 +144,18 @@
"save": "Spremi",
"settings": "Postavke",
"share": "Podijeli",
"show-all": "Show All",
"shuffle": "Nasumično",
"sort": "Sortiraj",
"sort-ascending": "Sort Ascending",
"sort-descending": "Sort Descending",
"sort-alphabetically": "Abecedno",
"status": "Status",
"subject": "Tema",
"submit": "Pošalji",
"success-count": "Uspješno: {count}",
"sunday": "Nedjelja",
"system": "System",
"templates": "Predlošci:",
"test": "Test",
"themes": "Teme",
@@ -168,6 +174,7 @@
"units": "Mjerne jedinice",
"back": "Nazad",
"next": "Nastavi",
"start": "Start",
"toggle-view": "Promijeni Prikaz",
"date": "Datum",
"id": "Id",
@@ -236,6 +243,8 @@
"group-preferences": "Postavke Grupe",
"private-group": "Privatna Grupa",
"private-group-description": "Postavljanje vaše grupe na privatno će postaviti zadane opcije za javni prikaz na zadano. To će prebrisati pojedinačne postavke javnog prikaza recepata.",
"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": "Dopustite korisnicima izvan vaše grupe da vide vaše recepte",
"allow-users-outside-of-your-group-to-see-your-recipes-description": "Kada je omogućeno, možete koristiti javnu povezncu dijeljene veze za dijeljenje određenih recepata bez autorizacije korisnika. Kada je onemogućeno, recepte možete dijeliti samo s korisnicima koji su u vašoj grupi ili s prethodno generiranom privatnom vezom",
"show-nutrition-information": "Prikaži prehrambene vrijednosti",
@@ -349,10 +358,11 @@
},
"recipe-data-migrations": "Migracije Podataka Recepata",
"recipe-data-migrations-explanation": "Recepti se mogu prenijeti s druge podržane aplikacije na Mealie. To je sjajan način za započetak korištenja Mealieja.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Coming from another application or an even older version of Mealie? Check out migrations and see if your data can be imported.",
"choose-migration-type": "Odaberi Vrstu Migracije",
"tag-all-recipes": "Označi sve recepte s oznakom {tag-name}",
"nextcloud-text": "Recepti iz Nextcloud-a mogu se uvesti iz zip datoteke koja sadrži podatke pohranjene u Nextcloud-u. Pogledajte primjer strukture mape u nastavku kako biste osigurali da se vaši recepti mogu uspješno uvesti.",
"chowdown-text": "Mealie izvorno podržava format repozitorija \"chowdown\". Preuzmite repozitorij koda kao .zip datoteku i učitajte je u nastavku",
"chowdown-text": "Mealie natively supports the chowdown repository format. Download the code repository as a .zip file and upload it below.",
"recipe-1": "Recept 1",
"recipe-2": "Recept 2",
"paprika-text": "Mealie može uvesti recepte iz aplikacije Paprika. Izvezite svoje recepte iz Paprike, preimenujte ekstenziju izvoza u .zip i učitajte je u nastavku.",
@@ -360,6 +370,10 @@
"plantoeat": {
"title": "Plan to Eat",
"description-long": "Mealie can import recipies from 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."
}
},
"new-recipe": {
@@ -511,6 +525,7 @@
"edit-timeline-event": "Uredi Događaj Vremenske Crte",
"timeline": "Vremenska Crta",
"timeline-is-empty": "Još nema ništa na vremenskoj crti. Pokušajte napraviti ovaj recept!",
"timeline-no-events-found-try-adjusting-filters": "No events found. Try adjusting your search filters.",
"group-global-timeline": "{groupName} Globalna vremenska crta",
"open-timeline": "Otvori Vremensku Crtu",
"made-this": "Napravio/la sam ovo",
@@ -531,6 +546,8 @@
"looking-for-migrations": "Tražite migracije?",
"import-with-url": "Učitaj preko URL-a",
"create-recipe": "Kreiraj recept",
"create-recipe-description": "Create a new recipe from scratch.",
"create-recipes": "Create Recipes",
"import-with-zip": "Učitaj pomoću .zip-a",
"create-recipe-from-an-image": "Kreiraj recept iz slike",
"bulk-url-import": "Uvoz više URL-ova",
@@ -726,7 +743,10 @@
"ldap-ready-error-text": "Nisu konfigurirane sve vrijednosti za LDAP. Ovo možete zanemariti ako ne koristite LDAP provjeru autentičnosti.",
"ldap-ready-success-text": "Tražene LDAP vrijednosti su sve postavljene.",
"build": "Izgradnja",
"recipe-scraper-version": "Verzija skraper alata za recepte"
"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."
},
"shopping-list": {
"all-lists": "Svi Popisi",
@@ -834,8 +854,11 @@
"link-id": "Link ID",
"link-name": "Ime Poveznice",
"login": "Prijava",
"login-oidc": "Login with",
"or": "or",
"logout": "Odjava",
"manage-users": "Upravljanje Korisnicima",
"manage-users-description": "Create and manage users.",
"new-password": "Nova zaporka",
"new-user": "Novi Korisnik",
"password-has-been-reset-to-the-default-password": "Lozinka je vraćena na zadane postavke",
@@ -1131,7 +1154,17 @@
"background-tasks": "Pozadinski Zadaci",
"background-tasks-description": "Ovdje možete pregledati sve pokrenute zadatke u pozadini i njihov status",
"no-logs-found": "Log Zapisi nisu pronađeni",
"tasks": "Zadatci"
"tasks": "Zadatci",
"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."
}
},
"profile": {
"welcome-user": "👋 Dobrodošli, {0}",

View File

@@ -80,10 +80,12 @@
"recipe-events": "Recept esemény"
},
"general": {
"add": "Hozzáadás",
"cancel": "Mégsem",
"clear": "Törlés",
"close": "Bezár",
"confirm": "Megerősítés",
"confirm-how-does-everything-look": "How does everything look?",
"confirm-delete-generic": "Biztosan törölni szeretnéd ezt?",
"copied_message": "Másolva!",
"create": "Létrehozás",
@@ -142,14 +144,18 @@
"save": "Mentés",
"settings": "Beállítások",
"share": "Megosztás",
"show-all": "Show All",
"shuffle": "Véletlenszerű",
"sort": "Rendezés",
"sort-ascending": "Sort Ascending",
"sort-descending": "Sort Descending",
"sort-alphabetically": "Betűrendben",
"status": "Állapot",
"subject": "Tárgy",
"submit": "Küldés",
"success-count": "Sikeres: {count}",
"sunday": "Vasárnap",
"system": "System",
"templates": "Sablonok:",
"test": "Teszt",
"themes": "Témák",
@@ -168,6 +174,7 @@
"units": "Mennyiségi egységek",
"back": "Vissza",
"next": "Következő",
"start": "Kezdés",
"toggle-view": "Nézet váltása",
"date": "Dátum",
"id": "Azonosító",
@@ -236,6 +243,8 @@
"group-preferences": "Csoport beállítások",
"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": "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": "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",
@@ -349,10 +358,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.",
"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 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",
"chowdown-text": "Mealie natively supports the chowdown repository format. Download the code repository as a .zip file and upload it below.",
"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.",
@@ -360,6 +370,10 @@
"plantoeat": {
"title": "Plan to Eat",
"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."
}
},
"new-recipe": {
@@ -511,6 +525,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.",
"group-global-timeline": "{groupName} Globális idővonal",
"open-timeline": "Idővonal megnyitása",
"made-this": "Elkészítettem ezt",
@@ -531,6 +546,8 @@
"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-recipes": "Create Recipes",
"import-with-zip": "Importálás .zip formátummal",
"create-recipe-from-an-image": "Recept létrehozása fotóról",
"bulk-url-import": "Tömeges URL importálás",
@@ -726,7 +743,10 @@
"ldap-ready-error-text": "Nem minden LDAP-érték van beállítva. Ezt figyelmen kívül lehet hagyni, ha nem használ LDAP-hitelesítést.",
"ldap-ready-success-text": "A szükséges LDAP-változók mind beállítva.",
"build": "Build",
"recipe-scraper-version": "Receptkinyerő verziója"
"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."
},
"shopping-list": {
"all-lists": "Összes lista",
@@ -834,8 +854,11 @@
"link-id": "Hivatkozás ID",
"link-name": "Hivatkozás neve",
"login": "Bejelentkezés",
"login-oidc": "Bejelentkezés",
"or": "vagy",
"logout": "Kijelentkezés",
"manage-users": "Felhasználók kezelése",
"manage-users-description": "Felhasználók létrehozása és kezelése.",
"new-password": "Új jelszó",
"new-user": "Új felhasználó",
"password-has-been-reset-to-the-default-password": "Jelsző vissza lett állítva az alapértelmezett jelszóra",
@@ -1131,7 +1154,17 @@
"background-tasks": "Háttér folyamatok",
"background-tasks-description": "Itt megtekintheti az összes futó háttérfeladatot és azok állapotát",
"no-logs-found": "Nem található napló",
"tasks": "Feladatok"
"tasks": "Feladatok",
"setup": {
"first-time-setup": "Első beállítás",
"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": "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",
"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."
}
},
"profile": {
"welcome-user": "👋 Üdvözöljük, {0}",

View File

@@ -80,10 +80,12 @@
"recipe-events": "Recipe Events"
},
"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",
@@ -142,14 +144,18 @@
"save": "Save",
"settings": "Settings",
"share": "Share",
"show-all": "Show All",
"shuffle": "Shuffle",
"sort": "Sort",
"sort-ascending": "Sort Ascending",
"sort-descending": "Sort Descending",
"sort-alphabetically": "Alphabetical",
"status": "Status",
"subject": "Subject",
"submit": "Submit",
"success-count": "Success: {count}",
"sunday": "Sunday",
"system": "System",
"templates": "Templates:",
"test": "Test",
"themes": "Themes",
@@ -168,6 +174,7 @@
"units": "Units",
"back": "Back",
"next": "Next",
"start": "Start",
"toggle-view": "Toggle View",
"date": "Date",
"id": "Id",
@@ -236,6 +243,8 @@
"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",
@@ -349,10 +358,11 @@
},
"recipe-data-migrations": "Recipe Data Migrations",
"recipe-data-migrations-explanation": "Recipes can be migrated from another supported application to Mealie. This is a great way to get started with Mealie.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Coming from another application or an even older version of Mealie? Check out migrations and see if your data can be imported.",
"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 natively supports the chowdown repository format. Download the code repository as a .zip file and upload it below.",
"recipe-1": "Recipe 1",
"recipe-2": "Recipe 2",
"paprika-text": "Mealie can import recipes from the Paprika application. Export your recipes from paprika, rename the export extension to .zip and upload it below.",
@@ -360,6 +370,10 @@
"plantoeat": {
"title": "Plan to Eat",
"description-long": "Mealie can import recipies from 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."
}
},
"new-recipe": {
@@ -511,6 +525,7 @@
"edit-timeline-event": "Edit Timeline Event",
"timeline": "Timeline",
"timeline-is-empty": "Nothing on the timeline yet. Try making this recipe!",
"timeline-no-events-found-try-adjusting-filters": "No events found. Try adjusting your search filters.",
"group-global-timeline": "{groupName} Global Timeline",
"open-timeline": "Open Timeline",
"made-this": "I Made This",
@@ -531,6 +546,8 @@
"looking-for-migrations": "Looking For Migrations?",
"import-with-url": "Import with URL",
"create-recipe": "Create Recipe",
"create-recipe-description": "Create a new recipe from scratch.",
"create-recipes": "Create Recipes",
"import-with-zip": "Import with .zip",
"create-recipe-from-an-image": "Create recipe from an image",
"bulk-url-import": "Bulk URL Import",
@@ -726,7 +743,10 @@
"ldap-ready-error-text": "Not all LDAP Values are configured. This can be ignored if you are not using LDAP Authentication.",
"ldap-ready-success-text": "Required LDAP variables are all set.",
"build": "Build",
"recipe-scraper-version": "Recipe Scraper Version"
"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."
},
"shopping-list": {
"all-lists": "All Lists",
@@ -834,8 +854,11 @@
"link-id": "Link ID",
"link-name": "Link Name",
"login": "Login",
"login-oidc": "Login with",
"or": "or",
"logout": "Logout",
"manage-users": "Manage Users",
"manage-users-description": "Create and manage users.",
"new-password": "New Password",
"new-user": "New User",
"password-has-been-reset-to-the-default-password": "Password has been reset to the default password",
@@ -1131,7 +1154,17 @@
"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",
"tasks": "Tasks"
"tasks": "Tasks",
"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."
}
},
"profile": {
"welcome-user": "👋 Welcome, {0}",

View File

@@ -80,10 +80,12 @@
"recipe-events": "Eventi di ricette"
},
"general": {
"add": "Aggiungi",
"cancel": "Cancella",
"clear": "Resetta",
"close": "Chiudi",
"confirm": "Conferma",
"confirm-how-does-everything-look": "How does everything look?",
"confirm-delete-generic": "Sei sicuro di volere eliminare?",
"copied_message": "Copiato!",
"create": "Crea",
@@ -142,14 +144,18 @@
"save": "Salva",
"settings": "Impostazioni",
"share": "Condividi",
"show-all": "Mostra tutto",
"shuffle": "Casuale",
"sort": "Ordina",
"sort-ascending": "Ordinamento crescente",
"sort-descending": "Ordinamento discendente",
"sort-alphabetically": "Alfabetico",
"status": "Stato",
"subject": "Soggetto",
"submit": "Invia",
"success-count": "Successo: {count}",
"sunday": "Domenica",
"system": "Sistema",
"templates": "Modelli:",
"test": "Test",
"themes": "Temi",
@@ -168,6 +174,7 @@
"units": "Unità",
"back": "Indietro",
"next": "Avanti",
"start": "Start",
"toggle-view": "Cambia Vista",
"date": "Data",
"id": "Id",
@@ -236,6 +243,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",
"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",
@@ -349,10 +358,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.",
"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 supporta nativamente il formato del repository chowdown. Scarica il repository del codice come file .zip e caricalo qui sotto",
"chowdown-text": "Mealie natively supports the chowdown repository format. Download the code repository as a .zip file and upload it below.",
"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.",
@@ -360,6 +370,10 @@
"plantoeat": {
"title": "Plan to Eat",
"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."
}
},
"new-recipe": {
@@ -511,6 +525,7 @@
"edit-timeline-event": "Modifica evento sulla linea temporale",
"timeline": "Linea temporale",
"timeline-is-empty": "Niente sulla linea temporale. Prova a fare questa ricetta!",
"timeline-no-events-found-try-adjusting-filters": "Nessun evento trovato. Prova a modificare i filtri di ricerca.",
"group-global-timeline": "{groupName} Linea temporale globale",
"open-timeline": "Apri la linea temporale",
"made-this": "L'Ho Preparato",
@@ -531,6 +546,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",
"import-with-zip": "Importa da .zip",
"create-recipe-from-an-image": "Crea ricetta da un'immagine",
"bulk-url-import": "Importazione multipla URL",
@@ -726,7 +743,10 @@
"ldap-ready-error-text": "Non tutti i valori LDAP sono configurati. Questo può essere ignorato se non si utilizza l'Autenticazione LDAP.",
"ldap-ready-success-text": "Le variabili LDAP richieste sono tutte configurate.",
"build": "Versione",
"recipe-scraper-version": "Versione Recipe Scraper"
"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."
},
"shopping-list": {
"all-lists": "Tutte le Liste",
@@ -834,8 +854,11 @@
"link-id": "Link ID",
"link-name": "Link Nome",
"login": "Login",
"login-oidc": "Login with",
"or": "or",
"logout": "Logout",
"manage-users": "Gestisci Utenti",
"manage-users-description": "Create and manage users.",
"new-password": "Nuova Password",
"new-user": "Nuovo Utente",
"password-has-been-reset-to-the-default-password": "La password è stata reimpostata a quella di default",
@@ -1131,7 +1154,17 @@
"background-tasks": "Attività in Background",
"background-tasks-description": "Qui puoi visualizzare tutte le attività in background in esecuzione e il loro stato",
"no-logs-found": "Nessun Log Trovato",
"tasks": "Compiti"
"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."
}
},
"profile": {
"welcome-user": "👋 Benvenuto, {0}",

File diff suppressed because it is too large Load Diff

View File

@@ -41,30 +41,30 @@
"category-creation-failed": "카테고리 생성 실패",
"category-deleted": "카테고리 삭제됨",
"category-deletion-failed": "카테고리 삭제 실패",
"category-filter": "Category Filter",
"category-filter": "카테고리 필터",
"category-update-failed": "Category update failed",
"category-updated": "Category updated",
"category-updated": "카테고리 업데이트",
"uncategorized-count": "Uncategorized {count}",
"create-a-category": "Create a Category",
"category-name": "Category Name",
"category": "Category"
"create-a-category": "카테고리 생성",
"category-name": "카테고리 이름",
"category": "카테고리"
},
"events": {
"apprise-url": "Apprise URL",
"database": "Database",
"delete-event": "Delete Event",
"event-delete-confirmation": "Are you sure you want to delete this event?",
"event-deleted": "Event Deleted",
"event-updated": "Event Updated",
"database": "데이터베이스",
"delete-event": "이벤트 삭제",
"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-version": "New version available!",
"notification": "Notification",
"refresh": "Refresh",
"new-version": "새로운 버전 사용 가능",
"notification": "알림",
"refresh": "새로고침",
"scheduled": "Scheduled",
"something-went-wrong": "Something Went Wrong!",
"subscribed-events": "Subscribed Events",
"subscribed-events": "구독한 이벤트",
"test-message-sent": "Test Message Sent",
"new-notification": "New Notification",
"new-notification": "새 알림",
"event-notifiers": "Event Notifiers",
"apprise-url-skipped-if-blank": "Apprise URL (skipped if blank)",
"enable-notifier": "Enable Notifier",
@@ -80,22 +80,24 @@
"recipe-events": "Recipe Events"
},
"general": {
"cancel": "Cancel",
"clear": "Clear",
"close": "Close",
"confirm": "Confirm",
"add": "추가",
"cancel": "취소",
"clear": "지우기",
"close": "닫기",
"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",
"copied_message": "복사됨!",
"create": "만들기",
"created": "생성됨",
"custom": "Custom",
"dashboard": "Dashboard",
"delete": "Delete",
"disabled": "Disabled",
"download": "Download",
"dashboard": "대시보드",
"delete": "삭제",
"disabled": "비활성화됨",
"download": "다운로드",
"duplicate": "Duplicate",
"edit": "Edit",
"enabled": "Enabled",
"edit": "편집",
"enabled": "활성화됨",
"exception": "예외",
"failed-count": "실패함: {count}",
"failure-uploading-file": "파일 업로드 실패",
@@ -116,7 +118,7 @@
"link-copied": "링크 복사됨",
"loading": "Loading",
"loading-events": "이벤트를 불러오는 중",
"loading-recipe": "Loading recipe...",
"loading-recipe": "레시피 로딩 중...",
"loading-ocr-data": "Loading OCR data...",
"loading-recipes": "레시피 로딩 중",
"message": "메시지",
@@ -142,61 +144,66 @@
"save": "저장",
"settings": "설정",
"share": "공유",
"show-all": "Show All",
"shuffle": "섞기",
"sort": "정렬",
"sort-ascending": "Sort Ascending",
"sort-descending": "Sort Descending",
"sort-alphabetically": "알파벳순",
"status": "상태",
"subject": "제목",
"submit": "제출",
"success-count": "성공: {count}",
"sunday": "일요일",
"system": "System",
"templates": "Templates:",
"test": "Test",
"themes": "Themes",
"thursday": "Thursday",
"thursday": "목요일",
"token": "Token",
"tuesday": "Tuesday",
"tuesday": "화요일",
"type": "Type",
"update": "Update",
"updated": "Updated",
"upload": "Upload",
"url": "URL",
"view": "View",
"wednesday": "Wednesday",
"wednesday": "수요일",
"yes": "Yes",
"foods": "Foods",
"units": "Units",
"back": "Back",
"next": "Next",
"start": "Start",
"toggle-view": "Toggle View",
"date": "Date",
"id": "Id",
"owner": "Owner",
"owner": "작성자",
"date-added": "Date Added",
"none": "None",
"run": "Run",
"menu": "Menu",
"a-name-is-required": "A Name is Required",
"none": "없음",
"run": "실행",
"menu": "메뉴",
"a-name-is-required": "이름은 필수 항목 입니다.",
"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",
"copy": "복사",
"color": "색상",
"timestamp": "Timestamp",
"last-made": "Last Made",
"learn-more": "Learn More",
"this-feature-is-currently-inactive": "This feature is currently inactive",
"learn-more": "더 알아보기",
"this-feature-is-currently-inactive": "이 기능을 현재 사용할 수 없습니다.",
"clipboard-not-supported": "Clipboard not supported",
"copied-to-clipboard": "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",
"refresh": "새로고침",
"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.",
@@ -217,25 +224,27 @@
"group-not-found": "그룹을찾을 수 없음",
"group-token": "Group Token",
"group-with-value": "Group: {groupID}",
"groups": "Groups",
"manage-groups": "Manage Groups",
"user-group": "User Group",
"groups": "그룹",
"manage-groups": "그룹 관리",
"user-group": "사용자 그룹",
"user-group-created": "User Group Created",
"user-group-creation-failed": "User Group Creation Failed",
"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."
},
"manage-members": "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",
"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": "비공개 그룹",
"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",
@@ -252,7 +261,7 @@
"group-recipe-preferences": "Group Recipe Preferences",
"report": "Report",
"report-with-id": "Report ID: {id}",
"group-management": "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}"
@@ -266,7 +275,7 @@
"edit-meal-plan": "Edit Meal Plan",
"end-date": "End Date",
"group": "Group (Beta)",
"main": "Main",
"main": "메인",
"meal-planner": "Meal Planner",
"meal-plans": "Meal Plans",
"mealplan-categories": "MEALPLAN CATEGORIES",
@@ -287,12 +296,12 @@
"start-date": "Start Date",
"rule-day": "Rule Day",
"meal-type": "Meal Type",
"breakfast": "Breakfast",
"lunch": "Lunch",
"dinner": "Dinner",
"breakfast": "조식",
"lunch": "점심",
"dinner": "저녁 식사",
"type-any": "Any",
"day-any": "Any",
"editor": "Editor",
"editor": "편집기",
"meal-recipe": "Meal Recipe",
"meal-title": "Meal Title",
"meal-note": "Meal Note",
@@ -316,7 +325,7 @@
},
"migration": {
"migration-data-removed": "Migration data removed",
"new-migration": "New Migration",
"new-migration": "새 마이그레이션",
"no-file-selected": "No File Selected",
"no-migration-data-available": "No Migration Data Available",
"previous-migrations": "Previous Migrations",
@@ -349,10 +358,11 @@
},
"recipe-data-migrations": "Recipe Data Migrations",
"recipe-data-migrations-explanation": "Recipes can be migrated from another supported application to Mealie. This is a great way to get started with Mealie.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Coming from another application or an even older version of Mealie? Check out migrations and see if your data can be imported.",
"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 natively supports the chowdown repository format. Download the code repository as a .zip file and upload it below.",
"recipe-1": "Recipe 1",
"recipe-2": "Recipe 2",
"paprika-text": "Mealie can import recipes from the Paprika application. Export your recipes from paprika, rename the export extension to .zip and upload it below.",
@@ -360,6 +370,10 @@
"plantoeat": {
"title": "Plan to Eat",
"description-long": "Mealie can import recipies from 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."
}
},
"new-recipe": {
@@ -385,8 +399,8 @@
"make-recipe-image": "Make this the recipe image"
},
"page": {
"404-page-not-found": "404 Page not found",
"all-recipes": "All Recipes",
"404-page-not-found": "404. 페이지를 찾을 수 없음",
"all-recipes": "모든 레시피",
"new-page-created": "New page created",
"page": "Page",
"page-creation-failed": "Page creation failed",
@@ -397,24 +411,24 @@
"pages-update-failed": "Pages update failed",
"pages-updated": "Pages updated",
"404-not-found": "404 Not Found",
"an-error-occurred": "An error occurred"
"an-error-occurred": "오류가 발생했습니다!"
},
"recipe": {
"add-key": "Add Key",
"add-to-favorites": "Add to Favorites",
"add-to-favorites": "즐겨찾기에 추가",
"api-extras": "API Extras",
"calories": "Calories",
"calories": "칼로리",
"calories-suffix": "calories",
"carbohydrate-content": "Carbohydrate",
"categories": "Categories",
"carbohydrate-content": "탄수화물",
"categories": "카테고리",
"comment-action": "Comment",
"comment": "Comment",
"comments": "Comments",
"delete-confirmation": "Are you sure you want to delete this recipe?",
"delete-confirmation": "이 레시피를 정말 삭제하시겠습니까?",
"delete-recipe": "Delete Recipe",
"description": "Description",
"description": "설명",
"disable-amount": "Disable Ingredient Amounts",
"disable-comments": "Disable Comments",
"disable-comments": "댓글 사용 안 함",
"duplicate": "Duplicate recipe",
"duplicate-name": "Name of the new recipe",
"edit-scale": "Edit Scale",
@@ -464,14 +478,14 @@
"unable-to-delete-recipe": "Unable to Delete Recipe",
"no-recipe": "No Recipe",
"locked-by-owner": "Locked by Owner",
"join-the-conversation": "Join the Conversation",
"join-the-conversation": "대화에 참여하기",
"add-recipe-to-mealplan": "Add Recipe to Mealplan",
"entry-type": "Entry Type",
"date-format-hint": "MM/DD/YYYY format",
"date-format-hint-yyyy-mm-dd": "YYYY-MM-DD format",
"add-to-list": "Add to List",
"add-to-list": "목록에 추가",
"add-to-plan": "Add to Plan",
"add-to-timeline": "Add to Timeline",
"add-to-timeline": "타임라인에 추가하기",
"recipe-added-to-list": "Recipe added to list",
"recipes-added-to-list": "Recipes added to list",
"successfully-added-to-list": "Successfully added to list",
@@ -494,8 +508,8 @@
"cook-mode": "Cook Mode",
"link-ingredients": "Link Ingredients",
"merge-above": "Merge Above",
"move-to-bottom": "Move To Bottom",
"move-to-top": "Move To Top",
"move-to-bottom": "맨 아래로 이동",
"move-to-top": "맨 위로 이동",
"reset-scale": "Reset Scale",
"decrease-scale-label": "Decrease Scale by 1",
"increase-scale-label": "Increase Scale by 1",
@@ -503,14 +517,15 @@
"public-link": "Public Link",
"timer": {
"kitchen-timer": "Kitchen Timer",
"start-timer": "Start Timer",
"pause-timer": "Pause Timer",
"resume-timer": "Resume Timer",
"stop-timer": "Stop Timer"
"start-timer": "타이머 시작",
"pause-timer": "타이머 일시 정지",
"resume-timer": "타이머 재개",
"stop-timer": "타이머 정지"
},
"edit-timeline-event": "Edit Timeline Event",
"timeline": "Timeline",
"timeline": "타임라인",
"timeline-is-empty": "Nothing on the timeline yet. Try making this recipe!",
"timeline-no-events-found-try-adjusting-filters": "No events found. Try adjusting your search filters.",
"group-global-timeline": "{groupName} Global Timeline",
"open-timeline": "Open Timeline",
"made-this": "I Made This",
@@ -531,6 +546,8 @@
"looking-for-migrations": "Looking For Migrations?",
"import-with-url": "Import with URL",
"create-recipe": "Create Recipe",
"create-recipe-description": "Create a new recipe from scratch.",
"create-recipes": "Create Recipes",
"import-with-zip": "Import with .zip",
"create-recipe-from-an-image": "Create recipe from an image",
"bulk-url-import": "Bulk URL Import",
@@ -561,13 +578,13 @@
"tree-view": "Tree View",
"recipe-yield": "Recipe Yield",
"unit": "Unit",
"upload-image": "Upload image",
"screen-awake": "Keep Screen Awake",
"remove-image": "Remove image",
"nextStep": "Next step"
"upload-image": "이미지 업로드",
"screen-awake": "화면을 항상 켠 상태로 유지",
"remove-image": "이미지 제거",
"nextStep": "다음 단계"
},
"search": {
"advanced-search": "Advanced Search",
"advanced-search": "고급 검색",
"and": "and",
"exclude": "Exclude",
"include": "Include",
@@ -576,33 +593,33 @@
"has-any": "Has Any",
"has-all": "Has All",
"results": "Results",
"search": "Search",
"search": "검색",
"search-mealie": "Search Mealie (press /)",
"search-placeholder": "Search...",
"tag-filter": "Tag Filter",
"search-placeholder": "검색...",
"tag-filter": "태그 필터",
"search-hint": "Press '/'",
"advanced": "Advanced",
"auto-search": "Auto Search",
"no-results": "No results found"
"auto-search": "자동 검색",
"no-results": "검색 결과가 없습니다."
},
"settings": {
"add-a-new-theme": "Add a New Theme",
"admin-settings": "Admin Settings",
"add-a-new-theme": "새 테마 추가",
"admin-settings": "관리자 설정",
"backup": {
"backup-created": "Backup created successfully",
"backup-created": "백업이 성공적으로 완료되었습니다.",
"backup-created-at-response-export_path": "Backup Created at {path}",
"backup-deleted": "Backup deleted",
"restore-success": "Restore successful",
"backup-deleted": "백업 삭제됨",
"restore-success": "복원 성공!",
"backup-tag": "Backup Tag",
"create-heading": "Create a Backup",
"delete-backup": "Delete Backup",
"delete-backup": "백업 삭제",
"error-creating-backup-see-log-file": "Error Creating Backup. See Log File",
"full-backup": "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",
"backup-restore": "백업/복원",
"back-restore-description": "Restoring this backup will overwrite all the current data in your database and in the data directory and replace them with the contents of this backup. {cannot-be-undone} If the restoration is successful, you will be logged out.",
"cannot-be-undone": "This action cannot be undone - use with caution.",
"postgresql-note": "If you are using PostGreSQL, please review the {backup-restore-process} prior to restoring.",
@@ -625,22 +642,22 @@
"home-page-sections": "Home Page Sections",
"show-recent": "Show Recent"
},
"language": "Language",
"language": "언어",
"latest": "Latest",
"local-api": "Local API",
"locale-settings": "Locale settings",
"migrations": "Migrations",
"migrations": "마이그레이션",
"new-page": "New Page",
"notify": "Notify",
"notify": "알림",
"organize": "Organize",
"page-name": "Page Name",
"pages": "Pages",
"profile": "Profile",
"profile": "프로필",
"remove-existing-entries-matching-imported-entries": "Remove existing entries matching imported entries",
"set-new-time": "Set New Time",
"settings-update-failed": "Settings update failed",
"settings-updated": "Settings updated",
"site-settings": "Site Settings",
"settings-update-failed": "설정 업데이트 실패",
"settings-updated": "설정 업데이트",
"site-settings": "사이트 설정",
"theme": {
"accent": "Accent",
"dark": "Dark",
@@ -650,20 +667,20 @@
"error-deleting-theme": "Error deleting theme",
"error-updating-theme": "Error updating theme",
"info": "Info",
"light": "Light",
"light": "라이트",
"primary": "Primary",
"secondary": "Secondary",
"success": "Success",
"switch-to-dark-mode": "Switch to dark mode",
"switch-to-light-mode": "Switch to light mode",
"theme-deleted": "Theme deleted",
"theme-name": "Theme Name",
"success": "성공",
"switch-to-dark-mode": "다크 모드로 전환",
"switch-to-light-mode": "라이트 모드로 전환",
"theme-deleted": "테마 삭제됨",
"theme-name": "테마 이름",
"theme-name-is-required": "Theme Name is required.",
"theme-saved": "Theme Saved",
"theme-updated": "Theme updated",
"warning": "Warning",
"light-mode": "Light Mode",
"dark-mode": "Dark Mode"
"light-mode": "라이트 모드",
"dark-mode": "다크 모드"
},
"token": {
"active-tokens": "ACTIVE TOKENS",
@@ -683,7 +700,7 @@
"recipes-affected": "No Recipes Affected|One Recipe Affected|{count} Recipes Affected",
"remove-unused": "Remove Unused",
"title-case-all": "Title Case All",
"toolbox": "Toolbox",
"toolbox": "도구 상자",
"unorganized": "Unorganized"
},
"webhooks": {
@@ -710,8 +727,8 @@
"email-test-results": "Email Test Results",
"ready": "Ready",
"not-ready": "Not Ready - Check Environmental Variables",
"succeeded": "Succeeded",
"failed": "Failed",
"succeeded": "성공함",
"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}).",
@@ -726,7 +743,10 @@
"ldap-ready-error-text": "Not all LDAP Values are configured. This can be ignored if you are not using LDAP Authentication.",
"ldap-ready-success-text": "Required LDAP variables are all set.",
"build": "Build",
"recipe-scraper-version": "Recipe Scraper Version"
"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."
},
"shopping-list": {
"all-lists": "All Lists",
@@ -744,7 +764,7 @@
"toggle-food": "Toggle Food",
"manage-labels": "Manage Labels",
"are-you-sure-you-want-to-delete-this-item": "Are you sure you want to delete this item?",
"copy-as-text": "Copy as Text",
"copy-as-text": "텍스트로 복사",
"copy-as-markdown": "Copy as Markdown",
"delete-checked": "Delete Checked",
"toggle-label-sort": "Toggle Label Sort",
@@ -757,22 +777,22 @@
"completed-on": "Completed on {date}"
},
"sidebar": {
"all-recipes": "All Recipes",
"backups": "Backups",
"categories": "Categories",
"all-recipes": "모든 레시피",
"backups": "백업",
"categories": "카테고리",
"cookbooks": "Cookbooks",
"dashboard": "Dashboard",
"home-page": "Home Page",
"manage-users": "Manage Users",
"dashboard": "대시보드",
"home-page": "홈페이지",
"manage-users": "사용자 관리",
"migrations": "Migrations",
"profile": "Profile",
"search": "Search",
"site-settings": "Site Settings",
"profile": "프로필",
"search": "검색",
"site-settings": "사이트 설정",
"tags": "Tags",
"toolbox": "Toolbox",
"language": "Language",
"toolbox": "도구 상자",
"language": "언어",
"maintenance": "Maintenance",
"background-tasks": "Background Tasks",
"background-tasks": "백그라운드 작업",
"parser": "Parser",
"developer": "Developer",
"cookbook": "Cookbook",
@@ -780,7 +800,7 @@
},
"signup": {
"error-signing-up": "Error Signing Up",
"sign-up": "Sign Up",
"sign-up": "계정 등록",
"sign-up-link-created": "Sign up link created",
"sign-up-link-creation-failed": "Sign up link creation failed",
"sign-up-links": "Sign Up Links",
@@ -795,17 +815,17 @@
"tag-deletion-failed": "Tag deletion failed",
"tag-update-failed": "Tag update failed",
"tag-updated": "Tag updated",
"tags": "Tags",
"tags": "태그",
"untagged-count": "Untagged {count}",
"create-a-tag": "Create a Tag",
"tag-name": "Tag Name",
"tag": "Tag"
"create-a-tag": "태그 생성",
"tag-name": "태그 이름",
"tag": "태그"
},
"tool": {
"tools": "Tools",
"tools": "도구",
"on-hand": "On Hand",
"create-a-tool": "Create a Tool",
"tool-name": "Tool Name",
"tool-name": "도구 이름",
"create-new-tool": "Create New Tool",
"on-hand-checkbox-label": "Show as On Hand (Checked)",
"required-tools": "Required Tools",
@@ -833,49 +853,52 @@
"invite-only": "Invite Only",
"link-id": "Link ID",
"link-name": "Link Name",
"login": "Login",
"logout": "Logout",
"manage-users": "Manage Users",
"new-password": "New Password",
"new-user": "New User",
"login": "로그인",
"login-oidc": "Login with",
"or": "or",
"logout": "로그아웃",
"manage-users": "사용자 관리",
"manage-users-description": "사용자 생성 및 관리",
"new-password": "새 비밀번호",
"new-user": "새 사용자",
"password-has-been-reset-to-the-default-password": "Password has been reset to the default password",
"password-must-match": "Password must match",
"password-reset-failed": "Password reset failed",
"password-updated": "Password updated",
"password": "Password",
"password-must-match": "비밀번호가 일치해야합니다",
"password-reset-failed": "비밀번호 재설정 실패",
"password-updated": "비밀번호가 변경되었습니다",
"password": "비밀번호",
"password-strength": "Password is {strength}",
"please-enter-password": "Please enter your new password.",
"register": "Register",
"reset-password": "Reset Password",
"sign-in": "Sign in",
"register": "등록",
"reset-password": "비밀번호 재설정",
"sign-in": "로그인",
"total-mealplans": "Total MealPlans",
"total-users": "Total Users",
"upload-photo": "Upload Photo",
"upload-photo": "사진 업로드",
"use-8-characters-or-more-for-your-password": "Use 8 characters or more for your password",
"user-created": "User created",
"user-creation-failed": "User creation failed",
"user-deleted": "User deleted",
"user-deleted": "사용자 삭제됨",
"user-id-with-value": "User ID: {id}",
"user-id": "User ID",
"user-password": "User Password",
"user-successfully-logged-in": "User Successfully Logged In",
"user-update-failed": "User update failed",
"user-updated": "User updated",
"user": "User",
"user": "사용자",
"username": "Username",
"users-header": "USERS",
"users": "Users",
"user-not-found": "User not found",
"webhook-time": "Webhook Time",
"webhooks-enabled": "Webhooks Enabled",
"webhooks-enabled": "Webhook이 활성화되었습니다",
"you-are-not-allowed-to-create-a-user": "You are not allowed to create a user",
"you-are-not-allowed-to-delete-this-user": "You are not allowed to delete this user",
"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": "이메일 또는 사용자명",
"remember-me": "Remember Me",
"please-enter-your-email-and-password": "Please enter your email and password",
"please-enter-your-email-and-password": "이메일과 비밀번호를 입력하세요.",
"invalid-credentials": "Invalid Credentials",
"account-locked-please-try-again-later": "Account Locked. Please try again later",
"user-favorites": "User Favorites",
@@ -885,7 +908,7 @@
"strong": "Strong",
"very-strong": "Very Strong"
},
"user-management": "User Management",
"user-management": "사용자 관리",
"reset-locked-users": "Reset Locked Users",
"admin-user-creation": "Admin User Creation",
"admin-user-management": "Admin User Management",
@@ -907,7 +930,7 @@
},
"language-dialog": {
"translated": "translated",
"choose-language": "Choose Language",
"choose-language": "언어 선택",
"select-description": "Choose the language for the Mealie UI. The setting only applies to you, not other users.",
"how-to-contribute-description": "Is something not translated yet, mistranslated, or your language missing from the list? {read-the-docs-link} on how to contribute!",
"read-the-docs": "Read the docs"
@@ -967,10 +990,10 @@
"recipe-data-description": "Use this section to manage the data associated with your recipes. You can perform several bulk actions on your recipes including exporting, deleting, tagging, and assigning categories.",
"recipe-columns": "Recipe Columns",
"data-exports-description": "This section provides links to available exports that are ready to download. These exports do expire, so be sure to grab them while they're still available.",
"data-exports": "Data Exports",
"tag": "Tag",
"data-exports": "데이터 내보내기",
"tag": "태그",
"categorize": "Categorize",
"update-settings": "Update Settings",
"update-settings": "업데이트 설정",
"tag-recipes": "Tag Recipes",
"categorize-recipes": "Categorize Recipes",
"export-recipes": "Export Recipes",
@@ -981,16 +1004,16 @@
"manage-aliases": "Manage Aliases",
"seed-data": "Seed Data",
"seed": "Seed",
"data-management": "Data Management",
"data-management": "데이터 관리",
"data-management-description": "Select which data set you want to make changes to.",
"select-data": "Select Data",
"select-language": "Select Language",
"select-language": "언어 선택",
"columns": "Columns",
"combine": "Combine",
"categories": {
"edit-category": "Edit Category",
"new-category": "New Category",
"category-data": "Category Data"
"edit-category": "카테고리 수정",
"new-category": "새 카테고리",
"category-data": "카테고리 데이터"
},
"tags": {
"new-tag": "New Tag",
@@ -1004,7 +1027,7 @@
}
},
"user-registration": {
"user-registration": "User Registration",
"user-registration": "사용자 등록",
"registration-success": "Registration Success",
"join-a-group": "Join a Group",
"create-a-new-group": "Create a New Group",
@@ -1022,9 +1045,9 @@
"this-field-is-required": "This Field is Required"
},
"export": {
"export": "Export",
"file-name": "File Name",
"size": "Size",
"export": "내보내기",
"file-name": "파일 이름",
"size": "크기",
"link-expires": "Link Expires"
},
"recipe-share": {
@@ -1052,7 +1075,7 @@
},
"ocr-editor": {
"ocr-editor": "Ocr editor",
"toolbar": "Toolbar",
"toolbar": "툴바",
"selection-mode": "Selection mode",
"pan-and-zoom-picture": "Pan and zoom picture",
"split-text": "Split text",
@@ -1060,7 +1083,7 @@
"split-by-block": "Split by text block",
"flatten": "Flatten regardless of original formating",
"help": {
"help": "Help",
"help": "도움말",
"mouse-modes": "Mouse modes",
"selection-mode": "Selection Mode (default)",
"selection-mode-desc": "The selection mode is the main mode that can be used to enter data:",
@@ -1100,7 +1123,7 @@
"title-recipes-directory": "Recipes Directory (recipes)",
"title-user-directory": "User Directory (user)"
},
"action-delete-log-files-name": "Delete Log Files",
"action-delete-log-files-name": "로그파일삭제",
"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",
@@ -1131,7 +1154,17 @@
"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",
"tasks": "Tasks"
"tasks": "Tasks",
"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."
}
},
"profile": {
"welcome-user": "👋 Welcome, {0}",
@@ -1142,23 +1175,23 @@
"account-summary-description": "Here's a summary of your group's information",
"group-statistics": "Group Statistics",
"group-statistics-description": "Your Group Statistics provide some insight how you're using Mealie.",
"storage-capacity": "Storage Capacity",
"storage-capacity": "저장 공간",
"storage-capacity-description": "Your storage capacity is a calculation of the images and assets you have uploaded.",
"personal": "Personal",
"personal-description": "These are settings that are personal to you. Changes here won't affect other users",
"user-settings": "User Settings",
"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",
"group-description": "These items are shared within your group. Editing one of them will change it for the whole group!",
"group-settings": "Group Settings",
"group-settings": "그룹 설정",
"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.",
"members": "Members",
"members": "회원",
"members-description": "See who's in your group and manage their permissions.",
"webhooks-description": "Setup webhooks that trigger on days that you have have mealplan scheduled.",
"notifiers": "Notifiers",
"notifiers-description": "Setup email and push notifications that trigger on specific events.",
"manage-data": "Manage Data",
"manage-data": "데이터 관리하기",
"manage-data-description": "Manage your Food and Units (more options coming soon)",
"data-migrations": "Data Migrations",
"data-migrations-description": "Migrate your existing data from other applications like Nextcloud Recipes and Chowdown",
@@ -1182,7 +1215,7 @@
"description": "Cookbooks are another way to organize recipes by creating cross sections of recipes and tags. Creating a cookbook will add an entry to the side-bar and all the recipes with the tags and categories chosen will be displayed in the cookbook.",
"public-cookbook": "Public Cookbook",
"public-cookbook-description": "Public Cookbooks can be shared with non-mealie users and will be displayed on your groups page.",
"filter-options": "Filter Options",
"filter-options": "필터 옵션",
"filter-options-description": "When require all is selected the cookbook will only include recipes that have all of the items selected. This applies to each subset of selectors and not a cross section of the selected items.",
"require-all-categories": "Require All Categories",
"require-all-tags": "Require All Tags",

View File

@@ -80,10 +80,12 @@
"recipe-events": "Recipe Events"
},
"general": {
"add": "Add",
"cancel": "Atšaukti",
"clear": "Išvalyti",
"close": "Uždaryti",
"confirm": "Patvirtinti",
"confirm-how-does-everything-look": "How does everything look?",
"confirm-delete-generic": "Ar tikrai norite ištrinti?",
"copied_message": "Nukopijuota!",
"create": "Sukurti",
@@ -142,14 +144,18 @@
"save": "Išsaugoti",
"settings": "Nustatymai",
"share": "Dalintis",
"show-all": "Show All",
"shuffle": "Maišyti",
"sort": "Rikiavimas",
"sort-ascending": "Sort Ascending",
"sort-descending": "Sort Descending",
"sort-alphabetically": "Pagal abėcėlę",
"status": "Būsena",
"subject": "Tema",
"submit": "Pateikti",
"success-count": "Sėkmingų: {count}",
"sunday": "Sekmadienis",
"system": "System",
"templates": "Ruošiniai:",
"test": "Tikrinti",
"themes": "Temos",
@@ -168,6 +174,7 @@
"units": "Vienetai",
"back": "Atgal",
"next": "Kitas",
"start": "Start",
"toggle-view": "Perjungti vaizdą",
"date": "Data",
"id": "Id",
@@ -236,6 +243,8 @@
"group-preferences": "Grupės nustatymai",
"private-group": "Privati grupė",
"private-group-description": "Pavertus grupę privačia, visi viešos peržiūros nustatymai bus pakeisti į numatytuosius. Tai perrašo ir atskirų receptų viešos peržiūros nustatymus.",
"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": "Leiskite vartotojams, nepriskirtiemsjūsų grupei, matyti jūsų receptus",
"allow-users-outside-of-your-group-to-see-your-recipes-description": "Leidžia konkretiems receptams naudoti viešai prieinamą pasidalinimui nuorodą, nereikalaujančią prisijungimo. Kai šis nustatymas išjungtas, dalintis receptais galima tik su savo grupėje esančiais naudotojais, arba per iš anksto sugeneruotą privačią nuorodą",
"show-nutrition-information": "Rodyti maistinę vertę",
@@ -349,10 +358,11 @@
},
"recipe-data-migrations": "Receptų duomenų migracijos",
"recipe-data-migrations-explanation": "Receptai gali būti importuojami į Mealie iš kitų palaikomų sistemų. Tai - puikus būdas pradėti naudotis Mealie.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Coming from another application or an even older version of Mealie? Check out migrations and see if your data can be imported.",
"choose-migration-type": "Pasirinkite migracijos tipą",
"tag-all-recipes": "Pažymėti visus receptus {tag-name} žyma",
"nextcloud-text": "\"Nextcloud\" receptus galima importuoti iš .ZIP failo. Žemiau galima rasti tinkamos aplankų struktūros pavyzdį.",
"chowdown-text": "Mealie palaiko \"Chowdown\" repozitorijos formatą. Atsisiųskite kodo repozitoriją kaip .ZIP failą ir įkelkite žemiau",
"chowdown-text": "Mealie natively supports the chowdown repository format. Download the code repository as a .zip file and upload it below.",
"recipe-1": "Receptas 1",
"recipe-2": "Receptas 2",
"paprika-text": "Į Mealie galima importuoti receptus iš \"Paprika\" sistemos. Eksportuokite duomenis iš \"Paprika\", pervadinkite failo plėtinį į .ZIP ir įkelkite žemiau.",
@@ -360,6 +370,10 @@
"plantoeat": {
"title": "Plan to Eat",
"description-long": "Mealie can import recipies from 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."
}
},
"new-recipe": {
@@ -511,6 +525,7 @@
"edit-timeline-event": "Redaguoti laiko juostos įvykį",
"timeline": "Laiko juosta",
"timeline-is-empty": "Laiko juosta tuščia. Pabandykit pagaminti šį receptą!",
"timeline-no-events-found-try-adjusting-filters": "No events found. Try adjusting your search filters.",
"group-global-timeline": "{groupName} laiko juosta",
"open-timeline": "Atidaryti laiko juostą",
"made-this": "Aš tai gaminau",
@@ -531,6 +546,8 @@
"looking-for-migrations": "Ieškote migracijų?",
"import-with-url": "Importuoti naudojant URL",
"create-recipe": "Sukurti receptą",
"create-recipe-description": "Create a new recipe from scratch.",
"create-recipes": "Create Recipes",
"import-with-zip": "Įkelti naudojant .zip failus",
"create-recipe-from-an-image": "Sukurti receptą iš nuotraukos",
"bulk-url-import": "Masinis URL importavimas",
@@ -726,7 +743,10 @@
"ldap-ready-error-text": "Nustatytos ne visos LDAP reikšmės. Į tai galima nekreipti dėmesio, jei nenaudojate LDAP autentifikavimo.",
"ldap-ready-success-text": "Nustatyti visi reikalingi LDAP kintamieji.",
"build": "Build",
"recipe-scraper-version": "Recipe Scraper Version"
"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."
},
"shopping-list": {
"all-lists": "Visi sąrašai",
@@ -834,8 +854,11 @@
"link-id": "Nuorodos ID",
"link-name": "Nuorodos pavadinimas",
"login": "Prisijungti",
"login-oidc": "Login with",
"or": "or",
"logout": "Atsijungti",
"manage-users": "Tvarkyti vartotojus",
"manage-users-description": "Create and manage users.",
"new-password": "Naujas slaptažodis",
"new-user": "Naujas vartotojas",
"password-has-been-reset-to-the-default-password": "Slaptažodis buvo nustatytas į numatytąjį slaptažodį",
@@ -1131,7 +1154,17 @@
"background-tasks": "Fone veikiančios užduotys",
"background-tasks-description": "Čia galite matyti visas fone veikiančias užduotis ir jų būseną",
"no-logs-found": "Žurnalo įrašų nerasta",
"tasks": "Užduotys"
"tasks": "Užduotys",
"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."
}
},
"profile": {
"welcome-user": "👋 Sveiki atvykę, {0}",

View File

@@ -80,10 +80,12 @@
"recipe-events": "Recipe Events"
},
"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",
@@ -142,14 +144,18 @@
"save": "Save",
"settings": "Settings",
"share": "Share",
"show-all": "Show All",
"shuffle": "Shuffle",
"sort": "Sort",
"sort-ascending": "Sort Ascending",
"sort-descending": "Sort Descending",
"sort-alphabetically": "Alphabetical",
"status": "Status",
"subject": "Subject",
"submit": "Submit",
"success-count": "Success: {count}",
"sunday": "Sunday",
"system": "System",
"templates": "Templates:",
"test": "Test",
"themes": "Themes",
@@ -168,6 +174,7 @@
"units": "Units",
"back": "Back",
"next": "Next",
"start": "Start",
"toggle-view": "Toggle View",
"date": "Date",
"id": "Id",
@@ -236,6 +243,8 @@
"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",
@@ -349,10 +358,11 @@
},
"recipe-data-migrations": "Recipe Data Migrations",
"recipe-data-migrations-explanation": "Recipes can be migrated from another supported application to Mealie. This is a great way to get started with Mealie.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Coming from another application or an even older version of Mealie? Check out migrations and see if your data can be imported.",
"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 natively supports the chowdown repository format. Download the code repository as a .zip file and upload it below.",
"recipe-1": "Recipe 1",
"recipe-2": "Recipe 2",
"paprika-text": "Mealie can import recipes from the Paprika application. Export your recipes from paprika, rename the export extension to .zip and upload it below.",
@@ -360,6 +370,10 @@
"plantoeat": {
"title": "Plan to Eat",
"description-long": "Mealie can import recipies from 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."
}
},
"new-recipe": {
@@ -511,6 +525,7 @@
"edit-timeline-event": "Edit Timeline Event",
"timeline": "Timeline",
"timeline-is-empty": "Nothing on the timeline yet. Try making this recipe!",
"timeline-no-events-found-try-adjusting-filters": "No events found. Try adjusting your search filters.",
"group-global-timeline": "{groupName} Global Timeline",
"open-timeline": "Open Timeline",
"made-this": "I Made This",
@@ -531,6 +546,8 @@
"looking-for-migrations": "Looking For Migrations?",
"import-with-url": "Import with URL",
"create-recipe": "Create Recipe",
"create-recipe-description": "Create a new recipe from scratch.",
"create-recipes": "Create Recipes",
"import-with-zip": "Import with .zip",
"create-recipe-from-an-image": "Create recipe from an image",
"bulk-url-import": "Bulk URL Import",
@@ -726,7 +743,10 @@
"ldap-ready-error-text": "Not all LDAP Values are configured. This can be ignored if you are not using LDAP Authentication.",
"ldap-ready-success-text": "Required LDAP variables are all set.",
"build": "Build",
"recipe-scraper-version": "Recipe Scraper Version"
"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."
},
"shopping-list": {
"all-lists": "All Lists",
@@ -834,8 +854,11 @@
"link-id": "Link ID",
"link-name": "Link Name",
"login": "Login",
"login-oidc": "Login with",
"or": "or",
"logout": "Logout",
"manage-users": "Manage Users",
"manage-users-description": "Create and manage users.",
"new-password": "New Password",
"new-user": "New User",
"password-has-been-reset-to-the-default-password": "Password has been reset to the default password",
@@ -1131,7 +1154,17 @@
"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",
"tasks": "Tasks"
"tasks": "Tasks",
"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."
}
},
"profile": {
"welcome-user": "👋 Welcome, {0}",

View File

@@ -80,10 +80,12 @@
"recipe-events": "Recept gebeurtenissen"
},
"general": {
"add": "Voeg toe",
"cancel": "Annuleren",
"clear": "Wissen",
"close": "Sluiten",
"confirm": "Bevestigen",
"confirm-how-does-everything-look": "Hoe ziet het eruit?",
"confirm-delete-generic": "Weet je zeker dat je dit wilt verwijderen?",
"copied_message": "Gekopieerd!",
"create": "Aanmaken",
@@ -142,14 +144,18 @@
"save": "Opslaan",
"settings": "Instellingen",
"share": "Delen",
"show-all": "Laat alles zien",
"shuffle": "Willekeurig",
"sort": "Sorteren",
"sort-ascending": "Sorteer Oplopend",
"sort-descending": "Sorteer Aflopend",
"sort-alphabetically": "Alfabetisch",
"status": "Status",
"subject": "Onderwerp",
"submit": "Verzenden",
"success-count": "Geslaagd: {count}",
"sunday": "zondag",
"system": "Systeem",
"templates": "Sjablonen:",
"test": "Test",
"themes": "Thema's",
@@ -168,6 +174,7 @@
"units": "Eenheden",
"back": "Terug",
"next": "Volgende",
"start": "Start",
"toggle-view": "Weergave wisselen",
"date": "Datum",
"id": "Id",
@@ -236,6 +243,8 @@
"group-preferences": "Groepsvoorkeuren",
"private-group": "Privé-groep",
"private-group-description": "Instellen van je groep op privé, zet alle publieke weergaveopties naar standaard. Dit overschrijft de instellingen per recept.",
"enable-public-access": "Openbare toegang inschakelen",
"enable-public-access-description": "Maak groepsrecepten standaard openbaar en laat bezoekers recepten zien zonder aan te melden",
"allow-users-outside-of-your-group-to-see-your-recipes": "Sta gebruikers buiten je groep toe om je recepten te zien",
"allow-users-outside-of-your-group-to-see-your-recipes-description": "Als deze mogelijkheid is ingeschakeld kun je een recept delen met iedereen. Zonder dat zij een account hebben. Als deze mogelijkheid is uitgeschakeld kun je een recept alleen delen met mensen die in je groep zitten. Of met een vooraf gemaakte privé link.",
"show-nutrition-information": "Toon voedingsinformatie",
@@ -349,10 +358,11 @@
},
"recipe-data-migrations": "Receptmigratie",
"recipe-data-migrations-explanation": "Je kunt recepten van een ander programma importeren in Mealie. Zo kun je snel aan de slag.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Kom je van een andere toepassing of een oudere versie van Mealie? Kijk eens naar de migraties. Misschien kunnen we je gegevens importeren.",
"choose-migration-type": "Kies het migratietype",
"tag-all-recipes": "Label alle recepten met {tag-name} tag",
"nextcloud-text": "Nextcloud recepten kunnen worden geïmporteerd uit een zip-bestand dat de gegevens bevat die zijn opgeslagen in Nextcloud. Zie de voorbeeldmapstructuur hieronder om ervoor te zorgen dat je recepten kunnen worden geïmporteerd.",
"chowdown-text": "Mealie kan importeren vanuit Chowdown. Download daar het .zip bestand. En upload het hier",
"chowdown-text": "Mealie ondersteunt het formaat van de chowdown repository. Download de repository als een .zip-bestand en upload deze hieronder.",
"recipe-1": "Eerste recept",
"recipe-2": "Tweede recept",
"paprika-text": "Mealie kan recepten uit het programma Paprika importeren. Exporteer je recepten uit Paprika, hernoem de exportuitbreiding naar .zip en upload ze hieronder.",
@@ -360,6 +370,10 @@
"plantoeat": {
"title": "Plan naar Eat",
"description-long": "Mealie kan recepten importeren van Plan naar Eet."
},
"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."
}
},
"new-recipe": {
@@ -511,6 +525,7 @@
"edit-timeline-event": "Bewerk tijdlijn gebeurtenis",
"timeline": "Tijdlijn",
"timeline-is-empty": "Nog niets op de tijdlijn. Probeer dit recept te maken!",
"timeline-no-events-found-try-adjusting-filters": "Geen gebeurtenissen gevonden. Probeer uw zoekfilters aan te passen.",
"group-global-timeline": "{groupName} Algemene tijdlijn",
"open-timeline": "Open tijdlijn",
"made-this": "Ik heb dit gemaakt",
@@ -531,6 +546,8 @@
"looking-for-migrations": "Op zoek naar migraties?",
"import-with-url": "Importeer via URL",
"create-recipe": "Recept aanmaken",
"create-recipe-description": "Maak een nieuw recept.",
"create-recipes": "Recept aanmaken",
"import-with-zip": "Importeer met .zip",
"create-recipe-from-an-image": "Maak recept van een afbeelding",
"bulk-url-import": "Bulk URL import",
@@ -726,7 +743,10 @@
"ldap-ready-error-text": "Niet alle LDAP-waarden zijn geconfigureerd. Dit kan worden genegeerd als je geen LDAP-authenticatie gebruikt.",
"ldap-ready-success-text": "Vereiste LDAP variabelen zijn helemaal ingesteld.",
"build": "Bouw",
"recipe-scraper-version": "Versie van de receptenscraper"
"recipe-scraper-version": "Versie van de receptenscraper",
"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."
},
"shopping-list": {
"all-lists": "Alle lijsten",
@@ -834,8 +854,11 @@
"link-id": "Koppeling ID",
"link-name": "Koppeling Naam",
"login": "Inloggen",
"login-oidc": "Login with",
"or": "or",
"logout": "Uitloggen",
"manage-users": "Beheer Gebruikers",
"manage-users-description": "Aanmaken en beheren van gebruikers.",
"new-password": "Nieuw wachtwoord",
"new-user": "Nieuwe gebruiker",
"password-has-been-reset-to-the-default-password": "Wachtwoord is gereset naar het standaard wachtwoord",
@@ -1131,7 +1154,17 @@
"background-tasks": "Achtergrondtaken",
"background-tasks-description": "Hier kan je alle lopende achtergrondtaken en de status bekijken",
"no-logs-found": "Geen logs gevonden",
"tasks": "Taken"
"tasks": "Taken",
"setup": {
"first-time-setup": "Instellingen eerste gebruik",
"welcome-to-mealie-get-started": "Welkom bij Mealie! Laten we beginnen",
"already-set-up-bring-to-homepage": "Ik ben al ingesteld, breng me naar de startpagina",
"common-settings-for-new-sites": "Hier zijn enkele algemene instellingen voor nieuwe sites",
"setup-complete": "Installatie voltooid!",
"here-are-a-few-things-to-help-you-get-started": "Hier zijn een aantal dingen om je op weg te helpen met Mealie",
"restore-from-v1-backup": "Heeft u een back-up van een vorige exemplaar van Mealie v1? U kunt deze hier herstellen.",
"manage-profile-or-get-invite-link": "Beheer je eigen profiel, of gebruik een uitnodigingslink om te delen met anderen."
}
},
"profile": {
"welcome-user": "👋 Welkom, {0}",

View File

@@ -80,10 +80,12 @@
"recipe-events": "Oppskriftshendelser"
},
"general": {
"add": "Legg til",
"cancel": "Avbryt",
"clear": "Tøm",
"close": "Lukk",
"confirm": "Bekreft",
"confirm-how-does-everything-look": "Hvordan ser alt på?",
"confirm-delete-generic": "Er du sikker på at du vil slette denne?",
"copied_message": "Kopiert!",
"create": "Opprett",
@@ -142,14 +144,18 @@
"save": "Lagre",
"settings": "Innstillinger",
"share": "Del",
"show-all": "Vis alle",
"shuffle": "Tilfeldig rekkefølge",
"sort": "Sortér",
"sort-ascending": "Stigende sortering",
"sort-descending": "Synkende sortering",
"sort-alphabetically": "Alfabetisk",
"status": "Status",
"subject": "Emne",
"submit": "Legg til",
"success-count": "Suksess: {count}",
"sunday": "Søndag",
"system": "System",
"templates": "Maler:",
"test": "Test",
"themes": "Temaer",
@@ -168,6 +174,7 @@
"units": "Enheter",
"back": "Tilbake",
"next": "Neste",
"start": "Start",
"toggle-view": "Bytt visning",
"date": "Dato",
"id": "Id",
@@ -200,7 +207,7 @@
"created-on-date": "Opprettet: {0}",
"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": "Are you sure you want to delete the following items?"
"confirm-delete-generic-items": "Er du sikker på at du vil følgende elementer?"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Er du sikker på at du vil slette <b>{groupName}<b/>?",
@@ -236,6 +243,8 @@
"group-preferences": "Gruppeinnstillinger",
"private-group": "Privat gruppe",
"private-group-description": "Når du setter gruppen din til privat, vil alle offentlige visningsalternativer tilbakestilles til standardverdiene. Dette overskriver individuelle oppskrifters offentlige visningsinnstillinger.",
"enable-public-access": "Aktiver offentlig tilgang",
"enable-public-access-description": "Gjør gruppeoppskrifte offentlige som standard, og tillat besøkende å se oppskrifter uten å logge inn",
"allow-users-outside-of-your-group-to-see-your-recipes": "Tillat brukere utenfor gruppen å se oppskriftene dine",
"allow-users-outside-of-your-group-to-see-your-recipes-description": "Når aktivert, kan du bruke en offentlig lenke for å dele spesifikke oppskrifter uten å autorisere brukeren. Når deaktivert, kan du kun dele oppskrifter med brukere som er i gruppen din eller med en forhåndsgenerert privat lenke",
"show-nutrition-information": "Vis ernæringsinformasjon",
@@ -259,7 +268,7 @@
},
"meal-plan": {
"create-a-new-meal-plan": "Opprett en ny måltidsplan",
"update-this-meal-plan": "Update this Meal Plan",
"update-this-meal-plan": "Oppdater denne måltidsplanen",
"dinner-this-week": "Middag denne uken",
"dinner-today": "Middag idag",
"dinner-tonight": "DAGENS MIDDAG",
@@ -349,10 +358,11 @@
},
"recipe-data-migrations": "Overføring av oppskrifter",
"recipe-data-migrations-explanation": "Oppskrifter kan overføres fra et annet støttet program til Mealie. Dette er en flott måte å komme i gang med Mealie på.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Kommer du fra en annen applikasjon eller en enda eldre versjon av Mealie? Sjekk ut overføringer og se om dine data kan importeres.",
"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 støtter Chowdown-arkivformatet. Last ned kodearkivet som en .zip-fil og last den opp nedenfor",
"chowdown-text": "Mealie natively supports the chowdown repository format. Download the code repository as a .zip file and upload it below.",
"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.",
@@ -360,6 +370,10 @@
"plantoeat": {
"title": "Plan to Eat",
"description-long": "Mealie kan importere oppskrifter fra 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."
}
},
"new-recipe": {
@@ -474,11 +488,11 @@
"add-to-timeline": "Legg til tidslinje",
"recipe-added-to-list": "Oppskrift er lagt til i liste",
"recipes-added-to-list": "Oppskrifter lagt til listen",
"successfully-added-to-list": "Successfully added to list",
"successfully-added-to-list": "Lagt til i listen",
"recipe-added-to-mealplan": "Oppskrift er lagt til i måltidsplan",
"failed-to-add-recipes-to-list": "Klarte ikke å legge til oppskrift i listen",
"failed-to-add-recipe-to-mealplan": "Klarte ikke å legge til oppskrift i måltidsplan",
"failed-to-add-to-list": "Failed to add to list",
"failed-to-add-to-list": "Klarte ikke å legge til oppskrift i listen",
"yield": "Gir",
"quantity": "Antall",
"choose-unit": "Velg enhet",
@@ -494,8 +508,8 @@
"cook-mode": "Tilberedelsesmodus",
"link-ingredients": "Tilknytt ingredienser",
"merge-above": "Slå sammen med steget over",
"move-to-bottom": "Move To Bottom",
"move-to-top": "Move To Top",
"move-to-bottom": "Flytt til bunnen",
"move-to-top": "Flytt til toppen",
"reset-scale": "Nullstill skala",
"decrease-scale-label": "Reduser skala med 1",
"increase-scale-label": "Øk skala med 1",
@@ -511,6 +525,7 @@
"edit-timeline-event": "Endre tidslinjehendelser",
"timeline": "Tidslinje",
"timeline-is-empty": "Ingenting på tidslinjen ennå. Prøv å lage denne oppskriften!",
"timeline-no-events-found-try-adjusting-filters": "Ingen hendelser funnet. Prøv å endre søkefiltrene.",
"group-global-timeline": "{groupName} Global tidslinje",
"open-timeline": "Åpne tidslinje",
"made-this": "Jeg har laget denne",
@@ -531,6 +546,8 @@
"looking-for-migrations": "Ser du etter overføringer?",
"import-with-url": "Importer via nettadresse",
"create-recipe": "Opprett oppskrift",
"create-recipe-description": "Opprett en ny oppskrift fra bunnen av.",
"create-recipes": "Opprett oppskrifter",
"import-with-zip": "Importer fra .zip-fil",
"create-recipe-from-an-image": "Opprett oppskrift fra et bilde",
"bulk-url-import": "Importer flere nettadresser",
@@ -539,8 +556,8 @@
"new-recipe-names-must-be-unique": "Navn på oppskrift må være unike",
"scrape-recipe": "Skrap oppskrift",
"scrape-recipe-description": "Skrap en oppskrift ved bruk av nettadresse. Oppgi nettadressen til nettstedet du vil skrape, så vil Mealie forsøke å skrape oppskriften fra den siden og legge den til i samlingen din.",
"scrape-recipe-have-a-lot-of-recipes": "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": "Har du mange oppskrifter du ønsker å skrape samtidig?",
"scrape-recipe-suggest-bulk-importer": "Prøv masseimporten",
"import-original-keywords-as-tags": "Importer originale søkeord som emneord",
"stay-in-edit-mode": "Forbli i redigeringsmodus",
"import-from-zip": "Importer fra zip-fil",
@@ -564,7 +581,7 @@
"upload-image": "Last opp bilde",
"screen-awake": "Hold skjermen på",
"remove-image": "Slett bilde",
"nextStep": "Next step"
"nextStep": "Neste trinn"
},
"search": {
"advanced-search": "Avansert søk",
@@ -601,7 +618,7 @@
"import-summary": "Importer sammendrag",
"partial-backup": "Delvis sikkerhetskopi",
"unable-to-delete-backup": "Kan ikke slette sikkerhetskopi.",
"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": "Sikkerhetskopier er komplette øyeblikksbilder av databasen og datamappen til nettstedet. Dette inkluderer all data og kan ikke settes til å ekskludere delsett av data. Du kan tenke på dette som et øyeblikksbilde av Mealie på et bestemt tidspunkt. Disse fungerer som en databasesystemuavhengig måte å eksportere og importere data på, eller sikkerhetskopiere nettstedet til en ekstern plassering.",
"backup-restore": "Gjenoppretting av sikkerhetskopi",
"back-restore-description": "Gjenoppretting av denne sikkerhetskopien vil overskrive alle gjeldende data i databasen og i datamappen og erstatte dem med innholdet i denne sikkerhetskopien. {cannot-be-undone} Hvis gjenopprettingen er vellykket, vil du bli logget ut.",
"cannot-be-undone": "Denne handlingen kan ikke angres bruk med forsiktighet.",
@@ -726,7 +743,10 @@
"ldap-ready-error-text": "Ikke alle LDAP-verdier er konfigurert. Dette kan ignoreres hvis du ikke bruker LDAP-autentisering.",
"ldap-ready-success-text": "Alle obligratoriske LDAP-variabler er satt.",
"build": "Build",
"recipe-scraper-version": "Versjon på oppskrift-scraper"
"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."
},
"shopping-list": {
"all-lists": "Alle lister",
@@ -799,7 +819,7 @@
"untagged-count": "Umerkede {count}",
"create-a-tag": "Opprett et emneord",
"tag-name": "Navn på emneord",
"tag": "Tag"
"tag": "Emneord"
},
"tool": {
"tools": "Kjøkkenredskap",
@@ -809,7 +829,7 @@
"create-new-tool": "Opprett nytt kjøkkenredskap",
"on-hand-checkbox-label": "Vis som tilgjengelig (avmerket)",
"required-tools": "Påkrevde kjøkkenredskaper",
"tool": "Tool"
"tool": "Kjøkkenredskap"
},
"user": {
"admin": "Administrator",
@@ -834,8 +854,11 @@
"link-id": "Lenke-ID",
"link-name": "Navn på lenke",
"login": "Logg på",
"login-oidc": "Logg inn med",
"or": "eller",
"logout": "Logg ut",
"manage-users": "Administrer brukere",
"manage-users-description": "Opprett og administrer brukere.",
"new-password": "Nytt passord",
"new-user": "Ny bruker",
"password-has-been-reset-to-the-default-password": "Passordet har blitt tilbakestilt til standardpassordet",
@@ -1131,7 +1154,17 @@
"background-tasks": "Bakgrunnsoppgaver",
"background-tasks-description": "Her kan du se alle de aktive bakgrunnsoppgavene og statusen deres",
"no-logs-found": "Ingen logger funnet",
"tasks": "Oppgaver"
"tasks": "Oppgaver",
"setup": {
"first-time-setup": "Førstegangsoppsett",
"welcome-to-mealie-get-started": "Velkommen til Mealie! La oss begynne",
"already-set-up-bring-to-homepage": "Jeg er allerede satt opp, bare ta meg med til hjemmesiden",
"common-settings-for-new-sites": "Her er noen vanlige innstillinger for nye sider",
"setup-complete": "Oppsett fullført!",
"here-are-a-few-things-to-help-you-get-started": "Her er noen ting som kan hjelpe deg å komme i gang med Mealie",
"restore-from-v1-backup": "Har du en sikkerhetskopi fra en tidligere forekomst av Mealie v1? Du kan gjenopprette den her.",
"manage-profile-or-get-invite-link": "Administrer din egen profil, eller hent en invitasjonslenke for å dele med andre."
}
},
"profile": {
"welcome-user": "👋 Velkommen, {0}",
@@ -1189,7 +1222,7 @@
"require-all-tools": "Krev alle kjøkkenredskaper",
"cookbook-name": "Navn på kokebok",
"cookbook-with-name": "Kokebok {0}",
"create-a-cookbook": "Create a Cookbook",
"cookbook": "Cookbook"
"create-a-cookbook": "Opprett en kokebok",
"cookbook": "Kokebok"
}
}

View File

@@ -77,13 +77,15 @@
"tag-events": "Zdarzenia tagów",
"category-events": "Wydarzenia kategorii",
"when-a-new-user-joins-your-group": "Kiedy nowy użytkownik dołączy do Twojej grupy",
"recipe-events": "Recipe Events"
"recipe-events": "Zdarzenia Przepisów"
},
"general": {
"add": "Dodaj",
"cancel": "Anuluj",
"clear": "Wyczyść",
"close": "Zamknij",
"confirm": "Potwierdź",
"confirm-how-does-everything-look": "How does everything look?",
"confirm-delete-generic": "Czy jesteś pewien, że chcesz usunąć ten element?",
"copied_message": "Skopiowane!",
"create": "Utwórz",
@@ -142,14 +144,18 @@
"save": "Zapisz",
"settings": "Ustawienia",
"share": "Udostępnij",
"show-all": "Pokaż wszystko",
"shuffle": "Pomieszaj",
"sort": "Sortuj",
"sort-ascending": "Sort Ascending",
"sort-descending": "Sort Descending",
"sort-alphabetically": "Alfabetyczne",
"status": "Stan",
"subject": "Temat",
"submit": "Zatwierdź",
"success-count": "Sukces: {count}",
"sunday": "Niedziela",
"system": "System",
"templates": "Szablony:",
"test": "Testuj",
"themes": "Motywy",
@@ -168,6 +174,7 @@
"units": "Jednostki",
"back": "Cofnij",
"next": "Następny",
"start": "Start",
"toggle-view": "Przełącz widok",
"date": "Data",
"id": "Id",
@@ -236,6 +243,8 @@
"group-preferences": "Preferencje grupy",
"private-group": "Prywatna Grupa",
"private-group-description": "Ustawienie twojej grupy na prywatne będzie domyślnie wszystkie opcje widoku publicznego. To nadpisuje poszczególne przepisy w ustawieniach widoku publicznego.",
"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": "Zezwalaj użytkownikom spoza twojej grupy na oglądanie twoich przepisów",
"allow-users-outside-of-your-group-to-see-your-recipes-description": "Po włączeniu możesz użyć linku publicznego udostępniania, aby udostępniać określone przepisy bez autoryzacji użytkownika. Po wyłączeniu, możesz dzielić się przepisami tylko z użytkownikami z twojej grupy lub z wcześniej wygenerowanym linkiem prywatnym",
"show-nutrition-information": "Pokaż informacje o wartości odżywczej",
@@ -349,10 +358,11 @@
},
"recipe-data-migrations": "Migracja danych przepisów",
"recipe-data-migrations-explanation": "Receptury mogą być przeniesione z innej wspieranej aplikacji na Mealie. To świetny sposób na rozpoczęcie z Mealie.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Coming from another application or an even older version of Mealie? Check out migrations and see if your data can be imported.",
"choose-migration-type": "Wybierz typ migracji",
"tag-all-recipes": "Oznacz wszystkie przepisy tagiem {tag-name}",
"nextcloud-text": "Przepisy Nextcloud mogą być zaimportowane z pliku zip, który zawiera dane przechowywane w Nextcloud. Zobacz przykładową strukturę folderu poniżej, aby upewnić się, że Twoje przepisy mogą być importowane.",
"chowdown-text": "Mealie natywnie obsługuje format repozytorium chowdown. Pobierz repozytorium kodu jako plik .zip i prześlij go poniżej",
"chowdown-text": "Mealie natively supports the chowdown repository format. Download the code repository as a .zip file and upload it below.",
"recipe-1": "Przepis 1",
"recipe-2": "Przepis 2",
"paprika-text": "Mealie może importować przepisy z aplikacji Paprika. Eksportuj swoje przepisy z papriki, zmień nazwę rozszerzenia eksportu na .zip i prześlij je poniżej.",
@@ -360,6 +370,10 @@
"plantoeat": {
"title": "Zaplanuj jedzenie",
"description-long": "Mealie może importować przepisy z 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."
}
},
"new-recipe": {
@@ -494,8 +508,8 @@
"cook-mode": "Tryb Gotowania",
"link-ingredients": "Podłącz składniki",
"merge-above": "Scal z powyższym",
"move-to-bottom": "Move To Bottom",
"move-to-top": "Move To Top",
"move-to-bottom": "Przesuń na sam dół",
"move-to-top": "Przesuń na samą górę",
"reset-scale": "Zresetuj Skalę",
"decrease-scale-label": "Zmniejsz Skalę o 1",
"increase-scale-label": "Zwiększ Skalę o 1",
@@ -511,6 +525,7 @@
"edit-timeline-event": "Edytuj zdarzenie osi czasu",
"timeline": "Oś czasu",
"timeline-is-empty": "Nie ma jeszcze nic na osi czasu. Spróbuj przygotować ten przepis!",
"timeline-no-events-found-try-adjusting-filters": "No events found. Try adjusting your search filters.",
"group-global-timeline": "{groupName} Globalna Oś czasu",
"open-timeline": "Otwórz Oś czasu",
"made-this": "Ugotowałem to",
@@ -531,6 +546,8 @@
"looking-for-migrations": "Szukasz migracji?",
"import-with-url": "Importuj z URL",
"create-recipe": "Utwórz Przepis",
"create-recipe-description": "Create a new recipe from scratch.",
"create-recipes": "Create Recipes",
"import-with-zip": "Importuj z pliku .zip",
"create-recipe-from-an-image": "Utwórz przepis z obrazka",
"bulk-url-import": "Import Zbiorczy z URL",
@@ -601,7 +618,7 @@
"import-summary": "Podsumowanie importu",
"partial-backup": "Częściowa kopia zapasowa",
"unable-to-delete-backup": "Nie można usunąć kopii zapasowej.",
"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": "Kopie zapasowe to całkowite zrzuty bazy danych i katalogu danych witryny. Obejmują one wszystkie dane i nie można nic ustawić, aby wykluczyć podzbiory danych. Traktuj je jako stan całego Mealie w określonym momencie czasu. Backupy to agnostyczny sposób eksportowania i importowania danych oraz sposób na zrobienie kopii witryny do zewnętrznej lokalizacji.",
"backup-restore": "Przywróć kopie",
"back-restore-description": "Przywracanie tej kopii zapasowej nadpisze wszystkie aktualne dane w bazie danych i w katalogu danych i zastąpi je zawartością tej kopii zapasowej. {cannot-be-undone} Jeśli przywrócenie zakończy się pomyślnie, zostaniesz wylogowany.",
"cannot-be-undone": "Tej czynności nie można cofnąć - należy zachować ostrożność.",
@@ -726,7 +743,10 @@
"ldap-ready-error-text": "Nie wszystkie wartości LDAP są skonfigurowane. Można to zignorować, jeśli nie używasz uwierzytelniania LDAP.",
"ldap-ready-success-text": "Wszystkie wymagane zmienne LDAP są ustawione.",
"build": "Build",
"recipe-scraper-version": "Wersja Scrapera Przepisów"
"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."
},
"shopping-list": {
"all-lists": "Wszystkie listy",
@@ -834,8 +854,11 @@
"link-id": "ID linku",
"link-name": "Nazwa linku",
"login": "Logowanie",
"login-oidc": "Login with",
"or": "or",
"logout": "Wyloguj się",
"manage-users": "Zarządzaj użytkownikami",
"manage-users-description": "Create and manage users.",
"new-password": "Nowe Hasło",
"new-user": "Nowy użytkownik",
"password-has-been-reset-to-the-default-password": "Hasło zostało przywrócone do domyślnej wartości",
@@ -871,7 +894,7 @@
"you-are-not-allowed-to-create-a-user": "Nie masz uprawnień do tworzenia użytkowników",
"you-are-not-allowed-to-delete-this-user": "Nie masz uprawnień do usuwania użytkowników",
"enable-advanced-content": "Włącz zaawansowane ustawienia",
"enable-advanced-content-description": "Włącza funkcje zaawansowane takie jak skalowanie przepisów, klucze API, webhooki i zarządzanie danymi. Nie mart się, opcję tą można później zmienić",
"enable-advanced-content-description": "Włącza zaawansowane funkcje, takie jak skalowanie receptur, klucze API, Webhooki i zarządzanie danymi. Nie martw się, zawsze możesz to zmienić później",
"favorite-recipes": "Ulubione przepisy",
"email-or-username": "E-mail lub nazwa użytkownika",
"remember-me": "Zapamiętaj",
@@ -948,7 +971,7 @@
"example-unit-singular": "np. Łyżka stołowa",
"example-unit-plural": "np. Łyżki stołowe",
"example-unit-abbreviation-singular": "na przykład: Łyżka stołowa",
"example-unit-abbreviation-plural": "ex: Tbsps"
"example-unit-abbreviation-plural": "na przykład: Łyżka stołowa"
},
"labels": {
"seed-dialog-text": "Wypełnij bazę zwyczajowymi etykietami dla wybranego języka.",
@@ -1131,7 +1154,17 @@
"background-tasks": "Zadania w tle",
"background-tasks-description": "Tutaj możesz wyświetlić wszystkie bieżące zadania w tle i ich status",
"no-logs-found": "Nie znaleziono logów",
"tasks": "Zadania"
"tasks": "Zadania",
"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."
}
},
"profile": {
"welcome-user": "👋 Witaj, {0}",

View File

@@ -80,10 +80,12 @@
"recipe-events": "Eventos da Receita"
},
"general": {
"add": "Add",
"cancel": "Cancelar",
"clear": "Limpar",
"close": "Fechar",
"confirm": "Confirmar",
"confirm-how-does-everything-look": "How does everything look?",
"confirm-delete-generic": "Você tem certeza de que deseja apagar isto?",
"copied_message": "Copiado!",
"create": "Criar",
@@ -142,14 +144,18 @@
"save": "Salvar",
"settings": "Configurações",
"share": "Compartilhar",
"show-all": "Show All",
"shuffle": "Aleatório",
"sort": "Ordenar",
"sort-ascending": "Sort Ascending",
"sort-descending": "Sort Descending",
"sort-alphabetically": "Alfabética",
"status": "Estado",
"subject": "Assunto",
"submit": "Submeter",
"success-count": "Sucesso: {count}",
"sunday": "Domingo",
"system": "System",
"templates": "Modelos:",
"test": "Teste",
"themes": "Temas",
@@ -168,6 +174,7 @@
"units": "Unidades",
"back": "Voltar",
"next": "Avançar",
"start": "Start",
"toggle-view": "Alternar Visualização",
"date": "Data",
"id": "Id",
@@ -236,6 +243,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",
"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",
@@ -349,10 +358,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.",
"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 suporta nativamente o formato de repositório do Chowdown. Baixe o repositório de código como um arquivo .zip e carregue-o abaixo",
"chowdown-text": "Mealie natively supports the chowdown repository format. Download the code repository as a .zip file and upload it below.",
"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.",
@@ -360,6 +370,10 @@
"plantoeat": {
"title": "Planejar refeições",
"description-long": "Mealie consegue importar receitas do Planejar Refeições."
},
"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."
}
},
"new-recipe": {
@@ -511,6 +525,7 @@
"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.",
"group-global-timeline": "{groupName} Linha do Tempo Global",
"open-timeline": "Abrir a Linha do Tempo",
"made-this": "Eu Fiz Isso",
@@ -531,6 +546,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",
"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",
@@ -726,7 +743,10 @@
"ldap-ready-error-text": "Nem todos os valores LDAP estão configurados. Isso pode ser ignorado se você não estiver utilizando a autenticação LDAP.",
"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"
"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."
},
"shopping-list": {
"all-lists": "Todas as Listas",
@@ -834,8 +854,11 @@
"link-id": "ID do Link",
"link-name": "Nome do link",
"login": "Entrar",
"login-oidc": "Login with",
"or": "or",
"logout": "Sair",
"manage-users": "Gerenciar Usuários",
"manage-users-description": "Create and manage users.",
"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",
@@ -1131,7 +1154,17 @@
"background-tasks": "Tarefas de segundo plano",
"background-tasks-description": "Aqui você pode visualizar todas as tarefas executadas em segundo plano e seus status",
"no-logs-found": "Nenhum log encontrado",
"tasks": "Tarefas"
"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."
}
},
"profile": {
"welcome-user": "👋 Bem-vindo, {0}",

View File

@@ -80,10 +80,12 @@
"recipe-events": "Eventos de receita"
},
"general": {
"add": "Adicionar",
"cancel": "Cancelar",
"clear": "Limpar",
"close": "Fechar",
"confirm": "Confirmar",
"confirm-how-does-everything-look": "Qual é o aspeto geral?",
"confirm-delete-generic": "Tem a certeza que deseja remover?",
"copied_message": "Copiado!",
"create": "Criar",
@@ -142,14 +144,18 @@
"save": "Guardar",
"settings": "Definições",
"share": "Partilhar",
"show-all": "Mostrar todos",
"shuffle": "Baralhar",
"sort": "Ordenar",
"sort-ascending": "Ordenar por ordem crescente",
"sort-descending": "Ordenar por ordem decrescente",
"sort-alphabetically": "Ordem alfabética",
"status": "Estado",
"subject": "Assunto",
"submit": "Submeter",
"success-count": "Sucesso: {count}",
"sunday": "Domingo",
"system": "Sistema",
"templates": "Modelos:",
"test": "Teste",
"themes": "Temas",
@@ -168,6 +174,7 @@
"units": "Unidades",
"back": "Voltar",
"next": "Seguinte",
"start": "Início",
"toggle-view": "Alternar Visualização",
"date": "Data",
"id": "Id",
@@ -236,6 +243,8 @@
"group-preferences": "Preferências do Grupo",
"private-group": "Grupo Privado",
"private-group-description": "Ao definir o seu grupo como privado irá redefinir todas as opções de visualização pública para os valores padrão.",
"enable-public-access": "Permitir Acesso Público",
"enable-public-access-description": "Tornar as receitas do grupo públicas por defeito e permitir que os visitantes vejam as receitas sem terem de iniciar sessão",
"allow-users-outside-of-your-group-to-see-your-recipes": "Permitir que utilizadores externos ao seu grupo vejam as suas receitas",
"allow-users-outside-of-your-group-to-see-your-recipes-description": "Quando ativado, poderá usar um link público para partilhar receitas específicas sem autorizar o utilizador. Quando desativado, só poderá partilhar receitas com utilizadores do seu grupo ou com um link privado gerado previamente",
"show-nutrition-information": "Mostrar informações nutricionais",
@@ -349,10 +358,11 @@
},
"recipe-data-migrations": "Migrações de dados de receita",
"recipe-data-migrations-explanation": "Podem ser migradas receitas de outra aplicação suportada para o Mealie. Esta é uma ótima maneira de começar com o Mealie.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Vem de outra aplicação ou de uma versão ainda mais antiga do Mealie? Consulte as migrações e veja se os seus dados podem ser importados.",
"choose-migration-type": "Escolha o tipo de migração",
"tag-all-recipes": "Marcar todas as receitas com a etiqueta {tag-name}",
"nextcloud-text": "As receitas do Nextcloud podem ser importadas a partir de um ficheiro zip que contém os dados armazenados na Nextcloud. Veja abaixo os exemplos da estrutura da pasta para garantir que as suas receitas podem ser importadas.",
"chowdown-text": "Mealie suporta de forma nativa o formato de repositório chowdown. Descarregue o repositório de código como ficheiro .zip e carregue-o abaixo",
"chowdown-text": "O Mealie suporta nativamente o formato de repositório chowdown. Descarregue o repositório de código como um ficheiro .zip e carregue-o abaixo.",
"recipe-1": "Receita 1",
"recipe-2": "Receita 2",
"paprika-text": "O Mealie pode importar receitas da app Paprika. Exporte as suas receitas do Paprika, renomeie a extensão do ficheiro exportado para .zip e carregue-o mais abaixo.",
@@ -360,6 +370,10 @@
"plantoeat": {
"title": "Plano Alimentar",
"description-long": "O Mealie pode importar receitas do Plano Alimentar."
},
"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."
}
},
"new-recipe": {
@@ -511,6 +525,7 @@
"edit-timeline-event": "Editar evento da Cronologia",
"timeline": "Cronologia",
"timeline-is-empty": "Nada na Cronologia, ainda. Tente fazer esta receita!",
"timeline-no-events-found-try-adjusting-filters": "Nenhum evento encontrado. Tente ajustar os filtros de pesquisa.",
"group-global-timeline": "{groupName} Cronologia Global",
"open-timeline": "Abrir Cronologia",
"made-this": "Eu fiz isto",
@@ -531,6 +546,8 @@
"looking-for-migrations": "À procura de Migrações?",
"import-with-url": "Importar com URL",
"create-recipe": "Criar Receita",
"create-recipe-description": "Criar uma receita em branco.",
"create-recipes": "Criar Receitas",
"import-with-zip": "Importar com .zip",
"create-recipe-from-an-image": "Criar receita a partir de uma imagem",
"bulk-url-import": "Importação de URL em bloco",
@@ -726,7 +743,10 @@
"ldap-ready-error-text": "Nem todos os valores LDAP estão configurados. Isso pode ser ignorado se não estiver a utilizar a autenticação LDAP.",
"ldap-ready-success-text": "As variáveis LDAP necessárias estão todas definidas.",
"build": "Compilação",
"recipe-scraper-version": "Versão do Scraper de receitas"
"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."
},
"shopping-list": {
"all-lists": "Todas as Listas",
@@ -834,8 +854,11 @@
"link-id": "ID da Ligação",
"link-name": "Nome da ligação",
"login": "Entrar",
"login-oidc": "Iniciar sessão com",
"or": "ou",
"logout": "Sair",
"manage-users": "Gerir Utilizadores",
"manage-users-description": "Criar e gerir utilizadores.",
"new-password": "Nova Palavra-passe",
"new-user": "Novo Utiizador",
"password-has-been-reset-to-the-default-password": "A palavra-passe foi redefinida para a senha padrão",
@@ -1131,7 +1154,17 @@
"background-tasks": "Tarefas em segundo plano",
"background-tasks-description": "Aqui pode ver todas as tarefas em execução em segundo plano e o seu estado",
"no-logs-found": "Nenhum Registo Encontrado",
"tasks": "Tarefas"
"tasks": "Tarefas",
"setup": {
"first-time-setup": "Configuração Inicial",
"welcome-to-mealie-get-started": "Bem-vindo ao Mealie! Vamos começar",
"already-set-up-bring-to-homepage": "Já estou pronto, leva-me para a página inicial",
"common-settings-for-new-sites": "Aqui estão algumas configurações comuns para sites novos",
"setup-complete": "Configuração Concluída!",
"here-are-a-few-things-to-help-you-get-started": "Aqui estão algumas coisas para ajudar a começar com o Mealie",
"restore-from-v1-backup": "Tem uma cópia de segurança de uma instância do Mealie v1? Pode restaurá-la aqui.",
"manage-profile-or-get-invite-link": "Gira o seu próprio perfil ou pegue num convite para partilhar com outros."
}
},
"profile": {
"welcome-user": "👋 Bem-vindo, {0}",

View File

@@ -80,10 +80,12 @@
"recipe-events": "Evenimente rețetă"
},
"general": {
"add": "Adaugă",
"cancel": "Anulează",
"clear": "Șterge",
"close": "Închide",
"confirm": "Confirmă",
"confirm-how-does-everything-look": "Cum arată totul?",
"confirm-delete-generic": "Ești sigur(ă) că dorești să ștergi acest element?",
"copied_message": "Copiat!",
"create": "Creează",
@@ -142,14 +144,18 @@
"save": "Salvează",
"settings": "Setări",
"share": "Distribuie",
"show-all": "Arată totul",
"shuffle": "Redați aleatoriu",
"sort": "Sortează",
"sort-ascending": "Sortare ascendentă",
"sort-descending": "Sortare descendentă",
"sort-alphabetically": "Alfabetic",
"status": "Stare",
"subject": "Subiect",
"submit": "Trimite",
"success-count": "Succes: {count}",
"sunday": "Duminică",
"system": "Sistem",
"templates": "Șabloane:",
"test": "Testează",
"themes": "Teme",
@@ -168,6 +174,7 @@
"units": "Unități",
"back": "Înapoi",
"next": "Continuare",
"start": "Start",
"toggle-view": "Activează/dezactivează Vizualizarea",
"date": "Dată",
"id": "Id",
@@ -200,7 +207,7 @@
"created-on-date": "Creat pe {0}",
"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": "Are you sure you want to delete the following items?"
"confirm-delete-generic-items": "Sunteți sigur că doriți să ștergeți următoarele?"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Sunteți sigur că doriți să ștergeți <b>{groupName}<b/>?",
@@ -236,6 +243,8 @@
"group-preferences": "Preferințe grup",
"private-group": "Grup privat",
"private-group-description": "Setarea grupului la privat va duce la implicit toate opțiunile de vizualizare publică. Acest lucru suprascrie setările individuale de afișare publică a rețetelor.",
"enable-public-access": "Permite accesul Public",
"enable-public-access-description": "Faceți rețete din grup publice implicit și permiteți vizitatorilor să vizualizeze rețetele fără să se logheze",
"allow-users-outside-of-your-group-to-see-your-recipes": "Permite utilizatorilor din afara grupului tău să îți vadă rețetele",
"allow-users-outside-of-your-group-to-see-your-recipes-description": "Când este activată, poți folosi un link public de partajare pentru a distribui rețete specifice fără a autoriza utilizatorul. Când este dezactivat, poți partaja rețete doar cu utilizatori din grupul tău sau cu un link privat pre-generat",
"show-nutrition-information": "Afișare informații nutriționale",
@@ -259,7 +268,7 @@
},
"meal-plan": {
"create-a-new-meal-plan": "Creează un nou plan de mase",
"update-this-meal-plan": "Update this Meal Plan",
"update-this-meal-plan": "Actualizează acest Plan de Masă",
"dinner-this-week": "Cină săptămâna aceasta",
"dinner-today": "Cină astăzi",
"dinner-tonight": "CINĂ ÎN SEARA ACEASTA",
@@ -302,7 +311,7 @@
"random-side": "Garnitura aleatorie",
"this-rule-will-apply": "Această regulă va aplica {dayCriteria} {mealTypeCriteria}.",
"to-all-days": "la toate zilele",
"on-days": "on {0}s",
"on-days": "în {0}s",
"for-all-meal-types": "pentru toate tipurile de mese",
"for-type-meal-types": "pentru {0} tipuri de mese",
"meal-plan-rules": "Regulile Planului de Masă",
@@ -311,24 +320,24 @@
"new-rule-description": "Atunci când creați o nouă regulă pentru un plan de masă puteți restricționa regula aplicabilă pentru o anumită zi a săptămânii și/sau pentru un anumit tip de masă. Pentru a aplica o regulă pentru toate zilele sau toate tipurile de mese puteţi seta regula la \"Oricare\" ce va fi aplicată la toate valorile posibile pentru ziua şi/sau tipul mesei.",
"recipe-rules": "Reguli rețetă",
"applies-to-all-days": "Se aplică pentru toate zilele",
"applies-on-days": "Applies on {0}s",
"applies-on-days": "Aplică pe {0}s",
"meal-plan-settings": "Setările Planului de Masă"
},
"migration": {
"migration-data-removed": "Datele migrării au fost șterse",
"new-migration": "Migrare nouă",
"no-file-selected": "Nici un fișier selecționat",
"no-migration-data-available": "No Migration Data Available",
"no-migration-data-available": "Nu există date de migrare disponibile",
"previous-migrations": "Migrări anterioare",
"recipe-migration": "Migrare rețeta",
"chowdown": {
"description": "Migrează datele din Chowdown",
"description-long": "Mealie natively supports the chowdown repository format. Download the code repository as a .zip file and upload it below.",
"description-long": "Mealie acceptă nativ formatul repo-ului Chowdown. Descărcați repository-ul de cod ca fișier \".zip\" și încărcați-l mai jos.",
"title": "Chowdown"
},
"nextcloud": {
"description": "Migrează datele dintr-o instanță de 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": "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.",
"title": "Nextcloud Cookbook"
},
"copymethat": {
@@ -349,37 +358,42 @@
},
"recipe-data-migrations": "Migrarea datelor rețetelor",
"recipe-data-migrations-explanation": "Rețetele pot fi migrate de la o altă aplicație ce este suportată de Mealie. Acesta este un mod excelent de a începe să folosiți Mealie.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Veniți dintr-o altă aplicație sau o versiune și mai veche a Mealie? Uitați-vă la migrări și vedeți dacă datele dvs. pot fi importate.",
"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 acceptă nativ formatul repo-ului Chowdown. Descărcați depozitul de cod ca fișier \".ZIP\" și încărcați-l mai jos.",
"chowdown-text": "Mealie natively supports the chowdown repository format. Download the code repository as a .zip file and upload it below.",
"recipe-1": "Rețeta 1",
"recipe-2": "Rețeta 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.",
"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.",
"mealie-text": "Mealie poate importa rețetele din aplicația Mealie dintr-o lansare mai veche de v1.0. Exportă rețetele din vechea aplicație, apoi încarcă fișierul de tip \". zip\" folosind câmpul de mai jos. Numai rețetele pot fi importate din export.",
"plantoeat": {
"title": "Planifică să Mănânci",
"description-long": "Mealie can import recipies from Plan to Eat."
"description-long": "Mealie poate importa rețete din Planul de Masă."
},
"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."
}
},
"new-recipe": {
"bulk-add": "Adăugare în masă",
"error-details": "Only websites containing ld+json or microdata can be imported by Mealie. Most major recipe websites support this data structure. If your site cannot be imported but there is json data in the log, please submit a github issue with the URL and data.",
"error-details": "Mealie poate importa doar site-uri web care conțin ld+json sau microdata. Majoritatea site-urilor web majore cu rețete susțin această structură de date. Dacă site-ul dvs. nu poate fi importat, dar există date json în loguri, vă rugăm să creați un github issue cu adresa URL și datele.",
"error-title": "Se pare că nu am găsit nimic",
"from-url": "Importați o rețetă",
"github-issues": "GitHub Issues",
"google-ld-json-info": "Google ld+json Info",
"must-be-a-valid-url": "Trebuie să fie o adresă URL validă",
"paste-in-your-recipe-data-each-line-will-be-treated-as-an-item-in-a-list": "Paste in your recipe data. Each line will be treated as an item in a list",
"paste-in-your-recipe-data-each-line-will-be-treated-as-an-item-in-a-list": "Introduceți datele rețetei. Fiecare linie va fi tratată ca un element într-o listă",
"recipe-markup-specification": "Specificație Markup rețetă",
"recipe-url": "URL rețetă",
"upload-a-recipe": "Încarcă o rețetă",
"upload-individual-zip-file": "Upload an individual .zip file exported from another Mealie instance.",
"upload-individual-zip-file": "Încărcaţi un fişier individual .zip exportat dintr-o altă instanţă de Mealie.",
"url-form-hint": "Copiază și lipește un link de pe site-ul tău web preferat de rețete",
"view-scraped-data": "View Scraped Data",
"trim-whitespace-description": "Trim leading and trailing whitespace as well as blank lines",
"trim-prefix-description": "Trim first character from each line",
"split-by-numbered-line-description": "Attempts to split a paragraph by matching '1)' or '1.' patterns",
"view-scraped-data": "Vezi datele colectate",
"trim-whitespace-description": "Elimină spațiile albe de la început și sfârșit precum și liniile goale",
"trim-prefix-description": "Elimină primul caracter din fiecare linie",
"split-by-numbered-line-description": "Încearcă să împartă un paragraf prin potrivirea modelelor \"1)\" sau \"1.\"",
"import-by-url": "Importă rețetă prin URL",
"create-manually": "Creează o rețetă manual",
"make-recipe-image": "Setează ca imaginea rețetei"
@@ -494,8 +508,8 @@
"cook-mode": "Modul de gătire",
"link-ingredients": "Link-uri Ingrediente",
"merge-above": "Îmbină deasupra",
"move-to-bottom": "Move To Bottom",
"move-to-top": "Move To Top",
"move-to-bottom": "Mutare la sfârșit",
"move-to-top": "Mutare la început",
"reset-scale": "Resetează scara",
"decrease-scale-label": "Scade scara cu 1",
"increase-scale-label": "Crește scara cu 1",
@@ -510,37 +524,40 @@
},
"edit-timeline-event": "Modifică Evenimentul din Cronologie",
"timeline": "Cronologie",
"timeline-is-empty": "Nothing on the timeline yet. Try making this recipe!",
"timeline-is-empty": "Nimic în timeline deocamdată. Încearcă să gătești o rețeta!",
"timeline-no-events-found-try-adjusting-filters": "Nu s-au găsit evenimente. Încercați să ajustați filtrele de căutare.",
"group-global-timeline": "Cronologia globală a grupului {groupName} ",
"open-timeline": "Deschide Cronologia",
"made-this": "Am făcut asta",
"how-did-it-turn-out": "Cum a ieșit?",
"user-made-this": "{user} a făcut asta",
"last-made-date": "Ultima preparare {date}",
"api-extras-description": "Recipes extras are a key feature of the Mealie API. They allow you to create custom JSON key/value pairs within a recipe, to reference from 3rd party applications. You can use these keys to provide information, for example to trigger automations or custom messages to relay to your desired device.",
"message-key": "Message Key",
"parse": "Parse",
"attach-images-hint": "Attach images by dragging & dropping them into the editor",
"api-extras-description": "Recipes extras sunt o caracteristică cheie a API-ului Mealie. Îți permit să creezi perechi personalizate de cheie/valoare JSON într-o rețetă, ca să faci referire la aplicații terțe. Puteți utiliza aceste chei pentru a furniza informații, de exemplu pentru a declanșa automatizări sau mesaje personalizate pentru a transmite dispozitivul dorit.",
"message-key": "Cheie mesaj",
"parse": "Parsează",
"attach-images-hint": "Atașează imagini trăgându-le cu mouse-ul și plasându-le în editor",
"drop-image": "Trage imaginea",
"enable-ingredient-amounts-to-use-this-feature": "Enable ingredient amounts to use this feature",
"recipes-with-units-or-foods-defined-cannot-be-parsed": "Recipes with units or foods defined cannot be parsed.",
"enable-ingredient-amounts-to-use-this-feature": "Activaţi cantităţile de ingrediente pentru a utiliza această funcționalitate",
"recipes-with-units-or-foods-defined-cannot-be-parsed": "Reţetele cu unităţi sau alimente definite nu pot fi analizate.",
"parse-ingredients": "Analizează ingredientele",
"edit-markdown": "Editează Markdown",
"recipe-creation": "Crearea rețetei",
"select-one-of-the-various-ways-to-create-a-recipe": "Selectează una dintre diferitele modalități de a crea o rețetă",
"looking-for-migrations": "Looking For Migrations?",
"looking-for-migrations": "Cauți migrațiile?",
"import-with-url": "Import cu URL",
"create-recipe": "Crează rețetă",
"create-recipe-description": "Creează o rețetă nouă de la zero.",
"create-recipes": "Crează rețetă",
"import-with-zip": "Importă cu .zip",
"create-recipe-from-an-image": "Create recipe from an image",
"bulk-url-import": "Bulk URL Import",
"create-recipe-from-an-image": "Creează o rețetă dintr-o imagine",
"bulk-url-import": "Import URL în bulk",
"debug-scraper": "Depanare funcție Importare",
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Creează o rețetă furnizând numele. Toate rețetele trebuie să aibă nume unice.",
"new-recipe-names-must-be-unique": "Numele rețetei trebuie să fie unic",
"scrape-recipe": "Importare rețetă",
"scrape-recipe-description": "Importa o rețetă prin url. Oferiți url-ul pentru site-ul pe care doriți să îl importați, și Mealie va încerca să importe rețeta de pe acel site și să o adauge la colecția ta.",
"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": "Ai mai multe rețete pe care vrei să le imporți simultan?",
"scrape-recipe-suggest-bulk-importer": "Încearcă importatorul în bulk",
"import-original-keywords-as-tags": "Importă cuvintele cheie originale ca tag-uri",
"stay-in-edit-mode": "Rămâi în modul Editare",
"import-from-zip": "Importă din zip",
@@ -564,7 +581,7 @@
"upload-image": "Încărcare imagine",
"screen-awake": "Păstrare ecran aprins",
"remove-image": "Șterge Imaginea",
"nextStep": "Next step"
"nextStep": "Pasul următor"
},
"search": {
"advanced-search": "Căutare avansată",
@@ -596,11 +613,11 @@
"backup-tag": "Backup la Tag-uri",
"create-heading": "Create a Backup",
"delete-backup": "Șterge 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.",
"error-creating-backup-see-log-file": "Eroare la crearea backup-ului. Vezi fişierul log",
"full-backup": "Backup complet",
"import-summary": "Rezumat import",
"partial-backup": "Backup parțial",
"unable-to-delete-backup": "Backup imposibil de șters.",
"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",
"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.",
@@ -726,7 +743,10 @@
"ldap-ready-error-text": "Not all LDAP Values are configured. This can be ignored if you are not using LDAP Authentication.",
"ldap-ready-success-text": "Required LDAP variables are all set.",
"build": "Build",
"recipe-scraper-version": "Recipe Scraper Version"
"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."
},
"shopping-list": {
"all-lists": "All Lists",
@@ -834,8 +854,11 @@
"link-id": "Link ID",
"link-name": "Link Name",
"login": "Login",
"login-oidc": "Login with",
"or": "or",
"logout": "Logout",
"manage-users": "Manage Users",
"manage-users-description": "Create and manage users.",
"new-password": "New Password",
"new-user": "New User",
"password-has-been-reset-to-the-default-password": "Password has been reset to the default password",
@@ -1131,7 +1154,17 @@
"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",
"tasks": "Tasks"
"tasks": "Tasks",
"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."
}
},
"profile": {
"welcome-user": "👋 Welcome, {0}",

View File

@@ -80,10 +80,12 @@
"recipe-events": "События Рецепта"
},
"general": {
"add": "Add",
"cancel": "Отмена",
"clear": "Очистить",
"close": "Закрыть",
"confirm": "Подтвердить",
"confirm-how-does-everything-look": "How does everything look?",
"confirm-delete-generic": "Вы уверены, что хотите это удалить?",
"copied_message": "Скопировано!",
"create": "Создать",
@@ -142,14 +144,18 @@
"save": "Сохранить",
"settings": "Настройки",
"share": "Поделиться",
"show-all": "Show All",
"shuffle": "Перемешать",
"sort": "Сортировать",
"sort-ascending": "Sort Ascending",
"sort-descending": "Sort Descending",
"sort-alphabetically": "По алфавиту",
"status": "Статус",
"subject": "Тема",
"submit": "Добавить",
"success-count": "Успешно: {count}",
"sunday": "Воскресенье",
"system": "System",
"templates": "Шаблоны:",
"test": "Тест",
"themes": "Темы",
@@ -168,6 +174,7 @@
"units": "Единицы измерения",
"back": "Назад",
"next": "Следующее",
"start": "Start",
"toggle-view": "Переключить вид",
"date": "Дата",
"id": "Id",
@@ -236,6 +243,8 @@
"group-preferences": "Настройки группы",
"private-group": "Приватная группа",
"private-group-description": "Переключение группы в приватную перепишет все настройки публичного доступа на дефолтные. Это так же затронет все рецепты в группе.",
"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-description": "При включении данной опции, вы можете делиться публичной ссылкой на данный рецепт, чтобы поделиться им с людьми без аккаунта. Иначе делиться рецептом будет можно только с пользователями внутри группы или с пользователями с приватной ссылкой",
"show-nutrition-information": "Показать информацию по питательным веществам",
@@ -349,10 +358,11 @@
},
"recipe-data-migrations": "Миграция данных рецепта",
"recipe-data-migrations-explanation": "Рецепты могут быть перенесены из другого поддерживаемого приложения в Mealie. Это отличный способ начать работу с 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.",
"choose-migration-type": "Выберите тип миграции",
"tag-all-recipes": "Отметить все рецепты тегом {tag-name}",
"nextcloud-text": "Рецепты Nextcloud могут быть импортированы из zip-файла c данными из Nextcloud. Смотрите пример структуры папок ниже, чтобы убедиться, что ваши рецепты могут быть импортированы.",
"chowdown-text": "Mealie поддерживает формат chowdown репозитория. Загрузите хранилище кода в формате .zip и загрузите его ниже",
"chowdown-text": "Mealie natively supports the chowdown repository format. Download the code repository as a .zip file and upload it below.",
"recipe-1": "Рецепт 1",
"recipe-2": "Рецепт 2",
"paprika-text": "Mealie может импортировать рецепты из приложения Paprika. Экспортируйте рецепты из paprika, измените расширение для экспорта в .zip и загрузить его ниже.",
@@ -360,6 +370,10 @@
"plantoeat": {
"title": "Plan to Eat",
"description-long": "Mealie может импортировать рецепты из 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."
}
},
"new-recipe": {
@@ -511,6 +525,7 @@
"edit-timeline-event": "Редактировать событие в истории",
"timeline": "История",
"timeline-is-empty": "В истории пока ничего нет. Попробуйте сделать этот рецепт!",
"timeline-no-events-found-try-adjusting-filters": "No events found. Try adjusting your search filters.",
"group-global-timeline": "{groupName} глобальная история",
"open-timeline": "Открыть историю",
"made-this": "Я сделал это",
@@ -531,6 +546,8 @@
"looking-for-migrations": "Ищете миграцию?",
"import-with-url": "Импортировать по URL",
"create-recipe": "Создать рецепт",
"create-recipe-description": "Create a new recipe from scratch.",
"create-recipes": "Create Recipes",
"import-with-zip": "Импорт из .zip",
"create-recipe-from-an-image": "Создать рецепт из изображения",
"bulk-url-import": "Массовый импорт по URL",
@@ -726,7 +743,10 @@
"ldap-ready-error-text": "Не все значения для LDAP настроены. Это сообщение может быть проигнорировано, если вы не используете LDAP аутентификацию.",
"ldap-ready-success-text": "Все требуемые переменные для LDAP установлены.",
"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."
},
"shopping-list": {
"all-lists": "Все списки",
@@ -834,8 +854,11 @@
"link-id": "ID ссылки",
"link-name": "Название ссылки",
"login": "Вход",
"login-oidc": "Login with",
"or": "or",
"logout": "Выход",
"manage-users": "Настройки пользователей",
"manage-users-description": "Create and manage users.",
"new-password": "Новый пароль",
"new-user": "Новый пользователь",
"password-has-been-reset-to-the-default-password": "Пароль был сброшен на пароль по умолчанию",
@@ -1131,7 +1154,17 @@
"background-tasks": "Фоновые задачи",
"background-tasks-description": "Здесь вы можете просмотреть все запущенные фоновые задачи и их статус",
"no-logs-found": "Логи не найдены",
"tasks": "Задачи"
"tasks": "Задачи",
"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."
}
},
"profile": {
"welcome-user": "👋 Добро пожаловать, {0}",

View File

@@ -77,13 +77,15 @@
"tag-events": "Udalosti štítkov",
"category-events": "Udalosti kategórií",
"when-a-new-user-joins-your-group": "Keď sa k vašej skupine pripojí nový užívateľ",
"recipe-events": "Recipe Events"
"recipe-events": "Udalosti receptov"
},
"general": {
"add": "Pridať",
"cancel": "Zrušiť",
"clear": "Vymazať",
"close": "Zavrieť",
"confirm": "Potvrdiť",
"confirm-how-does-everything-look": "Ako to vyzerá?",
"confirm-delete-generic": "Naozaj chcete odstrániť?",
"copied_message": "Okopírované!",
"create": "Vytvoriť",
@@ -142,14 +144,18 @@
"save": "Uložiť",
"settings": "Nastavenia",
"share": "Zdieľať",
"show-all": "Ukázať všetko",
"shuffle": "Náhodný výber",
"sort": "Usporiadať",
"sort-ascending": "Zoradiť vzostupne",
"sort-descending": "Zoradiť zostupne",
"sort-alphabetically": "Abecedne",
"status": "Stav",
"subject": "Predmet",
"submit": "Odoslať",
"success-count": "Úspešné {count}",
"sunday": "Nedeľa",
"system": "Systém",
"templates": "Šablóny:",
"test": "Otestovať",
"themes": "Motívy",
@@ -168,6 +174,7 @@
"units": "Jednotky",
"back": "Späť",
"next": "Nasledujúci",
"start": "Začať",
"toggle-view": "Zmeniť zobrazenie",
"date": "Dátum",
"id": "Id",
@@ -198,9 +205,9 @@
"refresh": "Obnoviť",
"upload-file": "Nahrať súbor",
"created-on-date": "Vytvorené: {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?"
"unsaved-changes": "Posledne vykonané zmeny nie sú uložené. Želáte si ich uložiť alebo zrušiť?",
"clipboard-copy-failure": "Skopírovanie do schránky zlyhalo.",
"confirm-delete-generic-items": "Ste si istý, že chcete odstrániť nasledujúce položky?"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Naozaj chcete odstrániť <b>{groupName}<b/>?",
@@ -215,7 +222,7 @@
"group-id-with-value": "ID skupiny: {groupID}",
"group-name": "Názov skupiny",
"group-not-found": "Skupina nebola nájdená",
"group-token": "Group Token",
"group-token": "Token skupiny",
"group-with-value": "Skupina: {groupID}",
"groups": "Skupiny",
"manage-groups": "Spravovať skupiny",
@@ -236,6 +243,8 @@
"group-preferences": "Nastavenia skupiny",
"private-group": "Súkromná skupina",
"private-group-description": "Nastavenie vašej skupiny ako súkromnej zmení všetky nastavenia vonkajších prístupov na prednastavené hodnoty. Zmeníte tým všetky individuálne nastavené verejné prístupy.",
"enable-public-access": "Povoliť verejný prístup",
"enable-public-access-description": "Nastaviť skupinové recepty ako verejné a umožniť hosťom ich zobrazenie bez nutnosti prihlásenia",
"allow-users-outside-of-your-group-to-see-your-recipes": "Povoliť užívateľom mimo vašej skupiny čítať vaše recepty",
"allow-users-outside-of-your-group-to-see-your-recipes-description": "Po aktivácii môžete zdielať vybrané recepty prostredníctvom verejne dostupných odkazov bez nutnosti autorizácie užívateľa. Pri deaktivácii je možné recepty zdielať len s užívateľmi vo vašej skupine alebo prostredníctvom pred-generovaných súkromných odkazov",
"show-nutrition-information": "Zobraziť informáciu o nutričných hodnotách",
@@ -251,7 +260,7 @@
"general-preferences": "Všeobecné nastavenia",
"group-recipe-preferences": "Nastavenia receptu v rámci skupiny",
"report": "Report",
"report-with-id": "Report ID: {id}",
"report-with-id": "ID reportu: {id}",
"group-management": "Spravovanie skupiny",
"admin-group-management": "Spravovanie administrátorskej skupiny",
"admin-group-management-text": "Zmeny týkajúce sa tejto skupiny budú vykonané okamžite.",
@@ -259,7 +268,7 @@
},
"meal-plan": {
"create-a-new-meal-plan": "Vytvoriť nový jedálniček",
"update-this-meal-plan": "Update this Meal Plan",
"update-this-meal-plan": "Aktualizovať jedálniček",
"dinner-this-week": "Večera tento týždeň",
"dinner-today": "Večera dnes",
"dinner-tonight": "VEČERA NA DNES",
@@ -307,7 +316,7 @@
"for-type-meal-types": "na {0} druhy jedál",
"meal-plan-rules": "Pravidlá jedálnička",
"new-rule": "Nové pravidlo",
"meal-plan-rules-description": "You can create rules for auto selecting recipes for your meal plans. These rules are used by the server to determine the random pool of recipes to select from when creating meal plans. Note that if rules have the same day/type constraints then the categories of the rules will be merged. In practice, it's unnecessary to create duplicate rules, but it's possible to do so.",
"meal-plan-rules-description": "Môžete vytvárať pravidlá pre automatizovaný výber receptov pre váše jedálničky. Tieto pravidlá používa server pre určenie skupiny receptov, z ktorých náhodne vyberá pri tvorbe jedálničkov. V prípade, ak majú pravidlá rovnaké obmedzenia na dni/typy jedál, sú príslušné kategórie pravidiel zlúčené. Bežne nie je nutné vytvárať duplicitné pravidlá, ale v prípade potreby je to možné.",
"new-rule-description": "Pri tvorbe nového pravidla pre jedálniček môžete účinnosť pravidla obmedziť len na špecifický deň v týždni a/alebo špecifický typ jedla. Pre uplatnenie pravidla na všetky dni v týždni alebo všetky typy jedál nastavte pravidlo pre \"Všetky\", čím uplatníte pravidlo na všetky dni a/alebo typy jedál.",
"recipe-rules": "Pravidlá receptov",
"applies-to-all-days": "Platí pre všetky dni",
@@ -344,22 +353,27 @@
"title": "Mealie Pre v1.0"
},
"tandoor": {
"description-long": "Mealie can import recipes from Tandoor. Export your data in the \"Default\" format, then upload the .zip below.",
"title": "Tandoor Recipes"
"description-long": "Mealie dokáže importovať recepty z Tandoor. Exportujte recepty v prednastavenom formáte a zip-súbor nahrajte nižšie.",
"title": "Tandoor recepty"
},
"recipe-data-migrations": "Migrácie dát receptov",
"recipe-data-migrations-explanation": "Recepty je možné prenášať do Mealie z inej podporovanej aplikácie. Je to výborný spôsob ako začať s používaním Mealie.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Prichádzate z inej aplikácie alebo dokonca staršej verzie Mealie? Pozrite si možnosti migrácie a zistite, či je možné importovať vaše pôvodné dáta.",
"choose-migration-type": "Vyberte spôsob migrácie",
"tag-all-recipes": "Označte všetky recepty štítkom {tag-name}",
"nextcloud-text": "Recepty z Nextcloud-u je možné importovať priamo zo zip-súboru, ktorý obsahuje dáta uložené na Nextcloud-e. Pozrite sa nižšie na príklad adresárovej štruktúry, aby ste sa uistili, že je možné vaše recepty importovať.",
"chowdown-text": "Mealie prirodzene podporuje chowdown formát úložiska. Stiahnite úložisko kódu ako zip-súbor a nahrajte ho nižšie",
"chowdown-text": "Mealie natively supports the chowdown repository format. Download the code repository as a .zip file and upload it below.",
"recipe-1": "Recept 1",
"recipe-2": "Recept 2",
"paprika-text": "Mealie dokáže importovať recepty z aplikácie Paprika. Exportujte vaše recepty z Papriky, premenujte príponu exportovaného súboru na .zip a nahrajte ho nižšie.",
"mealie-text": "Mealie dokáže importovať recepty z Mealie verzie pre v1.0. Exportujte vaše recepty z vašej starej inštalácie a nižšie nahrajte zip-súbor. Týmto spôsobom je možné z exportu importovať iba recepty.",
"plantoeat": {
"title": "Plan to Eat",
"description-long": "Mealie can import recipies from Plan to Eat."
"title": "Plan To Eat",
"description-long": "Mealie dokáže importovať recepty z 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."
}
},
"new-recipe": {
@@ -471,14 +485,14 @@
"date-format-hint-yyyy-mm-dd": "Formát YYY-MM-DD",
"add-to-list": "Pridať do zoznamu",
"add-to-plan": "Pridať do plánu",
"add-to-timeline": "Add to Timeline",
"add-to-timeline": "Pridať na časovú os",
"recipe-added-to-list": "Recept bol pridaný do zoznamu",
"recipes-added-to-list": "Recipes added to list",
"successfully-added-to-list": "Successfully added to list",
"recipes-added-to-list": "Recepty boli pridané do zoznamu",
"successfully-added-to-list": "Úspešne pridané do zoznamu",
"recipe-added-to-mealplan": "Recept bol pridaný do stravovacieho plánu",
"failed-to-add-recipes-to-list": "Failed to add recipe to list",
"failed-to-add-recipes-to-list": "Pridanie receptu do zoznamu zlyhalo",
"failed-to-add-recipe-to-mealplan": "Pridanie receptu do stravovacieho plánu zlyhalo",
"failed-to-add-to-list": "Failed to add to list",
"failed-to-add-to-list": "Pridanie do zoznamu zlyhalo",
"yield": "Počet porcií",
"quantity": "Množstvo",
"choose-unit": "Vyberte jednotku",
@@ -494,8 +508,8 @@
"cook-mode": "Režim varenia",
"link-ingredients": "Prepojiť suroviny",
"merge-above": "Zlúčiť s predchádzajúcim",
"move-to-bottom": "Move To Bottom",
"move-to-top": "Move To Top",
"move-to-bottom": "Presunúť na koniec",
"move-to-top": "Presunúť na začiatok",
"reset-scale": "Obnoviť škálovanie",
"decrease-scale-label": "Znížiť škálovanie o 1",
"increase-scale-label": "Zvýšiť škálovanie o 1",
@@ -511,17 +525,18 @@
"edit-timeline-event": "Upraviť udalosť na časovej osi",
"timeline": "Časová os",
"timeline-is-empty": "Na časovej osi zatiaľ nič nie je. Skúste pripraviť tento recept!",
"timeline-no-events-found-try-adjusting-filters": "Neboli nájdené žiadne udalosti. Skúste zmeniť kritéria filtrov.",
"group-global-timeline": "{groupName} Globálna časová os",
"open-timeline": "Otvoriť časovú os",
"made-this": "Toto som uvaril",
"how-did-it-turn-out": "Ako to dopadlo?",
"user-made-this": "{user} toto uvaril/-a",
"last-made-date": "Posledne pripravené {date}",
"api-extras-description": "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": "API dolnky receptov sú kľúčovou funkcionalitou Mealie API. Umožňujú užívateľom vytvárať vlastné JSON páry kľúč/hodnota v rámci receptu, a využiť v aplikáciách tretích strán. Údaje uložené pod jednotlivými kľúčmi je možné využiť napríklad ako spúšťač automatizovaných procesov, či pri zasielaní vlastných správ do vami zvolených zariadení.",
"message-key": "Kľúč správy",
"parse": "Analyzovať",
"attach-images-hint": "Pridaj obrázky ich potiahnutím a pustením na editor",
"drop-image": "Drop image",
"drop-image": "Odstrániť obrázok",
"enable-ingredient-amounts-to-use-this-feature": "Povoľ množstvám prísad využívať túto vlastnosť",
"recipes-with-units-or-foods-defined-cannot-be-parsed": "Recepty so stanovenými jednotkami alebo jedlami nie je možné parsovať.",
"parse-ingredients": "Analyzuj suroviny",
@@ -531,6 +546,8 @@
"looking-for-migrations": "Hľadáte možnosti migrácie?",
"import-with-url": "Importovať z URL",
"create-recipe": "Vytvoriť recept",
"create-recipe-description": "Vytvoriť nový recept od začiatku.",
"create-recipes": "Vytvoriť recept",
"import-with-zip": "Importovať .zip súbor",
"create-recipe-from-an-image": "Vytvoriť recept z obrázku",
"bulk-url-import": "Hromadný URL import",
@@ -539,8 +556,8 @@
"new-recipe-names-must-be-unique": "Názvy nových receptov musia byť jedinečné",
"scrape-recipe": "Scrapovať recept",
"scrape-recipe-description": "Stiahne recept zo zadaného url odkazu. Zadajte url stránky, z ktorej chcete stiahnuť recept, a Mealie sa pokúsi recept stiahnuť a vložiť do vašej zbierky.",
"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": "Máte množstvo receptov, ktoré by ste chceli naraz zoscrapovať?",
"scrape-recipe-suggest-bulk-importer": "Vyskúšajte hromadný importér",
"import-original-keywords-as-tags": "Importuj pôvodné kľúčové slová ako tagy",
"stay-in-edit-mode": "Zostať v režime editovania",
"import-from-zip": "Importovať zo Zip-súboru",
@@ -562,9 +579,9 @@
"recipe-yield": "Počet porcií",
"unit": "Jednotka",
"upload-image": "Nahrať obrázok",
"screen-awake": "Keep Screen Awake",
"remove-image": "Remove image",
"nextStep": "Next step"
"screen-awake": "Ponechať obrazovku stále zapnutú",
"remove-image": "Odstrániť obrázok",
"nextStep": "Ďalší krok"
},
"search": {
"advanced-search": "Rozšírené vyhľadávanie",
@@ -583,16 +600,16 @@
"search-hint": "Stlač '/'",
"advanced": "Rozšírené",
"auto-search": "Automatické vyhľadávanie",
"no-results": "No results found"
"no-results": "Nenašli sa žiadne výsledky"
},
"settings": {
"add-a-new-theme": "Pridať nový motív",
"admin-settings": "Nastavenia správcu",
"backup": {
"backup-created": "Backup created successfully",
"backup-created": "Záloha bola úspešne vytvorená",
"backup-created-at-response-export_path": "Záloha vytvorená v {path}",
"backup-deleted": "Záloha bola odstránená",
"restore-success": "Restore successful",
"restore-success": "Obnovenie bolo úspešné",
"backup-tag": "Označenie zálohy",
"create-heading": "Vytvoriť zálohu",
"delete-backup": "Odstrániť zálohu",
@@ -601,7 +618,7 @@
"import-summary": "Importovať zhrnutie",
"partial-backup": "Čiastočná záloha",
"unable-to-delete-backup": "Zálohu nebolo možné odstrániť.",
"experimental-description": "Backups are total snapshots of the database and data directory of the site. This includes all data and cannot be set to exclude subsets of data. You can think of this as a snapshot of Mealie at a specific time. These serve as a database agnostic way to export and import data, or back up the site to an external location.",
"experimental-description": "Zálohy sú úplným obrazom aktuálneho obsahu databázy a adresára s údajmi stránky. Zahŕňajú všetky dáta, pričom nie je možné zo zálohy vylúčiť akúkoľvek podskupinu dát. Takúto zálohu možno považovať za obraz Mealie v danom čase. Táto funkcionalita slúži ako databázovo nezávislý spôsob exportovania a importovania dát alebo ako záloha inštalácie na externú lokáciu.",
"backup-restore": "Uložiť zálohu",
"back-restore-description": "Obnovenie tejto zálohy prepíše všetky aktuálne údaje vo vašej databáze a dáta v dátovom adresári a nahradí ich obsahom tejto zálohy. {cannot-be-undone} Po úspešnom obnovení budete odhlásený.",
"cannot-be-undone": "Túto akciu nie je možné vrátiť späť - používajte s rozvahou.",
@@ -701,13 +718,13 @@
"configuration": "Nastavenie",
"docker-volume": "Docker objem",
"docker-volume-help": "Mealie vyžaduje, aby frontend a backend zdieľali rovnaký dockerový objem alebo úložisko. Toto umožňuje, aby frontend mohol správne pristupovať k obrázkom a ďalším doplnkom uloženým na disku.",
"volumes-are-misconfigured": "Volumes are misconfigured.",
"volumes-are-misconfigured": "Úložiská nie sú správne nastavené.",
"volumes-are-configured-correctly": "Objemy sú nastavené správne.",
"status-unknown-try-running-a-validation": "Neznámy stav. Skúste vykonať overenie.",
"validate": "Overiť",
"email-configuration-status": "Stav nastavenia e-mailu",
"email-configured": "Email Configured",
"email-test-results": "Email Test Results",
"email-configured": "E-mail je nastavený",
"email-test-results": "Výsledok testovania e-mailu",
"ready": "Pripravený",
"not-ready": "Nepripravený - Overte premenné prostredia",
"succeeded": "Podarilo sa",
@@ -726,7 +743,10 @@
"ldap-ready-error-text": "Niektoré z LDAP hodnôt nie sú nakonfigurované. Toto je možné ignorovať, ak nepoužívate LDAP autentifikáciu.",
"ldap-ready-success-text": "Všetky potrebné LDAP premenné sú nastavené.",
"build": "Vytvoriť",
"recipe-scraper-version": "Verzia scrapera receptov"
"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é."
},
"shopping-list": {
"all-lists": "Všetky zoznamy",
@@ -799,7 +819,7 @@
"untagged-count": "Neoznačené {count}",
"create-a-tag": "Vytvoriť štítok",
"tag-name": "Názov štítku",
"tag": "Tag"
"tag": "Štítok"
},
"tool": {
"tools": "Nástroje",
@@ -809,7 +829,7 @@
"create-new-tool": "Vytvoriť nové náčinie",
"on-hand-checkbox-label": "Zobraz ako \"K dispozícii\" (Checked)",
"required-tools": "Potrebné nástroje",
"tool": "Tool"
"tool": "Nástroj"
},
"user": {
"admin": "Administrátor",
@@ -834,8 +854,11 @@
"link-id": "ID odkazu",
"link-name": "Názov odkazu",
"login": "Prihlásiť sa",
"login-oidc": "Prihlásiť sa s",
"or": "alebo",
"logout": "Odhlásiť sa",
"manage-users": "Správa užívateľov",
"manage-users-description": "Vytváranie a správa používateľov.",
"new-password": "Nové heslo",
"new-user": "Nový užívateľ",
"password-has-been-reset-to-the-default-password": "Heslo bolo zresetované na prednastavenú hodnotu",
@@ -844,7 +867,7 @@
"password-updated": "Heslo bolo aktualizované",
"password": "Heslo",
"password-strength": "Sila hesla je {strength}",
"please-enter-password": "Please enter your new password.",
"please-enter-password": "Prosím, zadajte svoje nové heslo.",
"register": "Registrácia",
"reset-password": "Resetovať heslo",
"sign-in": "Prihlásiť sa",
@@ -865,7 +888,7 @@
"username": "Užívateľské meno",
"users-header": "Používatelia",
"users": "Užívatelia",
"user-not-found": "User not found",
"user-not-found": "Používateľ nebol nájdený",
"webhook-time": "Čas webhookov",
"webhooks-enabled": "Webhooky povolené",
"you-are-not-allowed-to-create-a-user": "Nie Ste oprávnený vytvoriť nového užívateľa",
@@ -888,7 +911,7 @@
"user-management": "Správa užívateľov",
"reset-locked-users": "Obnov uzamknutých užívateľov",
"admin-user-creation": "Vytvorenie administrátorského používateľa",
"admin-user-management": "Admin User Management",
"admin-user-management": "Správa administratívneho užívateľa",
"user-details": "Údaje o užívateľovi",
"user-name": "Užívateľské meno",
"authentication-method": "Metóda overenia",
@@ -899,11 +922,11 @@
"user-can-manage-group": "Užívateľ môže spravovať skupinu",
"user-can-organize-group-data": "Užívateľ môže spravovať údaje skupiny",
"enable-advanced-features": "Povoliť pokročilé funkcie",
"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": "Zrejme je toto vaše prvé prihlásenie.",
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Želáte si, aby sa vám toto už viackrát nezobrazovalo? Zmeňte si prosím váš e-mail v nastaveniach používateľa!",
"forgot-password": "Zabudnuté heslo",
"forgot-password-text": "Prosím zadajte svoju e-mailovú adresu a my vám zašleme odkaz, ktorý vám umožní heslo obnoviť.",
"changes-reflected-immediately": "Zmeny týkajúce sa tohto užívateľa budú vykonané okamžite."
},
"language-dialog": {
"translated": "preložené",
@@ -925,8 +948,8 @@
"food-label": "Značka jedla",
"edit-food": "Upraviť jedlo",
"food-data": "Údaje o jedle",
"example-food-singular": "ex: Onion",
"example-food-plural": "ex: Onions"
"example-food-singular": "napr.: cibuľa",
"example-food-plural": "napr.: cibule"
},
"units": {
"seed-dialog-text": "Naplniť databázu z bežnými štítkami podla vášho lokálneho jazyka.",
@@ -937,7 +960,7 @@
"merging-unit-into-unit": "Zlúčiť {0} do {1}",
"create-unit": "Vytvoriť jednotku",
"abbreviation": "Skratky",
"plural-abbreviation": "Plural Abbreviation",
"plural-abbreviation": "Skratka množného čísla",
"description": "Popis",
"display-as-fraction": "Zobraziť ako zlomok",
"use-abbreviation": "Použiť skratky",
@@ -945,10 +968,10 @@
"unit-data": "Údaje o jednotke",
"use-abbv": "Použiť skrt.",
"fraction": "Zlomok",
"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": "napr.: polievková lyžica",
"example-unit-plural": "napr.: polievkové lyžice",
"example-unit-abbreviation-singular": "napr.: PL",
"example-unit-abbreviation-plural": "napr.: PL"
},
"labels": {
"seed-dialog-text": "Naplniť databázu z bežnými štítkami podla vášho lokálneho jazyka.",
@@ -977,8 +1000,8 @@
"delete-recipes": "Odstrániť recepty",
"source-unit-will-be-deleted": "Zdroj bude vymazaný"
},
"create-alias": "Create Alias",
"manage-aliases": "Manage Aliases",
"create-alias": "Vytvoriť alias",
"manage-aliases": "Spravovať aliasy",
"seed-data": "Naplniť dáta",
"seed": "Zdroj",
"data-management": "Správa dát",
@@ -988,24 +1011,24 @@
"columns": "Stĺpce",
"combine": "Kombinovať",
"categories": {
"edit-category": "Edit Category",
"new-category": "New Category",
"category-data": "Category Data"
"edit-category": "Upraviť kategóriu",
"new-category": "Nová kategória",
"category-data": "Údaje kategórie"
},
"tags": {
"new-tag": "New Tag",
"edit-tag": "Edit Tag",
"tag-data": "Tag Data"
"new-tag": "Nový štítok",
"edit-tag": "Upraviť štítok",
"tag-data": "Údaje štítku"
},
"tools": {
"new-tool": "New Tool",
"edit-tool": "Edit Tool",
"tool-data": "Tool Data"
"new-tool": "Nový nástroj",
"edit-tool": "Upraviť nástroj",
"tool-data": "Údaje nástroja"
}
},
"user-registration": {
"user-registration": "Registrácia",
"registration-success": "Registration Success",
"registration-success": "Registrácia úspešná",
"join-a-group": "Pridať sa do skupiny",
"create-a-new-group": "Vytvoriť novú skupinu",
"provide-registration-token-description": "Zadajte registračný kľuč priradený ku skupine, ku ktorej sa chcete pripojiť. Budete ho musieť získať od existujúceho člena skupiny.",
@@ -1052,7 +1075,7 @@
},
"ocr-editor": {
"ocr-editor": "OCR editor",
"toolbar": "Toolbar",
"toolbar": "Panely s nástrojmi",
"selection-mode": "Režim výberu",
"pan-and-zoom-picture": "Priblížiť a posunúť obrázok",
"split-text": "Rozdeliť text",
@@ -1060,8 +1083,8 @@
"split-by-block": "Rozdeliť podľa blokov textu",
"flatten": "Zrovnať bez ohľadu na pôvodné formátovanie",
"help": {
"help": "Help",
"mouse-modes": "Mouse modes",
"help": "Nápoveda",
"mouse-modes": "Módy myši",
"selection-mode": "Režim výberu (predvolený)",
"selection-mode-desc": "Režim výberu je hlavný režim, ktorý môže byť použitý na zadávanie údajov:",
"selection-mode-steps": {
@@ -1131,13 +1154,23 @@
"background-tasks": "Úlohy na pozadí",
"background-tasks-description": "Tu môžete vidieť všetky úlohy bežiace na pozadí aj s ich aktuálnym stavom",
"no-logs-found": "Neboli nájdené žiadne záznamy",
"tasks": "Úlohy"
"tasks": "Úlohy",
"setup": {
"first-time-setup": "Úvodné nastavenia",
"welcome-to-mealie-get-started": "Vitajte v Mealie! Začíname.",
"already-set-up-bring-to-homepage": "Som pripravený začať, vezmi ma na hlavnú stránku",
"common-settings-for-new-sites": "Toto sú bežné nastavenia nových inštalácií",
"setup-complete": "Nastavenie je dokončené!",
"here-are-a-few-things-to-help-you-get-started": "Tu je niekoľko bodov, ktoré vám pomôžu na začiatku v Mealie",
"restore-from-v1-backup": "Máte zálohu z predchádzajúcej inštalácie Mealie v1? Tu ju môžete obnoviť.",
"manage-profile-or-get-invite-link": "Spravujte svoj profil ako súkromný alebo ho s pomocou pozývacieho linku zdieľajte s ostatnými."
}
},
"profile": {
"welcome-user": "👋 Vitajte, {0}",
"description": "Spravujte svoj profil, recepty a nastavenia skupín.",
"get-invite-link": "Odkaz s pozvánkou",
"get-public-link": "Get Public Link",
"get-public-link": "Vytvoriť verejný odkaz",
"account-summary": "Zhrnutie účtu",
"account-summary-description": "Tu je zhrnutie informácií o vašej skupine",
"group-statistics": "Štatistiky skupiny",
@@ -1189,7 +1222,7 @@
"require-all-tools": "Vyžadovať všetky nástroje",
"cookbook-name": "Názov kuchárky",
"cookbook-with-name": "Kuchárka {0}",
"create-a-cookbook": "Create a Cookbook",
"cookbook": "Cookbook"
"create-a-cookbook": "Vytvoriť kuchárku",
"cookbook": "Kuchárka"
}
}

View File

@@ -80,10 +80,12 @@
"recipe-events": "Recipe Events"
},
"general": {
"add": "Add",
"cancel": "Prekliči",
"clear": "Počisti",
"close": "Zapri",
"confirm": "Potrdi",
"confirm-how-does-everything-look": "How does everything look?",
"confirm-delete-generic": "Ali ste prepričani, da želite to izbrisati?",
"copied_message": "Kopirano!",
"create": "Ustvari",
@@ -142,14 +144,18 @@
"save": "Shrani",
"settings": "Nastavitve",
"share": "Deli",
"show-all": "Prikaži vse",
"shuffle": "Naključno",
"sort": "Razvrsti",
"sort-ascending": "Sort Ascending",
"sort-descending": "Sort Descending",
"sort-alphabetically": "Po abecedi",
"status": "Stanje",
"subject": "Zadeva",
"submit": "Pošlji",
"success-count": "Uspešno: {count}",
"sunday": "Nedelja",
"system": "System",
"templates": "Predloge:",
"test": "Test",
"themes": "Teme",
@@ -168,6 +174,7 @@
"units": "Enote",
"back": "Nazaj",
"next": "Naprej",
"start": "Start",
"toggle-view": "Preklopite pogled",
"date": "Datum",
"id": "Id",
@@ -197,8 +204,8 @@
"export-all": "Izvozi vse",
"refresh": "Osveži",
"upload-file": "Naloži datoteko",
"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.",
"created-on-date": "Ustvarjeno dne: {0}",
"unsaved-changes": "Imate neohranjene spremembe. Ali želite shraniti pred odhodom? V redu, če želite shraniti, Prekliči, če želite zavreči spremembe.",
"clipboard-copy-failure": "Failed to copy to the clipboard.",
"confirm-delete-generic-items": "Are you sure you want to delete the following items?"
},
@@ -236,6 +243,8 @@
"group-preferences": "Group Preferences",
"private-group": "Zasebna skupina",
"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",
@@ -293,8 +302,8 @@
"type-any": "Katerikoli",
"day-any": "Katerikoli",
"editor": "Editor",
"meal-recipe": "Meal Recipe",
"meal-title": "Meal Title",
"meal-recipe": "Recept za obrok",
"meal-title": "Naslov obroka",
"meal-note": "Meal Note",
"note-only": "Note Only",
"random-meal": "Random Meal",
@@ -349,17 +358,22 @@
},
"recipe-data-migrations": "Recipe Data Migrations",
"recipe-data-migrations-explanation": "Recipes can be migrated from another supported application to Mealie. This is a great way to get started with Mealie.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Coming from another application or an even older version of Mealie? Check out migrations and see if your data can be imported.",
"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",
"recipe-1": "Recipe 1",
"recipe-2": "Recipe 2",
"chowdown-text": "Mealie natively supports the chowdown repository format. Download the code repository as a .zip file and upload it below.",
"recipe-1": "Recept 1",
"recipe-2": "Recept 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."
},
"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."
}
},
"new-recipe": {
@@ -511,6 +525,7 @@
"edit-timeline-event": "Edit Timeline Event",
"timeline": "Časovnica",
"timeline-is-empty": "Nothing on the timeline yet. Try making this recipe!",
"timeline-no-events-found-try-adjusting-filters": "No events found. Try adjusting your search filters.",
"group-global-timeline": "{groupName} Global Timeline",
"open-timeline": "Open Timeline",
"made-this": "Naredil sem to",
@@ -530,7 +545,9 @@
"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?",
"import-with-url": "Import with URL",
"create-recipe": "Create Recipe",
"create-recipe": "Ustvari recept",
"create-recipe-description": "Create a new recipe from scratch.",
"create-recipes": "Create Recipes",
"import-with-zip": "Import with .zip",
"create-recipe-from-an-image": "Create recipe from an image",
"bulk-url-import": "Bulk URL Import",
@@ -726,7 +743,10 @@
"ldap-ready-error-text": "Not all LDAP Values are configured. This can be ignored if you are not using LDAP Authentication.",
"ldap-ready-success-text": "Required LDAP variables are all set.",
"build": "Build",
"recipe-scraper-version": "Recipe Scraper Version"
"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."
},
"shopping-list": {
"all-lists": "Vsi seznami",
@@ -834,8 +854,11 @@
"link-id": "ID povezave",
"link-name": "Ime povezave",
"login": "Prijava",
"login-oidc": "Login with",
"or": "or",
"logout": "Odjava",
"manage-users": "Upravljanje uporabnikov",
"manage-users-description": "Create and manage users.",
"new-password": "Novo geslo",
"new-user": "Nov uporabnik",
"password-has-been-reset-to-the-default-password": "Geslo je bila nastavljeno na privzeto geslo",
@@ -1131,7 +1154,17 @@
"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",
"tasks": "Tasks"
"tasks": "Tasks",
"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."
}
},
"profile": {
"welcome-user": "👋 Dobrodošel, {0}",

View File

@@ -80,10 +80,12 @@
"recipe-events": "Recipe Events"
},
"general": {
"add": "Add",
"cancel": "Откажи",
"clear": "Обриши",
"close": "Затвори",
"confirm": "Потврди",
"confirm-how-does-everything-look": "How does everything look?",
"confirm-delete-generic": "Да ли сте сигурни да желите обрисати ово?",
"copied_message": "Копирано!",
"create": "Креирај",
@@ -142,14 +144,18 @@
"save": "Сачувај",
"settings": "Подешавања",
"share": "Подели",
"show-all": "Show All",
"shuffle": "Помешано",
"sort": "Сортирај",
"sort-ascending": "Sort Ascending",
"sort-descending": "Sort Descending",
"sort-alphabetically": "Азбучно",
"status": "Статус",
"subject": "Наслов",
"submit": "Пошаљи",
"success-count": "Успешно {count}",
"sunday": "недеља",
"system": "System",
"templates": "Шаблони:",
"test": "Тест",
"themes": "Теме",
@@ -168,6 +174,7 @@
"units": "Јединице",
"back": "Назад",
"next": "Сљедећи",
"start": "Start",
"toggle-view": "Промени приказ",
"date": "Датум",
"id": "Ид",
@@ -236,6 +243,8 @@
"group-preferences": "Подешавања групе",
"private-group": "Приватна група",
"private-group-description": "Постављањем ваше групе као приватне, подразумеваће све опције јавног приказа као подразумеване. Ово замењује јавна подешавања приказа за појединачне рецепте.",
"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-description": "Када је омогућено, можете користити јавну везу за дељење одређених рецепата без одобравања корисника. Када је онемогућено, рецепте можете делити само са корисницима који су у вашој групи или помоћу претходно генерисане приватне везе",
"show-nutrition-information": "Прикажи информације о исхрани",
@@ -349,10 +358,11 @@
},
"recipe-data-migrations": "Recipe Data Migrations",
"recipe-data-migrations-explanation": "Recipes can be migrated from another supported application to Mealie. This is a great way to get started with Mealie.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Coming from another application or an even older version of Mealie? Check out migrations and see if your data can be imported.",
"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 natively supports the chowdown repository format. Download the code repository as a .zip file and upload it below.",
"recipe-1": "Recipe 1",
"recipe-2": "Recipe 2",
"paprika-text": "Mealie can import recipes from the Paprika application. Export your recipes from paprika, rename the export extension to .zip and upload it below.",
@@ -360,6 +370,10 @@
"plantoeat": {
"title": "Plan to Eat",
"description-long": "Mealie can import recipies from 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."
}
},
"new-recipe": {
@@ -511,6 +525,7 @@
"edit-timeline-event": "Уреди догађај на временској линији",
"timeline": "Временска линија",
"timeline-is-empty": "Још увек нема ништа на временској линији. Покушајте направити овај рецепт!",
"timeline-no-events-found-try-adjusting-filters": "No events found. Try adjusting your search filters.",
"group-global-timeline": "{groupName} Global Timeline",
"open-timeline": "Отвори временску линију",
"made-this": "I Made This",
@@ -531,6 +546,8 @@
"looking-for-migrations": "Looking For Migrations?",
"import-with-url": "Увези помоћу URL везе",
"create-recipe": "Направи рецепт",
"create-recipe-description": "Create a new recipe from scratch.",
"create-recipes": "Create Recipes",
"import-with-zip": "Увези помоћу .zip архиве",
"create-recipe-from-an-image": "Направи рецепт са слике",
"bulk-url-import": "Масовни увоз помоћу URL",
@@ -726,7 +743,10 @@
"ldap-ready-error-text": "Not all LDAP Values are configured. This can be ignored if you are not using LDAP Authentication.",
"ldap-ready-success-text": "Required LDAP variables are all set.",
"build": "Build",
"recipe-scraper-version": "Recipe Scraper Version"
"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."
},
"shopping-list": {
"all-lists": "Сви спискови",
@@ -834,8 +854,11 @@
"link-id": "Link ID",
"link-name": "Link Name",
"login": "Login",
"login-oidc": "Login with",
"or": "or",
"logout": "Одјава",
"manage-users": "Manage Users",
"manage-users-description": "Create and manage users.",
"new-password": "New Password",
"new-user": "New User",
"password-has-been-reset-to-the-default-password": "Password has been reset to the default password",
@@ -1131,7 +1154,17 @@
"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",
"tasks": "Tasks"
"tasks": "Tasks",
"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."
}
},
"profile": {
"welcome-user": "👋 Welcome, {0}",

View File

@@ -80,10 +80,12 @@
"recipe-events": "Recepthändelser"
},
"general": {
"add": "Add",
"cancel": "Avbryt",
"clear": "Rensa",
"close": "Stäng",
"confirm": "Bekräfta",
"confirm-how-does-everything-look": "How does everything look?",
"confirm-delete-generic": "Är du säker på att du vill radera detta?",
"copied_message": "Kopierad!",
"create": "Skapa",
@@ -142,14 +144,18 @@
"save": "Spara",
"settings": "Inställningar",
"share": "Dela",
"show-all": "Show All",
"shuffle": "Blanda",
"sort": "Sortering",
"sort-ascending": "Sort Ascending",
"sort-descending": "Sort Descending",
"sort-alphabetically": "Alfabetisk",
"status": "Status",
"subject": "Ämne",
"submit": "Skicka",
"success-count": "Klart: {count}",
"sunday": "Söndag",
"system": "System",
"templates": "Mallar:",
"test": "Test",
"themes": "Tema",
@@ -168,6 +174,7 @@
"units": "Enheter",
"back": "Tillbaka",
"next": "Nästa",
"start": "Start",
"toggle-view": "Växla visning",
"date": "Datum",
"id": "ID",
@@ -236,6 +243,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",
"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",
@@ -349,10 +358,11 @@
},
"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.",
"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.",
"chowdown-text": "Mealie har inbyggt stöd för chowdowns kodförrådsformat. Ladda ner kodförrådet som en .zip-fil och ladda upp det nedan",
"chowdown-text": "Mealie natively supports the chowdown repository format. Download the code repository as a .zip file and upload it below.",
"recipe-1": "Recept 1",
"recipe-2": "Recept 2",
"paprika-text": "Mealie kan importera recept från Paprika-applikationen. Exportera dina recept från Paprika, byt namn på filnamnstillägget på exporten till .zip och ladda upp det nedan.",
@@ -360,6 +370,10 @@
"plantoeat": {
"title": "Planera att äta",
"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."
}
},
"new-recipe": {
@@ -511,6 +525,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.",
"group-global-timeline": "{groupName} Global tidslinje",
"open-timeline": "Öppna tidslinje",
"made-this": "Jag lagade den här",
@@ -531,6 +546,8 @@
"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-recipes": "Create Recipes",
"import-with-zip": "Importera från .zip",
"create-recipe-from-an-image": "Skapa recept från en bild",
"bulk-url-import": "Massimport från URL",
@@ -726,7 +743,10 @@
"ldap-ready-error-text": "Alla LDAP-värden är inte konfigurerade. Detta kan ignoreras om du inte använder LDAP-autentisering.",
"ldap-ready-success-text": "Alla obligatoriska LDAP-variabler är satta.",
"build": "Bygg",
"recipe-scraper-version": "Version av Recept-scraper"
"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."
},
"shopping-list": {
"all-lists": "Visa alla listor",
@@ -834,8 +854,11 @@
"link-id": "Länk ID",
"link-name": "Länk namn",
"login": "Logga in",
"login-oidc": "Login with",
"or": "or",
"logout": "Logga ut",
"manage-users": "Hantera användare",
"manage-users-description": "Create and manage users.",
"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",
@@ -1131,7 +1154,17 @@
"background-tasks": "Bakgrundsjobb",
"background-tasks-description": "Här kan du se alla löpande bakgrundsuppgifter och deras status",
"no-logs-found": "Inga loggar hittade",
"tasks": "Uppgifter"
"tasks": "Uppgifter",
"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."
}
},
"profile": {
"welcome-user": "👋 Välkommen, {0}",

View File

@@ -80,10 +80,12 @@
"recipe-events": "Recipe Events"
},
"general": {
"add": "Ekle",
"cancel": "İptal",
"clear": "Temizle",
"close": "Kapat",
"confirm": "Onayla",
"confirm-how-does-everything-look": "Her şey nasıl görünüyor?",
"confirm-delete-generic": "Bunu silmek istediğinize emin misiniz?",
"copied_message": "Kopyalandı!",
"create": "Oluştur",
@@ -142,14 +144,18 @@
"save": "Kaydet",
"settings": "Ayarlar",
"share": "Paylaş",
"show-all": "Tümünü Göster",
"shuffle": "Karıştır",
"sort": "Sırala",
"sort-ascending": "Artan şekilde sırala",
"sort-descending": "Azalan şekilde sırala",
"sort-alphabetically": "Alfabetik",
"status": "Durum",
"subject": "Konu",
"submit": "Gönder",
"success-count": "Başarılı: {count}",
"sunday": "Pazar",
"system": "Sistem",
"templates": "Şablonlar:",
"test": "Dene",
"themes": "Temalar",
@@ -168,6 +174,7 @@
"units": "Birimler",
"back": "Geri",
"next": "Sonraki",
"start": "Başlat",
"toggle-view": "Görünümü Değiştir",
"date": "Tarih",
"id": "Kimlik",
@@ -236,6 +243,8 @@
"group-preferences": "Grup Tercihleri",
"private-group": "Özel Grup",
"private-group-description": "Grubunuzu özel olarak ayarlamak, tüm genel görünüm seçeneklerini varsayılan hale getirecektir. Bu, bireysel tariflerin genel görünüm ayarlarını geçersiz kılar.",
"enable-public-access": "Genel Erişimi Etkinleştir",
"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": "Grubunuz dışındaki kullanıcıların tariflerinizi görmesini sağlar",
"allow-users-outside-of-your-group-to-see-your-recipes-description": "Etkinleştirildiğinde, kullanıcıyı yetkilendirmeden belirli tarifleri paylaşmak için bir genel paylaşım bağlantısı kullanabilirsiniz. Devre dışı bırakıldığında, tarifleri yalnızca grubunuzdaki kullanıcılarla veya önceden oluşturulmuş özel bir bağlantıyla paylaşabilirsiniz",
"show-nutrition-information": "Besin değerlerini göster",
@@ -349,10 +358,11 @@
},
"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",
"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 biçimini destekler. Kod havuzunu bir .zip dosyası olarak indirin ve aşağıya yükleyin",
"chowdown-text": "Mealie yerel olarak chowdown veri havuzu formatını destekler. Kod deposunu .zip dosyası olarak indirin ve aşağıya yükleyin.",
"recipe-1": "Tarif 1",
"recipe-2": "Tarif 2",
"paprika-text": "Mealie, Paprika uygulamasından tarifleri içe aktarabilir. Tariflerinizi paprika'dan dışa aktarın, dışa aktarma uzantısını .zip olarak yeniden adlandırın ve aşağıda yükleyin.",
@@ -360,6 +370,10 @@
"plantoeat": {
"title": "Plan to Eat",
"description-long": "Mealie, Plan to Eat'ten tarifleri içe aktarabilir."
},
"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."
}
},
"new-recipe": {
@@ -511,6 +525,7 @@
"edit-timeline-event": "Zaman Çizelgesi Etkinliğini Düzenle",
"timeline": "Zaman çizelgesi",
"timeline-is-empty": "Zaman çizelgesinde henüz bir şey yok. Bu tarifi yapmayı deneyin!",
"timeline-no-events-found-try-adjusting-filters": "Hiçbir etkinlik bulunamadı. Arama filtrelerinizi ayarlamayı deneyin.",
"group-global-timeline": "{groupName} Küresel Zaman Çizelgesi",
"open-timeline": "Zaman Çizelgesini Aç",
"made-this": "Bunu ben yaptım",
@@ -531,6 +546,8 @@
"looking-for-migrations": "Verileri Aktarmayı Mi Arıyorsunuz?",
"import-with-url": "URL ile içe aktar",
"create-recipe": "Tarif Oluştur",
"create-recipe-description": "Create a new recipe from scratch.",
"create-recipes": "Create Recipes",
"import-with-zip": ".zip ile içe aktar",
"create-recipe-from-an-image": "Görüntüden yemek tarifi oluştur",
"bulk-url-import": "Toplu URL İçe Aktarma",
@@ -726,7 +743,10 @@
"ldap-ready-error-text": "Not all LDAP Values are configured. This can be ignored if you are not using LDAP Authentication.",
"ldap-ready-success-text": "Gerekli LDAP değişkenlerinin tümü ayarlanmıştır.",
"build": "Yapı",
"recipe-scraper-version": "Recipe Scraper Version"
"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."
},
"shopping-list": {
"all-lists": "All Lists",
@@ -834,8 +854,11 @@
"link-id": "Bağlantı kimliği",
"link-name": "Bağlantı Adı",
"login": "Giriş yap",
"login-oidc": "Ile Giriş Yap",
"or": "veya",
"logout": "Oturumu Kapat",
"manage-users": "Kullanıcıları Yönet",
"manage-users-description": "Kullanıcıları oluşturun ve yönetin.",
"new-password": "Yeni Şifre",
"new-user": "Yeni Kullanıcı",
"password-has-been-reset-to-the-default-password": "Şifre varsayılan şifreye sıfırlandı",
@@ -1131,7 +1154,17 @@
"background-tasks": "Arkaplan Görevleri",
"background-tasks-description": "Burada çalışan tüm arka plan görevlerini ve durumlarını görüntüleyebilirsiniz",
"no-logs-found": "Hiçbir Kayıt Bulunamadı",
"tasks": "Görevler"
"tasks": "Görevler",
"setup": {
"first-time-setup": "İlk Kurulum",
"welcome-to-mealie-get-started": "Mealie'ye hoş geldiniz! Haydi başlayalım",
"already-set-up-bring-to-homepage": "I'm already set up, just bring me to the homepage",
"common-settings-for-new-sites": "Yeni siteler için bazı ortak ayarlar şunlardır",
"setup-complete": "Kurulum tamamlandı!",
"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."
}
},
"profile": {
"welcome-user": "👋 Hoşgeldiniz, {0}",

View File

@@ -80,10 +80,12 @@
"recipe-events": "Події рецепту"
},
"general": {
"add": "Додати",
"cancel": "Скасувати",
"clear": "Очистити",
"close": "Закрити",
"confirm": "Підтвердити",
"confirm-how-does-everything-look": "Як все виглядає?",
"confirm-delete-generic": "Ви дійсно бажаєте видалити це?",
"copied_message": "Скопійовано!",
"create": "Створити",
@@ -142,14 +144,18 @@
"save": "Зберегти",
"settings": "Налаштування",
"share": "Поділитись",
"show-all": "Показати все",
"shuffle": "Перемішати",
"sort": "Сортувати",
"sort-ascending": "Sort Ascending",
"sort-descending": "Sort Descending",
"sort-alphabetically": "За алфавітом",
"status": "Статус",
"subject": "Тема",
"submit": "Надіслати",
"success-count": "Успіх: {count}",
"sunday": "Неділя",
"system": "System",
"templates": "Шаблони:",
"test": "Тест",
"themes": "Теми",
@@ -168,6 +174,7 @@
"units": "Одиниці виміру",
"back": "Назад",
"next": "Далі",
"start": "Почати",
"toggle-view": "Перемкнути вигляд",
"date": "Дата",
"id": "Id",
@@ -236,6 +243,8 @@
"group-preferences": "Налаштування групи",
"private-group": "Приватна група",
"private-group-description": "Якщо зробити групу приватною, то всі налаштування публічного перегляду буде скинуто. Це замінить індивідуальні налаштування публічного перегляду в рецептах.",
"enable-public-access": "Дозволити загальний доступ",
"enable-public-access-description": "Робить групові рецепти загальнодоступними за замовчуванням і дозволяє користувачам переглядати рецепти без входу в систему",
"allow-users-outside-of-your-group-to-see-your-recipes": "Дозволити користувачам за межами вашої групи бачити ваші рецепти",
"allow-users-outside-of-your-group-to-see-your-recipes-description": "Якщо увімкнено, можна використовувати публічне посилання, щоб поділитися рецептом не авторизуючи користувача. Коли вимкнено, ви можете ділитися рецептами лише з користувачами у вашій групі або за заздалегідь згенерованим приватним посиланням",
"show-nutrition-information": "Показувати харчову цінність",
@@ -349,10 +358,11 @@
},
"recipe-data-migrations": "Міграція рецептів",
"recipe-data-migrations-explanation": "Рецепти можна мігрувати з іншого застосунку до Mealie. Це чудовий спосіб розпочати роботу з Mealie.",
"coming-from-another-application-or-an-even-older-version-of-mealie": "Використовуєте іншу програму або іще старішу версію Mealie? Перевірте документацію з міграції та подивіться, чи можуть Ваші дані бути імпортовані.",
"choose-migration-type": "Оберіть тип міграції",
"tag-all-recipes": "Позначити усі рецепти тегом {tag-name}",
"nextcloud-text": "Рецепти Nextcloud можна імпортувати з zip-архіву, який містить дані, що зберігаються в Nextcloud. Перегляньте приклади структури тек нижче, щоб пересвідчитися що ваші рецепти можна імпортувати.",
"chowdown-text": "Mealie підтримує формат chowdown репозиторію. Завантажте репозиторій коду як файл .zip і відвантажте його нижче",
"chowdown-text": "Mealie natively supports the chowdown repository format. Download the code repository as a .zip file and upload it below.",
"recipe-1": "Рецепт 1",
"recipe-2": "Рецепт 2",
"paprika-text": "Mealie може імпортувати рецепти з додатку Paprika. Експортуйте ваші рецепти з Paprika, перейменуйте розширення експорту в .zip та відвантажте його нижче.",
@@ -360,6 +370,10 @@
"plantoeat": {
"title": "Plan to Eat",
"description-long": "Mealie може імпортувати рецепти з 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."
}
},
"new-recipe": {
@@ -511,6 +525,7 @@
"edit-timeline-event": "Редагувати подію хронології",
"timeline": "Хронологія",
"timeline-is-empty": "Хронологія порожня. Спробуйте зробити цей рецепт!",
"timeline-no-events-found-try-adjusting-filters": "No events found. Try adjusting your search filters.",
"group-global-timeline": "Глобальна хроніка {groupName}",
"open-timeline": "Відкрити хронологію",
"made-this": "Я це зробив",
@@ -531,6 +546,8 @@
"looking-for-migrations": "Шукаєте міграції?",
"import-with-url": "Імпорт з URL-адреси",
"create-recipe": "Створити рецепт",
"create-recipe-description": "Створити новий рецепт з нуля.",
"create-recipes": "Створити рецепти",
"import-with-zip": "Імпорт з .zip",
"create-recipe-from-an-image": "Створити рецепт із зображення",
"bulk-url-import": "Масовий URL імпорт",
@@ -726,7 +743,10 @@
"ldap-ready-error-text": "Не всі значення LDAP налаштовано. Це можна ігнорувати, якщо ви не використовуєте LDAP Authentication.",
"ldap-ready-success-text": "Всі необхідні змінні LDAP встановлені.",
"build": "Збірка",
"recipe-scraper-version": "Версія парсера рецептів"
"recipe-scraper-version": "Версія парсера рецептів",
"oidc-ready": "OIDC готово",
"oidc-ready-error-text": "Не всі значення OIDC налаштовано. Це можна ігнорувати, якщо ви не використовуєте авторизацію OIDC.",
"oidc-ready-success-text": "Всі необхідні змінні OIDC встановлені."
},
"shopping-list": {
"all-lists": "Всі списки",
@@ -834,8 +854,11 @@
"link-id": "ID посилання",
"link-name": "Назва посилання",
"login": "Увійти",
"login-oidc": "Увійти через",
"or": "або",
"logout": "Вийти",
"manage-users": "Керування користувачами",
"manage-users-description": "Створюйте і керуйте користувачами.",
"new-password": "Новий пароль",
"new-user": "Новий користувач",
"password-has-been-reset-to-the-default-password": "Пароль було скинуто до стандартного",
@@ -1131,7 +1154,17 @@
"background-tasks": "Фонові задачі",
"background-tasks-description": "Тут ви можете переглянути всі запущені фонові задачі та їх статус",
"no-logs-found": "Журналів не знайдено",
"tasks": "Задачі"
"tasks": "Задачі",
"setup": {
"first-time-setup": "Початкове налаштування",
"welcome-to-mealie-get-started": "Ласкаво просимо до Mealie! Давайте почнемо",
"already-set-up-bring-to-homepage": "Вже все налаштовано, просто перенеси мене на домашню сторінку",
"common-settings-for-new-sites": "Ось деякі загальні налаштування для нових сайтів",
"setup-complete": "Налаштування завершене!",
"here-are-a-few-things-to-help-you-get-started": "Ось кілька речей, які допоможуть вам почати з Mealie",
"restore-from-v1-backup": "Маєте резервну копію з попереднього екземпляра Меаліе v1? Ви можете використати його тут.",
"manage-profile-or-get-invite-link": "Керуйте вашим власним профілем, або отримайте посилання-запрошення щоб поділитися з іншими."
}
},
"profile": {
"welcome-user": "👋 Ласкаво просимо, {0}",

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