Compare commits

..

122 Commits

Author SHA1 Message Date
renovate[bot]
9bf2e3fabd chore(deps): update dependency ruff to ^0.2.0 (#3097)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-01 18:17:42 -06:00
Hayden
dcf50b9a00 New translations en-us.json (Turkish) (#3096) 2024-02-01 22:46:14 +00:00
Joeri
073efd7a2f Rectify email message ID, change multipart order (#3094) 2024-02-01 13:59:21 +01:00
renovate[bot]
95b7990f26 fix(deps): update dependency python-slugify to v8.0.3 (#3090)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-31 16:10:05 -06:00
Michael Genson
7947aa99ae fix: Migration Issue With Duplicate Labels (#3085)
* fixed eager queries

* test

---------

Co-authored-by: Hayden <64056131+hay-kot@users.noreply.github.com>
2024-01-31 13:37:12 -06:00
Kuchenpirat
c3f7ad8954 chore: delete unused file (#3089) 2024-01-31 10:10:59 -09:00
boc-the-git
8df7848c96 Merge pull request #3088 from mealie-recipes/chore-update-build-link-to-org
chore: update build link to org
2024-01-31 21:21:11 +11:00
Kuchenpirat
6097440781 Merge branch 'mealie-next' into chore-update-build-link-to-org 2024-01-31 10:51:56 +01:00
Kuchenpirat
208608b32e chore update build link to org 2024-01-31 09:49:58 +00:00
Hayden
02997cd36e New Crowdin updates (#3086)
* New translations en-us.json (Russian)

* New translations en-us.json (Slovenian)
2024-01-30 22:31:11 +00:00
Michael Genson
e1cd2717d3 fix: Update Group Slug When Updating Group (#3084)
* added slug update hook to group updates

* added test

* force refresh if group slug changes

* added alert if something goes wrong
2024-01-30 18:41:37 +00:00
renovate[bot]
694511cb60 chore(deps): update dependency ruff to v0.1.15 (#3076)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-30 14:39:30 +00:00
boc-the-git
f0c89525f6 Add paho-mqtt package, as needed by Apprise to send MQTT messages (#3078)
Co-authored-by: Michael Genson <71845777+michael-genson@users.noreply.github.com>
2024-01-30 14:31:24 +00:00
Kuchenpirat
a05ede5e05 fix recipeOrganizerPage edit dialog label localization (#3079) 2024-01-30 08:24:46 -06:00
boc-the-git
7e51cf0352 feat: On new release publish, update image tags in sample docker-compose files (#3072)
* WIP

* Add sed commands for image versions

---------

Co-authored-by: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com>
2024-01-30 07:36:28 +00:00
boc-the-git
ce110c23e4 Merge pull request #3075 from mealie-recipes/l10n_mealie-next
New Crowdin updates
2024-01-30 12:49:44 +11:00
Hayden
8247f21101 New translations en-us.json (Slovenian) 2024-01-29 16:23:32 -06:00
Hayden
60f9a3be5c New translations en-us.json (Slovenian) 2024-01-29 16:23:31 -06:00
Hayden
dddcb644bf New translations en-us.json (Spanish) 2024-01-29 16:23:30 -06:00
boc-the-git
84e981fd03 Merge pull request #3058 from mealie-recipes/renovate/apprise-1.x-lockfile
fix(deps): update dependency apprise to v1.7.2
2024-01-29 22:21:35 +11:00
renovate[bot]
937464115e fix(deps): update dependency apprise to v1.7.2 2024-01-29 11:14:39 +00:00
boc-the-git
24aee11607 Merge pull request #3063 from mealie-recipes/renovate/mkdocs-material-9.x-lockfile
chore(deps): update dependency mkdocs-material to v9.5.6
2024-01-29 22:12:20 +11:00
renovate[bot]
023c57dd61 chore(deps): update dependency mkdocs-material to v9.5.6 2024-01-29 09:32:53 +00:00
renovate[bot]
14d8ff8754 fix(deps): update dependency recipe-scrapers to v14.54.0 (#3070)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-29 10:31:34 +01:00
Hayden
e6f531c111 New translations en-us.json (Hungarian) (#3071) 2024-01-28 16:21:47 -06:00
renovate[bot]
c0a4f624d1 chore(deps): update dependency pytest-asyncio to v0.23.4 (#3069)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-28 15:50:46 -06:00
boc-the-git
a32dc4baa0 docs: Update example docker-compose files (#3065)
* Update README.md

* Update version. Add note re where to find latest version.

* Update version. Add note re where to find latest version.
2024-01-28 10:43:55 +00:00
boc-the-git
7c4690a7a9 docs: Change org to mealie-recipes (#3064)
* Change org to mealie-recipes

* Change org to mealie-recipes

* Change org to mealie-recipes
2024-01-28 11:32:11 +01:00
boc-the-git
b44487596d Merge pull request #3062 from mealie-recipes/renovate/black-24.x-lockfile
chore(deps): update dependency black to v24.1.1
2024-01-28 19:38:22 +11:00
renovate[bot]
2cb4c21db3 chore(deps): update dependency black to v24.1.1 2024-01-28 08:31:34 +00:00
Hayden
2dcc765e86 New translations en-us.json (Hungarian) (#3059) 2024-01-27 21:41:33 +00:00
Michael Genson
a5ef18669b fix: Upgrade Black (#3057)
* bump black

* bump black on precommit

* run black

* fix backend test runner
2024-01-27 15:11:54 -06:00
Hayden
0800a8d00a chore: rewrite makefile in taskfile (#3035)
* add docker-compose with development dependencies

* delete old runtime.txt file

* specify specific group for postgres deps

* replace makefile with taskfile with new features

* drop template.env file in favor of defaults within taskfile

* use with github actions

* update docs for taskfile changes

* update task.json for vscode

* add taskfile to devcontainer.json

* pre-install taskfile so startup command works

* remove run command and fix desc for ui

* change node-> python->py for consistency
2024-01-27 18:14:42 +00:00
Jakub Urbańczyk
4d49e307e3 fix: running the container with PUID=0 and PGID=0 (#3030)
Co-authored-by: Hayden <64056131+hay-kot@users.noreply.github.com>
2024-01-27 17:48:38 +00:00
Jason Hunter
20621a1950 update iOS guide (#3043)
Co-authored-by: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com>
2024-01-27 10:49:09 +00:00
boc-the-git
5a0b8940f5 Merge pull request #3053 from mealie-recipes/l10n_mealie-next
New Crowdin updates
2024-01-27 08:32:05 +11:00
Hayden
c27d20b5c9 New translations en-us.json (Icelandic) 2024-01-26 15:26:14 -06:00
Hayden
5f24e87e84 New translations en-us.json (French, Canada) 2024-01-26 15:26:13 -06:00
Hayden
72980b3472 New translations en-us.json (English, United Kingdom) 2024-01-26 15:26:12 -06:00
Hayden
cedccf046b New translations en-us.json (Latvian) 2024-01-26 15:26:11 -06:00
Hayden
63514ab41c New translations en-us.json (Croatian) 2024-01-26 15:26:10 -06:00
Hayden
f8e8a40ec1 New translations en-us.json (Portuguese, Brazilian) 2024-01-26 15:26:08 -06:00
Hayden
65ce53fb17 New translations en-us.json (Galician) 2024-01-26 15:26:07 -06:00
Hayden
1352ae81c4 New translations en-us.json (Vietnamese) 2024-01-26 15:26:06 -06:00
Hayden
5c3b1f2890 New translations en-us.json (Chinese Simplified) 2024-01-26 15:26:05 -06:00
Hayden
555e341b65 New translations en-us.json (Ukrainian) 2024-01-26 15:26:04 -06:00
Hayden
6690ef8cab New translations en-us.json (Turkish) 2024-01-26 15:26:03 -06:00
Hayden
bbd6e7ef92 New translations en-us.json (Swedish) 2024-01-26 15:26:02 -06:00
Hayden
54a954164a New translations en-us.json (Serbian (Cyrillic)) 2024-01-26 15:26:01 -06:00
Hayden
d20ee21076 New translations en-us.json (Slovenian) 2024-01-26 15:26:00 -06:00
Hayden
ce7efd7505 New translations en-us.json (Slovak) 2024-01-26 15:25:59 -06:00
Hayden
04f0d33ca3 New translations en-us.json (Russian) 2024-01-26 15:25:58 -06:00
Hayden
01649de1e7 New translations en-us.json (Portuguese) 2024-01-26 15:25:57 -06:00
Hayden
3a739ba194 New translations en-us.json (Polish) 2024-01-26 15:25:56 -06:00
Hayden
5e78aa6e29 New translations en-us.json (Norwegian) 2024-01-26 15:25:55 -06:00
Hayden
a121fe9b55 New translations en-us.json (Dutch) 2024-01-26 15:25:53 -06:00
Hayden
d1c4a9b422 New translations en-us.json (Lithuanian) 2024-01-26 15:25:52 -06:00
Hayden
e0c72c5508 New translations en-us.json (Korean) 2024-01-26 15:25:51 -06:00
Hayden
4df4b7e0b6 New translations en-us.json (Japanese) 2024-01-26 15:25:50 -06:00
Hayden
e8d7c0423f New translations en-us.json (Hungarian) 2024-01-26 15:25:49 -06:00
Hayden
583151087e New translations en-us.json (Hebrew) 2024-01-26 15:25:48 -06:00
Hayden
c4b493564b New translations en-us.json (Finnish) 2024-01-26 15:25:47 -06:00
Hayden
e1aba3373a New translations en-us.json (Greek) 2024-01-26 15:25:46 -06:00
Hayden
ee65d7d67d New translations en-us.json (German) 2024-01-26 15:25:45 -06:00
Hayden
9029bccf5b New translations en-us.json (Danish) 2024-01-26 15:25:44 -06:00
Hayden
4fdf844485 New translations en-us.json (Czech) 2024-01-26 15:25:43 -06:00
Hayden
d2b1c2c5af New translations en-us.json (Catalan) 2024-01-26 15:25:42 -06:00
Hayden
84bd738ba5 New translations en-us.json (Bulgarian) 2024-01-26 15:25:41 -06:00
Hayden
e4eb4d3e3b New translations en-us.json (Arabic) 2024-01-26 15:25:40 -06:00
Hayden
422c485832 New translations en-us.json (Afrikaans) 2024-01-26 15:25:39 -06:00
Hayden
865ab6f843 New translations en-us.json (Spanish) 2024-01-26 15:25:38 -06:00
Hayden
cb948a8289 New translations en-us.json (French) 2024-01-26 15:25:37 -06:00
Hayden
8d38ef1fd7 New translations en-us.json (Romanian) 2024-01-26 15:25:36 -06:00
Hayden
2ae2475b8e New translations en-us.json (Italian) 2024-01-26 15:25:35 -06:00
Hayden
92c8b196de New translations en-us.json (Chinese Traditional) 2024-01-26 15:25:34 -06:00
renovate[bot]
e6ad0aad81 chore(deps): update dependency coverage to v7.4.1 (#3052)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-26 20:41:08 +00:00
Michael Genson
c6fbf8bce8 feat: Improvements To Adding A Recipe To A Shopping List (#3036)
* tweaked dialogs to make grammatical sense

* refactor ingredient rendering on recipe shopping list dialog
2024-01-26 15:27:36 +00:00
boc-the-git
8db5f7cce3 Merge pull request #3048 from mealie-recipes/l10n_mealie-next
New Crowdin updates
2024-01-26 08:32:30 +11:00
Hayden
5f40064e2f New translations en-us.json (Chinese Simplified) 2024-01-25 15:26:25 -06:00
Hayden
e0cb6e0624 New translations en-us.json (Ukrainian) 2024-01-25 15:26:24 -06:00
Hayden
8bc73de815 New translations en-us.json (Turkish) 2024-01-25 15:26:22 -06:00
Hayden
71e2091130 New translations en-us.json (Czech) 2024-01-25 15:26:22 -06:00
Hayden
8e65a4c65a New translations en-us.json (Italian) 2024-01-25 15:26:20 -06:00
boc-the-git
34df20da81 Merge pull request #3047 from michael-genson/fix/bump-fastapi-and-refactor
fix: Bump FastAPI and Refactor
2024-01-26 07:20:15 +11:00
Michael Genson
254b6ae118 fixed breaking change with temp dir injection 2024-01-25 19:10:40 +00:00
Michael Genson
a840cb0800 patch missing client for testing 2024-01-25 19:10:21 +00:00
Michael Genson
098c8194f5 bump fastapi 2024-01-25 18:48:32 +00:00
renovate[bot]
1daf41f452 fix(deps): update dependency python-slugify to v8.0.2 (#3046)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-25 12:41:33 -06:00
boc-the-git
72696cac20 Merge pull request #3045 from michael-genson/refactor/remove-passlib
refactor: Remove Passlib
2024-01-25 21:45:52 +11:00
Michael Genson
4d3ea5d231 remove passlib 2024-01-24 22:04:33 +00:00
Michael Genson
721063d091 Merge remote-tracking branch 'upstream/mealie-next' into refactor/remove-passlib 2024-01-24 22:03:54 +00:00
Michael Genson
4ae5c52de9 refactor to use bcrypt directly 2024-01-24 22:03:16 +00:00
renovate[bot]
58cb43e999 fix(deps): update dependency uvicorn to ^0.27.0 (#3034)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-24 21:56:56 +00:00
renovate[bot]
0b0c25d2f3 fix(deps): update dependency python-dotenv to v1.0.1 (#3038)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-24 15:44:36 -06:00
Hayden
21161dbf2e New Crowdin updates (#3044)
* New translations en-us.json (Chinese Traditional)

* New translations en-us.json (Italian)

* New translations en-us.json (Romanian)

* New translations en-us.json (French)

* New translations en-us.json (Spanish)

* 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 (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 (Polish)

* 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 (Swedish)

* New translations en-us.json (Turkish)

* New translations en-us.json (Ukrainian)

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

* New translations en-us.json (Vietnamese)

* New translations en-us.json (Galician)

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

* New translations en-us.json (Croatian)

* New translations en-us.json (Latvian)

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

* New translations en-us.json (French, Canada)

* New translations en-us.json (Icelandic)

* New translations en-us.json (Turkish)
2024-01-24 21:37:05 +00:00
boc-the-git
f62feb8da2 Merge pull request #2717 from JackBailey/mealie-next
feat: Edit existing mealplan meals
2024-01-24 22:22:29 +11:00
boc-the-git
2cdbe816a6 Merge branch 'mealie-next' into mealie-next 2024-01-24 22:16:31 +11:00
boc-the-git
e32fddbc85 Merge pull request #3041 from mealie-recipes/renovate/mkdocs-material-9.x-lockfile
chore(deps): update dependency mkdocs-material to v9.5.5
2024-01-24 18:14:30 +11:00
renovate[bot]
8c17a81c91 chore(deps): update dependency mkdocs-material to v9.5.5 2024-01-24 06:43:56 +00:00
boc-the-git
d2188508fc Merge branch 'mealie-next' into mealie-next 2024-01-24 16:37:32 +11:00
boc-the-git
09dfca4f34 Provide write permissions for issues and PRs (#3039) 2024-01-23 06:37:45 -06:00
Michael Genson
61289416a5 feat: Add Ingredient Sections To Copied Ingredients (#3032)
* add ingredient title to copied text

* fix double linebreak

* lint

---------

Co-authored-by: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com>
2024-01-22 20:21:04 +00:00
Hayden
16d3dbef5d New Crowdin updates (#3033)
* New translations en-us.json (Swedish)

* New translations en-us.json (Galician)
2024-01-22 20:13:10 +00:00
Michael Genson
702907fc30 feat: Add Additional SMTP Headers to Decrease Spam Score (#3031)
* add html2text util

* add various missing email headers

* lint
2024-01-22 20:40:09 +01:00
boc-the-git
600c569ae8 feat: Remove debug mode from stale action (#3027) 2024-01-22 09:15:37 -06:00
boc-the-git
96995a4168 Merge pull request #3026 from Kuchenpirat/fix-site-maintenance-missing-words
fix: missing words in site maintenance
2024-01-22 20:51:15 +11:00
boc-the-git
3a9fd11344 Merge branch 'mealie-next' into fix-site-maintenance-missing-words 2024-01-22 20:45:13 +11:00
Kuchenpirat
62dffb622f fix missing words in site maintenance 2024-01-22 08:05:44 +00:00
Hayden
26dfc54d23 docs: new notes on releasing mealie (#3025)
* new notes on releasing mealie

---------

Co-authored-by: Michael Genson <71845777+michael-genson@users.noreply.github.com>
2024-01-22 08:40:12 +01:00
boc-the-git
5d08647196 docs: Docker image versions (#3019)
* fix: Add the need to change image tag

* Minor tidying

* Advice to use specific tag, not latest

* Advice to use specific tag, not latest

* Revert mistake

* Reword

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

---------

Co-authored-by: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com>
2024-01-21 11:34:34 +01:00
boc-the-git
b51cd5d1c2 Merge pull request #3014 from cmintey/v1-doc-updates
Update docs to remove any mention of upcoming v1 release
2024-01-21 06:26:06 +11:00
Carter Mintey
4e66d5fb92 remove docs mentioning the impending v1 release 2024-01-20 19:15:21 +00:00
boc-the-git
b13d66108d Merge branch 'mealie-next' into mealie-next 2023-12-12 21:32:26 +11:00
Jack Bailey
6e2c30aba5 Merge branch 'mealie-next' into mealie-next 2023-11-29 16:56:27 +00:00
Jack Bailey
9c01b72292 Remove unused code 2023-11-29 10:16:25 +00:00
boc-the-git
18a405808a Merge branch 'mealie-next' into mealie-next 2023-11-25 21:07:01 +11:00
boc-the-git
01e20acce7 Merge branch 'mealie-next' into mealie-next 2023-11-25 07:44:26 +11:00
Jack Bailey
1ee29e9e45 Revert other language files 2023-11-23 13:46:37 +00:00
Jack Bailey
8a2d640922 Merge branch 'mealie-next' into mealie-next 2023-11-23 10:47:25 +00:00
Jack Bailey
8170e66f4f Merge branch 'mealie-next' into mealie-next 2023-11-15 08:59:35 +00:00
Jack Bailey
e50788f685 Remove leftover debug variable 2023-11-13 09:40:10 +00:00
Jack Bailey
1197aa3f37 Add functionality to edit mealplan item 2023-11-13 02:20:08 +00:00
138 changed files with 1373 additions and 1026 deletions

View File

@@ -14,6 +14,7 @@ RUN echo "export PROMPT_COMMAND='history -a'" >> /home/vscode/.bashrc \
&& echo "export HISTFILE=~/commandhistory/.bash_history" >> /home/vscode/.bashrc \ && echo "export HISTFILE=~/commandhistory/.bash_history" >> /home/vscode/.bashrc \
&& chown vscode:vscode -R /home/vscode/ && chown vscode:vscode -R /home/vscode/
RUN npm install -g @go-task/cli
ENV PYTHONUNBUFFERED=1 \ ENV PYTHONUNBUFFERED=1 \
PYTHONDONTWRITEBYTECODE=1 \ PYTHONDONTWRITEBYTECODE=1 \
@@ -37,4 +38,3 @@ RUN apt-get update \
libwebp-dev \ libwebp-dev \
libsasl2-dev libldap2-dev libssl-dev \ libsasl2-dev libldap2-dev libssl-dev \
gnupg gnupg2 gnupg1 gnupg gnupg2 gnupg1
# && pip install -U --no-cache-dir pip

View File

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

View File

@@ -11,7 +11,7 @@ body:
options: options:
- label: I used the GitHub search to find a similar requests and didn't find it. - label: I used the GitHub search to find a similar requests and didn't find it.
required: true required: true
- label: Checked the [tasks tagged](https://github.com/hay-kot/mealie/issues?q=is%3Aissue+is%3Aopen+label%3Atask+) issues and verified my feature is not covered - label: Checked the [tasks tagged](https://github.com/mealie-recipes/mealie/issues?q=is%3Aissue+is%3Aopen+label%3Atask+) issues and verified my feature is not covered
required: true required: true
- type: textarea - type: textarea
id: problem id: problem

View File

@@ -35,6 +35,12 @@ jobs:
# Steps # Steps
steps: steps:
- name: Install Task
uses: arduino/setup-task@v1
with:
version: 3.x
repo-token: ${{ secrets.GITHUB_TOKEN }}
- name: Check out repository - name: Check out repository
uses: actions/checkout@v4 uses: actions/checkout@v4
@@ -69,7 +75,7 @@ jobs:
sudo apt-get update sudo apt-get update
sudo apt-get install libsasl2-dev libldap2-dev libssl-dev sudo apt-get install libsasl2-dev libldap2-dev libssl-dev
poetry install poetry install
poetry add "psycopg2-binary==2.8.6" poetry add "psycopg2-binary==2.9.9"
if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true' || steps.cache-validate.outputs.cache-hit-success != 'true' if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true' || steps.cache-validate.outputs.cache-hit-success != 'true'
- name: Formatting (Black) - name: Formatting (Black)
@@ -78,11 +84,11 @@ jobs:
- name: Lint (Ruff) - name: Lint (Ruff)
run: | run: |
make backend-lint task py:lint
- name: Mypy Typecheck - name: Mypy Typecheck
run: | run: |
make backend-typecheck task py:mypy
- name: Pytest - name: Pytest
env: env:
@@ -101,4 +107,4 @@ jobs:
LDAP_NAME_ATTRIBUTE: cn LDAP_NAME_ATTRIBUTE: cn
LDAP_MAIL_ATTRIBUTE: mail LDAP_MAIL_ATTRIBUTE: mail
run: | run: |
make backend-test task py:test

View File

@@ -42,4 +42,27 @@ jobs:
DISCORD_WEBHOOK: ${{ secrets.DISCORD_RELEASE_WEBHOOK }} DISCORD_WEBHOOK: ${{ secrets.DISCORD_RELEASE_WEBHOOK }}
uses: Ilshidur/action-discord@0.3.2 uses: Ilshidur/action-discord@0.3.2
with: with:
args: "🚀 Version {{ EVENT_PAYLOAD.release.tag_name }} of Mealie has been released. See the release notes https://github.com/hay-kot/mealie/releases/tag/{{ EVENT_PAYLOAD.release.tag_name }}" args: "🚀 Version {{ EVENT_PAYLOAD.release.tag_name }} of Mealie has been released. See the release notes https://github.com/mealie-recipes/mealie/releases/tag/{{ EVENT_PAYLOAD.release.tag_name }}"
update-image-tags:
name: Update image tag in sample docker-compose files
needs:
- build-release
runs-on: ubuntu-latest
steps:
- name: Checkout 🛎
uses: actions/checkout@v4
- name: Modify version strings
run: |
sed -i 's/:v[0-9]*.[0-9]*.[0-9]*/:${{ github.event.release.tag_name }}/' docs/docs/documentation/getting-started/installation/sqlite.md
sed -i 's/:v[0-9]*.[0-9]*.[0-9]*/:${{ github.event.release.tag_name }}/' docs/docs/documentation/getting-started/installation/postgres.md
- name: Commit updates
uses: test-room-7/action-update-file@v1
with:
file-path: |
docs/docs/documentation/getting-started/installation/sqlite.md
docs/docs/documentation/getting-started/installation/postgres.md
commit-msg: "Change image tag, for release ${{ github.event.release.tag_name }}"
github-token: ${{ secrets.GITHUB_TOKEN }}

View File

@@ -4,6 +4,10 @@ on:
schedule: schedule:
- cron: '30 1 * * *' - cron: '30 1 * * *'
permissions:
issues: write
pull-requests: write
jobs: jobs:
stale: stale:
runs-on: ubuntu-latest runs-on: ubuntu-latest
@@ -22,9 +26,6 @@ jobs:
days-before-pr-close: -1 days-before-pr-close: -1
# If an issue/PR has a milestone, it's exempt from being marked as stale. # If an issue/PR has a milestone, it's exempt from being marked as stale.
exempt-all-milestones: true exempt-all-milestones: true
# For initial implementation - this stops any actual updates happening.
# We can review the output and then decide how to proceed. I will own this action.
debug-only: true
# How many API calls will we allow the action to make, essentially. # How many API calls will we allow the action to make, essentially.
# Doco: https://github.com/actions/stale?tab=readme-ov-file#operations-per-run # Doco: https://github.com/actions/stale?tab=readme-ov-file#operations-per-run
operations-per-run: 150 operations-per-run: 150

1
.gitignore vendored
View File

@@ -162,3 +162,4 @@ lcov.info
dev/code-generation/openapi.json dev/code-generation/openapi.json
.run/ .run/
.task/*

View File

@@ -11,6 +11,6 @@ repos:
- id: trailing-whitespace - id: trailing-whitespace
exclude: ^tests/data/ exclude: ^tests/data/
- repo: https://github.com/psf/black - repo: https://github.com/psf/black
rev: 23.1.0 rev: 24.1.0
hooks: hooks:
- id: black - id: black

23
.vscode/tasks.json vendored
View File

@@ -1,22 +1,9 @@
{ {
"version": "2.0.0", "version": "2.0.0",
"tasks": [ "tasks": [
{
"label": "DEV: Build and Start Docker Compose",
"command": "make docker-dev",
"type": "shell",
"args": [],
"problemMatcher": [
"$tsc"
],
"presentation": {
"reveal": "always"
},
"group": "test"
},
{ {
"label": "Production: Build and Start Docker Compose", "label": "Production: Build and Start Docker Compose",
"command": "make docker-prod", "command": "task docker:prod",
"type": "shell", "type": "shell",
"args": [], "args": [],
"problemMatcher": [ "problemMatcher": [
@@ -29,7 +16,7 @@
}, },
{ {
"label": "Dev: Start Backend", "label": "Dev: Start Backend",
"command": "make backend", "command": "task py",
"type": "shell", "type": "shell",
"presentation": { "presentation": {
"reveal": "always", "reveal": "always",
@@ -49,7 +36,7 @@
}, },
{ {
"label": "Dev: Start Frontend", "label": "Dev: Start Frontend",
"command": "make frontend", "command": "task ui",
"type": "shell", "type": "shell",
"presentation": { "presentation": {
"reveal": "always", "reveal": "always",
@@ -59,7 +46,7 @@
}, },
{ {
"label": "Dev: Start Docs Server", "label": "Dev: Start Docs Server",
"command": "make docs", "command": "task docs",
"type": "shell", "type": "shell",
"presentation": { "presentation": {
"reveal": "always", "reveal": "always",
@@ -69,7 +56,7 @@
}, },
{ {
"label": "Run python tests", "label": "Run python tests",
"command": "make test", "command": "task py:test",
"type": "shell", "type": "shell",
"presentation": { "presentation": {
"reveal": "always" "reveal": "always"

View File

@@ -91,7 +91,7 @@ Thanks to Linode for providing Hosting for the Demo, Beta, and Documentation sit
[stars-url]: https://github.com/mealie-recipes/mealie/stargazers [stars-url]: https://github.com/mealie-recipes/mealie/stargazers
[issues-shield]: https://img.shields.io/github/issues/mealie-recipes/mealie.svg?style=flat-square [issues-shield]: https://img.shields.io/github/issues/mealie-recipes/mealie.svg?style=flat-square
[issues-url]: https://github.com/mealie-recipes/mealie/issues [issues-url]: https://github.com/mealie-recipes/mealie/issues
[latest-release-shield]: https://img.shields.io/github/v/release/mealie-recipes/mealie.svg?style=flat-square [latest-release-shield]: https://img.shields.io/github/v/release/mealie-recipes/mealie?style=flat-square&label=latest%20release
[latest-release-url]: https://img.shields.io/github/v/release/mealie-recipes/mealie [latest-release-url]: https://img.shields.io/github/v/release/mealie-recipes/mealie
[license-shield]: https://img.shields.io/github/license/mealie-recipes/mealie.svg?style=flat-square [license-shield]: https://img.shields.io/github/license/mealie-recipes/mealie.svg?style=flat-square
[license-url]: https://github.com/mealie-recipes/mealie/blob/mealie-next/LICENSE [license-url]: https://github.com/mealie-recipes/mealie/blob/mealie-next/LICENSE

183
Taskfile.yml Normal file
View File

@@ -0,0 +1,183 @@
# https://taskfile.dev
version: "3"
vars:
GREETING: Hello, World!
env:
DEFAULT_GROUP: Home
PRODUCTION: false
API_PORT: 9000
API_DOCS: True
TOKEN_TIME: 256 # hours
# mailplit SMTP config
# start dev:services to use mailpit
SMTP_HOST: localhost
SMTP_PORT: 1025
SMTP_FROM_NAME: MealieDev
SMTP_AUTH_STRATEGY: NONE
LANG: en-US
# loads .env file if it exists
dotenv:
- .env
- .dev.env
tasks:
docs:gen:
desc: runs the API documentation generator
cmds:
- poetry run python dev/code-generation/gen_docs_api.py
docs:
desc: runs the documentation server
dir: docs
deps:
- docs:gen
cmds:
- poetry run python -m mkdocs serve
setup:ui:
desc: setup frontend dependencies
dir: frontend
cmds:
- yarn install
setup:py:
desc: setup python dependencies
cmds:
- poetry install --with main,dev,postgres
- poetry run pre-commit install
setup:model:
desc: setup nlp model
vars:
MODEL_URL: https://github.com/mealie-recipes/nlp-model/releases/download/v1.0.0/model.crfmodel
OUTPUT: ./mealie/services/parser_services/crfpp/model.crfmodel
sources:
# using pyproject.toml as the dependency since this should only ever need to run once
# during setup. There is perhaps a better way to do this.
- ./pyproject.toml
generates:
- ./mealie/services/parser_services/crfpp/model.crfmodel
cmds:
- curl -L0 {{ .MODEL_URL }} --output {{ .OUTPUT }}
setup:
desc: setup all dependencies
deps:
- setup:ui
- setup:py
- setup:model
dev:generate:
desc: run code generators
cmds:
- poetry run python dev/code-generation/main.py
dev:services:
desc: starts postgres and mailpit containers
dir: docker
cmds:
- docker compose -f docker-compose.dev.yml up
dev:clean:
desc: cleans up dev environment !! removes all data files !!
vars:
DEV_DATA: ""
cmds:
- rm -r ./dev/data/recipes/
- rm -r ./dev/data/users/
- rm -f ./dev/data/mealie*.db
- rm -f ./dev/data/mealie.log
- rm -f ./dev/data/.secret
py:mypy:
desc: runs python type checking
cmds:
- poetry run mypy mealie
py:test:
desc: runs python tests (support args after '--')
cmds:
- poetry run pytest {{ .CLI_ARGS }}
py:format:
desc: runs python code formatter
cmds:
- poetry run black mealie
py:lint:
desc: runs python linter
cmds:
- poetry run ruff mealie
py:check:
desc: runs all linters, type checkers, and formatters
deps:
- py:format
- py:lint
- py:mypy
- py:test
py:coverage:
desc: runs python coverage and generates html report
cmds:
- poetry run pytest
- poetry run coverage report -m
- poetry run coveragepy-lcov
- poetry run coverage html
- open htmlcov/index.html
py:
desc: runs the backend server
cmds:
- poetry run python mealie/db/init_db.py
- poetry run python mealie/app.py
py:postgres:
desc: runs the backend server configured for containerized postgres
env:
DB_ENGINE: postgres
POSTGRES_USER: mealie
POSTGRES_PASSWORD: mealie
POSTGRES_SERVER: localhost
POSTGRES_PORT: 5432
POSTGRES_DB: mealie
cmds:
- poetry run python mealie/db/init_db.py
- poetry run python mealie/app.py
ui:build:
desc: builds the frontend in frontend/dist
dir: frontend
cmds:
- yarn build
ui:lint:
desc: runs the frontend linter
dir: frontend
cmds:
- yarn lint
ui:test:
desc: runs the frontend tests
dir: frontend
cmds:
- yarn test
ui:check:
desc: runs all frontend checks
deps:
- ui:lint
- ui:test
ui:
desc: runs the frontend server
dir: frontend
cmds:
- yarn run dev
docker:prod:
desc: builds and runs the production docker image locally
dir: docker
cmds:
- docker compose -f docker-compose.yml -p mealie up -d --build

View File

@@ -1,10 +1,11 @@
"""Initial tables """Initial tables
Revision ID: 6b0f5f32d602 Revision ID: 6b0f5f32d602
Revises: Revises:
Create Date: 2022-02-21 19:56:24.351115 Create Date: 2022-02-21 19:56:24.351115
""" """
import sqlalchemy as sa import sqlalchemy as sa
from sqlalchemy import engine_from_config from sqlalchemy import engine_from_config

View File

@@ -5,6 +5,7 @@ Revises: 6b0f5f32d602
Create Date: 2022-03-23 17:43:34.727829 Create Date: 2022-03-23 17:43:34.727829
""" """
import sqlalchemy as sa import sqlalchemy as sa
from alembic import op from alembic import op

View File

@@ -5,6 +5,7 @@ Revises: 263dd6707191
Create Date: 2022-03-27 19:30:28.545846 Create Date: 2022-03-27 19:30:28.545846
""" """
import sqlalchemy as sa import sqlalchemy as sa
from alembic import op from alembic import op

View File

@@ -5,6 +5,7 @@ Revises: f1a2dbee5fe9
Create Date: 2022-03-31 19:19:55.428965 Create Date: 2022-03-31 19:19:55.428965
""" """
import sqlalchemy as sa import sqlalchemy as sa
import mealie.db.migration_types import mealie.db.migration_types

View File

@@ -5,6 +5,7 @@ Revises: 59eb59135381
Create Date: 2022-04-03 10:48:51.379968 Create Date: 2022-04-03 10:48:51.379968
""" """
import sqlalchemy as sa import sqlalchemy as sa
import mealie.db.migration_types # noqa: F401 import mealie.db.migration_types # noqa: F401

View File

@@ -5,6 +5,7 @@ Revises: 09dfc897ad62
Create Date: 2022-06-01 11:12:06.748383 Create Date: 2022-06-01 11:12:06.748383
""" """
import sqlalchemy as sa import sqlalchemy as sa
from alembic import op from alembic import op

View File

@@ -6,6 +6,7 @@ Revises: ab0bae02578f
Create Date: 2022-06-15 21:05:34.851857 Create Date: 2022-06-15 21:05:34.851857
""" """
import sqlalchemy as sa import sqlalchemy as sa
from alembic import op from alembic import op

View File

@@ -5,6 +5,7 @@ Revises: f30cf048c228
Create Date: 2022-08-12 19:05:59.776361 Create Date: 2022-08-12 19:05:59.776361
""" """
import sqlalchemy as sa import sqlalchemy as sa
from alembic import op from alembic import op

View File

@@ -5,6 +5,7 @@ Revises: 188374910655
Create Date: 2022-08-05 17:07:07.389271 Create Date: 2022-08-05 17:07:07.389271
""" """
import sqlalchemy as sa import sqlalchemy as sa
from alembic import op from alembic import op

View File

@@ -5,6 +5,7 @@ Revises: 089bfa50d0ed
Create Date: 2022-08-29 13:57:40.452245 Create Date: 2022-08-29 13:57:40.452245
""" """
import sqlalchemy as sa import sqlalchemy as sa
import mealie.db.migration_types import mealie.db.migration_types

View File

@@ -5,6 +5,7 @@ Revises: 44e8d670719d
Create Date: 2022-09-27 14:53:14.111054 Create Date: 2022-09-27 14:53:14.111054
""" """
import sqlalchemy as sa import sqlalchemy as sa
import mealie.db.migration_types import mealie.db.migration_types

View File

@@ -5,6 +5,7 @@ Revises: 2ea7a807915c
Create Date: 2022-11-03 13:10:24.811134 Create Date: 2022-11-03 13:10:24.811134
""" """
import sqlalchemy as sa import sqlalchemy as sa
from alembic import op from alembic import op

View File

@@ -5,6 +5,7 @@ Revises: 1923519381ad
Create Date: 2022-11-22 03:42:45.494567 Create Date: 2022-11-22 03:42:45.494567
""" """
import sqlalchemy as sa import sqlalchemy as sa
from alembic import op from alembic import op

View File

@@ -5,6 +5,7 @@ Revises: 167eb69066ad
Create Date: 2023-01-21 16:54:44.368768 Create Date: 2023-01-21 16:54:44.368768
""" """
import sqlalchemy as sa import sqlalchemy as sa
import mealie.db.migration_types import mealie.db.migration_types

View File

@@ -5,6 +5,7 @@ Revises: ff5f73b01a7a
Create Date: 2023-02-10 21:18:32.405130 Create Date: 2023-02-10 21:18:32.405130
""" """
import sqlalchemy as sa import sqlalchemy as sa
import mealie.db.migration_types import mealie.db.migration_types

View File

@@ -5,6 +5,7 @@ Revises: 16160bf731a0
Create Date: 2023-02-14 20:45:41.102571 Create Date: 2023-02-14 20:45:41.102571
""" """
import sqlalchemy as sa import sqlalchemy as sa
from sqlalchemy import orm, select from sqlalchemy import orm, select
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column

View File

@@ -5,6 +5,7 @@ Revises: 5ab195a474eb
Create Date: 2023-21-02 22:03:19.837244 Create Date: 2023-21-02 22:03:19.837244
""" """
from uuid import uuid4 from uuid import uuid4
import sqlalchemy as sa import sqlalchemy as sa

View File

@@ -5,6 +5,7 @@ Revises: b04a08da2108
Create Date: 2023-02-22 21:45:52.900964 Create Date: 2023-02-22 21:45:52.900964
""" """
import sqlalchemy as sa import sqlalchemy as sa
import mealie.db.migration_types import mealie.db.migration_types

View File

@@ -5,6 +5,7 @@ Revises: 38514b39a824
Create Date: 2023-04-13 06:47:04.617131 Create Date: 2023-04-13 06:47:04.617131
""" """
import sqlalchemy as sa import sqlalchemy as sa
import mealie.db.migration_types import mealie.db.migration_types

View File

@@ -5,6 +5,7 @@ Revises: b3dbb554ba53
Create Date: 2023-08-06 21:00:34.582905 Create Date: 2023-08-06 21:00:34.582905
""" """
import sqlalchemy as sa import sqlalchemy as sa
from slugify import slugify from slugify import slugify
from sqlalchemy.orm import Session from sqlalchemy.orm import Session

View File

@@ -5,6 +5,7 @@ Revises: 04ac51cbe9a4
Create Date: 2023-08-14 19:30:49.103185 Create Date: 2023-08-14 19:30:49.103185
""" """
import sqlalchemy as sa import sqlalchemy as sa
from alembic import op from alembic import op

View File

@@ -5,6 +5,7 @@ Revises: 1825b5225403
Create Date: 2023-08-15 16:25:07.058929 Create Date: 2023-08-15 16:25:07.058929
""" """
from alembic import op from alembic import op
# revision identifiers, used by Alembic. # revision identifiers, used by Alembic.

View File

@@ -5,6 +5,7 @@ Revises: bcfdad6b7355
Create Date: 2023-09-01 14:55:42.166766 Create Date: 2023-09-01 14:55:42.166766
""" """
import sqlalchemy as sa import sqlalchemy as sa
from sqlalchemy import orm, select from sqlalchemy import orm, select

View File

@@ -5,6 +5,7 @@ Revises: 0341b154f79a
Create Date: 2023-10-04 14:29:26.688065 Create Date: 2023-10-04 14:29:26.688065
""" """
from collections import defaultdict from collections import defaultdict
from dataclasses import dataclass from dataclasses import dataclass
from typing import Any from typing import Any
@@ -58,7 +59,12 @@ def _resolve_duplicate_food(
keep_food_id: UUID4, keep_food_id: UUID4,
dupe_food_id: UUID4, dupe_food_id: UUID4,
): ):
for shopping_list_item in session.query(ShoppingListItem).filter_by(food_id=dupe_food_id).all(): for shopping_list_item in (
session.query(ShoppingListItem)
.options(load_only(ShoppingListItem.id, ShoppingListItem.food_id))
.filter_by(food_id=dupe_food_id)
.all()
):
shopping_list_item.food_id = keep_food_id shopping_list_item.food_id = keep_food_id
for recipe_ingredient in ( for recipe_ingredient in (
@@ -81,10 +87,20 @@ def _resolve_duplicate_unit(
keep_unit_id: UUID4, keep_unit_id: UUID4,
dupe_unit_id: UUID4, dupe_unit_id: UUID4,
): ):
for shopping_list_item in session.query(ShoppingListItem).filter_by(unit_id=dupe_unit_id).all(): for shopping_list_item in (
session.query(ShoppingListItem)
.options(load_only(ShoppingListItem.id, ShoppingListItem.unit_id))
.filter_by(unit_id=dupe_unit_id)
.all()
):
shopping_list_item.unit_id = keep_unit_id shopping_list_item.unit_id = keep_unit_id
for recipe_ingredient in session.query(RecipeIngredientModel).filter_by(unit_id=dupe_unit_id).all(): for recipe_ingredient in (
session.query(RecipeIngredientModel)
.options(load_only(RecipeIngredientModel.id, RecipeIngredientModel.unit_id))
.filter_by(unit_id=dupe_unit_id)
.all()
):
recipe_ingredient.unit_id = keep_unit_id recipe_ingredient.unit_id = keep_unit_id
session.commit() session.commit()
@@ -99,10 +115,20 @@ def _resolve_duplicate_label(
keep_label_id: UUID4, keep_label_id: UUID4,
dupe_label_id: UUID4, dupe_label_id: UUID4,
): ):
for shopping_list_item in session.query(ShoppingListItem).filter_by(label_id=dupe_label_id).all(): for shopping_list_item in (
session.query(ShoppingListItem)
.options(load_only(ShoppingListItem.id, ShoppingListItem.label_id))
.filter_by(label_id=dupe_label_id)
.all()
):
shopping_list_item.label_id = keep_label_id shopping_list_item.label_id = keep_label_id
for ingredient_food in session.query(IngredientFoodModel).filter_by(label_id=dupe_label_id).all(): for ingredient_food in (
session.query(IngredientFoodModel)
.options(load_only(IngredientFoodModel.id, IngredientFoodModel.label_id))
.filter_by(label_id=dupe_label_id)
.all()
):
ingredient_food.label_id = keep_label_id ingredient_food.label_id = keep_label_id
session.commit() session.commit()

View File

@@ -5,6 +5,7 @@ Revises: dded3119c1fe
Create Date: 2023-10-19 19:22:55.369319 Create Date: 2023-10-19 19:22:55.369319
""" """
import sqlalchemy as sa import sqlalchemy as sa
import mealie.db.migration_types import mealie.db.migration_types

View File

@@ -0,0 +1,21 @@
version: "3.4"
services:
mailpit:
image: axllent/mailpit:latest
container_name: mealie_dev_mailpit
restart: no
environment:
- "MP_SMTP_AUTH_ACCEPT_ANY=true"
- "MP_SMTP_AUTH_ALLOW_INSECURE=true"
ports:
- "8025:8025"
- "1025:1025"
postgres:
container_name: mealie_dev_postgres
image: postgres:15
restart: no
ports:
- "5432:5432"
environment:
POSTGRES_PASSWORD: mealie
POSTGRES_USER: mealie

View File

@@ -12,18 +12,18 @@ add_user() {
} }
change_user() { change_user() {
# If container is started as root then create a new user and switch to it if [ "$(id -u)" = $PUID ]; then
if [ "$(id -u)" = "0" ]; then echo "
User uid: $PUID
User gid: $PGID
"
elif [ "$(id -u)" = "0" ]; then
# If container is started as root then create a new user and switch to it
add_user add_user
chown -R $PUID:$PGID /app chown -R $PUID:$PGID /app
echo "Switching to dedicated user" echo "Switching to dedicated user"
exec gosu $PUID "$BASH_SOURCE" "$@" exec gosu $PUID "$BASH_SOURCE" "$@"
elif [ "$(id -u)" = $PUID ]; then
echo "
User uid: $PUID
User gid: $PGID
"
fi fi
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 183 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

View File

@@ -13,7 +13,7 @@ Pull requests are the best way to propose changes to the codebase (we use [Githu
3. If you're interested on working on major changes please get in touch on discord and coordinate with other developers. No sense in doubling up on work if someones already on it. 3. If you're interested on working on major changes please get in touch on discord and coordinate with other developers. No sense in doubling up on work if someones already on it.
4. Once you've got an idea of what changes you want to make, create a draft PR as soon as you can to let us know what you're working on and how we can help! 4. Once you've got an idea of what changes you want to make, create a draft PR as soon as you can to let us know what you're working on and how we can help!
5. If you've changed APIs, update the documentation. 5. If you've changed APIs, update the documentation.
6. Run tests, including `make backend-all`. Note that the tests do not clean up after themselves and leave things in the database. So be sure to also run `make clean-data` and/or `make backend-clean` inbetween major testing rounds to be sure that you aren't testing on old data. 6. Run tests, including `task py:check`.
6. Issue that pull request! First make a draft PR, make sure that the automated github tests all pass, then mark as ready for review. 6. Issue that pull request! First make a draft PR, make sure that the automated github tests all pass, then mark as ready for review.
7. Be sure to add release notes to the pull request. 7. Be sure to add release notes to the pull request.

View File

@@ -1,6 +1,6 @@
# Maintainers Guide # Maintainers Guide
This is the start of the maintainers guide for Mealie developers. Those who have been invited to the GitHub organization and/or those who whish to play a bigger part in the Mealie developers community may find this helpful. This is the start of the maintainers guide for Mealie developers. Those who have been invited to the GitHub organization and/or those who wish to play a bigger part in the Mealie developers community may find this helpful.
## Managing Issues ## Managing Issues
@@ -13,7 +13,7 @@ After you've reviered an issue it will generally move into one of two states:
`needs more info` `needs more info`
: The orignal post does not contain enough information, and if the reporter does not provide additional information, the issue will be automatically closed. : The original post does not contain enough information, and if the reporter does not provide additional information, the issue will be automatically closed.
Once you've reviewed an issue and moved it into another category, you should remove the triage label. Once you've reviewed an issue and moved it into another category, you should remove the triage label.
@@ -40,18 +40,38 @@ Mealie is published via GitHub actions to the GitHub container registry with the
: published when a new GitHub Release is created - [Actions File](https://github.com/mealie-recipes/mealie/blob/mealie-next/.github/workflows/release.yml) : published when a new GitHub Release is created - [Actions File](https://github.com/mealie-recipes/mealie/blob/mealie-next/.github/workflows/release.yml)
!!! note !!! note
Both the latest, and {version} tags will be the same container on the release of a new version Both the latest, and {version} tags will be the same image on the release of a new version
### Process ### Process
Because we've built all our publishing effors on GitHub Actions we rely primarily on automations to perform our releases. As such creating a new build of Mealie is as simple as creating a new GitHub release. Here are the general steps we take to create a new release Because we've built all our publishing efforts on GitHub Actions we rely primarily on automations to perform our releases. As such creating a new build of Mealie is as simple as creating a new GitHub release. Here are the general steps we take to create a new release
1. Navigate to the [Github Release Page](https://github.com/mealie-recipes/mealie/releases) and click the 'Draft a new release' button. 1. Navigate to the [Github Release Page](https://github.com/mealie-recipes/mealie/releases) and click the 'Draft a new release' button.
2. Choose a tag and increment the version according to the semver specification. i.e, **major** version for breaking changes, **minor** for feature updates, and **patch** for bug fixes. 2. Choose a tag and increment the version according to the semver specification. i.e, **major** version for breaking changes, **minor** for feature updates, and **patch** for bug fixes.
3. Name the Release, usually just the tag is fine, however if there is a special feature you'd like to higlight this would be a great place to do it. 3. Name the Release, usually just the tag is fine, however if there is a special feature you'd like to highlight this would be a great place to do it.
4. Click the "Generate release notes" button which will pull in all the Git Commits as a changelog. For bug fix only releases this is sufficient, however if there are major features, or good quality of life improvements it's good to provide those prior to listing the full changelog. 4. Click the "Generate release notes" button which will pull in all the Git Commits as a changelog. For bug fix only releases this is sufficient, however if there are major features, or good quality of life improvements it's good to provide those prior to listing the full changelog.
!!! tip !!! tip
Don't worry about setting the version number in the container or code, it's set during the build process and uses the tag you specified when drafting a new release. Don't worry about setting the version number in the container or code, it's set during the build process and uses the tag you specified when drafting a new release.
You can see how this is done in the [Actions File](https://github.com/mealie-recipes/mealie/blob/mealie-next/.github/workflows/partial-builder.yml#L35-L37) You can see how this is done in the [Actions File](https://github.com/mealie-recipes/mealie/blob/mealie-next/.github/workflows/partial-builder.yml#L35-L37)
### Tags and Releases
Mealie tries to adhere to a strict [Semver](https://semver.org/) policy. This means that we try to keep our releases as stable as possible, and only introduce breaking changes when absolutely necessary. As such we try to keep our releases as follows:
- **Major** releases are reserved for breaking changes, and are not expected to be frequent. Ideally, we will remain at v1.x.x for the forseeable future.
- **Minor** releases are reserved for new features, and are expected to be frequent.
- **Patch** releases are reserved for bug fixes, and are expected to be frequent.
Any maintainer who has privileges on GitHub to create a new release can create a release at any time they feel it is necessary. However, it is recommended that you reach out in the discord to other maintainers and get at least one other maintainer to approve the release.
An important caveat to this is that we _may_ make breaking changes in a minor release if it is security related. In this case, the releaser should headline the release notes with the notice and impact of the breaking change, however we may not bump the major version depending on user impact.
### Release Notes
When drafting a new release, GitHub will automatically pull in all the commits since the last release. This is a great start. After pulling in all of the commits, you should add sections for
- New Features - Any new features that are being introduced in this release (screenshots are great here)
- Bug Fixes - Significant bug fixes that are being introduced in this release, smaller bug fixes can be left out if they are noted in a commit message
- Breaking Changes - Any breaking changes that are being introduced in this release (should be rare)

View File

@@ -14,12 +14,12 @@ Prerequisites
- Visual Studio Code - Visual Studio Code
### Linux and MacOS ### Linux and MacOS
First ensure that docker is running. Then when you clone the repo and open with VS Code you should see a popup asking you to reopen the project inside a development container. Click yes and it will build the development container and run the setup required to run both the backend API and the frontend webserver. This also pre-configures pre-commit hooks to ensure that the code is up to date before committing. First ensure that docker is running. Then when you clone the repo and open with VS Code you should see a popup asking you to reopen the project inside a development container. Click yes and it will build the development container and run the setup required to run both the backend API and the frontend webserver. This also pre-configures pre-commit hooks to ensure that the code is up to date before committing.
### Windows ### Windows
Make sure the VSCode Dev Containers extension is installed, then select "Dev Containers: Clone Repository in Container Volume..." in the command pallete (F1). Select your forked repo and choose the `mealie-next` branch, which contains the latest changes. This mounts your repository directly in WSL2, which [greatly improves the performance of the container](https://code.visualstudio.com/docs/devcontainers/containers#_quick-start-open-a-git-repository-or-github-pr-in-an-isolated-container-volume), and enables hot-reloading for the frontend. Running the container on a mounted volume may not work correctly on Windows due to WSL permission mapping issues.
[Checkout the makefile reference](#make-file-reference) for all of the available commands. Make sure the VSCode Dev Containers extension is installed, then select "Dev Containers: Clone Repository in Container Volume..." in the command palette (F1). Select your forked repo and choose the `mealie-next` branch, which contains the latest changes. This mounts your repository directly in WSL2, which [greatly improves the performance of the container](https://code.visualstudio.com/docs/devcontainers/containers#_quick-start-open-a-git-repository-or-github-pr-in-an-isolated-container-volume), and enables hot-reloading for the frontend. Running the container on a mounted volume may not work correctly on Windows due to WSL permission mapping issues.
!!! tip !!! tip
For slow terminal checkout the solution in this [GitHub Issue](https://github.com/microsoft/vscode/issues/133215) For slow terminal checkout the solution in this [GitHub Issue](https://github.com/microsoft/vscode/issues/133215)
@@ -29,16 +29,18 @@ Make sure the VSCode Dev Containers extension is installed, then select "Dev Con
``` ```
## Without Dev Containers ## Without Dev Containers
### Prerequisites ### Prerequisites
- [Python 3.10](https://www.python.org/downloads/) - [Python 3.10](https://www.python.org/downloads/)
- [Poetry](https://python-poetry.org/docs/#installation) - [Poetry](https://python-poetry.org/docs/#installation)
- [Node v16.x](https://nodejs.org/en/) - [Node v16.x](https://nodejs.org/en/)
- [yarn](https://classic.yarnpkg.com/lang/en/docs/install/#mac-stable) - [yarn](https://classic.yarnpkg.com/lang/en/docs/install/#mac-stable)
- [task](https://taskfile.dev/#/installation)
### Installing Dependencies ### Installing Dependencies
Once the prerequisites are installed you can cd into the project base directory and run `make setup` to install the python and node dependencies. Once the prerequisites are installed you can cd into the project base directory and run `task setup` to install the python and node dependencies, and download the NLP model.
=== "Linux / macOS" === "Linux / macOS"
@@ -46,29 +48,16 @@ Once the prerequisites are installed you can cd into the project base directory
# Naviate To The Root Directory # Naviate To The Root Directory
cd /path/to/project cd /path/to/project
# Utilize the Makefile to Install Dependencies # Utilize the Taskfile to Install Dependencies
make setup task setup
``` ```
=== "Windows"
``` powershell
# Install Python Dependencies
Set-Directory -Path "C:\path\to\project"
poetry install
# Install Node Dependencies
Set-Directory frontend
yarn install
```
### Setting ENV Variables
Before you start the server you MUST copy the `template.env` and `frontend/template.env` files to their respective locations with the name `.env` and `frontend/.env` respectively. The application will-not run without these files.
## Postgres ## Postgres
- Whether using a container or manual install, you need to set up your own postgres dev server. The database, username, password, etc should match the `POSTGRES_*` options located in the `.env` file.
- Install psycog2 with `poetry install -E pgsql` (in the main `mealie` directory, *not* `frontend`) The taskfile has two commands that need to be run to run the development environment against a postgres database.
- `task dev:services` - This will start the postgres database, and a smtp server for email testing.
- `task py:postgres` - This will run that backend API configured for the local postgres database.
## Starting The Server ## Starting The Server
@@ -78,57 +67,24 @@ Now you're ready to start the servers. You'll need two shells open, One for the
```bash ```bash
# Terminal #1 # Terminal #1
make backend task py
# Terminal #2 # Terminal #2
make frontend task ui
``` ```
=== "Windows"
``` powershell
# Terminal # 1
poetry run python mealie/db/init_db.py # Initialize the database
poetry run python mealie/app.py # start application
# Terminal # 2
Set-Directory frontend
yarn run dev
```
## Make File Reference
Run `make help` for reference. If you're on a system that doesn't support makefiles in most cases you can use the commands directly in your terminal by copy/pasting them from the Makefile.
```
docs 📄 Start Mkdocs Development Server
code-gen 🤖 Run Code-Gen Scripts
setup 🏗 Setup Development Instance
setup-model 🤖 Get the latest NLP CRF++ Model
clean-data ⚠️ Removes All Developer Data for a fresh server start
clean-pyc 🧹 Remove Python file artifacts
clean-test 🧹 Remove test and coverage artifacts
backend-clean 🧹 Remove all build, test, coverage and Python artifacts
backend-test 🧪 Run tests quickly with the default Python
backend-format 🧺 Format, Check and Flake8
backend-all 🧪 Runs all the backend checks and tests
backend-coverage ☂️ Check code coverage quickly with the default Python
backend 🎬 Start Mealie Backend Development Server
frontend 🎬 Start Mealie Frontend Development Server
frontend-build 🏗 Build Frontend in frontend/dist
frontend-generate 🏗 Generate Code for Frontend
frontend-lint 🧺 Run yarn lint
docker-dev 🐳 Build and Start Docker Development Stack (currently not functional, see #756, #1072)
docker-prod 🐳 Build and Start Docker Production Stack
```
## Internationalization ## Internationalization
### Frontend ### Frontend
We use vue-i18n package for internationalization. Translations are stored in json format located in [frontend/lang/messages](https://github.com/mealie-recipes/mealie/tree/mealie-next/frontend/lang/messages). We use vue-i18n package for internationalization. Translations are stored in json format located in [frontend/lang/messages](https://github.com/mealie-recipes/mealie/tree/mealie-next/frontend/lang/messages).
### Backend ### Backend
Translations are stored in json format located in [mealie/lang/messages](https://github.com/mealie-recipes/mealie/tree/mealie-next/mealie/lang/messages). Translations are stored in json format located in [mealie/lang/messages](https://github.com/mealie-recipes/mealie/tree/mealie-next/mealie/lang/messages).
### Quick frontend localization with VS Code ### Quick frontend localization with VS Code
[i18n Ally for VScode](https://marketplace.visualstudio.com/items?itemName=lokalise.i18n-ally) is helpful for generating new strings to translate using Code Actions. It also has a nice feature, which shows translations in-place when editing code. [i18n Ally for VScode](https://marketplace.visualstudio.com/items?itemName=lokalise.i18n-ally) is helpful for generating new strings to translate using Code Actions. It also has a nice feature, which shows translations in-place when editing code.
A few settings must be tweaked to make the most of its features. Some settings are stored on project level, but most of them have to be set manually in your workspace or user settings.\ A few settings must be tweaked to make the most of its features. Some settings are stored on project level, but most of them have to be set manually in your workspace or user settings.\

View File

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

View File

@@ -113,8 +113,6 @@ We also provide versioned containers that allow to pin to a specific release. Ea
`ghcr.io/mealie-recipes/mealie:latest` `ghcr.io/mealie-recipes/mealie:latest`
_Note: This tag is not yet available; it will be available with the v1 stable release_
The latest tag provides the latest released image of Mealie. The latest tag provides the latest released image of Mealie.
--- ---

View File

@@ -9,14 +9,14 @@ PostgreSQL might be considered if you need to support many concurrent users. In
version: "3.7" version: "3.7"
services: services:
mealie: mealie:
image: ghcr.io/mealie-recipes/mealie:v1.0.0-RC2 image: ghcr.io/mealie-recipes/mealie:v1.1.0 # (3)
container_name: mealie container_name: mealie
ports: ports:
- "9925:9000" - "9925:9000" # (1)
deploy: deploy:
resources: resources:
limits: limits:
memory: 1000M # (1) memory: 1000M # (2)
depends_on: depends_on:
- postgres - postgres
volumes: volumes:
@@ -60,3 +60,4 @@ volumes:
1. To access the mealie interface you only need to expose port 9000 on the mealie container. Here we expose port 9925 on the host, but feel free to change this to any port you like. 1. To access the mealie interface you only need to expose port 9000 on the mealie container. Here we expose port 9925 on the host, but feel free to change this to any port you like.
2. Setting an explicit memory limit is recommended. Python can pre-allocate larger amounts of memory than is necessary if you have a machine with a lot of RAM. This can cause the container to idle at a high memory usage. Setting a memory limit will improve idle performance. 2. Setting an explicit memory limit is recommended. Python can pre-allocate larger amounts of memory than is necessary if you have a machine with a lot of RAM. This can cause the container to idle at a high memory usage. Setting a memory limit will improve idle performance.
3. You should double check this value isn't out of date when setting up for the first time; check the README and use the value from the "latest release" badge at the top - the format should be `vX.Y.Z`. Whilst a 'latest' tag is available, the Mealie team advises specifying a specific version tag and consciously updating to newer versions when you have time to read the release notes and ensure you follow any manual actions required (which should be rare).

View File

@@ -1,7 +1,7 @@
# Installing with SQLite # Installing with SQLite
!!! Warning !!! Warning
If you're plannin on deploying and using Network Attached Storage with Mealie, you should use [Postgres](./postgres.md) instead of SQLite. SQLite is not designed to be used with Network Attached Storage and can cause data corruption, or locked database errors If you're planning on deploying and using Network Attached Storage with Mealie, you should use [Postgres](./postgres.md) instead of SQLite. SQLite is not designed to be used with Network Attached Storage and can cause data corruption, or locked database errors
SQLite is a popular, open source, self-contained, zero-configuration database that is the ideal choice for Mealie when you have 1-20 Users. Below is a ready to use docker-compose.yaml file for deploying Mealie on your server. SQLite is a popular, open source, self-contained, zero-configuration database that is the ideal choice for Mealie when you have 1-20 Users. Below is a ready to use docker-compose.yaml file for deploying Mealie on your server.
@@ -13,7 +13,7 @@ SQLite is a popular, open source, self-contained, zero-configuration database th
version: "3.7" version: "3.7"
services: services:
mealie: mealie:
image: ghcr.io/mealie-recipes/mealie:v1.0.0-RC2 image: ghcr.io/mealie-recipes/mealie:v1.1.0 # (3)
container_name: mealie container_name: mealie
ports: ports:
- "9925:9000" # (1) - "9925:9000" # (1)
@@ -43,3 +43,4 @@ volumes:
1. To access the mealie interface you only need to expose port 9000 on the container. Here we expose port 9925 on the host, but feel free to change this to any port you like. 1. To access the mealie interface you only need to expose port 9000 on the container. Here we expose port 9925 on the host, but feel free to change this to any port you like.
2. Setting an explicit memory limit is recommended. Python can pre-allocate larger amounts of memory than is necessary if you have a machine with a lot of RAM. This can cause the container to idle at a high memory usage. Setting a memory limit will improve idle performance. 2. Setting an explicit memory limit is recommended. Python can pre-allocate larger amounts of memory than is necessary if you have a machine with a lot of RAM. This can cause the container to idle at a high memory usage. Setting a memory limit will improve idle performance.
3. You should double check this value isn't out of date when setting up for the first time; check the README and use the value from the "latest release" badge at the top - the format should be `vX.Y.Z`. Whilst a 'latest' tag is available, the Mealie team advises specifying a specific version tag and consciously updating to newer versions when you have time to read the release notes and ensure you follow any manual actions required (which should be rare).

View File

@@ -1,11 +1,5 @@
# About The Project # About The Project
!!! warning "Mealie v1 Beta Release"
This documentation is for the Mealie v1 Beta release and is not final. As such, it may contain incomplete or incorrect information. You should understand that installing Mealie v1 Beta is a work in progress and while we've committed to maintaining the database schema and provided migrations, we are still in the process of adding new features, and robust testing to ensure the application works as expected.
You should likely find bugs, errors, and unfinished pages within the application. To find the current status of the release you can checkout the [project on github](https://github.com/mealie-recipes/mealie/projects/7) or reach out on discord.
Mealie is a self hosted recipe manager and meal planner with a RestAPI backend and a reactive frontend application built in Vue for a pleasant user experience for the whole family. Easily add recipes into your database by providing the url and Mealie will automatically import the relevant data or add a family recipe with the UI editor. Mealie also provides an API for interactions from 3rd party applications. Mealie is a self hosted recipe manager and meal planner with a RestAPI backend and a reactive frontend application built in Vue for a pleasant user experience for the whole family. Easily add recipes into your database by providing the url and Mealie will automatically import the relevant data or add a family recipe with the UI editor. Mealie also provides an API for interactions from 3rd party applications.
[Remember to join the Discord](https://discord.gg/QuStdQGSGK) [Remember to join the Discord](https://discord.gg/QuStdQGSGK)

View File

@@ -20,5 +20,6 @@ If you are upgrading from pre-v1.0.0 to v1.0.0, make sure you read [Migrating to
For all setups using Docker the updating process looks something like this For all setups using Docker the updating process looks something like this
- Stop the container using `docker compose down` - Stop the container using `docker compose down`
- If you are not using the latest tag, change the version (image tag) in your docker-compose file
- Pull the latest image using `docker compose pull` - Pull the latest image using `docker compose pull`
- Start the container again using `docker compose up -d` - Start the container again using `docker compose up -d`

File diff suppressed because one or more lines are too long

View File

@@ -51,8 +51,8 @@ extra_css:
- assets/stylesheets/custom.css - assets/stylesheets/custom.css
extra_javascript: extra_javascript:
- assets/js/extra.js - assets/js/extra.js
repo_url: https://github.com/hay-kot/mealie/ repo_url: https://github.com/mealie-recipes/mealie/
repo_name: hay-kot/mealie repo_name: mealie-recipes/mealie
edit_uri: edit/mealie-next/docs/docs/ edit_uri: edit/mealie-next/docs/docs/
nav: nav:

View File

@@ -26,54 +26,69 @@
> >
<div style="max-height: 70vh; overflow-y: auto"> <div style="max-height: 70vh; overflow-y: auto">
<v-card <v-card
v-for="(section, sectionIndex) in recipeIngredientSections" :key="section.recipeId + sectionIndex" v-for="(recipeSection, recipeSectionIndex) in recipeIngredientSections" :key="recipeSection.recipeId + recipeSectionIndex"
elevation="0" elevation="0"
height="fit-content" height="fit-content"
width="100%" width="100%"
> >
<v-divider v-if="sectionIndex > 0" class="mt-3" /> <v-divider v-if="recipeSectionIndex > 0" class="mt-3" />
<v-card-title <v-card-title
v-if="recipeIngredientSections.length > 1" v-if="recipeIngredientSections.length > 1"
class="justify-center" class="justify-center text-h5"
width="100%" width="100%"
> >
<v-container style="width: 100%;"> <v-container style="width: 100%;">
<v-row no-gutters class="ma-0 pa-0"> <v-row no-gutters class="ma-0 pa-0">
<v-col cols="12" align-self="center" class="text-center"> <v-col cols="12" align-self="center" class="text-center">
{{ section.recipeName }} {{ recipeSection.recipeName }}
</v-col> </v-col>
</v-row> </v-row>
<v-row v-if="section.recipeScale > 1" no-gutters class="ma-0 pa-0"> <v-row v-if="recipeSection.recipeScale > 1" no-gutters class="ma-0 pa-0">
<!-- TODO: make this editable in the dialog and visible on single-recipe lists --> <!-- TODO: make this editable in the dialog and visible on single-recipe lists -->
<v-col cols="12" align-self="center" class="text-center"> <v-col cols="12" align-self="center" class="text-center">
({{ $tc("recipe.quantity") }}: {{ section.recipeScale }}) ({{ $tc("recipe.quantity") }}: {{ recipeSection.recipeScale }})
</v-col> </v-col>
</v-row> </v-row>
</v-container> </v-container>
</v-card-title> </v-card-title>
<div <div>
:class="$vuetify.breakpoint.smAndDown ? '' : 'ingredient-grid'" <div
:style="$vuetify.breakpoint.smAndDown ? '' : { gridTemplateRows: `repeat(${Math.ceil(section.ingredients.length / 2)}, min-content)` }" v-for="(ingredientSection, ingredientSectionIndex) in recipeSection.ingredientSections"
> :key="recipeSection.recipeId + recipeSectionIndex + ingredientSectionIndex"
<v-list-item
v-for="(ingredientData, i) in section.ingredients"
:key="'ingredient' + i"
dense
@click="recipeIngredientSections[sectionIndex].ingredients[i].checked = !recipeIngredientSections[sectionIndex].ingredients[i].checked"
> >
<v-checkbox <v-card-title v-if="ingredientSection.sectionName" class="ingredient-title mt-2 pb-0 text-h6">
hide-details {{ ingredientSection.sectionName }}
:input-value="ingredientData.checked" </v-card-title>
class="pt-0 my-auto py-auto" <div
color="secondary" :class="$vuetify.breakpoint.smAndDown ? '' : 'ingredient-grid'"
/> :style="$vuetify.breakpoint.smAndDown ? '' : { gridTemplateRows: `repeat(${Math.ceil(ingredientSection.ingredients.length / 2)}, min-content)` }"
<v-list-item-content :key="ingredientData.ingredient.quantity"> >
<RecipeIngredientListItem <v-list-item
:ingredient="ingredientData.ingredient" v-for="(ingredientData, i) in ingredientSection.ingredients"
:disable-amount="ingredientData.disableAmount" :key="recipeSection.recipeId + recipeSectionIndex + ingredientSectionIndex + i"
:scale="section.recipeScale" /> dense
</v-list-item-content> @click="recipeIngredientSections[recipeSectionIndex]
</v-list-item> .ingredientSections[ingredientSectionIndex]
.ingredients[i].checked = !recipeIngredientSections[recipeSectionIndex]
.ingredientSections[ingredientSectionIndex]
.ingredients[i]
.checked"
>
<v-checkbox
hide-details
:input-value="ingredientData.checked"
class="pt-0 my-auto py-auto"
color="secondary"
/>
<v-list-item-content :key="ingredientData.ingredient.quantity">
<RecipeIngredientListItem
:ingredient="ingredientData.ingredient"
:disable-amount="ingredientData.disableAmount"
:scale="recipeSection.recipeScale" />
</v-list-item-content>
</v-list-item>
</div>
</div>
</div> </div>
</v-card> </v-card>
</div> </div>
@@ -112,17 +127,22 @@ export interface RecipeWithScale extends Recipe {
scale: number; scale: number;
} }
export interface ShoppingListRecipeIngredient { export interface ShoppingListIngredient {
checked: boolean; checked: boolean;
ingredient: RecipeIngredient; ingredient: RecipeIngredient;
disableAmount: boolean; disableAmount: boolean;
} }
export interface ShoppingListIngredientSection {
sectionName: string;
ingredients: ShoppingListIngredient[];
}
export interface ShoppingListRecipeIngredientSection { export interface ShoppingListRecipeIngredientSection {
recipeId: string; recipeId: string;
recipeName: string; recipeName: string;
recipeScale: number; recipeScale: number;
ingredients: ShoppingListRecipeIngredient[]; ingredientSections: ShoppingListIngredientSection[];
} }
export default defineComponent({ export default defineComponent({
@@ -191,7 +211,7 @@ export default defineComponent({
continue; continue;
} }
const shoppingListIngredients: ShoppingListRecipeIngredient[] = recipe.recipeIngredient.map((ing) => { const shoppingListIngredients: ShoppingListIngredient[] = recipe.recipeIngredient.map((ing) => {
return { return {
checked: true, checked: true,
ingredient: ing, ingredient: ing,
@@ -199,11 +219,35 @@ export default defineComponent({
} }
}); });
const shoppingListIngredientSections = shoppingListIngredients.reduce((sections, ing) => {
// if title append new section to the end of the array
if (ing.ingredient.title) {
sections.push({
sectionName: ing.ingredient.title,
ingredients: [ing],
});
return sections;
}
// append new section if first
if (sections.length === 0) {
sections.push({
sectionName: "",
ingredients: [ing],
});
return sections;
}
// otherwise add ingredient to last section in the array
sections[sections.length - 1].ingredients.push(ing);
return sections;
}, [] as ShoppingListIngredientSection[]);
recipeSectionMap.set(recipe.slug, { recipeSectionMap.set(recipe.slug, {
recipeId: recipe.id, recipeId: recipe.id,
recipeName: recipe.name, recipeName: recipe.name,
recipeScale: recipe.scale, recipeScale: recipe.scale,
ingredients: shoppingListIngredients, ingredientSections: shoppingListIngredientSections,
}) })
} }
@@ -231,9 +275,11 @@ export default defineComponent({
} }
function bulkCheckIngredients(value = true) { function bulkCheckIngredients(value = true) {
recipeIngredientSections.value.forEach((section) => { recipeIngredientSections.value.forEach((recipeSection) => {
section.ingredients.forEach((ing) => { recipeSection.ingredientSections.forEach((ingSection) => {
ing.checked = value; ingSection.ingredients.forEach((ing) => {
ing.checked = value;
});
}); });
}); });
} }
@@ -246,10 +292,12 @@ export default defineComponent({
} }
const ingredients: RecipeIngredient[] = []; const ingredients: RecipeIngredient[] = [];
section.ingredients.forEach((ing) => { section.ingredientSections.forEach((ingSection) => {
if (ing.checked) { ingSection.ingredients.forEach((ing) => {
ingredients.push(ing.ingredient); if (ing.checked) {
} ingredients.push(ing.ingredient);
}
});
}); });
if (!ingredients.length) { if (!ingredients.length) {
@@ -272,7 +320,11 @@ export default defineComponent({
} }
}) })
success ? alert.success(i18n.t("recipe.recipes-added-to-list") as string) const successMessage = promises.length === 1
? i18n.t("recipe.successfully-added-to-list") as string
: i18n.t("recipe.failed-to-add-to-list") as string;
success ? alert.success(successMessage)
: alert.error(i18n.t("failed-to-add-recipes-to-list") as string) : alert.error(i18n.t("failed-to-add-recipes-to-list") as string)
state.shoppingListDialog = false; state.shoppingListDialog = false;

View File

@@ -52,11 +52,20 @@ export default defineComponent({
}); });
const ingredientCopyText = computed(() => { const ingredientCopyText = computed(() => {
return props.value const components: string[] = [];
.map((ingredient) => { props.value.forEach((ingredient) => {
return `${parseIngredientText(ingredient, props.disableAmount, props.scale, false)}`; if (ingredient.title) {
}) if (components.length) {
.join("\n"); components.push("");
}
components.push(`[${ingredient.title}]`);
}
components.push(parseIngredientText(ingredient, props.disableAmount, props.scale, false));
});
return components.join("\n");
}); });
function toggleChecked(index: number) { function toggleChecked(index: number) {

View File

@@ -18,7 +18,7 @@
<BaseDialog v-if="updateTarget" v-model="dialogs.update" :title="$t('general.update')" @confirm="updateOne()"> <BaseDialog v-if="updateTarget" v-model="dialogs.update" :title="$t('general.update')" @confirm="updateOne()">
<v-card-text> <v-card-text>
<v-text-field v-model="updateTarget.name" label="$t('general.name')"> </v-text-field> <v-text-field v-model="updateTarget.name" :label="$t('general.name')"> </v-text-field>
<v-checkbox v-if="itemType === Organizer.Tool" v-model="updateTarget.onHand" :label="$t('tool.on-hand')"></v-checkbox> <v-checkbox v-if="itemType === Organizer.Tool" v-model="updateTarget.onHand" :label="$t('tool.on-hand')"></v-checkbox>
</v-card-text> </v-card-text>
</BaseDialog> </BaseDialog>

View File

@@ -258,6 +258,7 @@
}, },
"meal-plan": { "meal-plan": {
"create-a-new-meal-plan": "Skep 'n nuwe maaltydplan", "create-a-new-meal-plan": "Skep 'n nuwe maaltydplan",
"update-this-meal-plan": "Update this Meal Plan",
"dinner-this-week": "Aandete hierdie week", "dinner-this-week": "Aandete hierdie week",
"dinner-today": "Vandag se Aandete", "dinner-today": "Vandag se Aandete",
"dinner-tonight": "VANAAND SE AANDETE", "dinner-tonight": "VANAAND SE AANDETE",
@@ -472,9 +473,11 @@
"add-to-timeline": "Voeg by tydlyn", "add-to-timeline": "Voeg by tydlyn",
"recipe-added-to-list": "Resep by lys gevoeg", "recipe-added-to-list": "Resep by lys gevoeg",
"recipes-added-to-list": "Recipes added to list", "recipes-added-to-list": "Recipes added to list",
"successfully-added-to-list": "Successfully added to list",
"recipe-added-to-mealplan": "Resep is by die maaltydplan gevoeg", "recipe-added-to-mealplan": "Resep is by die maaltydplan gevoeg",
"failed-to-add-recipes-to-list": "Failed to add recipe to list", "failed-to-add-recipes-to-list": "Failed to add recipe to list",
"failed-to-add-recipe-to-mealplan": "Kon nie resep by maaltydplan voeg nie", "failed-to-add-recipe-to-mealplan": "Kon nie resep by maaltydplan voeg nie",
"failed-to-add-to-list": "Failed to add to list",
"yield": "Resultaat", "yield": "Resultaat",
"quantity": "Hoeveelheid", "quantity": "Hoeveelheid",
"choose-unit": "Kies 'n eenheid", "choose-unit": "Kies 'n eenheid",

View File

@@ -258,6 +258,7 @@
}, },
"meal-plan": { "meal-plan": {
"create-a-new-meal-plan": "إنشاء خطة وجبة جديدة", "create-a-new-meal-plan": "إنشاء خطة وجبة جديدة",
"update-this-meal-plan": "Update this Meal Plan",
"dinner-this-week": "العشاء لهذا الأسبوع", "dinner-this-week": "العشاء لهذا الأسبوع",
"dinner-today": "العشاء اليوم", "dinner-today": "العشاء اليوم",
"dinner-tonight": "العشاء الليلة", "dinner-tonight": "العشاء الليلة",
@@ -472,9 +473,11 @@
"add-to-timeline": "Add to Timeline", "add-to-timeline": "Add to Timeline",
"recipe-added-to-list": "Recipe added to list", "recipe-added-to-list": "Recipe added to list",
"recipes-added-to-list": "Recipes added to list", "recipes-added-to-list": "Recipes added to list",
"successfully-added-to-list": "Successfully added to list",
"recipe-added-to-mealplan": "Recipe added to mealplan", "recipe-added-to-mealplan": "Recipe added to mealplan",
"failed-to-add-recipes-to-list": "Failed to add recipe to list", "failed-to-add-recipes-to-list": "Failed to add recipe to list",
"failed-to-add-recipe-to-mealplan": "Failed to add recipe to mealplan", "failed-to-add-recipe-to-mealplan": "Failed to add recipe to mealplan",
"failed-to-add-to-list": "Failed to add to list",
"yield": "Yield", "yield": "Yield",
"quantity": "Quantity", "quantity": "Quantity",
"choose-unit": "Choose Unit", "choose-unit": "Choose Unit",

View File

@@ -258,6 +258,7 @@
}, },
"meal-plan": { "meal-plan": {
"create-a-new-meal-plan": "Създаване на нов хранителен план", "create-a-new-meal-plan": "Създаване на нов хранителен план",
"update-this-meal-plan": "Update this Meal Plan",
"dinner-this-week": "Вечеря тази седмица", "dinner-this-week": "Вечеря тази седмица",
"dinner-today": "Вечеря Днес", "dinner-today": "Вечеря Днес",
"dinner-tonight": "Вечеря ТАЗИ ВЕЧЕР", "dinner-tonight": "Вечеря ТАЗИ ВЕЧЕР",
@@ -472,9 +473,11 @@
"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",
"recipe-added-to-mealplan": "Рецептата е добавена към хранителния план", "recipe-added-to-mealplan": "Рецептата е добавена към хранителния план",
"failed-to-add-recipes-to-list": "Неуспешно добавяне на рецепта към списъка", "failed-to-add-recipes-to-list": "Неуспешно добавяне на рецепта към списъка",
"failed-to-add-recipe-to-mealplan": "Рецептата не беше добавена към хранителния план", "failed-to-add-recipe-to-mealplan": "Рецептата не беше добавена към хранителния план",
"failed-to-add-to-list": "Failed to add to list",
"yield": "Добив", "yield": "Добив",
"quantity": "Количество", "quantity": "Количество",
"choose-unit": "Избери единица", "choose-unit": "Избери единица",

View File

@@ -258,6 +258,7 @@
}, },
"meal-plan": { "meal-plan": {
"create-a-new-meal-plan": "Crea un nou menú", "create-a-new-meal-plan": "Crea un nou menú",
"update-this-meal-plan": "Update this Meal Plan",
"dinner-this-week": "Sopar d'esta setmana", "dinner-this-week": "Sopar d'esta setmana",
"dinner-today": "Sopar per avui", "dinner-today": "Sopar per avui",
"dinner-tonight": "Sopar d'aquesta nit", "dinner-tonight": "Sopar d'aquesta nit",
@@ -472,9 +473,11 @@
"add-to-timeline": "Afegir a la cronologia", "add-to-timeline": "Afegir a la cronologia",
"recipe-added-to-list": "Recepta afegida a la llista", "recipe-added-to-list": "Recepta afegida a la llista",
"recipes-added-to-list": "Receptes afegides a la llista", "recipes-added-to-list": "Receptes afegides a la llista",
"successfully-added-to-list": "Successfully added to list",
"recipe-added-to-mealplan": "Recepta afegida al menú", "recipe-added-to-mealplan": "Recepta afegida al menú",
"failed-to-add-recipes-to-list": "S'ha produït un error al intentar afegir la recepta a la llista", "failed-to-add-recipes-to-list": "S'ha produït un error al intentar afegir la recepta a la llista",
"failed-to-add-recipe-to-mealplan": "S'ha produït un error afegint la recepta al menú", "failed-to-add-recipe-to-mealplan": "S'ha produït un error afegint la recepta al menú",
"failed-to-add-to-list": "Failed to add to list",
"yield": "Racions", "yield": "Racions",
"quantity": "Quantitat", "quantity": "Quantitat",
"choose-unit": "Tria el tipus d'unitat", "choose-unit": "Tria el tipus d'unitat",

View File

@@ -66,7 +66,7 @@
"test-message-sent": "Testovací zpráva odeslána", "test-message-sent": "Testovací zpráva odeslána",
"new-notification": "Nové oznámení", "new-notification": "Nové oznámení",
"event-notifiers": "Notifikace událostí", "event-notifiers": "Notifikace událostí",
"apprise-url-skipped-if-blank": "Apprise URL (skipped if blank)", "apprise-url-skipped-if-blank": "Apprise URL (přeskočeno pokud je prázdné)",
"enable-notifier": "Povolit notifikaci", "enable-notifier": "Povolit notifikaci",
"what-events": "What events should this notifier subscribe to?", "what-events": "What events should this notifier subscribe to?",
"user-events": "Uživatelské události", "user-events": "Uživatelské události",
@@ -114,10 +114,10 @@
"json": "JSON", "json": "JSON",
"keyword": "Klíčové slovo", "keyword": "Klíčové slovo",
"link-copied": "Odkaz zkopírován", "link-copied": "Odkaz zkopírován",
"loading": "Loading", "loading": "Načítá se",
"loading-events": "Načítání událostí", "loading-events": "Načítání událostí",
"loading-recipe": "Loading recipe...", "loading-recipe": "Načítám recept...",
"loading-ocr-data": "Loading OCR data...", "loading-ocr-data": "Načítám OCR data...",
"loading-recipes": "Načítám recepty", "loading-recipes": "Načítám recepty",
"message": "Zpráva", "message": "Zpráva",
"monday": "Pondělí", "monday": "Pondělí",
@@ -243,8 +243,8 @@
"show-recipe-assets-description": "When enabled the recipe assets will be shown on the recipe if available", "show-recipe-assets-description": "When enabled the recipe assets will be shown on the recipe if available",
"default-to-landscape-view": "Default to landscape view", "default-to-landscape-view": "Default to landscape view",
"default-to-landscape-view-description": "When enabled the recipe header section will be shown in landscape view", "default-to-landscape-view-description": "When enabled the recipe header section will be shown in landscape view",
"disable-users-from-commenting-on-recipes": "Disable users from commenting on recipes", "disable-users-from-commenting-on-recipes": "Zakázat uživatelům komentovat u receptů",
"disable-users-from-commenting-on-recipes-description": "Hides the comment section on the recipe page and disables commenting", "disable-users-from-commenting-on-recipes-description": "Na stránce receptu skryje sekci s komentáři a zakáže komentování",
"disable-organizing-recipe-ingredients-by-units-and-food": "Disable organizing recipe ingredients by units and food", "disable-organizing-recipe-ingredients-by-units-and-food": "Disable organizing recipe ingredients by units and food",
"disable-organizing-recipe-ingredients-by-units-and-food-description": "Hides the Food, Unit, and Amount fields for ingredients and treats ingredients as plain text fields.", "disable-organizing-recipe-ingredients-by-units-and-food-description": "Hides the Food, Unit, and Amount fields for ingredients and treats ingredients as plain text fields.",
"general-preferences": "General Preferences", "general-preferences": "General Preferences",
@@ -254,10 +254,11 @@
"group-management": "Správa skupin", "group-management": "Správa skupin",
"admin-group-management": "Admin Group Management", "admin-group-management": "Admin Group Management",
"admin-group-management-text": "Změny v této skupině budou okamžitě zohledněny.", "admin-group-management-text": "Změny v této skupině budou okamžitě zohledněny.",
"group-id-value": "Group Id: {0}" "group-id-value": "ID skupiny: {0}"
}, },
"meal-plan": { "meal-plan": {
"create-a-new-meal-plan": "Vytvořit nový jídelníček", "create-a-new-meal-plan": "Vytvořit nový jídelníček",
"update-this-meal-plan": "Update this Meal Plan",
"dinner-this-week": "Večeře na tento týden", "dinner-this-week": "Večeře na tento týden",
"dinner-today": "Dnešní večeře", "dinner-today": "Dnešní večeře",
"dinner-tonight": "DNEŠNÍ VEČEŘE", "dinner-tonight": "DNEŠNÍ VEČEŘE",
@@ -307,10 +308,10 @@
"new-rule": "Nové pravidlo", "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": "You can create rules for auto selecting recipes for your meal plans. These rules are used by the server to determine the random pool of recipes to select from when creating meal plans. Note that if rules have the same day/type constraints then the categories of the rules will be merged. In practice, it's unnecessary to create duplicate rules, but it's possible to do so.",
"new-rule-description": "When creating a new rule for a meal plan you can restrict the rule to be applicable for a specific day of the week and/or a specific type of meal. To apply a rule to all days or all meal types you can set the rule to \"Any\" which will apply it to all the possible values for the day and/or meal type.", "new-rule-description": "When creating a new rule for a meal plan you can restrict the rule to be applicable for a specific day of the week and/or a specific type of meal. To apply a rule to all days or all meal types you can set the rule to \"Any\" which will apply it to all the possible values for the day and/or meal type.",
"recipe-rules": "Recipe Rules", "recipe-rules": "Pravidla receptu",
"applies-to-all-days": "Použije se na všechny dny", "applies-to-all-days": "Použije se na všechny dny",
"applies-on-days": "Applies on {0}s", "applies-on-days": "Applies on {0}s",
"meal-plan-settings": "Meal Plan Settings" "meal-plan-settings": "Nastavení jídelníčku"
}, },
"migration": { "migration": {
"migration-data-removed": "Data z migrace byla smazána", "migration-data-removed": "Data z migrace byla smazána",
@@ -335,7 +336,7 @@
}, },
"paprika": { "paprika": {
"description-long": "Mealie can import recipes from the Paprika application. Export your recipes from paprika, rename the export extension to .zip and upload it below.", "description-long": "Mealie can import recipes from the Paprika application. Export your recipes from paprika, rename the export extension to .zip and upload it below.",
"title": "Paprika Recipe Manager" "title": "Správce receptů Paprika"
}, },
"mealie-pre-v1": { "mealie-pre-v1": {
"description-long": "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.", "description-long": "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.",
@@ -469,12 +470,14 @@
"date-format-hint-yyyy-mm-dd": "Formát RRRR-MM-DD", "date-format-hint-yyyy-mm-dd": "Formát RRRR-MM-DD",
"add-to-list": "Přidat na seznam", "add-to-list": "Přidat na seznam",
"add-to-plan": "Přidat do jídelníčku", "add-to-plan": "Přidat do jídelníčku",
"add-to-timeline": "Add to Timeline", "add-to-timeline": "Přidat na časovou osu",
"recipe-added-to-list": "Recept byl přidán na seznam", "recipe-added-to-list": "Recept byl přidán na seznam",
"recipes-added-to-list": "Recipes added to list", "recipes-added-to-list": "Recipes added to list",
"successfully-added-to-list": "Successfully added to list",
"recipe-added-to-mealplan": "Recept byl přidán do jídelníčku", "recipe-added-to-mealplan": "Recept byl přidán do jídelníčku",
"failed-to-add-recipes-to-list": "Failed to add recipe to list", "failed-to-add-recipes-to-list": "Failed to add recipe to list",
"failed-to-add-recipe-to-mealplan": "Přidání receptu do jídelníčku selhalo", "failed-to-add-recipe-to-mealplan": "Přidání receptu do jídelníčku selhalo",
"failed-to-add-to-list": "Failed to add to list",
"yield": "Úroda", "yield": "Úroda",
"quantity": "Množství", "quantity": "Množství",
"choose-unit": "Vybrat jednotku", "choose-unit": "Vybrat jednotku",
@@ -496,9 +499,9 @@
"locked": "Uzamčeno", "locked": "Uzamčeno",
"public-link": "Veřejný odkaz", "public-link": "Veřejný odkaz",
"timer": { "timer": {
"kitchen-timer": "Kitchen Timer", "kitchen-timer": "Kuchyňský časovač",
"start-timer": "Start Timer", "start-timer": "Spustit časovač",
"pause-timer": "Pause Timer", "pause-timer": "Pozastavit časovač",
"resume-timer": "Resume Timer", "resume-timer": "Resume Timer",
"stop-timer": "Stop Timer" "stop-timer": "Stop Timer"
}, },
@@ -558,7 +561,7 @@
"upload-image": "Nahrát obrázek", "upload-image": "Nahrát obrázek",
"screen-awake": "Keep Screen Awake", "screen-awake": "Keep Screen Awake",
"remove-image": "Remove image", "remove-image": "Remove image",
"nextStep": "Next step" "nextStep": "Další krok"
}, },
"search": { "search": {
"advanced-search": "Pokročilé vyhledávání", "advanced-search": "Pokročilé vyhledávání",
@@ -1154,7 +1157,7 @@
"notifiers-description": "Setup email and push notifications that trigger on specific events.", "notifiers-description": "Setup email and push notifications that trigger on specific events.",
"manage-data": "Spravovat data", "manage-data": "Spravovat data",
"manage-data-description": "Manage your Food and Units (more options coming soon)", "manage-data-description": "Manage your Food and Units (more options coming soon)",
"data-migrations": "Data Migrations", "data-migrations": "Migrace dat",
"data-migrations-description": "Migrate your existing data from other applications like Nextcloud Recipes and Chowdown", "data-migrations-description": "Migrate your existing data from other applications like Nextcloud Recipes and Chowdown",
"email-sent": "E-mail odeslán", "email-sent": "E-mail odeslán",
"error-sending-email": "Nastala chyba při odesílání e-mailu", "error-sending-email": "Nastala chyba při odesílání e-mailu",
@@ -1166,10 +1169,10 @@
"manage-your-api-tokens": "Správa API tokenů", "manage-your-api-tokens": "Správa API tokenů",
"manage-user-profile": "Správa uživatelského profilu", "manage-user-profile": "Správa uživatelského profilu",
"manage-cookbooks": "Správa kuchařek", "manage-cookbooks": "Správa kuchařek",
"manage-members": "Manage Members", "manage-members": "Spravovat členy",
"manage-webhooks": "Manage Webhooks", "manage-webhooks": "Spravovat webhooky",
"manage-notifiers": "Manage Notifiers", "manage-notifiers": "Spravovat oznámení",
"manage-data-migrations": "Manage Data Migrations" "manage-data-migrations": "Spravovat migrace dat"
}, },
"cookbook": { "cookbook": {
"cookbooks": "Kuchařky", "cookbooks": "Kuchařky",
@@ -1177,10 +1180,10 @@
"public-cookbook": "Veřejná kuchařka", "public-cookbook": "Veřejná kuchařka",
"public-cookbook-description": "Veřejné kuchařky mohou být sdíleny s neregistrovanými uživateli a budou zobrazeny na stránce vaší skupiny.", "public-cookbook-description": "Veřejné kuchařky mohou být sdíleny s neregistrovanými uživateli a budou zobrazeny na stránce vaší skupiny.",
"filter-options": "Možnosti filtru", "filter-options": "Možnosti filtru",
"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.", "filter-options-description": "Pokud je vybrána možnost vyžadovat vše, kuchařka bude obsahovat pouze ty recepty, které mají všechny vybrané položky. To platí pro každou podmnožinu výběru, nikoliv pro jejich průnik.",
"require-all-categories": "Require All Categories", "require-all-categories": "Vyžadovat všechny kategorie",
"require-all-tags": "Require All Tags", "require-all-tags": "Vyžadovat všechny štítky",
"require-all-tools": "Require All Tools", "require-all-tools": "Vyžadovat všechny nástroje",
"cookbook-name": "Název kuchařky", "cookbook-name": "Název kuchařky",
"cookbook-with-name": "Kuchařka {0}" "cookbook-with-name": "Kuchařka {0}"
} }

View File

@@ -258,6 +258,7 @@
}, },
"meal-plan": { "meal-plan": {
"create-a-new-meal-plan": "Opret en ny madplan", "create-a-new-meal-plan": "Opret en ny madplan",
"update-this-meal-plan": "Update this Meal Plan",
"dinner-this-week": "Madplan denne uge", "dinner-this-week": "Madplan denne uge",
"dinner-today": "Madplan i dag", "dinner-today": "Madplan i dag",
"dinner-tonight": "AFTENSMAD I AFTEN", "dinner-tonight": "AFTENSMAD I AFTEN",
@@ -472,9 +473,11 @@
"add-to-timeline": "Tilføj til tidslinje", "add-to-timeline": "Tilføj til tidslinje",
"recipe-added-to-list": "Opskrift tilføjet til listen", "recipe-added-to-list": "Opskrift tilføjet til listen",
"recipes-added-to-list": "Opskrifter tilføjet til listen", "recipes-added-to-list": "Opskrifter tilføjet til listen",
"successfully-added-to-list": "Tilføjet til listen",
"recipe-added-to-mealplan": "Opskrift tilføjet til madplanen", "recipe-added-to-mealplan": "Opskrift tilføjet til madplanen",
"failed-to-add-recipes-to-list": "Kunne ikke tilføje opskrift til listen", "failed-to-add-recipes-to-list": "Kunne ikke tilføje opskrift til listen",
"failed-to-add-recipe-to-mealplan": "Kunne ikke tilføje opskrift til madplanen", "failed-to-add-recipe-to-mealplan": "Kunne ikke tilføje opskrift til madplanen",
"failed-to-add-to-list": "Kunne ikke tilføje opskrift til listen",
"yield": "Portioner", "yield": "Portioner",
"quantity": "Antal", "quantity": "Antal",
"choose-unit": "Vælg enhed", "choose-unit": "Vælg enhed",

View File

@@ -258,6 +258,7 @@
}, },
"meal-plan": { "meal-plan": {
"create-a-new-meal-plan": "Neue Mahlzeit planen", "create-a-new-meal-plan": "Neue Mahlzeit planen",
"update-this-meal-plan": "Mahlzeit aktualisieren",
"dinner-this-week": "Essen diese Woche", "dinner-this-week": "Essen diese Woche",
"dinner-today": "Heutiges Essen", "dinner-today": "Heutiges Essen",
"dinner-tonight": "HEUTE GIBT ES", "dinner-tonight": "HEUTE GIBT ES",
@@ -472,9 +473,11 @@
"add-to-timeline": "Zum Zeitstrahl hinzufügen", "add-to-timeline": "Zum Zeitstrahl hinzufügen",
"recipe-added-to-list": "Rezept wurde zur Einkaufsliste hinzugefügt", "recipe-added-to-list": "Rezept wurde zur Einkaufsliste hinzugefügt",
"recipes-added-to-list": "Rezepte wurden zur Einkaufsliste hinzugefügt", "recipes-added-to-list": "Rezepte wurden zur Einkaufsliste hinzugefügt",
"successfully-added-to-list": "Erfolgreich zur Liste hinzugefügt",
"recipe-added-to-mealplan": "Rezept zum Essensplan hinzugefügt", "recipe-added-to-mealplan": "Rezept zum Essensplan hinzugefügt",
"failed-to-add-recipes-to-list": "Fehler beim Hinzufügen des Rezepts zur Einkaufsliste", "failed-to-add-recipes-to-list": "Fehler beim Hinzufügen des Rezepts zur Einkaufsliste",
"failed-to-add-recipe-to-mealplan": "Fehler beim Hinzufügen des Rezepts zum Essensplan", "failed-to-add-recipe-to-mealplan": "Fehler beim Hinzufügen des Rezepts zum Essensplan",
"failed-to-add-to-list": "Fehler beim Hinzufügen zur Liste",
"yield": "Portionsangabe", "yield": "Portionsangabe",
"quantity": "Menge", "quantity": "Menge",
"choose-unit": "Einheit wählen", "choose-unit": "Einheit wählen",

View File

@@ -258,6 +258,7 @@
}, },
"meal-plan": { "meal-plan": {
"create-a-new-meal-plan": "Δημιουργία νέου σχεδίου γεύματος", "create-a-new-meal-plan": "Δημιουργία νέου σχεδίου γεύματος",
"update-this-meal-plan": "Update this Meal Plan",
"dinner-this-week": "Δείπνο Αυτή Τη Εβδομάδα", "dinner-this-week": "Δείπνο Αυτή Τη Εβδομάδα",
"dinner-today": "Δείπνο Σήμερα", "dinner-today": "Δείπνο Σήμερα",
"dinner-tonight": "ΔΕΙΠΝΟ ΣΗΜΕΡΑ", "dinner-tonight": "ΔΕΙΠΝΟ ΣΗΜΕΡΑ",
@@ -472,9 +473,11 @@
"add-to-timeline": "Add to Timeline", "add-to-timeline": "Add to Timeline",
"recipe-added-to-list": "Recipe added to list", "recipe-added-to-list": "Recipe added to list",
"recipes-added-to-list": "Recipes added to list", "recipes-added-to-list": "Recipes added to list",
"successfully-added-to-list": "Successfully added to list",
"recipe-added-to-mealplan": "Recipe added to mealplan", "recipe-added-to-mealplan": "Recipe added to mealplan",
"failed-to-add-recipes-to-list": "Failed to add recipe to list", "failed-to-add-recipes-to-list": "Failed to add recipe to list",
"failed-to-add-recipe-to-mealplan": "Failed to add recipe to mealplan", "failed-to-add-recipe-to-mealplan": "Failed to add recipe to mealplan",
"failed-to-add-to-list": "Failed to add to list",
"yield": "Yield", "yield": "Yield",
"quantity": "Quantity", "quantity": "Quantity",
"choose-unit": "Choose Unit", "choose-unit": "Choose Unit",

View File

@@ -258,6 +258,7 @@
}, },
"meal-plan": { "meal-plan": {
"create-a-new-meal-plan": "Create a New Meal Plan", "create-a-new-meal-plan": "Create a New Meal Plan",
"update-this-meal-plan": "Update this Meal Plan",
"dinner-this-week": "Dinner This Week", "dinner-this-week": "Dinner This Week",
"dinner-today": "Dinner Today", "dinner-today": "Dinner Today",
"dinner-tonight": "DINNER TONIGHT", "dinner-tonight": "DINNER TONIGHT",
@@ -472,9 +473,11 @@
"add-to-timeline": "Add to Timeline", "add-to-timeline": "Add to Timeline",
"recipe-added-to-list": "Recipe added to list", "recipe-added-to-list": "Recipe added to list",
"recipes-added-to-list": "Recipes added to list", "recipes-added-to-list": "Recipes added to list",
"successfully-added-to-list": "Successfully added to list",
"recipe-added-to-mealplan": "Recipe added to mealplan", "recipe-added-to-mealplan": "Recipe added to mealplan",
"failed-to-add-recipes-to-list": "Failed to add recipe to list", "failed-to-add-recipes-to-list": "Failed to add recipe to list",
"failed-to-add-recipe-to-mealplan": "Failed to add recipe to mealplan", "failed-to-add-recipe-to-mealplan": "Failed to add recipe to mealplan",
"failed-to-add-to-list": "Failed to add to list",
"yield": "Yield", "yield": "Yield",
"quantity": "Quantity", "quantity": "Quantity",
"choose-unit": "Choose Unit", "choose-unit": "Choose Unit",

View File

@@ -258,6 +258,7 @@
}, },
"meal-plan": { "meal-plan": {
"create-a-new-meal-plan": "Create a New Meal Plan", "create-a-new-meal-plan": "Create a New Meal Plan",
"update-this-meal-plan": "Update this Meal Plan",
"dinner-this-week": "Dinner This Week", "dinner-this-week": "Dinner This Week",
"dinner-today": "Dinner Today", "dinner-today": "Dinner Today",
"dinner-tonight": "DINNER TONIGHT", "dinner-tonight": "DINNER TONIGHT",
@@ -472,9 +473,11 @@
"add-to-timeline": "Add to Timeline", "add-to-timeline": "Add to Timeline",
"recipe-added-to-list": "Recipe added to list", "recipe-added-to-list": "Recipe added to list",
"recipes-added-to-list": "Recipes added to list", "recipes-added-to-list": "Recipes added to list",
"successfully-added-to-list": "Successfully added to list",
"recipe-added-to-mealplan": "Recipe added to mealplan", "recipe-added-to-mealplan": "Recipe added to mealplan",
"failed-to-add-recipes-to-list": "Failed to add recipe to list", "failed-to-add-recipes-to-list": "Failed to add recipe to list",
"failed-to-add-recipe-to-mealplan": "Failed to add recipe to mealplan", "failed-to-add-recipe-to-mealplan": "Failed to add recipe to mealplan",
"failed-to-add-to-list": "Failed to add to list",
"yield": "Yield", "yield": "Yield",
"quantity": "Quantity", "quantity": "Quantity",
"choose-unit": "Choose Unit", "choose-unit": "Choose Unit",

View File

@@ -77,7 +77,7 @@
"tag-events": "Eventos de etiqueta", "tag-events": "Eventos de etiqueta",
"category-events": "Eventos de Categoría", "category-events": "Eventos de Categoría",
"when-a-new-user-joins-your-group": "Cuando un nuevo usuario se une a tu grupo", "when-a-new-user-joins-your-group": "Cuando un nuevo usuario se une a tu grupo",
"recipe-events": "Recipe Events" "recipe-events": "Eventos de receta"
}, },
"general": { "general": {
"cancel": "Cancelar", "cancel": "Cancelar",
@@ -114,10 +114,10 @@
"json": "JSON", "json": "JSON",
"keyword": "Etiqueta", "keyword": "Etiqueta",
"link-copied": "Enlace copiado", "link-copied": "Enlace copiado",
"loading": "Loading", "loading": "Cargando",
"loading-events": "Cargando Eventos", "loading-events": "Cargando Eventos",
"loading-recipe": "Loading recipe...", "loading-recipe": "Cargando receta...",
"loading-ocr-data": "Loading OCR data...", "loading-ocr-data": "Cargando datos OCR...",
"loading-recipes": "Cargando recetas", "loading-recipes": "Cargando recetas",
"message": "Mensaje", "message": "Mensaje",
"monday": "Lunes", "monday": "Lunes",
@@ -198,8 +198,8 @@
"refresh": "Actualizar", "refresh": "Actualizar",
"upload-file": "Subir Archivo", "upload-file": "Subir Archivo",
"created-on-date": "Creado el {0}", "created-on-date": "Creado el {0}",
"unsaved-changes": "You have unsaved changes. Do you want to save before leaving? Okay to save, Cancel to discard changes.", "unsaved-changes": "Tienes cambios sin guardar. ¿Quieres guardar antes de salir? Aceptar para guardar, Cancelar para descartar cambios.",
"clipboard-copy-failure": "Failed to copy to the clipboard." "clipboard-copy-failure": "No se pudo copiar al portapapeles."
}, },
"group": { "group": {
"are-you-sure-you-want-to-delete-the-group": "Por favor, confirma que deseas eliminar <b>{groupName}<b/>", "are-you-sure-you-want-to-delete-the-group": "Por favor, confirma que deseas eliminar <b>{groupName}<b/>",
@@ -214,7 +214,7 @@
"group-id-with-value": "ID del Grupo: {groupID}", "group-id-with-value": "ID del Grupo: {groupID}",
"group-name": "Nombre del Grupo", "group-name": "Nombre del Grupo",
"group-not-found": "Grupo no encontrado", "group-not-found": "Grupo no encontrado",
"group-token": "Group Token", "group-token": "Token del grupo",
"group-with-value": "Grupo: {groupID}", "group-with-value": "Grupo: {groupID}",
"groups": "Grupos", "groups": "Grupos",
"manage-groups": "Administrar grupos", "manage-groups": "Administrar grupos",
@@ -250,7 +250,7 @@
"general-preferences": "Opciones generales", "general-preferences": "Opciones generales",
"group-recipe-preferences": "Preferencias de grupo de las recetas", "group-recipe-preferences": "Preferencias de grupo de las recetas",
"report": "Informe", "report": "Informe",
"report-with-id": "Report ID: {id}", "report-with-id": "ID de informe: {id}",
"group-management": "Administración de grupos", "group-management": "Administración de grupos",
"admin-group-management": "Gestión del grupo administrador", "admin-group-management": "Gestión del grupo administrador",
"admin-group-management-text": "Los cambios en este grupo se reflejarán inmediatamente.", "admin-group-management-text": "Los cambios en este grupo se reflejarán inmediatamente.",
@@ -258,6 +258,7 @@
}, },
"meal-plan": { "meal-plan": {
"create-a-new-meal-plan": "Crear un nuevo menú", "create-a-new-meal-plan": "Crear un nuevo menú",
"update-this-meal-plan": "Actualizar este plan de comidas",
"dinner-this-week": "Cena para esta semana", "dinner-this-week": "Cena para esta semana",
"dinner-today": "Cena para hoy", "dinner-today": "Cena para hoy",
"dinner-tonight": "Cena para esta noche", "dinner-tonight": "Cena para esta noche",
@@ -472,9 +473,11 @@
"add-to-timeline": "Añadir al cronograma", "add-to-timeline": "Añadir al cronograma",
"recipe-added-to-list": "Receta añadida a la lista", "recipe-added-to-list": "Receta añadida a la lista",
"recipes-added-to-list": "Recetas añadidas a la lista", "recipes-added-to-list": "Recetas añadidas a la lista",
"successfully-added-to-list": "Añadido correctamente a la lista",
"recipe-added-to-mealplan": "Receta añadida al menú", "recipe-added-to-mealplan": "Receta añadida al menú",
"failed-to-add-recipes-to-list": "Error al añadir las recetas a la lista", "failed-to-add-recipes-to-list": "Error al añadir las recetas a la lista",
"failed-to-add-recipe-to-mealplan": "Error al añadir receta al menú", "failed-to-add-recipe-to-mealplan": "Error al añadir receta al menú",
"failed-to-add-to-list": "No se pudo agregar a la lista",
"yield": "Raciones", "yield": "Raciones",
"quantity": "Cantidad", "quantity": "Cantidad",
"choose-unit": "Elija unidad", "choose-unit": "Elija unidad",
@@ -511,11 +514,11 @@
"how-did-it-turn-out": "¿Cómo resultó esto?", "how-did-it-turn-out": "¿Cómo resultó esto?",
"user-made-this": "{user} hizo esto", "user-made-this": "{user} hizo esto",
"last-made-date": "Cocinado por última vez el {date}", "last-made-date": "Cocinado por última vez el {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": "Los extras de las recetas son una característica clave de la API de Mealie. Permiten crear pares json clave/valor personalizados dentro de una receta para acceder desde aplicaciones de terceros. Puede utilizar estas claves para almacenar información, para activar la automatización o mensajes personalizados para transmitir al dispositivo deseado.",
"message-key": "Clave de mensaje", "message-key": "Clave de mensaje",
"parse": "Analizar", "parse": "Analizar",
"attach-images-hint": "Adjuntar imágenes arrastrando y soltando en el editor", "attach-images-hint": "Adjuntar imágenes arrastrando y soltando en el editor",
"drop-image": "Drop image", "drop-image": "Soltar imagen",
"enable-ingredient-amounts-to-use-this-feature": "Habilitar la cantidad de ingredientes para usar esta característica", "enable-ingredient-amounts-to-use-this-feature": "Habilitar la cantidad de ingredientes para usar esta característica",
"recipes-with-units-or-foods-defined-cannot-be-parsed": "Las recetas con unidades o alimentos definidos no pueden ser analizadas.", "recipes-with-units-or-foods-defined-cannot-be-parsed": "Las recetas con unidades o alimentos definidos no pueden ser analizadas.",
"parse-ingredients": "Analizar ingredientes", "parse-ingredients": "Analizar ingredientes",
@@ -533,8 +536,8 @@
"new-recipe-names-must-be-unique": "El nombre de la receta debe ser único", "new-recipe-names-must-be-unique": "El nombre de la receta debe ser único",
"scrape-recipe": "Analiza receta", "scrape-recipe": "Analiza receta",
"scrape-recipe-description": "Importa una receta por URL. Proporcione la URL para el sitio que desea importar, y Mealie intentará importar la receta de ese sitio y añadirla a su colección.", "scrape-recipe-description": "Importa una receta por URL. Proporcione la URL para el sitio que desea importar, y Mealie intentará importar la receta de ese sitio y añadirla a su colección.",
"scrape-recipe-have-a-lot-of-recipes": "Have a lot of recipes you want to scrape at once?", "scrape-recipe-have-a-lot-of-recipes": "¿Tienes muchas recetas que quieres raspar a la vez?",
"scrape-recipe-suggest-bulk-importer": "Try out the bulk importer", "scrape-recipe-suggest-bulk-importer": "Prueba el importador masivo",
"import-original-keywords-as-tags": "Importar palabras clave originales como etiquetas", "import-original-keywords-as-tags": "Importar palabras clave originales como etiquetas",
"stay-in-edit-mode": "Permanecer en modo edición", "stay-in-edit-mode": "Permanecer en modo edición",
"import-from-zip": "Importar desde zip", "import-from-zip": "Importar desde zip",
@@ -543,7 +546,7 @@
"create-a-recipe-by-uploading-a-scan": "Crea una receta subiendo una escaneada.", "create-a-recipe-by-uploading-a-scan": "Crea una receta subiendo una escaneada.",
"upload-a-png-image-from-a-recipe-book": "Suba una imagen png de un libro de recetas", "upload-a-png-image-from-a-recipe-book": "Suba una imagen png de un libro de recetas",
"recipe-bulk-importer": "Importador masivo de recetas", "recipe-bulk-importer": "Importador masivo de recetas",
"recipe-bulk-importer-description": "The Bulk recipe importer allows you to import multiple recipes at once by queueing the sites on the backend and running the task in the background. This can be useful when initially migrating to Mealie, or when you want to import a large number of recipes.", "recipe-bulk-importer-description": "El importador masivo de recetas te permite importar múltiples recetas a la vez poniendo en cola los sitios en el backend y ejecutando la tarea en segundo plano. Esto puede ser útil al migrar inicialmente a Mealie, o cuando desea importar un gran número de recetas.",
"set-categories-and-tags": "Establecer categorías y etiquetas", "set-categories-and-tags": "Establecer categorías y etiquetas",
"bulk-imports": "Importación masiva", "bulk-imports": "Importación masiva",
"bulk-import-process-has-started": "El proceso de importación masiva se ha iniciado", "bulk-import-process-has-started": "El proceso de importación masiva se ha iniciado",
@@ -558,7 +561,7 @@
"upload-image": "Subir imagen", "upload-image": "Subir imagen",
"screen-awake": "Mantener la pantalla encendida", "screen-awake": "Mantener la pantalla encendida",
"remove-image": "Eliminar imagen", "remove-image": "Eliminar imagen",
"nextStep": "Next step" "nextStep": "Siguiente paso"
}, },
"search": { "search": {
"advanced-search": "Búsqueda avanzada", "advanced-search": "Búsqueda avanzada",
@@ -577,16 +580,16 @@
"search-hint": "Presione '/'", "search-hint": "Presione '/'",
"advanced": "Avanzado", "advanced": "Avanzado",
"auto-search": "Búsqueda automática", "auto-search": "Búsqueda automática",
"no-results": "No results found" "no-results": "No se encontraron resultados"
}, },
"settings": { "settings": {
"add-a-new-theme": "Añadir un nuevo tema", "add-a-new-theme": "Añadir un nuevo tema",
"admin-settings": "Opciones del adminstrador", "admin-settings": "Opciones del adminstrador",
"backup": { "backup": {
"backup-created": "Backup created successfully", "backup-created": "Copia de seguridad creada con éxito",
"backup-created-at-response-export_path": "Copia de seguridad creada en {path}", "backup-created-at-response-export_path": "Copia de seguridad creada en {path}",
"backup-deleted": "Copia de seguridad eliminada", "backup-deleted": "Copia de seguridad eliminada",
"restore-success": "Restore successful", "restore-success": "Restauración exitosa",
"backup-tag": "Etiqueta de la copia de seguridad", "backup-tag": "Etiqueta de la copia de seguridad",
"create-heading": "Crear una copia de seguridad", "create-heading": "Crear una copia de seguridad",
"delete-backup": "Eliminar copia de seguridad", "delete-backup": "Eliminar copia de seguridad",
@@ -687,21 +690,21 @@
"webhooks-caps": "WEBHOOKS", "webhooks-caps": "WEBHOOKS",
"webhooks": "Webhooks", "webhooks": "Webhooks",
"webhook-name": "Nombre del Webhook", "webhook-name": "Nombre del Webhook",
"description": "The webhooks defined below will be executed when a meal is defined for the day. At the scheduled time the webhooks will be sent with the data from the recipe that is scheduled for the day. Note that webhook execution is not exact. The webhooks are executed on a 5 minutes interval so the webhooks will be executed within 5 +/- minutes of the scheduled." "description": "Los webhooks definidos a continuación se ejecutarán cuando una comida esté definida para el día. A la hora prevista se enviarán los webhooks con los datos de la receta programada para el día. Tenga en cuenta que la ejecución de webhook no es exacta. Los webhooks se ejecutan en un intervalo de 5 minutos, por lo que los webhooks se ejecutarán en 5 minutos +/- de los programados."
}, },
"bug-report": "Informe de error", "bug-report": "Informe de error",
"bug-report-information": "Utilice esta información para informar de un error. Proporcionar detalles de su instancia a los desarrolladores es la mejor manera de resolver sus problemas rápidamente.", "bug-report-information": "Utilice esta información para informar de un error. Proporcionar detalles de su instancia a los desarrolladores es la mejor manera de resolver sus problemas rápidamente.",
"tracker": "Tracker", "tracker": "Rastreador",
"configuration": "Configuración", "configuration": "Configuración",
"docker-volume": "Volumen de Docker", "docker-volume": "Volumen de Docker",
"docker-volume-help": "Mealie requiere que los contenedores de frontend y backend compartan el mismo volumen o almacenamiento en docker. Esto asegura que el contenedor del frontend pueda acceder adecuadamente a las imágenes y los activos almacenados en el disco.", "docker-volume-help": "Mealie requiere que los contenedores de frontend y backend compartan el mismo volumen o almacenamiento en docker. Esto asegura que el contenedor del frontend pueda acceder adecuadamente a las imágenes y los activos almacenados en el disco.",
"volumes-are-misconfigured": "Volumes are misconfigured.", "volumes-are-misconfigured": "Los volúmenes están mal configurados.",
"volumes-are-configured-correctly": "Los volúmenes se configuran correctamente.", "volumes-are-configured-correctly": "Los volúmenes se configuran correctamente.",
"status-unknown-try-running-a-validation": "Estado desconocido. Intente ejecutar una validación.", "status-unknown-try-running-a-validation": "Estado desconocido. Intente ejecutar una validación.",
"validate": "Validar", "validate": "Validar",
"email-configuration-status": "Estado de la Configuración del Correo Electrónico", "email-configuration-status": "Estado de la Configuración del Correo Electrónico",
"email-configured": "Email Configured", "email-configured": "Email configurado",
"email-test-results": "Email Test Results", "email-test-results": "Resultados de la prueba de email",
"ready": "Listo", "ready": "Listo",
"not-ready": "No Listo - Comprobar variables de ambiente", "not-ready": "No Listo - Comprobar variables de ambiente",
"succeeded": "Logrado", "succeeded": "Logrado",
@@ -712,10 +715,10 @@
"mealie-is-up-to-date": "Mealie está actualizada", "mealie-is-up-to-date": "Mealie está actualizada",
"secure-site": "Sitio Seguro", "secure-site": "Sitio Seguro",
"secure-site-error-text": "Servir a través de local host o seguro con HTTPS. El portapapeles y API adicionales del navegador pueden no funcionar.", "secure-site-error-text": "Servir a través de local host o seguro con HTTPS. El portapapeles y API adicionales del navegador pueden no funcionar.",
"secure-site-success-text": "Site is accessed by localhost or https", "secure-site-success-text": "Se accede al sitio por localhost o https",
"server-side-base-url": "Server Side Base URL", "server-side-base-url": "URL base del servidor",
"server-side-base-url-error-text": "`BASE_URL` is still the default value on API Server. This will cause issues with notifications links generated on the server for emails, etc.", "server-side-base-url-error-text": "`BASE_URL` sigue siendo el valor por defecto en el servidor API. Esto causará problemas con las notificaciones generadas en el servidor de correos electrónicos, etc.",
"server-side-base-url-success-text": "Server Side URL does not match the default", "server-side-base-url-success-text": "La URL del servidor no coincide con la predeterminada",
"ldap-ready": "LDAP Listo", "ldap-ready": "LDAP Listo",
"ldap-ready-error-text": "No todos los valores LDAP están configurados. Esto puede ignorarse si no está usando autenticación LDAP.", "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.", "ldap-ready-success-text": "Las variables LDAP requeridas están todas definidas.",
@@ -745,7 +748,7 @@
"reorder-labels": "Reordenar etiquetas", "reorder-labels": "Reordenar etiquetas",
"uncheck-all-items": "Desmarcar todos los elementos", "uncheck-all-items": "Desmarcar todos los elementos",
"check-all-items": "Marcar todos los elementos", "check-all-items": "Marcar todos los elementos",
"linked-recipes-count": "No Linked Recipes|One Linked Recipe|{count} Linked Recipes", "linked-recipes-count": "No hay recetas vinculadas|Una receta vinculada|{count} recetas vinculadas",
"items-checked-count": "Ningún elemento comprobado|Un elemento comprobado|{count} elementos comprobados", "items-checked-count": "Ningún elemento comprobado|Un elemento comprobado|{count} elementos comprobados",
"no-label": "Sin Etiqueta", "no-label": "Sin Etiqueta",
"completed-on": "Completado el {date}" "completed-on": "Completado el {date}"
@@ -838,7 +841,7 @@
"password-updated": "Contraseña actualizada", "password-updated": "Contraseña actualizada",
"password": "Contraseña", "password": "Contraseña",
"password-strength": "Fortaleza de la contraseña: {strength}", "password-strength": "Fortaleza de la contraseña: {strength}",
"please-enter-password": "Please enter your new password.", "please-enter-password": "Por favor ingrese su nueva contraseña.",
"register": "Registrarse", "register": "Registrarse",
"reset-password": "Restablecer contraseña", "reset-password": "Restablecer contraseña",
"sign-in": "Iniciar sesión", "sign-in": "Iniciar sesión",
@@ -859,7 +862,7 @@
"username": "Usuario", "username": "Usuario",
"users-header": "USUARIOS", "users-header": "USUARIOS",
"users": "Usuarios", "users": "Usuarios",
"user-not-found": "User not found", "user-not-found": "Usuario no encontrado",
"webhook-time": "Tiempo de Webhook", "webhook-time": "Tiempo de Webhook",
"webhooks-enabled": "Webhooks habilitados", "webhooks-enabled": "Webhooks habilitados",
"you-are-not-allowed-to-create-a-user": "No tiene permisos para crear usuarios", "you-are-not-allowed-to-create-a-user": "No tiene permisos para crear usuarios",
@@ -882,7 +885,7 @@
"user-management": "Gestión de Usuarios", "user-management": "Gestión de Usuarios",
"reset-locked-users": "Restablecer usuarios bloqueados", "reset-locked-users": "Restablecer usuarios bloqueados",
"admin-user-creation": "Creación de Usuario Administrador", "admin-user-creation": "Creación de Usuario Administrador",
"admin-user-management": "Admin User Management", "admin-user-management": "Administración de usuario de admin",
"user-details": "Detalles de usuario", "user-details": "Detalles de usuario",
"user-name": "Nombre de usuario", "user-name": "Nombre de usuario",
"authentication-method": "Método de autenticación", "authentication-method": "Método de autenticación",
@@ -893,11 +896,11 @@
"user-can-manage-group": "El usuario puede administrar el grupo", "user-can-manage-group": "El usuario puede administrar el grupo",
"user-can-organize-group-data": "El usuario puede organizar los datos del grupo", "user-can-organize-group-data": "El usuario puede organizar los datos del grupo",
"enable-advanced-features": "Habilitar Características Avanzadas", "enable-advanced-features": "Habilitar Características Avanzadas",
"it-looks-like-this-is-your-first-time-logging-in": "It looks like this is your first time logging in.", "it-looks-like-this-is-your-first-time-logging-in": "Parece que esta es la primera vez que inicias sesión.",
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Don't want to see this anymore? Be sure to change your email in your user settings!", "dont-want-to-see-this-anymore-be-sure-to-change-your-email": "¿No quieres ver esto más? ¡Asegúrate de cambiar tu correo electrónico en tu configuración de usuario!",
"forgot-password": "Forgot Password", "forgot-password": "Olvidé mi contraseña",
"forgot-password-text": "Please enter your email address and we will send you a link to reset your password.", "forgot-password-text": "Por favor, introduce tu correo electrónico y te enviaremos un enlace para restablecer tu contraseña.",
"changes-reflected-immediately": "Changes to this user will be reflected immediately." "changes-reflected-immediately": "Los cambios en este grupo se reflejarán inmediatamente."
}, },
"language-dialog": { "language-dialog": {
"translated": "traducido", "translated": "traducido",
@@ -924,19 +927,19 @@
}, },
"units": { "units": {
"seed-dialog-text": "Añade a la base de datos unidades comunes basadas en su idioma local.", "seed-dialog-text": "Añade a la base de datos unidades comunes basadas en su idioma local.",
"combine-unit-description": "Combining the selected units will merge the Source Unit and Target Unit into a single unit. The {source-unit-will-be-deleted} and all of the references to the Source Unit will be updated to point to the Target Unit.", "combine-unit-description": "Combinar los alimentos seleccionados fusionará el alimento origen y destinatario en un solo alimento. El alimento {source-unit-will-be-deleted} será eliminado y todas las referencias a él serán actualizadas para apuntar al nuevo alimento.",
"combine-unit": "Unidad de Combinación", "combine-unit": "Unidad de Combinación",
"source-unit": "Source Unit", "source-unit": "Unidad de origen",
"target-unit": "Target Unit", "target-unit": "Unidad de objetivo",
"merging-unit-into-unit": "Merging {0} into {1}", "merging-unit-into-unit": "Combinando {0} con {1}",
"create-unit": "Create Unit", "create-unit": "Crear unidad",
"abbreviation": "Abreviatura", "abbreviation": "Abreviatura",
"plural-abbreviation": "Abreviatura en plural", "plural-abbreviation": "Abreviatura en plural",
"description": "Descripción", "description": "Descripción",
"display-as-fraction": "Display as Fraction", "display-as-fraction": "Mostrar como fracción",
"use-abbreviation": "Usar Abreviaturas", "use-abbreviation": "Usar Abreviaturas",
"edit-unit": "Editar unidad", "edit-unit": "Editar unidad",
"unit-data": "Unit Data", "unit-data": "Datos de la unidad",
"use-abbv": "Usar Abr.", "use-abbv": "Usar Abr.",
"fraction": "Fracción", "fraction": "Fracción",
"example-unit-singular": "ej: Cucharada", "example-unit-singular": "ej: Cucharada",
@@ -953,10 +956,10 @@
"recipes": { "recipes": {
"purge-exports": "Limpiar exportaciones", "purge-exports": "Limpiar exportaciones",
"are-you-sure-you-want-to-delete-all-export-data": "¿Está seguro de que desea eliminar todos sus datos de exportación?", "are-you-sure-you-want-to-delete-all-export-data": "¿Está seguro de que desea eliminar todos sus datos de exportación?",
"confirm-delete-recipes": "Are you sure you want to delete the following recipes? This action cannot be undone.", "confirm-delete-recipes": "¿Estás seguro de que quieres eliminar las siguientes recetas? Esta acción no podrá deshacerse.",
"the-following-recipes-selected-length-will-be-exported": "The following recipes ({0}) will be exported.", "the-following-recipes-selected-length-will-be-exported": "Las siguientes recetas ({0}) serán exportadas.",
"settings-chosen-explanation": "Settings chosen here, excluding the locked option, will be applied to all selected recipes.", "settings-chosen-explanation": "Los ajustes seleccionados aquí, excluyendo la opción bloqueada, se aplicarán a todas las recetas seleccionadas.",
"selected-length-recipe-s-settings-will-be-updated": "{count} recipe(s) settings will be updated.", "selected-length-recipe-s-settings-will-be-updated": "Se actualizarán los ajustes de {count} receta(s).",
"recipe-data": "Datos de la receta", "recipe-data": "Datos de la receta",
"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-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", "recipe-columns": "Recipe Columns",
@@ -1117,14 +1120,14 @@
"ingredients-natural-language-processor-explanation-2": "It's not perfect, but it yields great results in general and is a good starting point for manually parsing ingredients into individual fields. Alternatively, you can also use the \"Brute\" processor that uses a pattern matching technique to identify ingredients.", "ingredients-natural-language-processor-explanation-2": "It's not perfect, but it yields great results in general and is a good starting point for manually parsing ingredients into individual fields. Alternatively, you can also use the \"Brute\" processor that uses a pattern matching technique to identify ingredients.",
"nlp": "NLP", "nlp": "NLP",
"brute": "Brute", "brute": "Brute",
"show-individual-confidence": "Show individual confidence", "show-individual-confidence": "Mostrar confianza individual",
"ingredient-text": "Ingredient Text", "ingredient-text": "Texto del ingrediente",
"average-confident": "{0} Confident", "average-confident": "{0} Confianza",
"try-an-example": "Try an example", "try-an-example": "Prueba un ejemplo",
"parser": "Procesador", "parser": "Procesador",
"background-tasks": "Tareas en Segundo Plano", "background-tasks": "Tareas en Segundo Plano",
"background-tasks-description": "Here you can view all the running background tasks and their status", "background-tasks-description": "Aquí puedes ver todas las tareas de fondo en ejecución y su estado",
"no-logs-found": "No Logs Found", "no-logs-found": "No se encontraron registros",
"tasks": "Tareas" "tasks": "Tareas"
}, },
"profile": { "profile": {
@@ -1134,7 +1137,7 @@
"get-public-link": "Obtener enlace público", "get-public-link": "Obtener enlace público",
"account-summary": "Información de la cuenta", "account-summary": "Información de la cuenta",
"account-summary-description": "Este es un resumen de la información de tu grupo", "account-summary-description": "Este es un resumen de la información de tu grupo",
"group-statistics": "Group Statistics", "group-statistics": "Estadísticas del grupo",
"group-statistics-description": "Your Group Statistics provide some insight how you're using Mealie.", "group-statistics-description": "Your Group Statistics provide some insight how you're using Mealie.",
"storage-capacity": "Capacidad de almacenamiento", "storage-capacity": "Capacidad de almacenamiento",
"storage-capacity-description": "Your storage capacity is a calculation of the images and assets you have uploaded.", "storage-capacity-description": "Your storage capacity is a calculation of the images and assets you have uploaded.",

View File

@@ -258,6 +258,7 @@
}, },
"meal-plan": { "meal-plan": {
"create-a-new-meal-plan": "Luo uusi ateriasuunnitelma", "create-a-new-meal-plan": "Luo uusi ateriasuunnitelma",
"update-this-meal-plan": "Päivitä tämä ateriasuunnitelma",
"dinner-this-week": "Viikon päivällinen", "dinner-this-week": "Viikon päivällinen",
"dinner-today": "Päivällinen tänään", "dinner-today": "Päivällinen tänään",
"dinner-tonight": "PÄIVÄLLINEN TÄNÄÄN", "dinner-tonight": "PÄIVÄLLINEN TÄNÄÄN",
@@ -472,9 +473,11 @@
"add-to-timeline": "Lisää aikajanalle", "add-to-timeline": "Lisää aikajanalle",
"recipe-added-to-list": "Resepti lisätty listalle", "recipe-added-to-list": "Resepti lisätty listalle",
"recipes-added-to-list": "Recipes added to list", "recipes-added-to-list": "Recipes added to list",
"successfully-added-to-list": "Successfully added to list",
"recipe-added-to-mealplan": "Resepti lisätty ateriasuunnitelmaan", "recipe-added-to-mealplan": "Resepti lisätty ateriasuunnitelmaan",
"failed-to-add-recipes-to-list": "Failed to add recipe to list", "failed-to-add-recipes-to-list": "Failed to add recipe to list",
"failed-to-add-recipe-to-mealplan": "Reseptiä ei voitu lisätä ateriasuunnitelmaan", "failed-to-add-recipe-to-mealplan": "Reseptiä ei voitu lisätä ateriasuunnitelmaan",
"failed-to-add-to-list": "Failed to add to list",
"yield": "Sato", "yield": "Sato",
"quantity": "Määrä", "quantity": "Määrä",
"choose-unit": "Valitse Yksikkö", "choose-unit": "Valitse Yksikkö",

View File

@@ -258,6 +258,7 @@
}, },
"meal-plan": { "meal-plan": {
"create-a-new-meal-plan": "Créer un nouveau menu", "create-a-new-meal-plan": "Créer un nouveau menu",
"update-this-meal-plan": "Mettre à jour ce menu",
"dinner-this-week": "Menu de la semaine", "dinner-this-week": "Menu de la semaine",
"dinner-today": "Menu du jour", "dinner-today": "Menu du jour",
"dinner-tonight": "AU MENU CE SOIR", "dinner-tonight": "AU MENU CE SOIR",
@@ -472,9 +473,11 @@
"add-to-timeline": "Ajouter à lhistorique", "add-to-timeline": "Ajouter à lhistorique",
"recipe-added-to-list": "Recette ajoutée à la liste", "recipe-added-to-list": "Recette ajoutée à la liste",
"recipes-added-to-list": "Recettes ajoutées à la liste", "recipes-added-to-list": "Recettes ajoutées à la liste",
"successfully-added-to-list": "Ajouté à la liste",
"recipe-added-to-mealplan": "Recette ajoutée à la planification des repas", "recipe-added-to-mealplan": "Recette ajoutée à la planification des repas",
"failed-to-add-recipes-to-list": "Impossible dajouter la recette à la liste", "failed-to-add-recipes-to-list": "Impossible dajouter la recette à la liste",
"failed-to-add-recipe-to-mealplan": "Échec de l'ajout de la recette à la planification des repas", "failed-to-add-recipe-to-mealplan": "Échec de l'ajout de la recette à la planification des repas",
"failed-to-add-to-list": "Ajout dans la liste en échec",
"yield": "Rendement", "yield": "Rendement",
"quantity": "Quantité", "quantity": "Quantité",
"choose-unit": "Choisir une unité", "choose-unit": "Choisir une unité",

View File

@@ -258,6 +258,7 @@
}, },
"meal-plan": { "meal-plan": {
"create-a-new-meal-plan": "Créer un nouveau menu", "create-a-new-meal-plan": "Créer un nouveau menu",
"update-this-meal-plan": "Mettre à jour ce menu",
"dinner-this-week": "Au menu cette semaine", "dinner-this-week": "Au menu cette semaine",
"dinner-today": "Menu du jour", "dinner-today": "Menu du jour",
"dinner-tonight": "AU MENU CE SOIR", "dinner-tonight": "AU MENU CE SOIR",
@@ -472,9 +473,11 @@
"add-to-timeline": "Ajouter à lhistorique", "add-to-timeline": "Ajouter à lhistorique",
"recipe-added-to-list": "Recette ajoutée à la liste", "recipe-added-to-list": "Recette ajoutée à la liste",
"recipes-added-to-list": "Recettes ajoutées à la liste", "recipes-added-to-list": "Recettes ajoutées à la liste",
"successfully-added-to-list": "Ajouté à la liste",
"recipe-added-to-mealplan": "Recette ajoutée au menu", "recipe-added-to-mealplan": "Recette ajoutée au menu",
"failed-to-add-recipes-to-list": "Impossible dajouter la recette à la liste", "failed-to-add-recipes-to-list": "Impossible dajouter la recette à la liste",
"failed-to-add-recipe-to-mealplan": "Échec de lajout de la recette au menu", "failed-to-add-recipe-to-mealplan": "Échec de lajout de la recette au menu",
"failed-to-add-to-list": "Ajout dans la liste en échec",
"yield": "Nombre de portions", "yield": "Nombre de portions",
"quantity": "Quantité", "quantity": "Quantité",
"choose-unit": "Choisissez une unité", "choose-unit": "Choisissez une unité",

View File

@@ -1,61 +1,61 @@
{ {
"about": { "about": {
"about": "About", "about": "Acerca de",
"about-mealie": "About Mealie", "about-mealie": "Acerca de Mealie",
"api-docs": "API Docs", "api-docs": "Documentación da API",
"api-port": "API Port", "api-port": "Porto da API",
"application-mode": "Application Mode", "application-mode": "Modo da Aplicación",
"database-type": "Database Type", "database-type": "Tipo de base de datos",
"database-url": "Database URL", "database-url": "URL da base de datos",
"default-group": "Default Group", "default-group": "Grupo por defecto",
"demo": "Demo", "demo": "Demostración",
"demo-status": "Demo Status", "demo-status": "Estado da demostración",
"development": "Development", "development": "Desenvolvemento",
"docs": "Docs", "docs": "Documentación",
"download-log": "Download Log", "download-log": "Descargar rexistro",
"download-recipe-json": "Last Scraped JSON", "download-recipe-json": "Último JSON raspado",
"github": "Github", "github": "GitHub",
"log-lines": "Log Lines", "log-lines": "Liñas de rexistro",
"not-demo": "Not Demo", "not-demo": "Non demostración",
"portfolio": "Portfolio", "portfolio": "Portafolio",
"production": "Production", "production": "Producn",
"support": "Support", "support": "Soporte",
"version": "Version", "version": "Versión",
"unknown-version": "unknown", "unknown-version": "descoñecido",
"sponsor": "Sponsor" "sponsor": "Patrocinador"
}, },
"asset": { "asset": {
"assets": "Assets", "assets": "Activos",
"code": "Code", "code": "Código",
"file": "File", "file": "Ficheiro",
"image": "Image", "image": "Imaxe",
"new-asset": "New Asset", "new-asset": "Novo documento",
"pdf": "PDF", "pdf": "PDF",
"recipe": "Recipe", "recipe": "Receita",
"show-assets": "Show Assets", "show-assets": "Amosar documentos",
"error-submitting-form": "Error Submitting Form" "error-submitting-form": "Erro ao enviar formulario"
}, },
"category": { "category": {
"categories": "Categories", "categories": "Categorías",
"category-created": "Category created", "category-created": "Categoría creada",
"category-creation-failed": "Category creation failed", "category-creation-failed": "Fallou a creación da categoría",
"category-deleted": "Category Deleted", "category-deleted": "Categoría eliminada",
"category-deletion-failed": "Category deletion failed", "category-deletion-failed": "Fallou a eliminación da categoría",
"category-filter": "Category Filter", "category-filter": "Filtro de categoría",
"category-update-failed": "Category update failed", "category-update-failed": "Fallou a actualización da categoría",
"category-updated": "Category updated", "category-updated": "Categoría actualizada",
"uncategorized-count": "Uncategorized {count}", "uncategorized-count": "Sen categorizar {count}",
"create-a-category": "Create a Category", "create-a-category": "Crear unha categoría",
"category-name": "Category Name", "category-name": "Nome da categoría",
"category": "Category" "category": "Categoría"
}, },
"events": { "events": {
"apprise-url": "Apprise URL", "apprise-url": "URL de avisos",
"database": "Database", "database": "Base de datos",
"delete-event": "Delete Event", "delete-event": "Eliminar evento",
"event-delete-confirmation": "Are you sure you want to delete this event?", "event-delete-confirmation": "Estás seguro de que queres eliminar este evento?",
"event-deleted": "Event Deleted", "event-deleted": "Evento eliminado",
"event-updated": "Event Updated", "event-updated": "Evento actualizado",
"new-notification-form-description": "Mealie uses the Apprise library to generate notifications. They offer many options for services to use for notifications. Refer to their wiki for a comprehensive guide on how to create the URL for your service. If available, selecting the type of your notification may include extra features.", "new-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!", "new-version": "New version available!",
"notification": "Notification", "notification": "Notification",
@@ -108,56 +108,56 @@
"general": "General", "general": "General",
"get": "Get", "get": "Get",
"home": "Home", "home": "Home",
"image": "Image", "image": "Imaxe",
"image-upload-failed": "Image upload failed", "image-upload-failed": "Fallou a subida da imaxe",
"import": "Import", "import": "Importar",
"json": "JSON", "json": "JSON",
"keyword": "Keyword", "keyword": "Palabra chave",
"link-copied": "Link Copied", "link-copied": "Enlace copiado",
"loading": "Loading", "loading": "Cargando",
"loading-events": "Loading Events", "loading-events": "Cargando eventos",
"loading-recipe": "Loading recipe...", "loading-recipe": "Cargando receita...",
"loading-ocr-data": "Loading OCR data...", "loading-ocr-data": "Cargando información de OCR...",
"loading-recipes": "Loading Recipes", "loading-recipes": "Cargando receitas",
"message": "Message", "message": "Mensaxe",
"monday": "Monday", "monday": "Luns",
"name": "Name", "name": "Nome",
"new": "New", "new": "Nova",
"never": "Never", "never": "Nunca",
"no": "No", "no": "Non",
"no-recipe-found": "No Recipe Found", "no-recipe-found": "Non se atopou ningunha receita",
"ok": "OK", "ok": "OK",
"options": "Options:", "options": "Opcións:",
"plural-name": "Plural Name", "plural-name": "Nome plural",
"print": "Print", "print": "Imprimir",
"print-preferences": "Print Preferences", "print-preferences": "Preferencias de impresión",
"random": "Random", "random": "Ao chou",
"rating": "Rating", "rating": "Puntuación",
"recent": "Recent", "recent": "Recentes",
"recipe": "Recipe", "recipe": "Receita",
"recipes": "Recipes", "recipes": "Receitas",
"rename-object": "Rename {0}", "rename-object": "Renomear {0}",
"reset": "Reset", "reset": "Restablecer",
"saturday": "Saturday", "saturday": "Sábado",
"save": "Save", "save": "Gardar",
"settings": "Settings", "settings": "Axustes",
"share": "Share", "share": "Compartir",
"shuffle": "Shuffle", "shuffle": "Barallar",
"sort": "Sort", "sort": "Ordenar",
"sort-alphabetically": "Alphabetical", "sort-alphabetically": "Alfabético",
"status": "Status", "status": "Estado",
"subject": "Subject", "subject": "Asunto",
"submit": "Submit", "submit": "Enviar",
"success-count": "Success: {count}", "success-count": "Éxito: {count}",
"sunday": "Sunday", "sunday": "Domingo",
"templates": "Templates:", "templates": "Modelos:",
"test": "Test", "test": "Probar",
"themes": "Themes", "themes": "Temas",
"thursday": "Thursday", "thursday": "Xoves",
"token": "Token", "token": "Identificador",
"tuesday": "Tuesday", "tuesday": "Martes",
"type": "Type", "type": "Tipo",
"update": "Update", "update": "Actualizar",
"updated": "Updated", "updated": "Updated",
"upload": "Upload", "upload": "Upload",
"url": "URL", "url": "URL",
@@ -258,6 +258,7 @@
}, },
"meal-plan": { "meal-plan": {
"create-a-new-meal-plan": "Create a New Meal Plan", "create-a-new-meal-plan": "Create a New Meal Plan",
"update-this-meal-plan": "Update this Meal Plan",
"dinner-this-week": "Dinner This Week", "dinner-this-week": "Dinner This Week",
"dinner-today": "Dinner Today", "dinner-today": "Dinner Today",
"dinner-tonight": "DINNER TONIGHT", "dinner-tonight": "DINNER TONIGHT",
@@ -472,9 +473,11 @@
"add-to-timeline": "Add to Timeline", "add-to-timeline": "Add to Timeline",
"recipe-added-to-list": "Recipe added to list", "recipe-added-to-list": "Recipe added to list",
"recipes-added-to-list": "Recipes added to list", "recipes-added-to-list": "Recipes added to list",
"successfully-added-to-list": "Successfully added to list",
"recipe-added-to-mealplan": "Recipe added to mealplan", "recipe-added-to-mealplan": "Recipe added to mealplan",
"failed-to-add-recipes-to-list": "Failed to add recipe to list", "failed-to-add-recipes-to-list": "Failed to add recipe to list",
"failed-to-add-recipe-to-mealplan": "Failed to add recipe to mealplan", "failed-to-add-recipe-to-mealplan": "Failed to add recipe to mealplan",
"failed-to-add-to-list": "Failed to add to list",
"yield": "Yield", "yield": "Yield",
"quantity": "Quantity", "quantity": "Quantity",
"choose-unit": "Choose Unit", "choose-unit": "Choose Unit",

View File

@@ -258,6 +258,7 @@
}, },
"meal-plan": { "meal-plan": {
"create-a-new-meal-plan": "יצירת תכנית ארוחות חדשה", "create-a-new-meal-plan": "יצירת תכנית ארוחות חדשה",
"update-this-meal-plan": "Update this Meal Plan",
"dinner-this-week": "ארוחות ערב השבוע", "dinner-this-week": "ארוחות ערב השבוע",
"dinner-today": "ארוחת ערב היום", "dinner-today": "ארוחת ערב היום",
"dinner-tonight": "ארוחת ערב היום", "dinner-tonight": "ארוחת ערב היום",
@@ -472,9 +473,11 @@
"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",
"recipe-added-to-mealplan": "מתכון נוסף לתכנון ארוחות", "recipe-added-to-mealplan": "מתכון נוסף לתכנון ארוחות",
"failed-to-add-recipes-to-list": "כשלון בהוספת מתכון לרשימה", "failed-to-add-recipes-to-list": "כשלון בהוספת מתכון לרשימה",
"failed-to-add-recipe-to-mealplan": "הוספת מתכון לתכנון ארוחות נכשלה", "failed-to-add-recipe-to-mealplan": "הוספת מתכון לתכנון ארוחות נכשלה",
"failed-to-add-to-list": "Failed to add to list",
"yield": "תשואה", "yield": "תשואה",
"quantity": "כמות", "quantity": "כמות",
"choose-unit": "בחירת יחידת מידה", "choose-unit": "בחירת יחידת מידה",

View File

@@ -258,6 +258,7 @@
}, },
"meal-plan": { "meal-plan": {
"create-a-new-meal-plan": "Kreirajte Novi Plan Obroka", "create-a-new-meal-plan": "Kreirajte Novi Plan Obroka",
"update-this-meal-plan": "Update this Meal Plan",
"dinner-this-week": "Večera Ove Sedmice", "dinner-this-week": "Večera Ove Sedmice",
"dinner-today": "Večera Danas", "dinner-today": "Večera Danas",
"dinner-tonight": "VEČERA NOĆAS", "dinner-tonight": "VEČERA NOĆAS",
@@ -472,9 +473,11 @@
"add-to-timeline": "Add to Timeline", "add-to-timeline": "Add to Timeline",
"recipe-added-to-list": "Recept je dodan na popis", "recipe-added-to-list": "Recept je dodan na popis",
"recipes-added-to-list": "Recipes added to list", "recipes-added-to-list": "Recipes added to list",
"successfully-added-to-list": "Successfully added to list",
"recipe-added-to-mealplan": "Recept je dodan u Plan", "recipe-added-to-mealplan": "Recept je dodan u Plan",
"failed-to-add-recipes-to-list": "Failed to add recipe to list", "failed-to-add-recipes-to-list": "Failed to add recipe to list",
"failed-to-add-recipe-to-mealplan": "Nije uspjelo dodavanje recepta u plan obroka", "failed-to-add-recipe-to-mealplan": "Nije uspjelo dodavanje recepta u plan obroka",
"failed-to-add-to-list": "Failed to add to list",
"yield": "Konačna Količina", "yield": "Konačna Količina",
"quantity": "Količina", "quantity": "Količina",
"choose-unit": "Odaberi Jedinicu", "choose-unit": "Odaberi Jedinicu",

View File

@@ -56,7 +56,7 @@
"event-delete-confirmation": "Biztosan törölni szeretné ezt az eseményt?", "event-delete-confirmation": "Biztosan törölni szeretné ezt az eseményt?",
"event-deleted": "Esemény törölve", "event-deleted": "Esemény törölve",
"event-updated": "Esemény Frissítve", "event-updated": "Esemény Frissítve",
"new-notification-form-description": "A Mealie az Apprise könyvtárat használja az értesítésekhez. Számos lehetőséget kínál különbőző értesítési szolgáltatásokhoz. Nézd meg a wiki oldalukon, hogy kell URL-t létrehozni az általad használt szolgáltatáshoz. Az értesítés tipusának kiválasztásával egyéb beállítási lehetőségek jelenhetnek meg.", "new-notification-form-description": "A Mealie az Apprise könyvtárat használja az értesítésekhez. Számos lehetőséget kínál különböző értesítési szolgáltatásokhoz. Nézd meg a wiki oldalukon, hogy kell URL-t létrehozni az általad használt szolgáltatáshoz. Az értesítés típusának kiválasztásával egyéb beállítási lehetőségek jelenhetnek meg.",
"new-version": "Új verzió elérhető!", "new-version": "Új verzió elérhető!",
"notification": "Értesítések", "notification": "Értesítések",
"refresh": "Frissítés", "refresh": "Frissítés",
@@ -258,6 +258,7 @@
}, },
"meal-plan": { "meal-plan": {
"create-a-new-meal-plan": "Menüterv létrehozása", "create-a-new-meal-plan": "Menüterv létrehozása",
"update-this-meal-plan": "Frissítsd ezt a Menütervet",
"dinner-this-week": "Vacsora ezen a héten", "dinner-this-week": "Vacsora ezen a héten",
"dinner-today": "Vacsora ma", "dinner-today": "Vacsora ma",
"dinner-tonight": "Vacsora ma", "dinner-tonight": "Vacsora ma",
@@ -472,9 +473,11 @@
"add-to-timeline": "Hozzáadás idővonalhoz", "add-to-timeline": "Hozzáadás idővonalhoz",
"recipe-added-to-list": "Recept hozzáadva listához", "recipe-added-to-list": "Recept hozzáadva listához",
"recipes-added-to-list": "Recept hozzáadva listához", "recipes-added-to-list": "Recept hozzáadva listához",
"successfully-added-to-list": "Sikeresen hozzáadva a listához",
"recipe-added-to-mealplan": "Recept hozzáadva menütervhez", "recipe-added-to-mealplan": "Recept hozzáadva menütervhez",
"failed-to-add-recipes-to-list": "Nem sikerült hozzáadni a receptet a listához", "failed-to-add-recipes-to-list": "Nem sikerült hozzáadni a receptet a listához",
"failed-to-add-recipe-to-mealplan": "Nem sikerült hozzáadni a receptet a menütervhez", "failed-to-add-recipe-to-mealplan": "Nem sikerült hozzáadni a receptet a menütervhez",
"failed-to-add-to-list": "Nem sikerült hozzáadni a listához",
"yield": "Adag", "yield": "Adag",
"quantity": "Mennyiség", "quantity": "Mennyiség",
"choose-unit": "Válasszon mennyiségi egységet", "choose-unit": "Válasszon mennyiségi egységet",
@@ -1151,7 +1154,7 @@
"members-description": "Láthatja, hogy kik vannak a csoportjában, és kezelheti az ő jogosultságaikat.", "members-description": "Láthatja, hogy kik vannak a csoportjában, és kezelheti az ő jogosultságaikat.",
"webhooks-description": "Állítson be webhookokat, amelyek azokon a napokon lépnek működésbe, amikorra a menüterveket ütemezte.", "webhooks-description": "Állítson be webhookokat, amelyek azokon a napokon lépnek működésbe, amikorra a menüterveket ütemezte.",
"notifiers": "Értesítések", "notifiers": "Értesítések",
"notifiers-description": "Setup email and push notifications that trigger on specific events.", "notifiers-description": "Állítson be olyan e-mail és push-értesítéseket, amelyek meghatározott események esetén lépnek működésbe.",
"manage-data": "Adatok kezelése", "manage-data": "Adatok kezelése",
"manage-data-description": "Alapanyagainak és mennyiségi egységeinek kezelése (további opciók hamarosan)", "manage-data-description": "Alapanyagainak és mennyiségi egységeinek kezelése (további opciók hamarosan)",
"data-migrations": "Adat migráció", "data-migrations": "Adat migráció",

View File

@@ -258,6 +258,7 @@
}, },
"meal-plan": { "meal-plan": {
"create-a-new-meal-plan": "Create a New Meal Plan", "create-a-new-meal-plan": "Create a New Meal Plan",
"update-this-meal-plan": "Update this Meal Plan",
"dinner-this-week": "Dinner This Week", "dinner-this-week": "Dinner This Week",
"dinner-today": "Dinner Today", "dinner-today": "Dinner Today",
"dinner-tonight": "DINNER TONIGHT", "dinner-tonight": "DINNER TONIGHT",
@@ -472,9 +473,11 @@
"add-to-timeline": "Add to Timeline", "add-to-timeline": "Add to Timeline",
"recipe-added-to-list": "Recipe added to list", "recipe-added-to-list": "Recipe added to list",
"recipes-added-to-list": "Recipes added to list", "recipes-added-to-list": "Recipes added to list",
"successfully-added-to-list": "Successfully added to list",
"recipe-added-to-mealplan": "Recipe added to mealplan", "recipe-added-to-mealplan": "Recipe added to mealplan",
"failed-to-add-recipes-to-list": "Failed to add recipe to list", "failed-to-add-recipes-to-list": "Failed to add recipe to list",
"failed-to-add-recipe-to-mealplan": "Failed to add recipe to mealplan", "failed-to-add-recipe-to-mealplan": "Failed to add recipe to mealplan",
"failed-to-add-to-list": "Failed to add to list",
"yield": "Yield", "yield": "Yield",
"quantity": "Quantity", "quantity": "Quantity",
"choose-unit": "Choose Unit", "choose-unit": "Choose Unit",

View File

@@ -258,6 +258,7 @@
}, },
"meal-plan": { "meal-plan": {
"create-a-new-meal-plan": "Crea un Nuovo Piano Alimentare", "create-a-new-meal-plan": "Crea un Nuovo Piano Alimentare",
"update-this-meal-plan": "Aggiorna questo piano pasto",
"dinner-this-week": "Cena Questa Settimana", "dinner-this-week": "Cena Questa Settimana",
"dinner-today": "Cena Oggi", "dinner-today": "Cena Oggi",
"dinner-tonight": "CENA STASERA", "dinner-tonight": "CENA STASERA",
@@ -472,9 +473,11 @@
"add-to-timeline": "Aggiungi alla linea temporale", "add-to-timeline": "Aggiungi alla linea temporale",
"recipe-added-to-list": "Ricetta aggiunta alla lista", "recipe-added-to-list": "Ricetta aggiunta alla lista",
"recipes-added-to-list": "Ricette aggiunte alla lista", "recipes-added-to-list": "Ricette aggiunte alla lista",
"successfully-added-to-list": "Aggiunto correttamente alla lista",
"recipe-added-to-mealplan": "Ricetta aggiunta al piano alimentare", "recipe-added-to-mealplan": "Ricetta aggiunta al piano alimentare",
"failed-to-add-recipes-to-list": "Impossibile aggiungere la ricetta alla lista", "failed-to-add-recipes-to-list": "Impossibile aggiungere la ricetta alla lista",
"failed-to-add-recipe-to-mealplan": "Impossibile aggiungere la ricetta al piano alimentare", "failed-to-add-recipe-to-mealplan": "Impossibile aggiungere la ricetta al piano alimentare",
"failed-to-add-to-list": "Errore durante l'aggiunta alla lista",
"yield": "Porzioni", "yield": "Porzioni",
"quantity": "Quantità", "quantity": "Quantità",
"choose-unit": "Scegli Unità", "choose-unit": "Scegli Unità",

View File

@@ -258,6 +258,7 @@
}, },
"meal-plan": { "meal-plan": {
"create-a-new-meal-plan": "Create a New Meal Plan", "create-a-new-meal-plan": "Create a New Meal Plan",
"update-this-meal-plan": "Update this Meal Plan",
"dinner-this-week": "今週の夕食", "dinner-this-week": "今週の夕食",
"dinner-today": "今日の夕食", "dinner-today": "今日の夕食",
"dinner-tonight": "今夜の夕食", "dinner-tonight": "今夜の夕食",
@@ -472,9 +473,11 @@
"add-to-timeline": "Add to Timeline", "add-to-timeline": "Add to Timeline",
"recipe-added-to-list": "Recipe added to list", "recipe-added-to-list": "Recipe added to list",
"recipes-added-to-list": "Recipes added to list", "recipes-added-to-list": "Recipes added to list",
"successfully-added-to-list": "Successfully added to list",
"recipe-added-to-mealplan": "レシピを献立に追加しました。", "recipe-added-to-mealplan": "レシピを献立に追加しました。",
"failed-to-add-recipes-to-list": "Failed to add recipe to list", "failed-to-add-recipes-to-list": "Failed to add recipe to list",
"failed-to-add-recipe-to-mealplan": "レシピを献立に追加する事に失敗しました。", "failed-to-add-recipe-to-mealplan": "レシピを献立に追加する事に失敗しました。",
"failed-to-add-to-list": "Failed to add to list",
"yield": "Yield", "yield": "Yield",
"quantity": "Quantity", "quantity": "Quantity",
"choose-unit": "Choose Unit", "choose-unit": "Choose Unit",

View File

@@ -258,6 +258,7 @@
}, },
"meal-plan": { "meal-plan": {
"create-a-new-meal-plan": "Create a New Meal Plan", "create-a-new-meal-plan": "Create a New Meal Plan",
"update-this-meal-plan": "Update this Meal Plan",
"dinner-this-week": "Dinner This Week", "dinner-this-week": "Dinner This Week",
"dinner-today": "Dinner Today", "dinner-today": "Dinner Today",
"dinner-tonight": "DINNER TONIGHT", "dinner-tonight": "DINNER TONIGHT",
@@ -472,9 +473,11 @@
"add-to-timeline": "Add to Timeline", "add-to-timeline": "Add to Timeline",
"recipe-added-to-list": "Recipe added to list", "recipe-added-to-list": "Recipe added to list",
"recipes-added-to-list": "Recipes added to list", "recipes-added-to-list": "Recipes added to list",
"successfully-added-to-list": "Successfully added to list",
"recipe-added-to-mealplan": "Recipe added to mealplan", "recipe-added-to-mealplan": "Recipe added to mealplan",
"failed-to-add-recipes-to-list": "Failed to add recipe to list", "failed-to-add-recipes-to-list": "Failed to add recipe to list",
"failed-to-add-recipe-to-mealplan": "Failed to add recipe to mealplan", "failed-to-add-recipe-to-mealplan": "Failed to add recipe to mealplan",
"failed-to-add-to-list": "Failed to add to list",
"yield": "Yield", "yield": "Yield",
"quantity": "Quantity", "quantity": "Quantity",
"choose-unit": "Choose Unit", "choose-unit": "Choose Unit",

View File

@@ -258,6 +258,7 @@
}, },
"meal-plan": { "meal-plan": {
"create-a-new-meal-plan": "Sukurti naują mitybos planą", "create-a-new-meal-plan": "Sukurti naują mitybos planą",
"update-this-meal-plan": "Update this Meal Plan",
"dinner-this-week": "Šios savaitės vakarienė", "dinner-this-week": "Šios savaitės vakarienė",
"dinner-today": "Šiandienos vakarienė", "dinner-today": "Šiandienos vakarienė",
"dinner-tonight": "VAKARIENĖ ŠIANDIEN", "dinner-tonight": "VAKARIENĖ ŠIANDIEN",
@@ -472,9 +473,11 @@
"add-to-timeline": "Add to Timeline", "add-to-timeline": "Add to Timeline",
"recipe-added-to-list": "Recepts pridėtas į sąrašą", "recipe-added-to-list": "Recepts pridėtas į sąrašą",
"recipes-added-to-list": "Recipes added to list", "recipes-added-to-list": "Recipes added to list",
"successfully-added-to-list": "Successfully added to list",
"recipe-added-to-mealplan": "Recepts pridėtas prie mitybos plano", "recipe-added-to-mealplan": "Recepts pridėtas prie mitybos plano",
"failed-to-add-recipes-to-list": "Failed to add recipe to list", "failed-to-add-recipes-to-list": "Failed to add recipe to list",
"failed-to-add-recipe-to-mealplan": "Nepavyko pridėti recepto prie mitybos plano", "failed-to-add-recipe-to-mealplan": "Nepavyko pridėti recepto prie mitybos plano",
"failed-to-add-to-list": "Failed to add to list",
"yield": "Išeiga", "yield": "Išeiga",
"quantity": "Kiekis", "quantity": "Kiekis",
"choose-unit": "Pasirinkite vienetą", "choose-unit": "Pasirinkite vienetą",

View File

@@ -258,6 +258,7 @@
}, },
"meal-plan": { "meal-plan": {
"create-a-new-meal-plan": "Create a New Meal Plan", "create-a-new-meal-plan": "Create a New Meal Plan",
"update-this-meal-plan": "Update this Meal Plan",
"dinner-this-week": "Dinner This Week", "dinner-this-week": "Dinner This Week",
"dinner-today": "Dinner Today", "dinner-today": "Dinner Today",
"dinner-tonight": "DINNER TONIGHT", "dinner-tonight": "DINNER TONIGHT",
@@ -472,9 +473,11 @@
"add-to-timeline": "Add to Timeline", "add-to-timeline": "Add to Timeline",
"recipe-added-to-list": "Recipe added to list", "recipe-added-to-list": "Recipe added to list",
"recipes-added-to-list": "Recipes added to list", "recipes-added-to-list": "Recipes added to list",
"successfully-added-to-list": "Successfully added to list",
"recipe-added-to-mealplan": "Recipe added to mealplan", "recipe-added-to-mealplan": "Recipe added to mealplan",
"failed-to-add-recipes-to-list": "Failed to add recipe to list", "failed-to-add-recipes-to-list": "Failed to add recipe to list",
"failed-to-add-recipe-to-mealplan": "Failed to add recipe to mealplan", "failed-to-add-recipe-to-mealplan": "Failed to add recipe to mealplan",
"failed-to-add-to-list": "Failed to add to list",
"yield": "Yield", "yield": "Yield",
"quantity": "Quantity", "quantity": "Quantity",
"choose-unit": "Choose Unit", "choose-unit": "Choose Unit",

View File

@@ -258,6 +258,7 @@
}, },
"meal-plan": { "meal-plan": {
"create-a-new-meal-plan": "Maak een nieuw maaltijdplan", "create-a-new-meal-plan": "Maak een nieuw maaltijdplan",
"update-this-meal-plan": "Werk dit Maaltijdplan bij",
"dinner-this-week": "Het diner deze week", "dinner-this-week": "Het diner deze week",
"dinner-today": "Het diner vandaag", "dinner-today": "Het diner vandaag",
"dinner-tonight": "DINER VOOR DEZE AVOND", "dinner-tonight": "DINER VOOR DEZE AVOND",
@@ -472,9 +473,11 @@
"add-to-timeline": "Aan tijdlijn toevoegen", "add-to-timeline": "Aan tijdlijn toevoegen",
"recipe-added-to-list": "Recept toegevoegd aan de lijst", "recipe-added-to-list": "Recept toegevoegd aan de lijst",
"recipes-added-to-list": "Recept toegevoegd aan de lijst", "recipes-added-to-list": "Recept toegevoegd aan de lijst",
"successfully-added-to-list": "Succesvol toegevoegd aan de lijst",
"recipe-added-to-mealplan": "Recept toegevoegd aan het maaltijdplan", "recipe-added-to-mealplan": "Recept toegevoegd aan het maaltijdplan",
"failed-to-add-recipes-to-list": "Kon recept niet aan de lijst toevoegen ", "failed-to-add-recipes-to-list": "Kon recept niet aan de lijst toevoegen ",
"failed-to-add-recipe-to-mealplan": "Recept aan maaltijdplan toevoegen mislukt", "failed-to-add-recipe-to-mealplan": "Recept aan maaltijdplan toevoegen mislukt",
"failed-to-add-to-list": "Toevoegen aan lijst mislukt",
"yield": "Resultaat", "yield": "Resultaat",
"quantity": "Hoeveelheid", "quantity": "Hoeveelheid",
"choose-unit": "Kies een eenheid", "choose-unit": "Kies een eenheid",

View File

@@ -258,6 +258,7 @@
}, },
"meal-plan": { "meal-plan": {
"create-a-new-meal-plan": "Opprett en ny måltidsplan", "create-a-new-meal-plan": "Opprett en ny måltidsplan",
"update-this-meal-plan": "Update this Meal Plan",
"dinner-this-week": "Middag denne uken", "dinner-this-week": "Middag denne uken",
"dinner-today": "Middag idag", "dinner-today": "Middag idag",
"dinner-tonight": "DAGENS MIDDAG", "dinner-tonight": "DAGENS MIDDAG",
@@ -472,9 +473,11 @@
"add-to-timeline": "Legg til tidslinje", "add-to-timeline": "Legg til tidslinje",
"recipe-added-to-list": "Oppskrift er lagt til i liste", "recipe-added-to-list": "Oppskrift er lagt til i liste",
"recipes-added-to-list": "Oppskrifter lagt til listen", "recipes-added-to-list": "Oppskrifter lagt til listen",
"successfully-added-to-list": "Successfully added to list",
"recipe-added-to-mealplan": "Oppskrift er lagt til i måltidsplan", "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-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-recipe-to-mealplan": "Klarte ikke å legge til oppskrift i måltidsplan",
"failed-to-add-to-list": "Failed to add to list",
"yield": "Gir", "yield": "Gir",
"quantity": "Antall", "quantity": "Antall",
"choose-unit": "Velg enhet", "choose-unit": "Velg enhet",

View File

@@ -258,6 +258,7 @@
}, },
"meal-plan": { "meal-plan": {
"create-a-new-meal-plan": "Utwórz nowy plan posiłku", "create-a-new-meal-plan": "Utwórz nowy plan posiłku",
"update-this-meal-plan": "Update this Meal Plan",
"dinner-this-week": "Obiad w tym tygodniu", "dinner-this-week": "Obiad w tym tygodniu",
"dinner-today": "Obiad dziś", "dinner-today": "Obiad dziś",
"dinner-tonight": "OBIAD DZIŚ", "dinner-tonight": "OBIAD DZIŚ",
@@ -472,9 +473,11 @@
"add-to-timeline": "Dodaj do osi czasu", "add-to-timeline": "Dodaj do osi czasu",
"recipe-added-to-list": "Przepis dodany do listy", "recipe-added-to-list": "Przepis dodany do listy",
"recipes-added-to-list": "Przepisy dodane do listy", "recipes-added-to-list": "Przepisy dodane do listy",
"successfully-added-to-list": "Successfully added to list",
"recipe-added-to-mealplan": "Przepis dodany do planu posiłków", "recipe-added-to-mealplan": "Przepis dodany do planu posiłków",
"failed-to-add-recipes-to-list": "Nie udało się dodać przepisu do listy", "failed-to-add-recipes-to-list": "Nie udało się dodać przepisu do listy",
"failed-to-add-recipe-to-mealplan": "Nie udało się dodać przepisu do planu posiłków", "failed-to-add-recipe-to-mealplan": "Nie udało się dodać przepisu do planu posiłków",
"failed-to-add-to-list": "Failed to add to list",
"yield": "Wydajność", "yield": "Wydajność",
"quantity": "Ilość", "quantity": "Ilość",
"choose-unit": "Wybierz jednostkę", "choose-unit": "Wybierz jednostkę",

View File

@@ -258,6 +258,7 @@
}, },
"meal-plan": { "meal-plan": {
"create-a-new-meal-plan": "Criar um novo plano de refeições", "create-a-new-meal-plan": "Criar um novo plano de refeições",
"update-this-meal-plan": "Update this Meal Plan",
"dinner-this-week": "Jantar desta semana", "dinner-this-week": "Jantar desta semana",
"dinner-today": "Jantar de hoje", "dinner-today": "Jantar de hoje",
"dinner-tonight": "JANTAR DE HOJE À NOITE", "dinner-tonight": "JANTAR DE HOJE À NOITE",
@@ -472,9 +473,11 @@
"add-to-timeline": "Adicionar à linha do tempo", "add-to-timeline": "Adicionar à linha do tempo",
"recipe-added-to-list": "Receita adicionada à lista", "recipe-added-to-list": "Receita adicionada à lista",
"recipes-added-to-list": "Receitas adicionadas à lista", "recipes-added-to-list": "Receitas adicionadas à lista",
"successfully-added-to-list": "Successfully added to list",
"recipe-added-to-mealplan": "Receita adicionada ao plano de refeições", "recipe-added-to-mealplan": "Receita adicionada ao plano de refeições",
"failed-to-add-recipes-to-list": "Falha ao adicionar receita à lista", "failed-to-add-recipes-to-list": "Falha ao adicionar receita à lista",
"failed-to-add-recipe-to-mealplan": "Falha ao adicionar a receita ao plano de refeições", "failed-to-add-recipe-to-mealplan": "Falha ao adicionar a receita ao plano de refeições",
"failed-to-add-to-list": "Failed to add to list",
"yield": "Rendimento", "yield": "Rendimento",
"quantity": "Quantidade", "quantity": "Quantidade",
"choose-unit": "Escolher unidades", "choose-unit": "Escolher unidades",

View File

@@ -258,6 +258,7 @@
}, },
"meal-plan": { "meal-plan": {
"create-a-new-meal-plan": "Criar novo Plano de Refeições", "create-a-new-meal-plan": "Criar novo Plano de Refeições",
"update-this-meal-plan": "Atualizar este plano de refeição",
"dinner-this-week": "Jantar esta semana", "dinner-this-week": "Jantar esta semana",
"dinner-today": "Jantar Hoje", "dinner-today": "Jantar Hoje",
"dinner-tonight": "JANTAR HOJE", "dinner-tonight": "JANTAR HOJE",
@@ -472,9 +473,11 @@
"add-to-timeline": "Adicionar à Linha Temporal", "add-to-timeline": "Adicionar à Linha Temporal",
"recipe-added-to-list": "Receita adicionada à lista", "recipe-added-to-list": "Receita adicionada à lista",
"recipes-added-to-list": "Receitas adicionadas à lista", "recipes-added-to-list": "Receitas adicionadas à lista",
"successfully-added-to-list": "Adicionado à lista com sucesso",
"recipe-added-to-mealplan": "Receita adicionada ao plano de refeições", "recipe-added-to-mealplan": "Receita adicionada ao plano de refeições",
"failed-to-add-recipes-to-list": "Erro ao adicionar a receita à lista", "failed-to-add-recipes-to-list": "Erro ao adicionar a receita à lista",
"failed-to-add-recipe-to-mealplan": "Erro ao adicionar receita ao plano de refeições", "failed-to-add-recipe-to-mealplan": "Erro ao adicionar receita ao plano de refeições",
"failed-to-add-to-list": "Erro ao adicionar à lista",
"yield": "Rendimento", "yield": "Rendimento",
"quantity": "Quantidade", "quantity": "Quantidade",
"choose-unit": "Escolha uma unidade", "choose-unit": "Escolha uma unidade",

View File

@@ -258,6 +258,7 @@
}, },
"meal-plan": { "meal-plan": {
"create-a-new-meal-plan": "Creează un nou plan de mase", "create-a-new-meal-plan": "Creează un nou plan de mase",
"update-this-meal-plan": "Update this Meal Plan",
"dinner-this-week": "Cină săptămâna aceasta", "dinner-this-week": "Cină săptămâna aceasta",
"dinner-today": "Cină astăzi", "dinner-today": "Cină astăzi",
"dinner-tonight": "CINĂ ÎN SEARA ACEASTA", "dinner-tonight": "CINĂ ÎN SEARA ACEASTA",
@@ -472,9 +473,11 @@
"add-to-timeline": "Adaugă la Cronologie", "add-to-timeline": "Adaugă la Cronologie",
"recipe-added-to-list": "Rețeta a fost adăugată la listă", "recipe-added-to-list": "Rețeta a fost adăugată la listă",
"recipes-added-to-list": "Rețeta a fost adăugată în listă", "recipes-added-to-list": "Rețeta a fost adăugată în listă",
"successfully-added-to-list": "Successfully added to list",
"recipe-added-to-mealplan": "Rețeta a fist adăugată la planul de mese", "recipe-added-to-mealplan": "Rețeta a fist adăugată la planul de mese",
"failed-to-add-recipes-to-list": "Adăugarea rețetei în listă a eșuat", "failed-to-add-recipes-to-list": "Adăugarea rețetei în listă a eșuat",
"failed-to-add-recipe-to-mealplan": "Adăugarea rețetei la planul de mese a eșuat", "failed-to-add-recipe-to-mealplan": "Adăugarea rețetei la planul de mese a eșuat",
"failed-to-add-to-list": "Failed to add to list",
"yield": "Producție", "yield": "Producție",
"quantity": "Cantitate", "quantity": "Cantitate",
"choose-unit": "Alegeţi unitatea", "choose-unit": "Alegeţi unitatea",

View File

@@ -114,7 +114,7 @@
"json": "JSON", "json": "JSON",
"keyword": "Ключевое слово", "keyword": "Ключевое слово",
"link-copied": "Ссылка скопирована", "link-copied": "Ссылка скопирована",
"loading": "Loading", "loading": "Загрузка",
"loading-events": "Загрузка событий", "loading-events": "Загрузка событий",
"loading-recipe": "Загрузка рецепта...", "loading-recipe": "Загрузка рецепта...",
"loading-ocr-data": "Загрузка данных OCR...", "loading-ocr-data": "Загрузка данных OCR...",
@@ -258,6 +258,7 @@
}, },
"meal-plan": { "meal-plan": {
"create-a-new-meal-plan": "Создать новый план питания", "create-a-new-meal-plan": "Создать новый план питания",
"update-this-meal-plan": "Обновить план питания",
"dinner-this-week": "Ужин на этой неделе", "dinner-this-week": "Ужин на этой неделе",
"dinner-today": "Ужин сегодня", "dinner-today": "Ужин сегодня",
"dinner-tonight": "Ужин сегодня", "dinner-tonight": "Ужин сегодня",
@@ -472,9 +473,11 @@
"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": "Успешно добавлено в список",
"recipe-added-to-mealplan": "Рецепт добавлен в план питания", "recipe-added-to-mealplan": "Рецепт добавлен в план питания",
"failed-to-add-recipes-to-list": "Не удалось добавить рецепт в список", "failed-to-add-recipes-to-list": "Не удалось добавить рецепт в список",
"failed-to-add-recipe-to-mealplan": "Не удалось добавить рецепт в план питания", "failed-to-add-recipe-to-mealplan": "Не удалось добавить рецепт в план питания",
"failed-to-add-to-list": "Не удалось добавить в список",
"yield": "Выход", "yield": "Выход",
"quantity": "Количество", "quantity": "Количество",
"choose-unit": "Выберите единицу измерения", "choose-unit": "Выберите единицу измерения",
@@ -511,7 +514,7 @@
"how-did-it-turn-out": "Что получилось?", "how-did-it-turn-out": "Что получилось?",
"user-made-this": "{user} сделал это", "user-made-this": "{user} сделал это",
"last-made-date": "Последний раз сделано {date}", "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.", "api-extras-description": "Дополнения к рецептам являются ключевым элементом Mealie API. Они позволяют создавать пользовательские пары json ключ/значение в рецепте для ссылания на другие приложения. Вы можете использовать эти ключи, чтобы сохранить нужную информацию, например, для автоматизаций или уведомлений на ваши устройства.",
"message-key": "Ключ сообщения", "message-key": "Ключ сообщения",
"parse": "Обработать", "parse": "Обработать",
"attach-images-hint": "Прикрепляйте изображения, перетаскивая их в редактор", "attach-images-hint": "Прикрепляйте изображения, перетаскивая их в редактор",
@@ -533,8 +536,8 @@
"new-recipe-names-must-be-unique": "Название рецепта должно быть уникальным", "new-recipe-names-must-be-unique": "Название рецепта должно быть уникальным",
"scrape-recipe": "Отсканировать рецепт", "scrape-recipe": "Отсканировать рецепт",
"scrape-recipe-description": "Отсканировать рецепт по ссылке. Предоставьте ссылку на страницу, которую вы хотите отсканировать, и Mealie попытается вырезать рецепт с этого сайта и добавить его в свою коллекцию.", "scrape-recipe-description": "Отсканировать рецепт по ссылке. Предоставьте ссылку на страницу, которую вы хотите отсканировать, и Mealie попытается вырезать рецепт с этого сайта и добавить его в свою коллекцию.",
"scrape-recipe-have-a-lot-of-recipes": "Have a lot of recipes you want to scrape at once?", "scrape-recipe-have-a-lot-of-recipes": "Хотите отсканировать несколько рецептов за раз?",
"scrape-recipe-suggest-bulk-importer": "Try out the bulk importer", "scrape-recipe-suggest-bulk-importer": "Воспользуйтесь массовым импортом",
"import-original-keywords-as-tags": "Импортировать исходные ключевые слова как теги", "import-original-keywords-as-tags": "Импортировать исходные ключевые слова как теги",
"stay-in-edit-mode": "Остаться в режиме редактирования", "stay-in-edit-mode": "Остаться в режиме редактирования",
"import-from-zip": "Импорт из архива", "import-from-zip": "Импорт из архива",
@@ -558,7 +561,7 @@
"upload-image": "Загрузить изображение", "upload-image": "Загрузить изображение",
"screen-awake": "Держать экран включенным", "screen-awake": "Держать экран включенным",
"remove-image": "Удалить изображение", "remove-image": "Удалить изображение",
"nextStep": "Next step" "nextStep": "След. шаг"
}, },
"search": { "search": {
"advanced-search": "Расширенный поиск", "advanced-search": "Расширенный поиск",
@@ -793,7 +796,7 @@
"untagged-count": "Не помеченные {count}", "untagged-count": "Не помеченные {count}",
"create-a-tag": "Создать тег", "create-a-tag": "Создать тег",
"tag-name": "Название тега", "tag-name": "Название тега",
"tag": "Tag" "tag": "Тег"
}, },
"tool": { "tool": {
"tools": "Инструменты", "tools": "Инструменты",
@@ -803,7 +806,7 @@
"create-new-tool": "Создать новый инструмент", "create-new-tool": "Создать новый инструмент",
"on-hand-checkbox-label": "Показывать \"в наличии\" (отмечено)", "on-hand-checkbox-label": "Показывать \"в наличии\" (отмечено)",
"required-tools": "Необходимые инструменты", "required-tools": "Необходимые инструменты",
"tool": "Tool" "tool": "Инструмент"
}, },
"user": { "user": {
"admin": "Администратор", "admin": "Администратор",
@@ -941,8 +944,8 @@
"fraction": "Дробь", "fraction": "Дробь",
"example-unit-singular": "пр. Столовая ложка", "example-unit-singular": "пр. Столовая ложка",
"example-unit-plural": "пр. Столовых ложек", "example-unit-plural": "пр. Столовых ложек",
"example-unit-abbreviation-singular": "ex: Tbsp", "example-unit-abbreviation-singular": "пример: ст. л.",
"example-unit-abbreviation-plural": "ex: Tbsps" "example-unit-abbreviation-plural": "пример: ст. л."
}, },
"labels": { "labels": {
"seed-dialog-text": "Дополнить базу данных типичными единицами измерений на основе выбранного языка.", "seed-dialog-text": "Дополнить базу данных типичными единицами измерений на основе выбранного языка.",

View File

@@ -258,6 +258,7 @@
}, },
"meal-plan": { "meal-plan": {
"create-a-new-meal-plan": "Vytvoriť nový jedálniček", "create-a-new-meal-plan": "Vytvoriť nový jedálniček",
"update-this-meal-plan": "Update this Meal Plan",
"dinner-this-week": "Večera tento týždeň", "dinner-this-week": "Večera tento týždeň",
"dinner-today": "Večera dnes", "dinner-today": "Večera dnes",
"dinner-tonight": "VEČERA NA DNES", "dinner-tonight": "VEČERA NA DNES",
@@ -472,9 +473,11 @@
"add-to-timeline": "Add to Timeline", "add-to-timeline": "Add to Timeline",
"recipe-added-to-list": "Recept bol pridaný do zoznamu", "recipe-added-to-list": "Recept bol pridaný do zoznamu",
"recipes-added-to-list": "Recipes added to list", "recipes-added-to-list": "Recipes added to list",
"successfully-added-to-list": "Successfully added to list",
"recipe-added-to-mealplan": "Recept bol pridaný do stravovacieho plánu", "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": "Failed to add recipe to list",
"failed-to-add-recipe-to-mealplan": "Pridanie receptu do stravovacieho plánu zlyhalo", "failed-to-add-recipe-to-mealplan": "Pridanie receptu do stravovacieho plánu zlyhalo",
"failed-to-add-to-list": "Failed to add to list",
"yield": "Počet porcií", "yield": "Počet porcií",
"quantity": "Množstvo", "quantity": "Množstvo",
"choose-unit": "Vyberte jednotku", "choose-unit": "Vyberte jednotku",

View File

@@ -22,7 +22,7 @@
"support": "Podpora", "support": "Podpora",
"version": "Verzija", "version": "Verzija",
"unknown-version": "neznano", "unknown-version": "neznano",
"sponsor": "Sponsor" "sponsor": "Sponzor"
}, },
"asset": { "asset": {
"assets": "Viri", "assets": "Viri",
@@ -53,9 +53,9 @@
"apprise-url": "Apprise URL", "apprise-url": "Apprise URL",
"database": "Baza podatkov", "database": "Baza podatkov",
"delete-event": "Zbriši dogodek", "delete-event": "Zbriši dogodek",
"event-delete-confirmation": "Are you sure you want to delete this event?", "event-delete-confirmation": "Ali ste prepričani, da želite izbrisati ta dogodek?",
"event-deleted": "Event Deleted", "event-deleted": "Dogodek izbrisan",
"event-updated": "Event Updated", "event-updated": "Dogodek posodobljen",
"new-notification-form-description": "Mealie uporablja Apprise knjižnico za kreiranje obvestil. Omogoča več različnih servisov za uporabo obvestil. Preglejte njihovo wiki stran, za bolj natančen vodič, kako izdelati URL za vaš servis. Če je na voljo, so za vaš izbran servis obvestil, na voljo tudi dodane možnosti.", "new-notification-form-description": "Mealie uporablja Apprise knjižnico za kreiranje obvestil. Omogoča več različnih servisov za uporabo obvestil. Preglejte njihovo wiki stran, za bolj natančen vodič, kako izdelati URL za vaš servis. Če je na voljo, so za vaš izbran servis obvestil, na voljo tudi dodane možnosti.",
"new-version": "Na voljo je nova verzija!", "new-version": "Na voljo je nova verzija!",
"notification": "Obvestila", "notification": "Obvestila",
@@ -64,7 +64,7 @@
"something-went-wrong": "Nekaj je šlo narobe!", "something-went-wrong": "Nekaj je šlo narobe!",
"subscribed-events": "Naročeni dogodki", "subscribed-events": "Naročeni dogodki",
"test-message-sent": "Testno sporočilo je bilo poslano", "test-message-sent": "Testno sporočilo je bilo poslano",
"new-notification": "New Notification", "new-notification": "Novo obvestilo",
"event-notifiers": "Event Notifiers", "event-notifiers": "Event Notifiers",
"apprise-url-skipped-if-blank": "Apprise URL (skipped if blank)", "apprise-url-skipped-if-blank": "Apprise URL (skipped if blank)",
"enable-notifier": "Enable Notifier", "enable-notifier": "Enable Notifier",
@@ -114,12 +114,12 @@
"json": "JSON", "json": "JSON",
"keyword": "Ključna beseda", "keyword": "Ključna beseda",
"link-copied": "Povezava kopirana", "link-copied": "Povezava kopirana",
"loading": "Loading", "loading": "Nalaganje",
"loading-events": "Loading Events", "loading-events": "Loading Events",
"loading-recipe": "Loading recipe...", "loading-recipe": "Nalagam recepte...",
"loading-ocr-data": "Loading OCR data...", "loading-ocr-data": "Loading OCR data...",
"loading-recipes": "Nalagam recepte", "loading-recipes": "Nalagam recepte",
"message": "Message", "message": "Sporočilo",
"monday": "Ponedeljek", "monday": "Ponedeljek",
"name": "Ime", "name": "Ime",
"new": "Novo", "new": "Novo",
@@ -146,7 +146,7 @@
"sort": "Razvrsti", "sort": "Razvrsti",
"sort-alphabetically": "Po abecedi", "sort-alphabetically": "Po abecedi",
"status": "Stanje", "status": "Stanje",
"subject": "Subject", "subject": "Zadeva",
"submit": "Pošlji", "submit": "Pošlji",
"success-count": "Uspešno: {count}", "success-count": "Uspešno: {count}",
"sunday": "Nedelja", "sunday": "Nedelja",
@@ -186,17 +186,17 @@
"color": "Barva", "color": "Barva",
"timestamp": "Časovni žig", "timestamp": "Časovni žig",
"last-made": "Last Made", "last-made": "Last Made",
"learn-more": "Learn More", "learn-more": "Več o tem",
"this-feature-is-currently-inactive": "This feature is currently inactive", "this-feature-is-currently-inactive": "This feature is currently inactive",
"clipboard-not-supported": "Clipboard not supported", "clipboard-not-supported": "Clipboard not supported",
"copied-to-clipboard": "Copied to clipboard", "copied-to-clipboard": "Kopiraj v odložišče",
"your-browser-does-not-support-clipboard": "Your browser does not support 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", "copied-items-to-clipboard": "No item copied to clipboard|One item copied to clipboard|Copied {count} items to clipboard",
"actions": "Actions", "actions": "Actions",
"selected-count": "Selected: {count}", "selected-count": "Selected: {count}",
"export-all": "Export All", "export-all": "Izvozi vse",
"refresh": "Refresh", "refresh": "Osveži",
"upload-file": "Upload File", "upload-file": "Naloži datoteko",
"created-on-date": "Created on: {0}", "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.", "unsaved-changes": "You have unsaved changes. Do you want to save before leaving? Okay to save, Cancel to discard changes.",
"clipboard-copy-failure": "Failed to copy to the clipboard." "clipboard-copy-failure": "Failed to copy to the clipboard."
@@ -225,15 +225,15 @@
"keep-my-recipes-private": "Moji recepti naj bodo privatni", "keep-my-recipes-private": "Moji recepti naj bodo privatni",
"keep-my-recipes-private-description": "Nastavi vaše skupine in vse recepte privzeto kot privatni. Kasneje lahko to vedno spremenite." "keep-my-recipes-private-description": "Nastavi vaše skupine in vse recepte privzeto kot privatni. Kasneje lahko to vedno spremenite."
}, },
"manage-members": "Manage Members", "manage-members": "Urejanje članov",
"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-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", "manage": "Manage",
"invite": "Invite", "invite": "Povabi",
"looking-to-update-your-profile": "Looking to Update Your Profile?", "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-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", "default-recipe-preferences": "Default Recipe Preferences",
"group-preferences": "Group Preferences", "group-preferences": "Group Preferences",
"private-group": "Private Group", "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.", "private-group-description": "Setting your group to private will default all public view options to default. This overrides an individual recipes public view settings.",
"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": "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", "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",
@@ -249,7 +249,7 @@
"disable-organizing-recipe-ingredients-by-units-and-food-description": "Hides the Food, Unit, and Amount fields for ingredients and treats ingredients as plain text fields.", "disable-organizing-recipe-ingredients-by-units-and-food-description": "Hides the Food, Unit, and Amount fields for ingredients and treats ingredients as plain text fields.",
"general-preferences": "General Preferences", "general-preferences": "General Preferences",
"group-recipe-preferences": "Group Recipe Preferences", "group-recipe-preferences": "Group Recipe Preferences",
"report": "Report", "report": "Prijavi",
"report-with-id": "Report ID: {id}", "report-with-id": "Report ID: {id}",
"group-management": "Group Management", "group-management": "Group Management",
"admin-group-management": "Admin Group Management", "admin-group-management": "Admin Group Management",
@@ -258,6 +258,7 @@
}, },
"meal-plan": { "meal-plan": {
"create-a-new-meal-plan": "Izdelaj nov načrt obrokov", "create-a-new-meal-plan": "Izdelaj nov načrt obrokov",
"update-this-meal-plan": "Update this Meal Plan",
"dinner-this-week": "Večerje tega tedna", "dinner-this-week": "Večerje tega tedna",
"dinner-today": "Današnja večerja", "dinner-today": "Današnja večerja",
"dinner-tonight": "DANAŠNJA VEČERJA", "dinner-tonight": "DANAŠNJA VEČERJA",
@@ -406,7 +407,7 @@
"carbohydrate-content": "Ogljikovi hidrati", "carbohydrate-content": "Ogljikovi hidrati",
"categories": "Kategorije", "categories": "Kategorije",
"comment-action": "Pripomba", "comment-action": "Pripomba",
"comment": "Comment", "comment": "Komentar",
"comments": "Pripombe", "comments": "Pripombe",
"delete-confirmation": "Ali želite izbrisati ta recept?", "delete-confirmation": "Ali želite izbrisati ta recept?",
"delete-recipe": "Izbriši recept", "delete-recipe": "Izbriši recept",
@@ -471,10 +472,12 @@
"add-to-plan": "Dodaj v načrt", "add-to-plan": "Dodaj v načrt",
"add-to-timeline": "Add to Timeline", "add-to-timeline": "Add to Timeline",
"recipe-added-to-list": "Recept dodan na seznam", "recipe-added-to-list": "Recept dodan na seznam",
"recipes-added-to-list": "Recipes added to list", "recipes-added-to-list": "Recepti dodani na seznam",
"successfully-added-to-list": "Uspešno dodano na seznam",
"recipe-added-to-mealplan": "Recept dodan v načrtovanje obroka", "recipe-added-to-mealplan": "Recept dodan v načrtovanje obroka",
"failed-to-add-recipes-to-list": "Failed to add recipe to list", "failed-to-add-recipes-to-list": "Failed to add recipe to list",
"failed-to-add-recipe-to-mealplan": "Napaka pri dodajanji recepta v načrtovanje obroka", "failed-to-add-recipe-to-mealplan": "Napaka pri dodajanji recepta v načrtovanje obroka",
"failed-to-add-to-list": "Failed to add to list",
"yield": "Donos", "yield": "Donos",
"quantity": "Količina", "quantity": "Količina",
"choose-unit": "Izberite enoto", "choose-unit": "Izberite enoto",
@@ -497,18 +500,18 @@
"public-link": "Javna povezava", "public-link": "Javna povezava",
"timer": { "timer": {
"kitchen-timer": "Kitchen Timer", "kitchen-timer": "Kitchen Timer",
"start-timer": "Start Timer", "start-timer": "Zaženi časovnik",
"pause-timer": "Pause Timer", "pause-timer": "Ustavi časovnik",
"resume-timer": "Resume Timer", "resume-timer": "Nadaljuj časovnik",
"stop-timer": "Stop Timer" "stop-timer": "Ustavi časovnik"
}, },
"edit-timeline-event": "Edit Timeline Event", "edit-timeline-event": "Edit Timeline Event",
"timeline": "Timeline", "timeline": "Časovnica",
"timeline-is-empty": "Nothing on the timeline yet. Try making this recipe!", "timeline-is-empty": "Nothing on the timeline yet. Try making this recipe!",
"group-global-timeline": "{groupName} Global Timeline", "group-global-timeline": "{groupName} Global Timeline",
"open-timeline": "Open Timeline", "open-timeline": "Open Timeline",
"made-this": "I Made This", "made-this": "Naredil sem to",
"how-did-it-turn-out": "How did it turn out?", "how-did-it-turn-out": "Kako se je izkazalo?",
"user-made-this": "{user} made this", "user-made-this": "{user} made this",
"last-made-date": "Last Made {date}", "last-made-date": "Last Made {date}",
"api-extras-description": "Recipes extras are a key feature of the Mealie API. They allow you to create custom JSON key/value pairs within a recipe, to reference from 3rd party applications. You can use these keys to provide information, for example to trigger automations or custom messages to relay to your desired device.", "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.",
@@ -554,11 +557,11 @@
"debug": "Debug", "debug": "Debug",
"tree-view": "Tree View", "tree-view": "Tree View",
"recipe-yield": "Recipe Yield", "recipe-yield": "Recipe Yield",
"unit": "Unit", "unit": "Enota",
"upload-image": "Upload image", "upload-image": "Naloži sliko",
"screen-awake": "Keep Screen Awake", "screen-awake": "Ohranjanje budnega zaslona",
"remove-image": "Remove image", "remove-image": "Odstrani sliko",
"nextStep": "Next step" "nextStep": "Naslednji korak"
}, },
"search": { "search": {
"advanced-search": "Napredno iskanje", "advanced-search": "Napredno iskanje",
@@ -709,7 +712,7 @@
"general-about": "General About", "general-about": "General About",
"application-version": "Application Version", "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}).", "application-version-error-text": "Your current version ({0}) does not match the latest release. Considering updating to the latest version ({1}).",
"mealie-is-up-to-date": "Mealie is up to date", "mealie-is-up-to-date": "Mealie je v najnovejši različici",
"secure-site": "Secure Site", "secure-site": "Secure Site",
"secure-site-error-text": "Serve via localhost or secure with https. Clipboard and additional browser APIs may not work.", "secure-site-error-text": "Serve via localhost or secure with https. Clipboard and additional browser APIs may not work.",
"secure-site-success-text": "Site is accessed by localhost or https", "secure-site-success-text": "Site is accessed by localhost or https",
@@ -793,7 +796,7 @@
"untagged-count": "Brez značke {count}", "untagged-count": "Brez značke {count}",
"create-a-tag": "Ustvari značko", "create-a-tag": "Ustvari značko",
"tag-name": "Ime značke", "tag-name": "Ime značke",
"tag": "Tag" "tag": "Oznaka"
}, },
"tool": { "tool": {
"tools": "Orodja", "tools": "Orodja",
@@ -874,10 +877,10 @@
"account-locked-please-try-again-later": "Account Locked. Please try again later", "account-locked-please-try-again-later": "Account Locked. Please try again later",
"user-favorites": "User Favorites", "user-favorites": "User Favorites",
"password-strength-values": { "password-strength-values": {
"weak": "Weak", "weak": "Šibko",
"good": "Good", "good": "Dobro",
"strong": "Strong", "strong": "Močno",
"very-strong": "Very Strong" "very-strong": "Zelo močno"
}, },
"user-management": "User Management", "user-management": "User Management",
"reset-locked-users": "Reset Locked Users", "reset-locked-users": "Reset Locked Users",
@@ -895,7 +898,7 @@
"enable-advanced-features": "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.", "it-looks-like-this-is-your-first-time-logging-in": "It looks like this is your first time logging in.",
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Don't want to see this anymore? Be sure to change your email in your user settings!", "dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Don't want to see this anymore? Be sure to change your email in your user settings!",
"forgot-password": "Forgot Password", "forgot-password": "Ste pozabili geslo",
"forgot-password-text": "Please enter your email address and we will send you a link to reset your password.", "forgot-password-text": "Please enter your email address and we will send you a link to reset your password.",
"changes-reflected-immediately": "Changes to this user will be reflected immediately." "changes-reflected-immediately": "Changes to this user will be reflected immediately."
}, },
@@ -917,10 +920,10 @@
"target-food": "Target Food", "target-food": "Target Food",
"create-food": "Create Food", "create-food": "Create Food",
"food-label": "Food Label", "food-label": "Food Label",
"edit-food": "Edit Food", "edit-food": "Spremeni živilo",
"food-data": "Food Data", "food-data": "Food Data",
"example-food-singular": "ex: Onion", "example-food-singular": "npr: Čebula",
"example-food-plural": "ex: Onions" "example-food-plural": "npr: Čebule"
}, },
"units": { "units": {
"seed-dialog-text": "Napolni podatkovno bazo z običajnimi enotami, glede na vaš lokalni jezik.", "seed-dialog-text": "Napolni podatkovno bazo z običajnimi enotami, glede na vaš lokalni jezik.",
@@ -978,12 +981,12 @@
"data-management": "Data Management", "data-management": "Data Management",
"data-management-description": "Select which data set you want to make changes to.", "data-management-description": "Select which data set you want to make changes to.",
"select-data": "Select Data", "select-data": "Select Data",
"select-language": "Select Language", "select-language": "Izberite jezik",
"columns": "Columns", "columns": "Columns",
"combine": "Combine", "combine": "Combine",
"categories": { "categories": {
"edit-category": "Edit Category", "edit-category": "Uredi kategorijo",
"new-category": "New Category", "new-category": "Nova kategorija",
"category-data": "Category Data" "category-data": "Category Data"
}, },
"tags": { "tags": {
@@ -1128,7 +1131,7 @@
"tasks": "Tasks" "tasks": "Tasks"
}, },
"profile": { "profile": {
"welcome-user": "👋 Welcome, {0}", "welcome-user": "👋 Dobrodošel, {0}",
"description": "Manage your profile, recipes, and group settings.", "description": "Manage your profile, recipes, and group settings.",
"get-invite-link": "Get Invite Link", "get-invite-link": "Get Invite Link",
"get-public-link": "Get Public Link", "get-public-link": "Get Public Link",
@@ -1147,7 +1150,7 @@
"group-settings": "Group Settings", "group-settings": "Group Settings",
"group-settings-description": "Manage your common group settings like mealplan and privacy 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.", "cookbooks-description": "Manage a collection of recipe categories and generate pages for them.",
"members": "Members", "members": "Člani",
"members-description": "See who's in your group and manage their permissions.", "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.", "webhooks-description": "Setup webhooks that trigger on days that you have have mealplan scheduled.",
"notifiers": "Notifiers", "notifiers": "Notifiers",
@@ -1172,9 +1175,9 @@
"manage-data-migrations": "Manage Data Migrations" "manage-data-migrations": "Manage Data Migrations"
}, },
"cookbook": { "cookbook": {
"cookbooks": "Cookbooks", "cookbooks": "Kuharske knjige",
"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.", "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": "Javna kuharska knjiga",
"public-cookbook-description": "Public Cookbooks can be shared with non-mealie users and will be displayed on your groups page.", "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",
"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.", "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.",

View File

@@ -258,6 +258,7 @@
}, },
"meal-plan": { "meal-plan": {
"create-a-new-meal-plan": "Направи нови јеловник", "create-a-new-meal-plan": "Направи нови јеловник",
"update-this-meal-plan": "Update this Meal Plan",
"dinner-this-week": "Dinner This Week", "dinner-this-week": "Dinner This Week",
"dinner-today": "Dinner Today", "dinner-today": "Dinner Today",
"dinner-tonight": "DINNER TONIGHT", "dinner-tonight": "DINNER TONIGHT",
@@ -472,9 +473,11 @@
"add-to-timeline": "Додај на временску линију", "add-to-timeline": "Додај на временску линију",
"recipe-added-to-list": "Recipe added to list", "recipe-added-to-list": "Recipe added to list",
"recipes-added-to-list": "Recipes added to list", "recipes-added-to-list": "Recipes added to list",
"successfully-added-to-list": "Successfully added to list",
"recipe-added-to-mealplan": "Рецепт је додат у јеловник", "recipe-added-to-mealplan": "Рецепт је додат у јеловник",
"failed-to-add-recipes-to-list": "Failed to add recipe to list", "failed-to-add-recipes-to-list": "Failed to add recipe to list",
"failed-to-add-recipe-to-mealplan": "Неуспешно додавање рецепта у јеловник", "failed-to-add-recipe-to-mealplan": "Неуспешно додавање рецепта у јеловник",
"failed-to-add-to-list": "Failed to add to list",
"yield": "Yield", "yield": "Yield",
"quantity": "Quantity", "quantity": "Quantity",
"choose-unit": "Choose Unit", "choose-unit": "Choose Unit",

View File

@@ -258,6 +258,7 @@
}, },
"meal-plan": { "meal-plan": {
"create-a-new-meal-plan": "Skapa en ny måltidsplan", "create-a-new-meal-plan": "Skapa en ny måltidsplan",
"update-this-meal-plan": "Update this Meal Plan",
"dinner-this-week": "Veckans middagar", "dinner-this-week": "Veckans middagar",
"dinner-today": "Middag idag", "dinner-today": "Middag idag",
"dinner-tonight": "Middag ikväll", "dinner-tonight": "Middag ikväll",
@@ -472,9 +473,11 @@
"add-to-timeline": "Lägg till i tidslinje", "add-to-timeline": "Lägg till i tidslinje",
"recipe-added-to-list": "Recept tillagt i listan", "recipe-added-to-list": "Recept tillagt i listan",
"recipes-added-to-list": "Recept tillagt i listan", "recipes-added-to-list": "Recept tillagt i listan",
"successfully-added-to-list": "Successfully added to list",
"recipe-added-to-mealplan": "Recept tillagt i måltidsplanen", "recipe-added-to-mealplan": "Recept tillagt i måltidsplanen",
"failed-to-add-recipes-to-list": "Det gick inte att lägga till recept till listan", "failed-to-add-recipes-to-list": "Det gick inte att lägga till recept till listan",
"failed-to-add-recipe-to-mealplan": "Det gick inte att lägga till recept i måltidsplanen", "failed-to-add-recipe-to-mealplan": "Det gick inte att lägga till recept i måltidsplanen",
"failed-to-add-to-list": "Failed to add to list",
"yield": "Ger", "yield": "Ger",
"quantity": "Antal", "quantity": "Antal",
"choose-unit": "Välj enhet", "choose-unit": "Välj enhet",
@@ -533,8 +536,8 @@
"new-recipe-names-must-be-unique": "Nya receptnamn måste vara unika", "new-recipe-names-must-be-unique": "Nya receptnamn måste vara unika",
"scrape-recipe": "Skrapa Recept", "scrape-recipe": "Skrapa Recept",
"scrape-recipe-description": "Hämta ett recept med webbadress. Ange URL:en för webbplatsen du vill hämta, och Mealie kommer att försöka hämta receptet från den webbplatsen och lägga till det i din samling.", "scrape-recipe-description": "Hämta ett recept med webbadress. Ange URL:en för webbplatsen du vill hämta, och Mealie kommer att försöka hämta receptet från den webbplatsen och lägga till det i din samling.",
"scrape-recipe-have-a-lot-of-recipes": "Have a lot of recipes you want to scrape at once?", "scrape-recipe-have-a-lot-of-recipes": "Har du många recept som du vill skrapa på en gång?",
"scrape-recipe-suggest-bulk-importer": "Try out the bulk importer", "scrape-recipe-suggest-bulk-importer": "Testa massimportören",
"import-original-keywords-as-tags": "Importera ursprungliga sökord som taggar", "import-original-keywords-as-tags": "Importera ursprungliga sökord som taggar",
"stay-in-edit-mode": "Stanna kvar i redigeringsläge", "stay-in-edit-mode": "Stanna kvar i redigeringsläge",
"import-from-zip": "Importera från zip", "import-from-zip": "Importera från zip",
@@ -793,7 +796,7 @@
"untagged-count": "Otaggad {count}", "untagged-count": "Otaggad {count}",
"create-a-tag": "Skapa tagg", "create-a-tag": "Skapa tagg",
"tag-name": "Taggnamn", "tag-name": "Taggnamn",
"tag": "Tag" "tag": "Tagg"
}, },
"tool": { "tool": {
"tools": "Redskap", "tools": "Redskap",
@@ -803,7 +806,7 @@
"create-new-tool": "Skapa nytt verktyg", "create-new-tool": "Skapa nytt verktyg",
"on-hand-checkbox-label": "Visa som tillgänglig (markerad)", "on-hand-checkbox-label": "Visa som tillgänglig (markerad)",
"required-tools": "Verktyg som krävs", "required-tools": "Verktyg som krävs",
"tool": "Tool" "tool": "Verktyg"
}, },
"user": { "user": {
"admin": "Administratör", "admin": "Administratör",
@@ -1091,19 +1094,19 @@
"title-temporary-directory": "Tillfällig mapp (.temp)", "title-temporary-directory": "Tillfällig mapp (.temp)",
"title-backups-directory": "Katalog för säkerhetskopior (säkerhetskopior)", "title-backups-directory": "Katalog för säkerhetskopior (säkerhetskopior)",
"title-groups-directory": "Gruppkatalog (grupper)", "title-groups-directory": "Gruppkatalog (grupper)",
"title-recipes-directory": "Recipes Directory (recipes)", "title-recipes-directory": "Receptkatalog (recept)",
"title-user-directory": "User Directory (user)" "title-user-directory": "Användarkatalog (användare)"
}, },
"action-delete-log-files-name": "Radera loggfiler", "action-delete-log-files-name": "Radera loggfiler",
"action-delete-log-files-description": "Tar bort alla loggfiler", "action-delete-log-files-description": "Tar bort alla loggfiler",
"action-clean-directories-name": "Rensa mappar", "action-clean-directories-name": "Rensa mappar",
"action-clean-directories-description": "Removes all the recipe folders that are not valid UUIDs", "action-clean-directories-description": "Tar bort alla receptmappar som inte är giltiga UUID",
"action-clean-temporary-files-name": "Rensa tillfälliga filer", "action-clean-temporary-files-name": "Rensa tillfälliga filer",
"action-clean-temporary-files-description": "Removes all files and folders in the .temp directory", "action-clean-temporary-files-description": "Tar bort alla filer och mappar i .temp-katalogen",
"action-clean-images-name": "Clean Images", "action-clean-images-name": "Rensa bilder",
"action-clean-images-description": "Removes all the images that don't end with .webp", "action-clean-images-description": "Tar bort alla bilder som inte slutar med .webp",
"actions-description": "Maintenance actions are {destructive_in_bold} and should be used with caution. Performing any of these actions is {irreversible_in_bold}.", "actions-description": "Underhållsåtgärder är {destructive_in_bold} och bör användas med försiktighet. Att utföra någon av dessa åtgärder är {irreversible_in_bold}.",
"actions-description-destructive": "destructive", "actions-description-destructive": "destruktiv",
"actions-description-irreversible": "oåterkallelig", "actions-description-irreversible": "oåterkallelig",
"logs-action-refresh": "Uppdatera loggar", "logs-action-refresh": "Uppdatera loggar",
"logs-page-title": "Mealie loggar", "logs-page-title": "Mealie loggar",
@@ -1113,11 +1116,11 @@
"actions-title": "Åtgärder" "actions-title": "Åtgärder"
}, },
"ingredients-natural-language-processor": "Ingredients Natural Language Processor", "ingredients-natural-language-processor": "Ingredients Natural Language Processor",
"ingredients-natural-language-processor-explanation": "Mealie uses Conditional Random Fields (CRFs) for parsing and processing ingredients. The model used for ingredients is based off a data set of over 100,000 ingredients from a dataset compiled by the New York Times. Note that as the model is trained in English only, you may have varied results when using the model in other languages. This page is a playground for testing the model.", "ingredients-natural-language-processor-explanation": "Mealie använder villkorliga slumpfält (CRF) för tolkning och bearbetning av ingredienser. Modellen som används för ingredienser är baserad på en uppsättning data på över 100.000 ingredienser från en dataset sammanställd av New York Times. Observera att eftersom modellen endast är utbildad på engelska kan du ha olika resultat när du använder modellen på andra språk. Denna sida är en lekplats för att testa modellen.",
"ingredients-natural-language-processor-explanation-2": "It's not perfect, but it yields great results in general and is a good starting point for manually parsing ingredients into individual fields. Alternatively, you can also use the \"Brute\" processor that uses a pattern matching technique to identify ingredients.", "ingredients-natural-language-processor-explanation-2": "Det är inte perfekt, men det ger bra resultat i allmänhet och är en bra utgångspunkt för att manuellt tolka ingredienser i enskilda områden. Alternativt kan du också använda \"Brute\" processor som använder en mönstermatchningsteknik för att identifiera ingredienser.",
"nlp": "NLP", "nlp": "NLP",
"brute": "Brute", "brute": "Brute",
"show-individual-confidence": "Show individual confidence", "show-individual-confidence": "Visa individuella självförtroende",
"ingredient-text": "Ingrediens text", "ingredient-text": "Ingrediens text",
"average-confident": "{0} Säker", "average-confident": "{0} Säker",
"try-an-example": "Försök med ett exempel", "try-an-example": "Försök med ett exempel",
@@ -1141,11 +1144,11 @@
"personal": "Personligt", "personal": "Personligt",
"personal-description": "Detta är inställningar som är personliga för dig. Ändringar här påverkar inte andra användare", "personal-description": "Detta är inställningar som är personliga för dig. Ändringar här påverkar inte andra användare",
"user-settings": "Användarinställningar", "user-settings": "Användarinställningar",
"user-settings-description": "Manage your preferences, change your password, and update your email", "user-settings-description": "Hantera dina inställningar, ändra ditt lösenord och uppdatera din e-post",
"api-tokens-description": "Manage your API Tokens for access from external applications", "api-tokens-description": "Hantera dina API-Tokens för åtkomst från externa applikationer",
"group-description": "These items are shared within your group. Editing one of them will change it for the whole group!", "group-description": "Dessa objekt delas inom din grupp. Att redigera en av dem kommer att ändra den för hela gruppen!",
"group-settings": "Gruppinställningar", "group-settings": "Gruppinställningar",
"group-settings-description": "Manage your common group settings like mealplan and privacy settings.", "group-settings-description": "Hantera dina gemensamma gruppinställningar som måltidsplan och sekretessinställningar.",
"cookbooks-description": "Hantera en samling receptkategorier och generera sidor för dem.", "cookbooks-description": "Hantera en samling receptkategorier och generera sidor för dem.",
"members": "Medlemmar", "members": "Medlemmar",
"members-description": "Se vem som är med i din grupp och hantera deras behörigheter.", "members-description": "Se vem som är med i din grupp och hantera deras behörigheter.",
@@ -1160,7 +1163,7 @@
"error-sending-email": "Fel vid sändning av e-post", "error-sending-email": "Fel vid sändning av e-post",
"personal-information": "Personlig information", "personal-information": "Personlig information",
"preferences": "Preferenser", "preferences": "Preferenser",
"show-advanced-description": "Show advanced features (API Keys, Webhooks, and Data Management)", "show-advanced-description": "Visa avancerade funktioner (API-nycklar, webhooks och datahantering)",
"back-to-profile": "Tillbaka till profilen", "back-to-profile": "Tillbaka till profilen",
"looking-for-privacy-settings": "Letar du efter sekretessinställningar?", "looking-for-privacy-settings": "Letar du efter sekretessinställningar?",
"manage-your-api-tokens": "Hantera dina API Tokens", "manage-your-api-tokens": "Hantera dina API Tokens",
@@ -1177,7 +1180,7 @@
"public-cookbook": "Offentlig kokbok", "public-cookbook": "Offentlig kokbok",
"public-cookbook-description": "Offentliga kokböcker kan delas med icke-mealie användare och kommer att visas på din gruppsida.", "public-cookbook-description": "Offentliga kokböcker kan delas med icke-mealie användare och kommer att visas på din gruppsida.",
"filter-options": "Filterinställningar", "filter-options": "Filterinställningar",
"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.", "filter-options-description": "När använd allt är valt kommer kokboken bara att innehålla recept som har alla objekt valda. Detta gäller för varje delmängd av väljare och inte ett tvärsnitt av de valda objekt.",
"require-all-categories": "Kräv alla kategorier", "require-all-categories": "Kräv alla kategorier",
"require-all-tags": "Kräv alla taggar", "require-all-tags": "Kräv alla taggar",
"require-all-tools": "Kräv alla verktyg", "require-all-tools": "Kräv alla verktyg",

View File

@@ -89,7 +89,7 @@
"create": "Oluştur", "create": "Oluştur",
"created": "Oluşturuldu", "created": "Oluşturuldu",
"custom": "Özel", "custom": "Özel",
"dashboard": "Kontrol Paneli", "dashboard": "Pano",
"delete": "Sil", "delete": "Sil",
"disabled": "Devre Dışı", "disabled": "Devre Dışı",
"download": "İndir", "download": "İndir",
@@ -116,7 +116,7 @@
"link-copied": "Bağlantı Kopyalandı", "link-copied": "Bağlantı Kopyalandı",
"loading": "Yükleniyor", "loading": "Yükleniyor",
"loading-events": "Etkinlikler yükleniyor", "loading-events": "Etkinlikler yükleniyor",
"loading-recipe": "Loading recipe...", "loading-recipe": "Tarifler Yükleniyor...",
"loading-ocr-data": "OCR verileri yükleniyor...", "loading-ocr-data": "OCR verileri yükleniyor...",
"loading-recipes": "Tarifler Yükleniyor", "loading-recipes": "Tarifler Yükleniyor",
"message": "İleti", "message": "İleti",
@@ -250,7 +250,7 @@
"general-preferences": "Genel Tercihler", "general-preferences": "Genel Tercihler",
"group-recipe-preferences": "Grup Tarif Tercihleri", "group-recipe-preferences": "Grup Tarif Tercihleri",
"report": "Rapor Et", "report": "Rapor Et",
"report-with-id": "Report ID: {id}", "report-with-id": "Rapor kimliği: {id}",
"group-management": "Grup Yönetimi", "group-management": "Grup Yönetimi",
"admin-group-management": "Yönetici Grup Yönetimi", "admin-group-management": "Yönetici Grup Yönetimi",
"admin-group-management-text": "Bu gruptaki değişiklikler hemen yansıtılacaktır.", "admin-group-management-text": "Bu gruptaki değişiklikler hemen yansıtılacaktır.",
@@ -258,6 +258,7 @@
}, },
"meal-plan": { "meal-plan": {
"create-a-new-meal-plan": "Yeni Öğün Planı Oluştur", "create-a-new-meal-plan": "Yeni Öğün Planı Oluştur",
"update-this-meal-plan": "Bu Yemek Planını Güncelle",
"dinner-this-week": "Bu Haftaki Akşam Yemeği", "dinner-this-week": "Bu Haftaki Akşam Yemeği",
"dinner-today": "Bugünkü Akşam Yemeği", "dinner-today": "Bugünkü Akşam Yemeği",
"dinner-tonight": "BU AKŞAMKİ AKŞAM YEMEĞI", "dinner-tonight": "BU AKŞAMKİ AKŞAM YEMEĞI",
@@ -308,9 +309,9 @@
"meal-plan-rules-description": "Yemek planlarınız için tariflerin otomatik seçilmesine yönelik kurallar oluşturabilirsiniz. Bu kurallar, sunucu tarafından yemek planları oluştururken seçilecek rastgele tarif havuzunu belirlemek için kullanılır. Kuralların aynı gün/tür kısıtlamalarına sahip olması durumunda kuralların kategorilerinin birleştirileceğini unutmayın. Uygulamada yinelenen kurallar oluşturmak gereksizdir ancak bunu yapmak mümkündür.", "meal-plan-rules-description": "Yemek planlarınız için tariflerin otomatik seçilmesine yönelik kurallar oluşturabilirsiniz. Bu kurallar, sunucu tarafından yemek planları oluştururken seçilecek rastgele tarif havuzunu belirlemek için kullanılır. Kuralların aynı gün/tür kısıtlamalarına sahip olması durumunda kuralların kategorilerinin birleştirileceğini unutmayın. Uygulamada yinelenen kurallar oluşturmak gereksizdir ancak bunu yapmak mümkündür.",
"new-rule-description": "When creating a new rule for a meal plan you can restrict the rule to be applicable for a specific day of the week and/or a specific type of meal. To apply a rule to all days or all meal types you can set the rule to \"Any\" which will apply it to all the possible values for the day and/or meal type.", "new-rule-description": "When creating a new rule for a meal plan you can restrict the rule to be applicable for a specific day of the week and/or a specific type of meal. To apply a rule to all days or all meal types you can set the rule to \"Any\" which will apply it to all the possible values for the day and/or meal type.",
"recipe-rules": "Tarif Kuralları", "recipe-rules": "Tarif Kuralları",
"applies-to-all-days": "Applies to all days", "applies-to-all-days": "Tüm günler için geçerlidir",
"applies-on-days": "Applies on {0}s", "applies-on-days": "{0} günlerine geçerlidir",
"meal-plan-settings": "Meal Plan Settings" "meal-plan-settings": "Öğün Planı Ayarları"
}, },
"migration": { "migration": {
"migration-data-removed": "Migration data removed", "migration-data-removed": "Migration data removed",
@@ -327,7 +328,7 @@
"nextcloud": { "nextcloud": {
"description": "Migrate data from a Nextcloud Cookbook instance", "description": "Migrate data from a Nextcloud Cookbook instance",
"description-long": "Nextcloud tarifleri, Nextcloud'da saklanan verileri içeren bir zip dosyasından içe aktarılabilir. Tariflerinizin içe aktarılabilmesini sağlamak için aşağıdaki örnek klasör yapısına bakın.", "description-long": "Nextcloud tarifleri, Nextcloud'da saklanan verileri içeren bir zip dosyasından içe aktarılabilir. Tariflerinizin içe aktarılabilmesini sağlamak için aşağıdaki örnek klasör yapısına bakın.",
"title": "Nextcloud Cookbook" "title": "Nextcloud Yemek Kitabı"
}, },
"copymethat": { "copymethat": {
"description-long": "Mealie, Copy Me That'den tarifleri içe aktarabilir. Tariflerinizi HTML biçiminde dışa aktarın, ardından aşağıdaki .zip dosyasını yükleyin.", "description-long": "Mealie, Copy Me That'den tarifleri içe aktarabilir. Tariflerinizi HTML biçiminde dışa aktarın, ardından aşağıdaki .zip dosyasını yükleyin.",
@@ -343,7 +344,7 @@
}, },
"tandoor": { "tandoor": {
"description-long": "Mealie, Tandoor'dan tarifleri içe aktarabilir. Verilerinizi \"Varsayılan\" biçimde dışa aktarın, ardından aşağıdaki .zip dosyasını yükleyin.", "description-long": "Mealie, Tandoor'dan tarifleri içe aktarabilir. Verilerinizi \"Varsayılan\" biçimde dışa aktarın, ardından aşağıdaki .zip dosyasını yükleyin.",
"title": "Tandoor Recipes" "title": "Tandoor Tarifleri"
}, },
"recipe-data-migrations": "Recipe Data Migrations", "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.", "recipe-data-migrations-explanation": "Recipes can be migrated from another supported application to Mealie. This is a great way to get started with Mealie.",
@@ -363,7 +364,7 @@
"new-recipe": { "new-recipe": {
"bulk-add": "Toplu Ekle", "bulk-add": "Toplu Ekle",
"error-details": "Only websites containing ld+json or microdata can be imported by Mealie. Most major recipe websites support this data structure. If your site cannot be imported but there is json data in the log, please submit a github issue with the URL and data.", "error-details": "Only websites containing ld+json or microdata can be imported by Mealie. Most major recipe websites support this data structure. If your site cannot be imported but there is json data in the log, please submit a github issue with the URL and data.",
"error-title": "Looks Like We Couldn't Find Anything", "error-title": "Görünüşe Göre Hiçbir Şey Bulamadık",
"from-url": "Tarif İçe Aktar", "from-url": "Tarif İçe Aktar",
"github-issues": "GitHub Sorunları", "github-issues": "GitHub Sorunları",
"google-ld-json-info": "Google ld+json Info", "google-ld-json-info": "Google ld+json Info",
@@ -383,52 +384,52 @@
"make-recipe-image": "Bunu tarif resmi yap" "make-recipe-image": "Bunu tarif resmi yap"
}, },
"page": { "page": {
"404-page-not-found": "404 Page not found", "404-page-not-found": "404 Sayfa bulunamadı",
"all-recipes": "All Recipes", "all-recipes": "Tüm Tarifler",
"new-page-created": "New page created", "new-page-created": "Yeni sayfa oluşturuldu",
"page": "Sayfa", "page": "Sayfa",
"page-creation-failed": "Page creation failed", "page-creation-failed": "Sayfa oluşturma başarısız",
"page-deleted": "Page deleted", "page-deleted": "Sayfa silindi",
"page-deletion-failed": "Page deletion failed", "page-deletion-failed": "Sayfa silinemedi",
"page-update-failed": "Page update failed", "page-update-failed": "Sayfa güncelleme başarısız",
"page-updated": "Page updated", "page-updated": "Sayfa güncellendi",
"pages-update-failed": "Pages update failed", "pages-update-failed": "Sayfaları güncelleme başarısız",
"pages-updated": "Pages updated", "pages-updated": "Sayfalar güncellendi",
"404-not-found": "404 Sayfa Bulunamadı", "404-not-found": "404 Sayfa Bulunamadı",
"an-error-occurred": "An error occurred" "an-error-occurred": "Bir hata oluştu"
}, },
"recipe": { "recipe": {
"add-key": "Add Key", "add-key": "Anahtar Ekle",
"add-to-favorites": "Add to Favorites", "add-to-favorites": "Sık kullanılanlara ekle",
"api-extras": "API Extras", "api-extras": "API Ekstraları",
"calories": "Calories", "calories": "Kalori",
"calories-suffix": "calories", "calories-suffix": "kalori",
"carbohydrate-content": "Carbohydrate", "carbohydrate-content": "Karbonhidrat",
"categories": "Categories", "categories": "Kategoriler",
"comment-action": "Yorum", "comment-action": "Yorum",
"comment": "Yorum", "comment": "Yorum",
"comments": "Yorumlar", "comments": "Yorumlar",
"delete-confirmation": "Are you sure you want to delete this recipe?", "delete-confirmation": "Bu tarifi silmek istediğinizden emin misiniz?",
"delete-recipe": "Delete Recipe", "delete-recipe": "Tarifi Sil",
"description": "Description", "description": "ıklama",
"disable-amount": "Disable Ingredient Amounts", "disable-amount": "Malzeme Miktarlarını Devre Dışı Bırak",
"disable-comments": "Disable Comments", "disable-comments": "Yorumları Devre Dışı Bırak",
"duplicate": "Tarifi yinele", "duplicate": "Tarifi yinele",
"duplicate-name": "Yeni tarif adı", "duplicate-name": "Yeni tarif adı",
"edit-scale": "Edit Scale", "edit-scale": "Oranlamayı düzenle",
"fat-content": "Yağ", "fat-content": "Yağ",
"fiber-content": "Lif", "fiber-content": "Lif",
"grams": "grams", "grams": "gram",
"ingredient": "Ingredient", "ingredient": "İçindekiler",
"ingredients": "Ingredients", "ingredients": "Malzemeler",
"insert-ingredient": "İçerik Ekle", "insert-ingredient": "İçerik Ekle",
"insert-section": "Insert Section", "insert-section": "Bölüm Ekle",
"instructions": "Instructions", "instructions": "Yapılışı",
"key-name-required": "Key Name Required", "key-name-required": "Anahtar Adı Zorunlu",
"landscape-view-coming-soon": "Landscape View (Coming Soon)", "landscape-view-coming-soon": "Landscape View (Coming Soon)",
"milligrams": "milligrams", "milligrams": "miligram",
"new-key-name": "New Key Name", "new-key-name": "Yeni Anahtar İsmi",
"no-white-space-allowed": "No White Space Allowed", "no-white-space-allowed": "Boşluklara İzin Verilmiyor",
"note": "Not", "note": "Not",
"nutrition": "Besin Değeri", "nutrition": "Besin Değeri",
"object-key": "Object Key", "object-key": "Object Key",
@@ -449,13 +450,13 @@
"recipe-updated": "Tarif güncellendi", "recipe-updated": "Tarif güncellendi",
"remove-from-favorites": "Favorilerden Kaldır", "remove-from-favorites": "Favorilerden Kaldır",
"remove-section": "Bölümü Kaldır", "remove-section": "Bölümü Kaldır",
"save-recipe-before-use": "Save recipe before use", "save-recipe-before-use": "Kullanmadan önce tarifi kaydedin",
"section-title": "Section Title", "section-title": "Bölüm başlığı",
"servings": "Servings", "servings": "Porsiyon",
"share-recipe-message": "I wanted to share my {0} recipe with you.", "share-recipe-message": "{0} tarifimi sizlerle paylaşmak istedim.",
"show-nutrition-values": "Show Nutrition Values", "show-nutrition-values": "Besin Değerlerini Göster",
"sodium-content": "Sodyum", "sodium-content": "Sodyum",
"step-index": "Step: {step}", "step-index": "Adım: {step}",
"sugar-content": "Şeker", "sugar-content": "Şeker",
"title": "Başlık", "title": "Başlık",
"total-time": "Toplam Süre", "total-time": "Toplam Süre",
@@ -472,16 +473,18 @@
"add-to-timeline": "Zaman Tüneline Ekle", "add-to-timeline": "Zaman Tüneline Ekle",
"recipe-added-to-list": "Tarif listeye eklendi", "recipe-added-to-list": "Tarif listeye eklendi",
"recipes-added-to-list": "Tarifler listeye eklendi", "recipes-added-to-list": "Tarifler listeye eklendi",
"successfully-added-to-list": "Listeye başarıyla eklendi",
"recipe-added-to-mealplan": "Tarif yemek planına eklendi", "recipe-added-to-mealplan": "Tarif yemek planına eklendi",
"failed-to-add-recipes-to-list": "Tarif listeye eklenemedi", "failed-to-add-recipes-to-list": "Tarif listeye eklenemedi",
"failed-to-add-recipe-to-mealplan": "Tarif yemek planına eklerken hata oluştu", "failed-to-add-recipe-to-mealplan": "Tarif yemek planına eklerken hata oluştu",
"failed-to-add-to-list": "Listeye eklenemedi",
"yield": "Yield", "yield": "Yield",
"quantity": "Miktar", "quantity": "Miktar",
"choose-unit": "Birim Seçin", "choose-unit": "Birim Seçin",
"press-enter-to-create": "Oluşturmak İçin Enter'a Basın", "press-enter-to-create": "Oluşturmak İçin Enter'a Basın",
"choose-food": "Choose Food", "choose-food": "Yemek Seç",
"notes": "Notlar", "notes": "Notlar",
"toggle-section": "Toggle Section", "toggle-section": "Bölümü Görünürlüğünü Değiştir",
"see-original-text": "Orijinal Metni Göster", "see-original-text": "Orijinal Metni Göster",
"original-text-with-value": "Orijinal Metin: {originalText}", "original-text-with-value": "Orijinal Metin: {originalText}",
"ingredient-linker": "Ingredient Linker", "ingredient-linker": "Ingredient Linker",
@@ -489,8 +492,8 @@
"auto": "Otomatik", "auto": "Otomatik",
"cook-mode": "Pişirme Modu", "cook-mode": "Pişirme Modu",
"link-ingredients": "Link Ingredients", "link-ingredients": "Link Ingredients",
"merge-above": "Merge Above", "merge-above": "Yukarıda Birleştir",
"reset-scale": "Reset Scale", "reset-scale": "Ölçeği Sıfırla",
"decrease-scale-label": "Decrease Scale by 1", "decrease-scale-label": "Decrease Scale by 1",
"increase-scale-label": "Increase Scale by 1", "increase-scale-label": "Increase Scale by 1",
"locked": "Kilitli", "locked": "Kilitli",
@@ -510,24 +513,24 @@
"made-this": "Bunu ben yaptım", "made-this": "Bunu ben yaptım",
"how-did-it-turn-out": "Nasıl oldu?", "how-did-it-turn-out": "Nasıl oldu?",
"user-made-this": "{user} bunu yaptı", "user-made-this": "{user} bunu yaptı",
"last-made-date": "Last Made {date}", "last-made-date": "En Son {date} Yapıldı",
"api-extras-description": "Tarif ekstraları Mealie API'nin önemli bir özelliğidir. Üçüncü taraf uygulamalardan referans almak üzere bir tarif içinde özel JSON anahtar/değer çiftleri oluşturmanıza olanak tanır. Bu tuşları, örneğin otomasyonları tetiklemek veya istediğiniz cihaza iletilecek özel mesajları bilgi sağlamak için kullanabilirsiniz.", "api-extras-description": "Tarif ekstraları Mealie API'nin önemli bir özelliğidir. Üçüncü taraf uygulamalardan referans almak üzere bir tarif içinde özel JSON anahtar/değer çiftleri oluşturmanıza olanak tanır. Bu tuşları, örneğin otomasyonları tetiklemek veya istediğiniz cihaza iletilecek özel mesajları bilgi sağlamak için kullanabilirsiniz.",
"message-key": "Message Key", "message-key": "Message Key",
"parse": "Parse", "parse": "Parse",
"attach-images-hint": "Attach images by dragging & dropping them into the editor", "attach-images-hint": "Düzenleyiciye sürükleyip bırakarak görselleri ekleyin",
"drop-image": "Drop image", "drop-image": "Yüklenecek resimi sürükleyip bırakın",
"enable-ingredient-amounts-to-use-this-feature": "Enable ingredient amounts to use this feature", "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.", "recipes-with-units-or-foods-defined-cannot-be-parsed": "Recipes with units or foods defined cannot be parsed.",
"parse-ingredients": "Parse ingredients", "parse-ingredients": "Parse ingredients",
"edit-markdown": "Edit Markdown", "edit-markdown": "Edit Markdown",
"recipe-creation": "Recipe Creation", "recipe-creation": "Tarif Oluştur",
"select-one-of-the-various-ways-to-create-a-recipe": "Select one of the various ways to create a recipe", "select-one-of-the-various-ways-to-create-a-recipe": "Select one of the various ways to create a recipe",
"looking-for-migrations": "Looking For Migrations?", "looking-for-migrations": "Verileri Aktarmayı Mi Arıyorsunuz?",
"import-with-url": "Import with URL", "import-with-url": "URL ile içe aktar",
"create-recipe": "Create Recipe", "create-recipe": "Tarif Oluştur",
"import-with-zip": "Import with .zip", "import-with-zip": ".zip ile içe aktar",
"create-recipe-from-an-image": "Create recipe from an image", "create-recipe-from-an-image": "Görüntüden yemek tarifi oluştur",
"bulk-url-import": "Bulk URL Import", "bulk-url-import": "Toplu URL İçe Aktarma",
"debug-scraper": "Debug Scraper", "debug-scraper": "Debug Scraper",
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Create a recipe by providing the name. All recipes must have unique names.", "create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Create a recipe by providing the name. All recipes must have unique names.",
"new-recipe-names-must-be-unique": "New recipe names must be unique", "new-recipe-names-must-be-unique": "New recipe names must be unique",
@@ -535,7 +538,7 @@
"scrape-recipe-description": "Scrape a recipe by url. Provide the url for the site you want to scrape, and Mealie will attempt to scrape the recipe from that site and add it to your collection.", "scrape-recipe-description": "Scrape a recipe by url. Provide the url for the site you want to scrape, and Mealie will attempt to scrape the recipe from that site and add it to your collection.",
"scrape-recipe-have-a-lot-of-recipes": "Aynı anda kazımak istediğiniz birçok tarifiniz mi var?", "scrape-recipe-have-a-lot-of-recipes": "Aynı anda kazımak istediğiniz birçok tarifiniz mi var?",
"scrape-recipe-suggest-bulk-importer": "Toplu ithalatçıyı deneyin", "scrape-recipe-suggest-bulk-importer": "Toplu ithalatçıyı deneyin",
"import-original-keywords-as-tags": "Import original keywords as tags", "import-original-keywords-as-tags": "Orijinal anahtar kelimeleri etiket olarak içe aktar",
"stay-in-edit-mode": "Stay in Edit mode", "stay-in-edit-mode": "Stay in Edit mode",
"import-from-zip": "Zip'ten içeri aktar", "import-from-zip": "Zip'ten içeri aktar",
"import-from-zip-description": "Import a single recipe that was exported from another Mealie instance.", "import-from-zip-description": "Import a single recipe that was exported from another Mealie instance.",
@@ -544,7 +547,7 @@
"upload-a-png-image-from-a-recipe-book": "Upload a png image from a recipe book", "upload-a-png-image-from-a-recipe-book": "Upload a png image from a recipe book",
"recipe-bulk-importer": "Recipe Bulk Importer", "recipe-bulk-importer": "Recipe Bulk Importer",
"recipe-bulk-importer-description": "The Bulk recipe importer allows you to import multiple recipes at once by queueing the sites on the backend and running the task in the background. This can be useful when initially migrating to Mealie, or when you want to import a large number of recipes.", "recipe-bulk-importer-description": "The Bulk recipe importer allows you to import multiple recipes at once by queueing the sites on the backend and running the task in the background. This can be useful when initially migrating to Mealie, or when you want to import a large number of recipes.",
"set-categories-and-tags": "Set Categories and Tags", "set-categories-and-tags": "Kategorileri ve Etiketleri Belirleyin",
"bulk-imports": "Bulk Imports", "bulk-imports": "Bulk Imports",
"bulk-import-process-has-started": "Bulk Import process has started", "bulk-import-process-has-started": "Bulk Import process has started",
"bulk-import-process-has-failed": "Bulk import process has failed", "bulk-import-process-has-failed": "Bulk import process has failed",
@@ -562,9 +565,9 @@
}, },
"search": { "search": {
"advanced-search": "Advanced Search", "advanced-search": "Advanced Search",
"and": "and", "and": "ve",
"exclude": "Exclude", "exclude": "Hariç",
"include": "Include", "include": "Dahil",
"max-results": "Max Results", "max-results": "Max Results",
"or": "Veya", "or": "Veya",
"has-any": "Herhangi biri var", "has-any": "Herhangi biri var",
@@ -591,10 +594,10 @@
"create-heading": "Create a Backup", "create-heading": "Create a Backup",
"delete-backup": "Delete Backup", "delete-backup": "Delete Backup",
"error-creating-backup-see-log-file": "Error Creating Backup. See Log File", "error-creating-backup-see-log-file": "Error Creating Backup. See Log File",
"full-backup": "Full Backup", "full-backup": "Tam Yedekleme",
"import-summary": "Import Summary", "import-summary": "İçe aktarma özeti",
"partial-backup": "Partial Backup", "partial-backup": "Parçalı Yedekleme",
"unable-to-delete-backup": "Unable to Delete Backup.", "unable-to-delete-backup": "Yedekleme Silinemedi.",
"experimental-description": "Yedeklemeler, sitenin veritabanının ve veri dizininin toplam anlık görüntüleridir. Bu, tüm verileri içerir ve verilerin alt kümelerini hariç tutacak şekilde ayarlanamaz. Bunu Mealie'nin belirli bir andaki anlık görüntüsü olarak düşünebilirsiniz. Bunlar, verileri dışa ve içe aktarmanın veya siteyi harici bir konuma yedeklemenin veritabanından bağımsız bir yolu olarak hizmet eder.", "experimental-description": "Yedeklemeler, sitenin veritabanının ve veri dizininin toplam anlık görüntüleridir. Bu, tüm verileri içerir ve verilerin alt kümelerini hariç tutacak şekilde ayarlanamaz. Bunu Mealie'nin belirli bir andaki anlık görüntüsü olarak düşünebilirsiniz. Bunlar, verileri dışa ve içe aktarmanın veya siteyi harici bir konuma yedeklemenin veritabanından bağımsız bir yolu olarak hizmet eder.",
"backup-restore": "Yedekleme Geri Yükleme", "backup-restore": "Yedekleme Geri Yükleme",
"back-restore-description": "Restoring this backup will overwrite all the current data in your database and in the data directory and replace them with the contents of this backup. {cannot-be-undone} If the restoration is successful, you will be logged out.", "back-restore-description": "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.",
@@ -751,11 +754,11 @@
"completed-on": "{date} tarihinde tamamladı" "completed-on": "{date} tarihinde tamamladı"
}, },
"sidebar": { "sidebar": {
"all-recipes": "All Recipes", "all-recipes": "Tüm Tarifler",
"backups": "Backups", "backups": "Yedeklemeler",
"categories": "Categories", "categories": "Kategoriler",
"cookbooks": "Cookbooks", "cookbooks": "Yemek Kitapları",
"dashboard": "Dashboard", "dashboard": "Pano",
"home-page": "Home Page", "home-page": "Home Page",
"manage-users": "Manage Users", "manage-users": "Manage Users",
"migrations": "Migrations", "migrations": "Migrations",
@@ -822,50 +825,50 @@
"email": "E-Posta", "email": "E-Posta",
"error-cannot-delete-super-user": "Error! Cannot Delete Super User", "error-cannot-delete-super-user": "Error! Cannot Delete Super User",
"existing-password-does-not-match": "Existing password does not match", "existing-password-does-not-match": "Existing password does not match",
"full-name": "Full Name", "full-name": "İsim Soyisim",
"generate-password-reset-link": "Parola Sıfırlama Bağlantısı Oluştur", "generate-password-reset-link": "Parola Sıfırlama Bağlantısı Oluştur",
"invite-only": "Invite Only", "invite-only": "Sadece Davetli",
"link-id": "Link ID", "link-id": "Bağlantı kimliği",
"link-name": "Link Name", "link-name": "Bağlantı Adı",
"login": "Login", "login": "Giriş yap",
"logout": "Logout", "logout": "Oturumu Kapat",
"manage-users": "Manage Users", "manage-users": "Kullanıcıları Yönet",
"new-password": "New Password", "new-password": "Yeni Şifre",
"new-user": "Yeni Kullanıcı", "new-user": "Yeni Kullanıcı",
"password-has-been-reset-to-the-default-password": "Password has been reset to the default password", "password-has-been-reset-to-the-default-password": "Şifre varsayılan şifreye sıfırlandı",
"password-must-match": "Password must match", "password-must-match": "Şifre uyuşmalı",
"password-reset-failed": "Password reset failed", "password-reset-failed": "Şifre sıfırlama başarısız",
"password-updated": "Password updated", "password-updated": "Şifre güncellendi",
"password": "Password", "password": "Şifre",
"password-strength": "Password is {strength}", "password-strength": "Şifre {strength}",
"please-enter-password": "Lütfen yeni şifrenizi giriniz.", "please-enter-password": "Lütfen yeni şifrenizi giriniz.",
"register": "Register", "register": "Üye Ol",
"reset-password": "Reset Password", "reset-password": "Şifreyi Sıfırla",
"sign-in": "Sign in", "sign-in": "Oturum aç",
"total-mealplans": "Total MealPlans", "total-mealplans": "Total MealPlans",
"total-users": "Total Users", "total-users": "Total Users",
"upload-photo": "Upload Photo", "upload-photo": "Upload Photo",
"use-8-characters-or-more-for-your-password": "Use 8 characters or more for your password", "use-8-characters-or-more-for-your-password": "Şifreniz için 8 veya daha fazla karakter kullanın",
"user-created": "User created", "user-created": "Kullanıcı oluşturuldu",
"user-creation-failed": "User creation failed", "user-creation-failed": "Kullanıcı oluşturma başarısız",
"user-deleted": "User deleted", "user-deleted": "Kullanıcı silindi",
"user-id-with-value": "User ID: {id}", "user-id-with-value": "Kullanıcı Kimliği: {id}",
"user-id": "Kullanıcı Kimliği", "user-id": "Kullanıcı Kimliği",
"user-password": "User Password", "user-password": "User Password",
"user-successfully-logged-in": "User Successfully Logged In", "user-successfully-logged-in": "User Successfully Logged In",
"user-update-failed": "User update failed", "user-update-failed": "User update failed",
"user-updated": "User updated", "user-updated": "User updated",
"user": "Kullanıcı", "user": "Kullanıcı",
"username": "Username", "username": "Kullanıcı Adı",
"users-header": "USERS", "users-header": "KULLANICILAR",
"users": "Users", "users": "Kullanıcılar",
"user-not-found": "Kullanıcı bulunamadı", "user-not-found": "Kullanıcı bulunamadı",
"webhook-time": "Webhook Time", "webhook-time": "Webhook Time",
"webhooks-enabled": "Webhooks Enabled", "webhooks-enabled": "Webhooks Enabled",
"you-are-not-allowed-to-create-a-user": "You are not allowed to create a user", "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", "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": "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", "enable-advanced-content-description": "Gelişmiş özellikleri etkinleştirir. Tarif Ölçeklendirme, API anahtarları, Web Kancaları ve Veri Yönetimi gibi. Endişelenmeyin, bunu daha sonra istediğiniz zaman değiştirebilirsiniz",
"favorite-recipes": "Favorite Recipes", "favorite-recipes": "Favorite Recipes",
"email-or-username": "E-posta veya Kullanıcı Adı", "email-or-username": "E-posta veya Kullanıcı Adı",
"remember-me": "Beni Hatırla", "remember-me": "Beni Hatırla",
@@ -874,10 +877,10 @@
"account-locked-please-try-again-later": "Account Locked. Please try again later", "account-locked-please-try-again-later": "Account Locked. Please try again later",
"user-favorites": "User Favorites", "user-favorites": "User Favorites",
"password-strength-values": { "password-strength-values": {
"weak": "Weak", "weak": "Zayıf",
"good": "Good", "good": "İyi",
"strong": "Strong", "strong": "Güçlü",
"very-strong": "Very Strong" "very-strong": "Çok güçlü"
}, },
"user-management": "Kullanıcı Yönetimi", "user-management": "Kullanıcı Yönetimi",
"reset-locked-users": "Kilitli Kullanıcıları Sıfırla", "reset-locked-users": "Kilitli Kullanıcıları Sıfırla",
@@ -900,11 +903,11 @@
"changes-reflected-immediately": "Bu kullanıcıda yapılan değişiklikler hemen yansıtılacaktır." "changes-reflected-immediately": "Bu kullanıcıda yapılan değişiklikler hemen yansıtılacaktır."
}, },
"language-dialog": { "language-dialog": {
"translated": "translated", "translated": "çevirilmiş",
"choose-language": "Dil Seç", "choose-language": "Dil Seç",
"select-description": "Choose the language for the Mealie UI. The setting only applies to you, not other users.", "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!", "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" "read-the-docs": "Belgeleri okuyun"
}, },
"data-pages": { "data-pages": {
"foods": { "foods": {
@@ -919,8 +922,8 @@
"food-label": "Food Label", "food-label": "Food Label",
"edit-food": "Yiyecek Düzenle", "edit-food": "Yiyecek Düzenle",
"food-data": "Food Data", "food-data": "Food Data",
"example-food-singular": "ex: Onion", "example-food-singular": "örn: Soğan",
"example-food-plural": "ex: Onions" "example-food-plural": "örn: Soğan"
}, },
"units": { "units": {
"seed-dialog-text": "Seed the database with common units based on your local language.", "seed-dialog-text": "Seed the database with common units based on your local language.",
@@ -939,10 +942,10 @@
"unit-data": "Unit Data", "unit-data": "Unit Data",
"use-abbv": "Use Abbv.", "use-abbv": "Use Abbv.",
"fraction": "Fraction", "fraction": "Fraction",
"example-unit-singular": "ex: Tablespoon", "example-unit-singular": "örn: Yemek kaşığı",
"example-unit-plural": "ex: Tablespoons", "example-unit-plural": "örn: Yemek kaşığı",
"example-unit-abbreviation-singular": "ex: Tbsp", "example-unit-abbreviation-singular": "örn: Yk",
"example-unit-abbreviation-plural": "ex: Tbsps" "example-unit-abbreviation-plural": "örn: Yk"
}, },
"labels": { "labels": {
"seed-dialog-text": "Seed the database with common labels based on your local language.", "seed-dialog-text": "Seed the database with common labels based on your local language.",
@@ -1160,7 +1163,7 @@
"error-sending-email": "Error Sending Email", "error-sending-email": "Error Sending Email",
"personal-information": "Personal Information", "personal-information": "Personal Information",
"preferences": "Tercihler", "preferences": "Tercihler",
"show-advanced-description": "Show advanced features (API Keys, Webhooks, and Data Management)", "show-advanced-description": "Gelişmiş özellikleri göster (API Anahtarları, Web Kancaları ve Veri Yönetimi)",
"back-to-profile": "Back to Profile", "back-to-profile": "Back to Profile",
"looking-for-privacy-settings": "Looking for Privacy Settings?", "looking-for-privacy-settings": "Looking for Privacy Settings?",
"manage-your-api-tokens": "API Belirteçlerinizi Yönetin", "manage-your-api-tokens": "API Belirteçlerinizi Yönetin",

View File

@@ -258,6 +258,7 @@
}, },
"meal-plan": { "meal-plan": {
"create-a-new-meal-plan": "Створити новий план харчування", "create-a-new-meal-plan": "Створити новий план харчування",
"update-this-meal-plan": "Оновити цей план харчування",
"dinner-this-week": "Обід цього тижня", "dinner-this-week": "Обід цього тижня",
"dinner-today": "Обід сьогодні", "dinner-today": "Обід сьогодні",
"dinner-tonight": "Вечеря сьогодні", "dinner-tonight": "Вечеря сьогодні",
@@ -472,9 +473,11 @@
"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": "Успішно додано до списку",
"recipe-added-to-mealplan": "Рецепт додано до плану харчування", "recipe-added-to-mealplan": "Рецепт додано до плану харчування",
"failed-to-add-recipes-to-list": "Не вдалося додати рецепт до списку", "failed-to-add-recipes-to-list": "Не вдалося додати рецепт до списку",
"failed-to-add-recipe-to-mealplan": "Не вдалося додати рецепт до плану харчування", "failed-to-add-recipe-to-mealplan": "Не вдалося додати рецепт до плану харчування",
"failed-to-add-to-list": "Не вдалося додати до списку",
"yield": "Вихід", "yield": "Вихід",
"quantity": "Кількість", "quantity": "Кількість",
"choose-unit": "Виберіть одиниці вимірювання", "choose-unit": "Виберіть одиниці вимірювання",

View File

@@ -258,6 +258,7 @@
}, },
"meal-plan": { "meal-plan": {
"create-a-new-meal-plan": "Create a New Meal Plan", "create-a-new-meal-plan": "Create a New Meal Plan",
"update-this-meal-plan": "Update this Meal Plan",
"dinner-this-week": "Dinner This Week", "dinner-this-week": "Dinner This Week",
"dinner-today": "Dinner Today", "dinner-today": "Dinner Today",
"dinner-tonight": "DINNER TONIGHT", "dinner-tonight": "DINNER TONIGHT",
@@ -472,9 +473,11 @@
"add-to-timeline": "Add to Timeline", "add-to-timeline": "Add to Timeline",
"recipe-added-to-list": "Recipe added to list", "recipe-added-to-list": "Recipe added to list",
"recipes-added-to-list": "Recipes added to list", "recipes-added-to-list": "Recipes added to list",
"successfully-added-to-list": "Successfully added to list",
"recipe-added-to-mealplan": "Recipe added to mealplan", "recipe-added-to-mealplan": "Recipe added to mealplan",
"failed-to-add-recipes-to-list": "Failed to add recipe to list", "failed-to-add-recipes-to-list": "Failed to add recipe to list",
"failed-to-add-recipe-to-mealplan": "Failed to add recipe to mealplan", "failed-to-add-recipe-to-mealplan": "Failed to add recipe to mealplan",
"failed-to-add-to-list": "Failed to add to list",
"yield": "Yield", "yield": "Yield",
"quantity": "Quantity", "quantity": "Quantity",
"choose-unit": "Choose Unit", "choose-unit": "Choose Unit",

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