Compare commits

...

122 Commits

Author SHA1 Message Date
boc-the-git
42a33cd993 fix: Give update-image-tags job write permissions to the repo, for auto doco updater (#3138) 2024-02-10 03:49:26 +00:00
boc-the-git
d73817adad Merge pull request #3137 from mealie-recipes/renovate/python-multipart-0.x
Update dependency python-multipart to ^0.0.8
2024-02-10 14:20:06 +11:00
renovate[bot]
ce58da8e18 Update dependency python-multipart to ^0.0.8 2024-02-10 01:08:10 +00:00
boc-the-git
fe89981e78 Merge pull request #3135 from Kuchenpirat/feat-add-docker-to-dev-container
dev: add docker-in-docker to dev container
2024-02-10 07:18:21 +11:00
Kuchenpirat
520bc7154a Remove old comments 2024-02-09 21:12:06 +01:00
Kuchenpirat
a38dfc094e update to use newer version of the feature 2024-02-09 17:52:41 +00:00
Kuchenpirat
0a81579da1 Merge branch 'mealie-next' into feat-add-docker-to-dev-container 2024-02-09 17:41:14 +01:00
Kuchenpirat
f4e77f6837 add docker in docker 2024-02-09 16:32:18 +00:00
renovate[bot]
1e04e9424f Update dependency python-slugify to v8.0.4 (#3131)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-09 05:54:04 -09:00
boc-the-git
d1bbfece9d Merge pull request #3132 from mealie-recipes/l10n_mealie-next
New Crowdin updates
2024-02-09 20:00:38 +11:00
Hayden
94a85f9977 New translations en-us.json (French, Canada) 2024-02-09 02:54:34 -06:00
Hayden
3d0adda405 New translations en-us.json (English, United Kingdom) 2024-02-09 02:54:33 -06:00
Hayden
47086da6b6 New translations en-us.json (Latvian) 2024-02-09 02:54:32 -06:00
Hayden
9ce71c911f New translations en-us.json (Croatian) 2024-02-09 02:54:31 -06:00
Hayden
2244c3a8b5 New translations en-us.json (Portuguese, Brazilian) 2024-02-09 02:54:30 -06:00
Hayden
f0d0d0d463 New translations en-us.json (Icelandic) 2024-02-09 02:54:29 -06:00
Hayden
dbec3e58f9 New translations en-us.json (Galician) 2024-02-09 02:54:28 -06:00
Hayden
a5e56dc97f New translations en-us.json (Vietnamese) 2024-02-09 02:54:27 -06:00
Hayden
6d64418727 New translations en-us.json (Chinese Traditional) 2024-02-09 02:54:27 -06:00
Hayden
2b71174765 New translations en-us.json (Chinese Simplified) 2024-02-09 02:54:26 -06:00
Hayden
7f6de730a3 New translations en-us.json (Ukrainian) 2024-02-09 02:54:25 -06:00
Hayden
22cc19a085 New translations en-us.json (Turkish) 2024-02-09 02:54:24 -06:00
Hayden
b16fa49f16 New translations en-us.json (Swedish) 2024-02-09 02:54:23 -06:00
Hayden
90e373582b New translations en-us.json (Serbian (Cyrillic)) 2024-02-09 02:54:22 -06:00
Hayden
1b3cbb38ae New translations en-us.json (Slovenian) 2024-02-09 02:54:22 -06:00
Hayden
ac5a63e32d New translations en-us.json (Slovak) 2024-02-09 02:54:21 -06:00
Hayden
d5d86488a0 New translations en-us.json (Russian) 2024-02-09 02:54:20 -06:00
Hayden
3f9c46a763 New translations en-us.json (Portuguese) 2024-02-09 02:54:19 -06:00
Hayden
04176f6927 New translations en-us.json (Polish) 2024-02-09 02:54:18 -06:00
Hayden
2aa8c5810a New translations en-us.json (Norwegian) 2024-02-09 02:54:17 -06:00
Hayden
a071a7d16b New translations en-us.json (Dutch) 2024-02-09 02:54:16 -06:00
Hayden
a14c1b48c6 New translations en-us.json (Lithuanian) 2024-02-09 02:54:15 -06:00
Hayden
43174dcebe New translations en-us.json (Korean) 2024-02-09 02:54:13 -06:00
Hayden
3ee53977ec New translations en-us.json (Japanese) 2024-02-09 02:54:12 -06:00
Hayden
de1486c57f New translations en-us.json (Italian) 2024-02-09 02:54:12 -06:00
Hayden
a12aba6b9d New translations en-us.json (Hungarian) 2024-02-09 02:54:11 -06:00
Hayden
fb70bc76b3 New translations en-us.json (Hebrew) 2024-02-09 02:54:10 -06:00
Hayden
e6351273e2 New translations en-us.json (Finnish) 2024-02-09 02:54:09 -06:00
Hayden
82dcfb5635 New translations en-us.json (Greek) 2024-02-09 02:54:08 -06:00
Hayden
dddeed6359 New translations en-us.json (German) 2024-02-09 02:54:07 -06:00
Hayden
5f4a36bbd8 New translations en-us.json (Danish) 2024-02-09 02:54:06 -06:00
Hayden
f74610a0f7 New translations en-us.json (Czech) 2024-02-09 02:54:05 -06:00
Hayden
166f2486a2 New translations en-us.json (Catalan) 2024-02-09 02:54:04 -06:00
Hayden
88a5209237 New translations en-us.json (Bulgarian) 2024-02-09 02:54:03 -06:00
Hayden
d954869dd7 New translations en-us.json (Bulgarian) 2024-02-09 02:54:02 -06:00
Hayden
9cf181b415 New translations en-us.json (Arabic) 2024-02-09 02:54:01 -06:00
Hayden
5a7dc14a48 New translations en-us.json (Afrikaans) 2024-02-09 02:54:00 -06:00
Hayden
d916c0a472 New translations en-us.json (Spanish) 2024-02-09 02:54:00 -06:00
Hayden
a3693d83a3 New translations en-us.json (French) 2024-02-09 02:53:59 -06:00
Hayden
bb9620b67e New translations en-us.json (Romanian) 2024-02-09 02:53:58 -06:00
boc-the-git
3174216931 Merge pull request #2810 from michael-genson/fix/translation-issues-when-scraping
fix: Translate ISO 8601 Datetime Durations During Scraping/Parsing/Migrating
2024-02-09 06:37:28 +11:00
Michael Genson
94342081f9 I don't know why I changed this 2024-02-08 14:43:13 +00:00
boc-the-git
36088f0db9 Merge branch 'mealie-next' into fix/translation-issues-when-scraping 2024-02-08 20:58:43 +11:00
boc-the-git
4c60febb9c Merge pull request #3130 from mealie-recipes/l10n_mealie-next
New Crowdin updates
2024-02-08 19:58:51 +11:00
Hayden
0283185913 New translations en-us.json (Hebrew) 2024-02-08 02:52:45 -06:00
Michael Genson
f42114e966 feat: Redirect Logged Out Users to Default Group, If It's Public (#2772)
* add default group slug to app info if public

* redirect public user to default group

* added tests

---------

Co-authored-by: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com>
2024-02-07 07:53:55 -09:00
Michael Genson
d4de15ba1e Merge branch 'mealie-next' into fix/translation-issues-when-scraping 2024-02-07 09:58:45 -06:00
RealFoxie
e686fa671c Better bruteforce parsing for units (#3066)
* try to match units when brute parsing and no amount is matched

* brute parser: better handle multiple word food items

Also checks the case when a food might have been split in a unit + ingredient

* fix formatting

* add test cases for ingredient parsing that don't start with an amount

* parametrized tests and added ingredient data fixture

* fixed group_id ref in tests

* fixed test inputs

* add extra tests for units as third token

---------

Co-authored-by: Michael Genson <71845777+michael-genson@users.noreply.github.com>
2024-02-07 09:16:20 -06:00
renovate[bot]
597e6c8e0f chore(deps): update dependency mkdocs-material to v9.5.8 (#3124)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-07 04:38:04 +00:00
boc-the-git
d5ba69d828 Merge pull request #3123 from mealie-recipes/l10n_mealie-next
New Crowdin updates
2024-02-07 12:12:02 +11:00
boc-the-git
564f43085b Merge branch 'mealie-next' into l10n_mealie-next 2024-02-07 12:05:57 +11:00
Hayden
a0b6cc3e62 New translations en-us.json (Turkish) 2024-02-06 17:52:01 -06:00
Hayden
c960c00cbe New translations en-us.json (Swedish) 2024-02-06 17:52:00 -06:00
Hayden
47b60e9ad5 New translations en-us.json (Hungarian) 2024-02-06 17:51:59 -06:00
renovate[bot]
026ca0364e chore(deps): update dependency ruff to v0.2.1 (#3122)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-06 09:12:30 -06:00
Kuchenpirat
13e7dfe920 getAll if array is empty or non existant (#3120) 2024-02-05 07:37:15 -06:00
boc-the-git
8a3173094e Merge pull request #3111 from mealie-recipes/renovate/orjson-3.x-lockfile
fix(deps): update dependency orjson to v3.9.13
2024-02-05 20:53:34 +11:00
renovate[bot]
0d16a2a943 fix(deps): update dependency orjson to v3.9.13 2024-02-05 04:25:39 +00:00
Hayden
2918a824e4 New Crowdin updates (#3116)
* 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 (Dutch)
2024-02-04 22:24:02 -06:00
renovate[bot]
00e5e4384d fix(deps): update dependency fastapi to v0.109.2 (#3115)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-04 16:22:12 -06:00
Michael Genson
634b0590ed Merge branch 'mealie-next' into fix/translation-issues-when-scraping 2024-02-04 13:20:44 -06:00
Kuchenpirat
52c58e1dc0 feat: bulk deletion on "Manage Data" page (#3056)
* labels bulk delete

* add foods

* bulk delete units

* add categories

* add tags

* add tools

* update translations

* fix types for text

* fix reactivity for stores

---------

Co-authored-by: Hayden <64056131+hay-kot@users.noreply.github.com>
2024-02-04 12:55:14 -06:00
Kuchenpirat
67b7fb007b feat: Cookbook Create & Delete Improvements (#2902)
* add delete dialog

* put editor into component

* return data on createCookbook store action

* verry basic dialog with create & cancel functions

* 🧹

* cleanup

* add translation

* add dialog-closed to BaseDialog

* update delete dialog messaging

* use cancel instead of dialog-closed
2024-02-04 07:15:25 -09:00
Hayden
292672601c New Crowdin updates (#3110)
* New translations en-us.json (Romanian)

* New translations en-us.json (Romanian)
2024-02-03 22:44:30 +00:00
boc-the-git
fa3bbdcde1 Merge pull request #3106 from mealie-recipes/renovate/python-multipart-0.x
fix(deps): update dependency python-multipart to ^0.0.7
2024-02-04 05:42:19 +11:00
renovate[bot]
7e519c6b5a fix(deps): update dependency python-multipart to ^0.0.7 2024-02-03 18:35:27 +00:00
boc-the-git
57c11b23c4 Merge pull request #3107 from mealie-recipes/renovate/fastapi-0.x-lockfile
fix(deps): update dependency fastapi to v0.109.1
2024-02-04 05:34:02 +11:00
renovate[bot]
ba60428b03 fix(deps): update dependency fastapi to v0.109.1 2024-02-03 13:07:43 +00:00
renovate[bot]
e48619bae6 chore(deps): update dependency mkdocs-material to v9.5.7 (#3105)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-03 14:05:27 +01:00
Hayden
6d38960a5a New translations en-us.json (Turkish) (#3103) 2024-02-03 00:31:30 +01:00
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
Michael Genson
14497b9b5e Merge branch 'mealie-next' into fix/translation-issues-when-scraping 2024-01-10 11:35:28 -06:00
Michael Genson
e90f05d2dc Merge branch 'mealie-next' into fix/translation-issues-when-scraping 2024-01-02 19:17:26 -06:00
Michael Genson
677dc8f36a Merge branch 'mealie-next' into fix/translation-issues-when-scraping 2023-12-14 17:43:11 -06:00
Michael Genson
449eeb0d53 Merge branch 'mealie-next' into fix/translation-issues-when-scraping 2023-12-11 13:01:26 -06:00
Michael Genson
41204ca7f9 Merge branch 'mealie-next' into fix/translation-issues-when-scraping 2023-12-09 16:38:21 -06:00
Michael Genson
437f5c454f fixed missing translator 2023-12-09 22:04:21 +00:00
Michael Genson
3a30b3216e fixed tests 2023-12-09 17:19:27 +00:00
Michael Genson
408df286fd added translator to scraper 2023-12-09 17:19:19 +00:00
Michael Genson
2cfc63b302 added timedelta translations 2023-12-09 17:19:06 +00:00
Michael Genson
a8583c8e69 added backend translation support for plurals 2023-12-09 17:12:07 +00:00
176 changed files with 1933 additions and 767 deletions

View File

@@ -49,7 +49,9 @@
"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.
"remoteUser": "vscode",
// "features": {
// "git": "latest"
// }
"features": {
"ghcr.io/devcontainers/features/docker-in-docker:2": {
"dockerDashComposeVersion": "v2"
}
}
}

View File

@@ -11,7 +11,7 @@ body:
options:
- label: I used the GitHub search to find a similar requests and didn't find it.
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
- type: textarea
id: problem

View File

@@ -75,7 +75,7 @@ jobs:
sudo apt-get update
sudo apt-get install libsasl2-dev libldap2-dev libssl-dev
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'
- name: Formatting (Black)

View File

@@ -42,4 +42,29 @@ jobs:
DISCORD_WEBHOOK: ${{ secrets.DISCORD_RELEASE_WEBHOOK }}
uses: Ilshidur/action-discord@0.3.2
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
permissions:
contents: write
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

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

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
[issues-shield]: https://img.shields.io/github/issues/mealie-recipes/mealie.svg?style=flat-square
[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
[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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -5,6 +5,7 @@ Revises: 16160bf731a0
Create Date: 2023-02-14 20:45:41.102571
"""
import sqlalchemy as sa
from sqlalchemy import orm, select
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
"""
from uuid import uuid4
import sqlalchemy as sa

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -5,6 +5,7 @@ Revises: 0341b154f79a
Create Date: 2023-10-04 14:29:26.688065
"""
from collections import defaultdict
from dataclasses import dataclass
from typing import Any
@@ -58,7 +59,12 @@ def _resolve_duplicate_food(
keep_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
for recipe_ingredient in (
@@ -81,10 +87,20 @@ def _resolve_duplicate_unit(
keep_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
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
session.commit()
@@ -99,10 +115,20 @@ def _resolve_duplicate_label(
keep_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
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
session.commit()

View File

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

View File

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

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

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

View File

@@ -0,0 +1,55 @@
<template>
<div>
<v-card-text v-if="cookbook">
<v-text-field v-model="cookbook.name" :label="$t('cookbook.cookbook-name')"></v-text-field>
<v-textarea v-model="cookbook.description" auto-grow :rows="2" :label="$t('recipe.description')"></v-textarea>
<RecipeOrganizerSelector v-model="cookbook.categories" selector-type="categories" />
<RecipeOrganizerSelector v-model="cookbook.tags" selector-type="tags" />
<RecipeOrganizerSelector v-model="cookbook.tools" selector-type="tools" />
<v-switch v-model="cookbook.public" hide-details single-line>
<template #label>
{{ $t('cookbook.public-cookbook') }}
<HelpIcon small right class="ml-2">
{{ $t('cookbook.public-cookbook-description') }}
</HelpIcon>
</template>
</v-switch>
<div class="mt-4">
<h3 class="text-subtitle-1 d-flex align-center mb-0 pb-0">
{{ $t('cookbook.filter-options') }}
<HelpIcon right small class="ml-2">
{{ $t('cookbook.filter-options-description') }}
</HelpIcon>
</h3>
<v-switch v-model="cookbook.requireAllCategories" class="mt-0" hide-details single-line>
<template #label> {{ $t('cookbook.require-all-categories') }} </template>
</v-switch>
<v-switch v-model="cookbook.requireAllTags" hide-details single-line>
<template #label> {{ $t('cookbook.require-all-tags') }} </template>
</v-switch>
<v-switch v-model="cookbook.requireAllTools" hide-details single-line>
<template #label> {{ $t('cookbook.require-all-tools') }} </template>
</v-switch>
</div>
</v-card-text>
</div>
</template>
<script lang="ts">
import { defineComponent } from "@nuxtjs/composition-api";
import { ReadCookBook } from "~/lib/api/types/cookbook";
import RecipeOrganizerSelector from "~/components/Domain/Recipe/RecipeOrganizerSelector.vue";
export default defineComponent({
components: { RecipeOrganizerSelector },
props: {
cookbook: {
type: Object as () => ReadCookBook,
required: true,
},
actions: {
type: Object as () => any,
required: true,
},
},
});
</script>

View File

@@ -18,7 +18,7 @@
<BaseDialog v-if="updateTarget" v-model="dialogs.update" :title="$t('general.update')" @confirm="updateOne()">
<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-card-text>
</BaseDialog>

View File

@@ -12,6 +12,8 @@
$emit('submit');
dialog = false;
"
@click:outside="$emit('cancel')"
@keydown.esc="$emit('cancel')"
>
<v-card height="100%">
<v-app-bar dark dense :color="color" class="">

View File

@@ -57,12 +57,12 @@
:buttons="[
{
icon: $globals.icons.edit,
text: $t('general.edit'),
text: $tc('general.edit'),
event: 'edit',
},
{
icon: $globals.icons.delete,
text: $t('general.delete'),
text: $tc('general.delete'),
event: 'delete',
},
]"
@@ -160,6 +160,8 @@ export default defineComponent({
props.bulkActions.forEach((action) => {
handlers[action.event] = () => {
context.emit(action.event, selected.value);
// clear selection
selected.value = [];
};
});

View File

@@ -4,7 +4,7 @@ import { usePublicExploreApi } from "../api/api-client";
import { useUserApi } from "~/composables/api";
import { IngredientFood } from "~/lib/api/types/recipe";
let foodStore: Ref<IngredientFood[] | null> | null = null;
let foodStore: Ref<IngredientFood[] | null> = ref([]);
/**
* useFoodData returns a template reactive object
@@ -39,11 +39,11 @@ export const usePublicFoodStore = function (groupSlug: string) {
const actions = {
...usePublicStoreActions(api.foods, foodStore, loading),
flushStore() {
foodStore = null;
foodStore = ref([]);
},
};
if (!foodStore) {
if (!foodStore.value || foodStore.value.length === 0) {
foodStore = actions.getAll();
}
@@ -57,11 +57,11 @@ export const useFoodStore = function () {
const actions = {
...useStoreActions(api.foods, foodStore, loading),
flushStore() {
foodStore = null;
foodStore.value = [];
},
};
if (!foodStore) {
if (!foodStore.value || foodStore.value.length === 0) {
foodStore = actions.getAll();
}

View File

@@ -3,7 +3,7 @@ import { useStoreActions } from "../partials/use-actions-factory";
import { MultiPurposeLabelOut } from "~/lib/api/types/labels";
import { useUserApi } from "~/composables/api";
let labelStore: Ref<MultiPurposeLabelOut[] | null> | null = null;
let labelStore: Ref<MultiPurposeLabelOut[] | null> = ref([]);
export function useLabelData() {
const data = reactive({
@@ -33,11 +33,11 @@ export function useLabelStore() {
const actions = {
...useStoreActions<MultiPurposeLabelOut>(api.multiPurposeLabels, labelStore, loading),
flushStore() {
labelStore = null;
labelStore.value = [];
},
};
if (!labelStore) {
if (!labelStore.value || labelStore.value?.length === 0) {
labelStore = actions.getAll();
}

View File

@@ -3,7 +3,7 @@ import { useStoreActions } from "../partials/use-actions-factory";
import { useUserApi } from "~/composables/api";
import { IngredientUnit } from "~/lib/api/types/recipe";
let unitStore: Ref<IngredientUnit[] | null> | null = null;
let unitStore: Ref<IngredientUnit[] | null> = ref([]);
/**
* useUnitData returns a template reactive object
@@ -40,11 +40,11 @@ export const useUnitStore = function () {
const actions = {
...useStoreActions<IngredientUnit>(api.units, unitStore, loading),
flushStore() {
unitStore = null;
unitStore.value = [];
},
};
if (!unitStore) {
if (!unitStore.value || unitStore.value.length === 0) {
unitStore = actions.getAll();
}

View File

@@ -109,6 +109,7 @@ export const useCookbooks = function () {
}
loading.value = false;
return data;
},
async updateOne(updateData: UpdateCookBook) {
if (!updateData.id) {

View File

@@ -199,7 +199,8 @@
"upload-file": "Laai dokument op",
"created-on-date": "Geskep op: {0}",
"unsaved-changes": "You have unsaved changes. Do you want to save before leaving? Okay to save, Cancel to discard changes.",
"clipboard-copy-failure": "Failed to copy to the clipboard."
"clipboard-copy-failure": "Failed to copy to the clipboard.",
"confirm-delete-generic-items": "Are you sure you want to delete the following items?"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Is jy seker jy wil <b>{groupName}<b/> uitvee?",
@@ -1185,6 +1186,8 @@
"require-all-tags": "Vereis alle merkers",
"require-all-tools": "Vereis alle kookgerei",
"cookbook-name": "Naam van die kookboek",
"cookbook-with-name": "Kookboek {0}"
"cookbook-with-name": "Kookboek {0}",
"create-a-cookbook": "Create a Cookbook",
"cookbook": "Cookbook"
}
}

View File

@@ -199,7 +199,8 @@
"upload-file": "تحميل الملف",
"created-on-date": "تم الإنشاء في {0}",
"unsaved-changes": "You have unsaved changes. Do you want to save before leaving? Okay to save, Cancel to discard changes.",
"clipboard-copy-failure": "Failed to copy to the clipboard."
"clipboard-copy-failure": "Failed to copy to the clipboard.",
"confirm-delete-generic-items": "Are you sure you want to delete the following items?"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "هل انت متأكد من رغبتك في حذف <b>{groupName}<b/>؟",
@@ -1185,6 +1186,8 @@
"require-all-tags": "Require All Tags",
"require-all-tools": "Require All Tools",
"cookbook-name": "Cookbook Name",
"cookbook-with-name": "Cookbook {0}"
"cookbook-with-name": "Cookbook {0}",
"create-a-cookbook": "Create a Cookbook",
"cookbook": "Cookbook"
}
}

View File

@@ -199,7 +199,8 @@
"upload-file": "Качване на файл",
"created-on-date": "Създадено на {0}",
"unsaved-changes": "Имате незапазени промени. Желаете ли да ги запазите преди да излезете? Натиснете Ок за запазване и Отказ за отхвърляне на промените.",
"clipboard-copy-failure": "Линкът към рецептата е копиран в клипборда."
"clipboard-copy-failure": "Линкът към рецептата е копиран в клипборда.",
"confirm-delete-generic-items": "Сигурни ли сте, че желаете да изтриете следните елементи?"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Сигурни ли сте, че искате да изтриете <b>{groupName}<b/>?",
@@ -258,7 +259,7 @@
},
"meal-plan": {
"create-a-new-meal-plan": "Създаване на нов хранителен план",
"update-this-meal-plan": "Update this Meal Plan",
"update-this-meal-plan": "Обнови този План за хранене",
"dinner-this-week": "Вечеря тази седмица",
"dinner-today": "Вечеря Днес",
"dinner-tonight": "Вечеря ТАЗИ ВЕЧЕР",
@@ -473,11 +474,11 @@
"add-to-timeline": "Добави към времевата линия",
"recipe-added-to-list": "Рецептата е добавена към списъка",
"recipes-added-to-list": "Рецептите са добавени към списъка",
"successfully-added-to-list": "Successfully added to list",
"successfully-added-to-list": "Успешно добавено в списъка",
"recipe-added-to-mealplan": "Рецептата е добавена към хранителния план",
"failed-to-add-recipes-to-list": "Неуспешно добавяне на рецепта към списъка",
"failed-to-add-recipe-to-mealplan": "Рецептата не беше добавена към хранителния план",
"failed-to-add-to-list": "Failed to add to list",
"failed-to-add-to-list": "Неуспешно добавяне към списъка",
"yield": "Добив",
"quantity": "Количество",
"choose-unit": "Избери единица",
@@ -536,8 +537,8 @@
"new-recipe-names-must-be-unique": "Името на рецептата трябва да бъде уникално",
"scrape-recipe": "Обхождане на рецепта",
"scrape-recipe-description": "Обходи рецепта по линк. Предоставете линк за сайт, който искате да бъде обходен. Mealie ще опита да обходи рецептата от този сайт и да я добави във Вашата колекция.",
"scrape-recipe-have-a-lot-of-recipes": "Have a lot of recipes you want to scrape at once?",
"scrape-recipe-suggest-bulk-importer": "Try out the bulk importer",
"scrape-recipe-have-a-lot-of-recipes": "Имате много рецепти, които искате да обходите наведнъж?",
"scrape-recipe-suggest-bulk-importer": "Пробвайте масовото импорторане",
"import-original-keywords-as-tags": "Импортирай оригиналните ключови думи като тагове",
"stay-in-edit-mode": "Остани в режим на редакция",
"import-from-zip": "Импортирай от Zip",
@@ -561,7 +562,7 @@
"upload-image": "Качване на изображение",
"screen-awake": "Запази екрана активен",
"remove-image": "Премахване на изображение",
"nextStep": "Next step"
"nextStep": "Следваща стъпка"
},
"search": {
"advanced-search": "Разширено търсене",
@@ -1185,6 +1186,8 @@
"require-all-tags": "Изискване на всички тагове",
"require-all-tools": "Изискване на всички инструменти",
"cookbook-name": "Име на книгата с рецепти",
"cookbook-with-name": "Книга с рецепти {0}"
"cookbook-with-name": "Книга с рецепти {0}",
"create-a-cookbook": "Създай Готварска книга",
"cookbook": "Готварска книга"
}
}

View File

@@ -199,7 +199,8 @@
"upload-file": "Puja un fitxer",
"created-on-date": "Creat el: {0}",
"unsaved-changes": "Tens canvis que no estan guardats. Vols guardar-los abans de sortir? Clica d'acord per guardar-los o cancel·lar per descartar els canvis.",
"clipboard-copy-failure": "No s'ha pogut copiar al porta-retalls."
"clipboard-copy-failure": "No s'ha pogut copiar al porta-retalls.",
"confirm-delete-generic-items": "Are you sure you want to delete the following items?"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Esteu segur de voler suprimir el grup <b>{groupName}<b/>?",
@@ -1185,6 +1186,8 @@
"require-all-tags": "Requereix totes les etiquetes",
"require-all-tools": "Requereix tots els utensilis",
"cookbook-name": "Nom del receptari",
"cookbook-with-name": "Receptari {0}"
"cookbook-with-name": "Receptari {0}",
"create-a-cookbook": "Create a Cookbook",
"cookbook": "Cookbook"
}
}

View File

@@ -199,7 +199,8 @@
"upload-file": "Nahrát soubor",
"created-on-date": "Vytvořeno dne: {0}",
"unsaved-changes": "You have unsaved changes. Do you want to save before leaving? Okay to save, Cancel to discard changes.",
"clipboard-copy-failure": "Failed to copy to the clipboard."
"clipboard-copy-failure": "Failed to copy to the clipboard.",
"confirm-delete-generic-items": "Are you sure you want to delete the following items?"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Jste si jisti, že chcete smazat <b>{groupName}<b/>?",
@@ -1185,6 +1186,8 @@
"require-all-tags": "Vyžadovat všechny štítky",
"require-all-tools": "Vyžadovat všechny nástroje",
"cookbook-name": "Název kuchařky",
"cookbook-with-name": "Kuchařka {0}"
"cookbook-with-name": "Kuchařka {0}",
"create-a-cookbook": "Create a Cookbook",
"cookbook": "Cookbook"
}
}

View File

@@ -199,7 +199,8 @@
"upload-file": "Upload Fil",
"created-on-date": "Oprettet den: {0}",
"unsaved-changes": "Du har ændringer som ikke er gemt. Vil du gemme før du forlader? Vælg \"Okay\" for at gemme, eller \"Annullér\" for at kassere ændringer.",
"clipboard-copy-failure": "Failed to copy to the clipboard."
"clipboard-copy-failure": "Failed to copy to the clipboard.",
"confirm-delete-generic-items": "Are you sure you want to delete the following items?"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Er du sikker på, du vil slette <b>{groupName}<b/>?",
@@ -1185,6 +1186,8 @@
"require-all-tags": "Kræv Alle Mærker",
"require-all-tools": "Kræv Alle Værktøjer",
"cookbook-name": "Navn på kogebog",
"cookbook-with-name": "Kogebog {0}"
"cookbook-with-name": "Kogebog {0}",
"create-a-cookbook": "Opret en ny kogebog",
"cookbook": "Kogebog"
}
}

View File

@@ -199,7 +199,8 @@
"upload-file": "Datei hochladen",
"created-on-date": "Erstellt am: {0}",
"unsaved-changes": "Du hast ungespeicherte Änderungen. Möchtest du vor dem Verlassen speichern? OK um zu speichern, Cancel um Änderungen zu verwerfen.",
"clipboard-copy-failure": "Fehler beim Kopieren in die Zwischenablage."
"clipboard-copy-failure": "Fehler beim Kopieren in die Zwischenablage.",
"confirm-delete-generic-items": "Bist du dir sicher, dass du die folgenden Einträge löschen möchtest?"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Bist du dir sicher, dass du die Gruppe <b>{groupName}<b/> löschen möchtest?",
@@ -1185,6 +1186,8 @@
"require-all-tags": "Alle Schlagwörter erforderlich",
"require-all-tools": "Alle Utensilien erforderlich",
"cookbook-name": "Kochbuch Name",
"cookbook-with-name": "Kochbuch {0}"
"cookbook-with-name": "Kochbuch {0}",
"create-a-cookbook": "Ein Kochbuch erstellen",
"cookbook": "Kochbuch"
}
}

View File

@@ -199,7 +199,8 @@
"upload-file": "Μεταφόρτωση αρχείου",
"created-on-date": "Δημιουργήθηκε στις: {0}",
"unsaved-changes": "You have unsaved changes. Do you want to save before leaving? Okay to save, Cancel to discard changes.",
"clipboard-copy-failure": "Failed to copy to the clipboard."
"clipboard-copy-failure": "Failed to copy to the clipboard.",
"confirm-delete-generic-items": "Are you sure you want to delete the following items?"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτό τον ασφαλή σύνδεσμο <b>{groupName}<b/>;",
@@ -1185,6 +1186,8 @@
"require-all-tags": "Require All Tags",
"require-all-tools": "Require All Tools",
"cookbook-name": "Cookbook Name",
"cookbook-with-name": "Cookbook {0}"
"cookbook-with-name": "Cookbook {0}",
"create-a-cookbook": "Create a Cookbook",
"cookbook": "Cookbook"
}
}

View File

@@ -199,7 +199,8 @@
"upload-file": "Upload File",
"created-on-date": "Created on: {0}",
"unsaved-changes": "You have unsaved changes. Do you want to save before leaving? Okay to save, Cancel to discard changes.",
"clipboard-copy-failure": "Failed to copy to the clipboard."
"clipboard-copy-failure": "Failed to copy to the clipboard.",
"confirm-delete-generic-items": "Are you sure you want to delete the following items?"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Are you sure you want to delete <b>{groupName}<b/>?",
@@ -1185,6 +1186,8 @@
"require-all-tags": "Require All Tags",
"require-all-tools": "Require All Tools",
"cookbook-name": "Cookbook Name",
"cookbook-with-name": "Cookbook {0}"
"cookbook-with-name": "Cookbook {0}",
"create-a-cookbook": "Create a Cookbook",
"cookbook": "Cookbook"
}
}

View File

@@ -199,7 +199,8 @@
"upload-file": "Upload File",
"created-on-date": "Created on: {0}",
"unsaved-changes": "You have unsaved changes. Do you want to save before leaving? Okay to save, Cancel to discard changes.",
"clipboard-copy-failure": "Failed to copy to the clipboard."
"clipboard-copy-failure": "Failed to copy to the clipboard.",
"confirm-delete-generic-items": "Are you sure you want to delete the following items?"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Are you sure you want to delete <b>{groupName}<b/>?",
@@ -1185,6 +1186,8 @@
"require-all-tags": "Require All Tags",
"require-all-tools": "Require All Tools",
"cookbook-name": "Cookbook Name",
"cookbook-with-name": "Cookbook {0}"
"cookbook-with-name": "Cookbook {0}",
"create-a-cookbook": "Create a Cookbook",
"cookbook": "Cookbook"
}
}

View File

@@ -77,7 +77,7 @@
"tag-events": "Eventos de etiqueta",
"category-events": "Eventos de Categoría",
"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": {
"cancel": "Cancelar",
@@ -114,10 +114,10 @@
"json": "JSON",
"keyword": "Etiqueta",
"link-copied": "Enlace copiado",
"loading": "Loading",
"loading": "Cargando",
"loading-events": "Cargando Eventos",
"loading-recipe": "Loading recipe...",
"loading-ocr-data": "Loading OCR data...",
"loading-recipe": "Cargando receta...",
"loading-ocr-data": "Cargando datos OCR...",
"loading-recipes": "Cargando recetas",
"message": "Mensaje",
"monday": "Lunes",
@@ -198,8 +198,9 @@
"refresh": "Actualizar",
"upload-file": "Subir Archivo",
"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.",
"clipboard-copy-failure": "Failed to copy to the clipboard."
"unsaved-changes": "Tienes cambios sin guardar. ¿Quieres guardar antes de salir? Aceptar para guardar, Cancelar para descartar cambios.",
"clipboard-copy-failure": "No se pudo copiar al portapapeles.",
"confirm-delete-generic-items": "Are you sure you want to delete the following items?"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Por favor, confirma que deseas eliminar <b>{groupName}<b/>",
@@ -214,7 +215,7 @@
"group-id-with-value": "ID del Grupo: {groupID}",
"group-name": "Nombre del Grupo",
"group-not-found": "Grupo no encontrado",
"group-token": "Group Token",
"group-token": "Token del grupo",
"group-with-value": "Grupo: {groupID}",
"groups": "Grupos",
"manage-groups": "Administrar grupos",
@@ -250,7 +251,7 @@
"general-preferences": "Opciones generales",
"group-recipe-preferences": "Preferencias de grupo de las recetas",
"report": "Informe",
"report-with-id": "Report ID: {id}",
"report-with-id": "ID de informe: {id}",
"group-management": "Administración de grupos",
"admin-group-management": "Gestión del grupo administrador",
"admin-group-management-text": "Los cambios en este grupo se reflejarán inmediatamente.",
@@ -258,7 +259,7 @@
},
"meal-plan": {
"create-a-new-meal-plan": "Crear un nuevo menú",
"update-this-meal-plan": "Update this Meal Plan",
"update-this-meal-plan": "Actualizar este plan de comidas",
"dinner-this-week": "Cena para esta semana",
"dinner-today": "Cena para hoy",
"dinner-tonight": "Cena para esta noche",
@@ -473,11 +474,11 @@
"add-to-timeline": "Añadir al cronograma",
"recipe-added-to-list": "Receta añadida a la lista",
"recipes-added-to-list": "Recetas añadidas a la lista",
"successfully-added-to-list": "Successfully added to list",
"successfully-added-to-list": "Añadido correctamente a la lista",
"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-recipe-to-mealplan": "Error al añadir receta al menú",
"failed-to-add-to-list": "Failed to add to list",
"failed-to-add-to-list": "No se pudo agregar a la lista",
"yield": "Raciones",
"quantity": "Cantidad",
"choose-unit": "Elija unidad",
@@ -514,11 +515,11 @@
"how-did-it-turn-out": "¿Cómo resultó esto?",
"user-made-this": "{user} hizo esto",
"last-made-date": "Cocinado por última vez el {date}",
"api-extras-description": "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",
"parse": "Analizar",
"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",
"recipes-with-units-or-foods-defined-cannot-be-parsed": "Las recetas con unidades o alimentos definidos no pueden ser analizadas.",
"parse-ingredients": "Analizar ingredientes",
@@ -536,8 +537,8 @@
"new-recipe-names-must-be-unique": "El nombre de la receta debe ser único",
"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-have-a-lot-of-recipes": "Have a lot of recipes you want to scrape at once?",
"scrape-recipe-suggest-bulk-importer": "Try out the bulk importer",
"scrape-recipe-have-a-lot-of-recipes": "¿Tienes muchas recetas que quieres raspar a la vez?",
"scrape-recipe-suggest-bulk-importer": "Prueba el importador masivo",
"import-original-keywords-as-tags": "Importar palabras clave originales como etiquetas",
"stay-in-edit-mode": "Permanecer en modo edición",
"import-from-zip": "Importar desde zip",
@@ -546,7 +547,7 @@
"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",
"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",
"bulk-imports": "Importación masiva",
"bulk-import-process-has-started": "El proceso de importación masiva se ha iniciado",
@@ -561,7 +562,7 @@
"upload-image": "Subir imagen",
"screen-awake": "Mantener la pantalla encendida",
"remove-image": "Eliminar imagen",
"nextStep": "Next step"
"nextStep": "Siguiente paso"
},
"search": {
"advanced-search": "Búsqueda avanzada",
@@ -580,16 +581,16 @@
"search-hint": "Presione '/'",
"advanced": "Avanzado",
"auto-search": "Búsqueda automática",
"no-results": "No results found"
"no-results": "No se encontraron resultados"
},
"settings": {
"add-a-new-theme": "Añadir un nuevo tema",
"admin-settings": "Opciones del adminstrador",
"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-deleted": "Copia de seguridad eliminada",
"restore-success": "Restore successful",
"restore-success": "Restauración exitosa",
"backup-tag": "Etiqueta de la copia de seguridad",
"create-heading": "Crear una copia de seguridad",
"delete-backup": "Eliminar copia de seguridad",
@@ -690,21 +691,21 @@
"webhooks-caps": "WEBHOOKS",
"webhooks": "Webhooks",
"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-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",
"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.",
"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.",
"status-unknown-try-running-a-validation": "Estado desconocido. Intente ejecutar una validación.",
"validate": "Validar",
"email-configuration-status": "Estado de la Configuración del Correo Electrónico",
"email-configured": "Email Configured",
"email-test-results": "Email Test Results",
"email-configured": "Email configurado",
"email-test-results": "Resultados de la prueba de email",
"ready": "Listo",
"not-ready": "No Listo - Comprobar variables de ambiente",
"succeeded": "Logrado",
@@ -715,10 +716,10 @@
"mealie-is-up-to-date": "Mealie está actualizada",
"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-success-text": "Site is accessed by localhost or https",
"server-side-base-url": "Server Side Base URL",
"server-side-base-url-error-text": "`BASE_URL` is still the default value on API Server. This will cause issues with notifications links generated on the server for emails, etc.",
"server-side-base-url-success-text": "Server Side URL does not match the default",
"secure-site-success-text": "Se accede al sitio por localhost o https",
"server-side-base-url": "URL base del servidor",
"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": "La URL del servidor no coincide con la predeterminada",
"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-success-text": "Las variables LDAP requeridas están todas definidas.",
@@ -748,7 +749,7 @@
"reorder-labels": "Reordenar etiquetas",
"uncheck-all-items": "Desmarcar 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",
"no-label": "Sin Etiqueta",
"completed-on": "Completado el {date}"
@@ -841,7 +842,7 @@
"password-updated": "Contraseña actualizada",
"password": "Contraseña",
"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",
"reset-password": "Restablecer contraseña",
"sign-in": "Iniciar sesión",
@@ -862,7 +863,7 @@
"username": "Usuario",
"users-header": "USUARIOS",
"users": "Usuarios",
"user-not-found": "User not found",
"user-not-found": "Usuario no encontrado",
"webhook-time": "Tiempo de Webhook",
"webhooks-enabled": "Webhooks habilitados",
"you-are-not-allowed-to-create-a-user": "No tiene permisos para crear usuarios",
@@ -885,7 +886,7 @@
"user-management": "Gestión de Usuarios",
"reset-locked-users": "Restablecer usuarios bloqueados",
"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-name": "Nombre de usuario",
"authentication-method": "Método de autenticación",
@@ -896,11 +897,11 @@
"user-can-manage-group": "El usuario puede administrar el grupo",
"user-can-organize-group-data": "El usuario puede organizar los datos del grupo",
"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.",
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Don't want to see this anymore? Be sure to change your email in your user settings!",
"forgot-password": "Forgot Password",
"forgot-password-text": "Please enter your email address and we will send you a link to reset your password.",
"changes-reflected-immediately": "Changes to this user will be reflected immediately."
"it-looks-like-this-is-your-first-time-logging-in": "Parece que esta es la primera vez que inicias sesión.",
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "¿No quieres ver esto más? ¡Asegúrate de cambiar tu correo electrónico en tu configuración de usuario!",
"forgot-password": "Olvidé mi contraseña",
"forgot-password-text": "Por favor, introduce tu correo electrónico y te enviaremos un enlace para restablecer tu contraseña.",
"changes-reflected-immediately": "Los cambios en este grupo se reflejarán inmediatamente."
},
"language-dialog": {
"translated": "traducido",
@@ -927,19 +928,19 @@
},
"units": {
"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",
"source-unit": "Source Unit",
"target-unit": "Target Unit",
"merging-unit-into-unit": "Merging {0} into {1}",
"create-unit": "Create Unit",
"source-unit": "Unidad de origen",
"target-unit": "Unidad de objetivo",
"merging-unit-into-unit": "Combinando {0} con {1}",
"create-unit": "Crear unidad",
"abbreviation": "Abreviatura",
"plural-abbreviation": "Abreviatura en plural",
"description": "Descripción",
"display-as-fraction": "Display as Fraction",
"display-as-fraction": "Mostrar como fracción",
"use-abbreviation": "Usar Abreviaturas",
"edit-unit": "Editar unidad",
"unit-data": "Unit Data",
"unit-data": "Datos de la unidad",
"use-abbv": "Usar Abr.",
"fraction": "Fracción",
"example-unit-singular": "ej: Cucharada",
@@ -956,10 +957,10 @@
"recipes": {
"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?",
"confirm-delete-recipes": "Are you sure you want to delete the following recipes? This action cannot be undone.",
"the-following-recipes-selected-length-will-be-exported": "The following recipes ({0}) will be exported.",
"settings-chosen-explanation": "Settings chosen here, excluding the locked option, will be applied to all selected recipes.",
"selected-length-recipe-s-settings-will-be-updated": "{count} recipe(s) settings will be updated.",
"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": "Las siguientes recetas ({0}) serán exportadas.",
"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": "Se actualizarán los ajustes de {count} receta(s).",
"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-columns": "Recipe Columns",
@@ -1120,14 +1121,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.",
"nlp": "NLP",
"brute": "Brute",
"show-individual-confidence": "Show individual confidence",
"ingredient-text": "Ingredient Text",
"average-confident": "{0} Confident",
"try-an-example": "Try an example",
"show-individual-confidence": "Mostrar confianza individual",
"ingredient-text": "Texto del ingrediente",
"average-confident": "{0} Confianza",
"try-an-example": "Prueba un ejemplo",
"parser": "Procesador",
"background-tasks": "Tareas en Segundo Plano",
"background-tasks-description": "Here you can view all the running background tasks and their status",
"no-logs-found": "No Logs Found",
"background-tasks-description": "Aquí puedes ver todas las tareas de fondo en ejecución y su estado",
"no-logs-found": "No se encontraron registros",
"tasks": "Tareas"
},
"profile": {
@@ -1137,7 +1138,7 @@
"get-public-link": "Obtener enlace público",
"account-summary": "Información de la cuenta",
"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.",
"storage-capacity": "Capacidad de almacenamiento",
"storage-capacity-description": "Your storage capacity is a calculation of the images and assets you have uploaded.",
@@ -1185,6 +1186,8 @@
"require-all-tags": "Requerir todas las etiquetas",
"require-all-tools": "Requiere todos los utensilios",
"cookbook-name": "Nombre del recetario",
"cookbook-with-name": "Recetario {0}"
"cookbook-with-name": "Recetario {0}",
"create-a-cookbook": "Create a Cookbook",
"cookbook": "Cookbook"
}
}

View File

@@ -199,7 +199,8 @@
"upload-file": "Tuo tiedosto",
"created-on-date": "Luotu {0}",
"unsaved-changes": "You have unsaved changes. Do you want to save before leaving? Okay to save, Cancel to discard changes.",
"clipboard-copy-failure": "Failed to copy to the clipboard."
"clipboard-copy-failure": "Failed to copy to the clipboard.",
"confirm-delete-generic-items": "Are you sure you want to delete the following items?"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Haluatko varmasti poistaa ryhmän <b>{groupName}<b/>?",
@@ -1185,6 +1186,8 @@
"require-all-tags": "Vaadi Kaikki Tunnisteet",
"require-all-tools": "Vaadi Kaikki Työkalut",
"cookbook-name": "Keittokirjan Nimi",
"cookbook-with-name": "Keittokirja {0}"
"cookbook-with-name": "Keittokirja {0}",
"create-a-cookbook": "Create a Cookbook",
"cookbook": "Cookbook"
}
}

View File

@@ -199,7 +199,8 @@
"upload-file": "Transférer un fichier",
"created-on-date": "Créé le {0}",
"unsaved-changes": "Vous avez des modifications non enregistrées. Voulez-vous les enregistrer? Ok pour enregistrer, annuler pour ignorer les modifications.",
"clipboard-copy-failure": "Échec de la copie vers le presse-papiers."
"clipboard-copy-failure": "Échec de la copie vers le presse-papiers.",
"confirm-delete-generic-items": "Êtes-vous sûr de vouloir supprimer les éléments suivants ?"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Êtes-vous certain de vouloir supprimer <b>{groupName}<b/>?",
@@ -1185,6 +1186,8 @@
"require-all-tags": "Nécessite tous les mots-clés",
"require-all-tools": "Nécessite tous les ustensiles",
"cookbook-name": "Nom du livre de recettes",
"cookbook-with-name": "Livre de recettes {0}"
"cookbook-with-name": "Livre de recettes {0}",
"create-a-cookbook": "Créer un nouveau livre de recettes",
"cookbook": "Livre de recettes"
}
}

View File

@@ -199,7 +199,8 @@
"upload-file": "Transférer un fichier",
"created-on-date": "Créé le {0}",
"unsaved-changes": "Vous avez des modifications non enregistrées. Voulez-vous enregistrer avant de partir? OK pour enregistrer, Annuler pour ignorer les modifications.",
"clipboard-copy-failure": "Échec de la copie dans le presse-papiers."
"clipboard-copy-failure": "Échec de la copie dans le presse-papiers.",
"confirm-delete-generic-items": "Êtes-vous sûr de vouloir supprimer les éléments suivants ?"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Voulez-vous vraiment supprimer <b>{groupName}<b/>?",
@@ -1185,6 +1186,8 @@
"require-all-tags": "Nécessite tous les mots-clés",
"require-all-tools": "Nécessite tous les ustensiles",
"cookbook-name": "Nom du livre de recettes",
"cookbook-with-name": "Livre de recettes {0}"
"cookbook-with-name": "Livre de recettes {0}",
"create-a-cookbook": "Create a Cookbook",
"cookbook": "Cookbook"
}
}

View File

@@ -199,7 +199,8 @@
"upload-file": "Upload File",
"created-on-date": "Created on: {0}",
"unsaved-changes": "You have unsaved changes. Do you want to save before leaving? Okay to save, Cancel to discard changes.",
"clipboard-copy-failure": "Failed to copy to the clipboard."
"clipboard-copy-failure": "Failed to copy to the clipboard.",
"confirm-delete-generic-items": "Are you sure you want to delete the following items?"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Are you sure you want to delete <b>{groupName}<b/>?",
@@ -1185,6 +1186,8 @@
"require-all-tags": "Require All Tags",
"require-all-tools": "Require All Tools",
"cookbook-name": "Cookbook Name",
"cookbook-with-name": "Cookbook {0}"
"cookbook-with-name": "Cookbook {0}",
"create-a-cookbook": "Create a Cookbook",
"cookbook": "Cookbook"
}
}

View File

@@ -199,7 +199,8 @@
"upload-file": "העלאת קבצים",
"created-on-date": "נוצר ב-{0}",
"unsaved-changes": "יש שינויים שלא נשמרו. לצאת לפני שמירה? אשר לשמירה, בטל למחיקת שינויים.",
"clipboard-copy-failure": "כשלון בהעתקה ללוח ההדבקה."
"clipboard-copy-failure": "כשלון בהעתקה ללוח ההדבקה.",
"confirm-delete-generic-items": "האם אתה בטוח שברצונך למחוק את הפריטים הנבחרים?"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "האם את/ה בטוח/ה שברצונך למחוק את <b>{groupName}<b/>?",
@@ -258,7 +259,7 @@
},
"meal-plan": {
"create-a-new-meal-plan": "יצירת תכנית ארוחות חדשה",
"update-this-meal-plan": "Update this Meal Plan",
"update-this-meal-plan": "עדכן את תכנון הארוחות",
"dinner-this-week": "ארוחות ערב השבוע",
"dinner-today": "ארוחת ערב היום",
"dinner-tonight": "ארוחת ערב היום",
@@ -473,11 +474,11 @@
"add-to-timeline": "הוסף לציר הזמן",
"recipe-added-to-list": "מתכון נוסף לרשימה",
"recipes-added-to-list": "מתכונים הוספו לרשימה",
"successfully-added-to-list": "Successfully added to list",
"successfully-added-to-list": "נוסף לרשימה בהצלחה",
"recipe-added-to-mealplan": "מתכון נוסף לתכנון ארוחות",
"failed-to-add-recipes-to-list": "כשלון בהוספת מתכון לרשימה",
"failed-to-add-recipe-to-mealplan": "הוספת מתכון לתכנון ארוחות נכשלה",
"failed-to-add-to-list": "Failed to add to list",
"failed-to-add-to-list": "כשלון בהוספה לרשימה",
"yield": "תשואה",
"quantity": "כמות",
"choose-unit": "בחירת יחידת מידה",
@@ -514,7 +515,7 @@
"how-did-it-turn-out": "איך יצא?",
"user-made-this": "{user} הכין את זה",
"last-made-date": "נעשה לאחרונה ב{date}",
"api-extras-description": "Recipes extras are a key feature of the Mealie API. They allow you to create custom JSON key/value pairs within a recipe, to reference from 3rd party applications. You can use these keys to provide information, for example to trigger automations or custom messages to relay to your desired device.",
"api-extras-description": "מתכונים נוספים הם יכולת מפתח של Mealie API. הם מאפשרים ליצור צמדי key/value בצורת JSON על מנת לקרוא אותם בתוכנת צד שלישית. תוכלו להשתמש בצמדים האלה כדי לספק מידע, לדוגמא להפעיל אוטומציות או הודעות מותאמות אישית למכשירים מסויימים.",
"message-key": "מפתח הודעה",
"parse": "ניתוח",
"attach-images-hint": "הוסף תמונות ע\"י גרירה ושחרור אל תוך העורך",
@@ -536,8 +537,8 @@
"new-recipe-names-must-be-unique": "שם מתכון חדש חייב להיות ייחודי",
"scrape-recipe": "קריאת מתכון",
"scrape-recipe-description": "קריאת מתכון בעזרת לינק. ספק את הלינק של האתר שברצונך לקרוא, ומילי תנסה לקרוא את המתכון מהאתר ולהוסיף אותו לאוסף.",
"scrape-recipe-have-a-lot-of-recipes": "Have a lot of recipes you want to scrape at once?",
"scrape-recipe-suggest-bulk-importer": "Try out the bulk importer",
"scrape-recipe-have-a-lot-of-recipes": "יש לך הרבה מתכונים שאתה רוצה לקרוא בבת אחת?",
"scrape-recipe-suggest-bulk-importer": "נסה את יכולת קריאת רשימה",
"import-original-keywords-as-tags": "ייבא שמות מפתח מקוריות כתגיות",
"stay-in-edit-mode": "השאר במצב עריכה",
"import-from-zip": "ייבא מקובץ",
@@ -561,7 +562,7 @@
"upload-image": "העלה תמונה",
"screen-awake": "השאר את המסך פעיל",
"remove-image": "האם למחוק את התמונה?",
"nextStep": "Next step"
"nextStep": "השלב הבא"
},
"search": {
"advanced-search": "חיפוש מתקדם",
@@ -796,7 +797,7 @@
"untagged-count": "לא מתוייג {count}",
"create-a-tag": "צור תגית",
"tag-name": "שם תגית",
"tag": "Tag"
"tag": "תגית"
},
"tool": {
"tools": "כלים",
@@ -806,7 +807,7 @@
"create-new-tool": "יצירת כלי חדש",
"on-hand-checkbox-label": "הראה מה יש לי במטבח",
"required-tools": "צריך כלים",
"tool": "Tool"
"tool": "כלי"
},
"user": {
"admin": "אדמין",
@@ -897,10 +898,10 @@
"user-can-organize-group-data": "משתמש יכול לשנות מידע של קבוצה",
"enable-advanced-features": "אפשר אפשרויות מתקדמות",
"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": "לא רוצה לראות את זה יותר? דאג לשנות את המייל של בהגדרות המשתמש!",
"forgot-password": "שכחתי סיסמא",
"forgot-password-text": "Please enter your email address and we will send you a link to reset your password.",
"changes-reflected-immediately": "Changes to this user will be reflected immediately."
"forgot-password-text": "נא לספק כתובת דוא\"ל. אנו נשלח לך הודעת דוא\"ל לצורך איפוס הסיסמה שלך.",
"changes-reflected-immediately": "השינויים למשתמש זה יבוצעו מיידית."
},
"language-dialog": {
"translated": "תורגם",
@@ -922,8 +923,8 @@
"food-label": "תוית אוכל",
"edit-food": "עריכת מזון",
"food-data": "נתוני אוכל",
"example-food-singular": "ex: Onion",
"example-food-plural": "ex: Onions"
"example-food-singular": "דוגמא: בצל",
"example-food-plural": "דוגמא: בצלים"
},
"units": {
"seed-dialog-text": "אכלס את מסד הנתונים עם יחידות מדידה בהתאם לשפה המקומית שלך.",
@@ -934,7 +935,7 @@
"merging-unit-into-unit": "ממזג את {0} לתוך {1}",
"create-unit": "יצירת יחידה",
"abbreviation": "קיצור",
"plural-abbreviation": "Plural Abbreviation",
"plural-abbreviation": "צורת הרבית",
"description": "תיאור",
"display-as-fraction": "הצגה כשבר",
"use-abbreviation": "השתמש בקיצור",
@@ -942,10 +943,10 @@
"unit-data": "נתוני יחידה",
"use-abbv": "השתמש בקיצור",
"fraction": "שבר",
"example-unit-singular": "ex: Tablespoon",
"example-unit-plural": "ex: Tablespoons",
"example-unit-abbreviation-singular": "ex: Tbsp",
"example-unit-abbreviation-plural": "ex: Tbsps"
"example-unit-singular": "דוגמא: כפית",
"example-unit-plural": "דוגמא: כפיות",
"example-unit-abbreviation-singular": "דוגמא: כף",
"example-unit-abbreviation-plural": "דוגמא: כפות"
},
"labels": {
"seed-dialog-text": "אכלס את מסד הנתונים בתגיות נפוצות בהתאם לשפה המקומית שלך.",
@@ -1185,6 +1186,8 @@
"require-all-tags": "זקוק לכל התגיות",
"require-all-tools": "זקוק לכל הכלים",
"cookbook-name": "שם ספר בישול",
"cookbook-with-name": "ספר בישול {0}"
"cookbook-with-name": "ספר בישול {0}",
"create-a-cookbook": "צור ספר בישול חדש",
"cookbook": "ספר בישול"
}
}

View File

@@ -199,7 +199,8 @@
"upload-file": "Prenesi Datoteku",
"created-on-date": "Kreirano dana: {0}",
"unsaved-changes": "You have unsaved changes. Do you want to save before leaving? Okay to save, Cancel to discard changes.",
"clipboard-copy-failure": "Failed to copy to the clipboard."
"clipboard-copy-failure": "Failed to copy to the clipboard.",
"confirm-delete-generic-items": "Are you sure you want to delete the following items?"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Jeste li sigurni da želite izbrisati <b>{groupName}<b/>?",
@@ -1185,6 +1186,8 @@
"require-all-tags": "Zahtijevaj sve oznake",
"require-all-tools": "Zahtijevaj sve Alate",
"cookbook-name": "Naziv Zbirke recepata",
"cookbook-with-name": "ZbirkaRecepata {0}"
"cookbook-with-name": "ZbirkaRecepata {0}",
"create-a-cookbook": "Create a Cookbook",
"cookbook": "Cookbook"
}
}

View File

@@ -56,7 +56,7 @@
"event-delete-confirmation": "Biztosan törölni szeretné ezt az eseményt?",
"event-deleted": "Esemény törölve",
"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ő!",
"notification": "Értesítések",
"refresh": "Frissítés",
@@ -199,7 +199,8 @@
"upload-file": "Fájl feltöltése",
"created-on-date": "Létrehozva: {0}",
"unsaved-changes": "El nem mentett módosításai vannak. Szeretné elmenteni, mielőtt kilép? A mentéshez kattintson az Ok, a módosítások elvetéséhez a Mégsem gombra.",
"clipboard-copy-failure": "Nem sikerült a vágólapra másolás."
"clipboard-copy-failure": "Nem sikerült a vágólapra másolás.",
"confirm-delete-generic-items": "Biztos benne, hogy törölni szeretné az alábbi tételeket?"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Biztosan törölni szeretnéd ezt: <b>{groupName}<b/>?",
@@ -473,11 +474,11 @@
"add-to-timeline": "Hozzáadás idővonalhoz",
"recipe-added-to-list": "Recept hozzáadva listához",
"recipes-added-to-list": "Recept hozzáadva listához",
"successfully-added-to-list": "Successfully added to list",
"successfully-added-to-list": "Sikeresen hozzáadva a listához",
"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-recipe-to-mealplan": "Nem sikerült hozzáadni a receptet a menütervhez",
"failed-to-add-to-list": "Failed to add to list",
"failed-to-add-to-list": "Nem sikerült hozzáadni a listához",
"yield": "Adag",
"quantity": "Mennyiség",
"choose-unit": "Válasszon mennyiségi egységet",
@@ -1154,7 +1155,7 @@
"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.",
"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-description": "Alapanyagainak és mennyiségi egységeinek kezelése (további opciók hamarosan)",
"data-migrations": "Adat migráció",
@@ -1185,6 +1186,8 @@
"require-all-tags": "Minden címke szükséges",
"require-all-tools": "Minden szükséges eszköz",
"cookbook-name": "Szakácskönyv neve",
"cookbook-with-name": "Szakácskönyv {0}"
"cookbook-with-name": "Szakácskönyv {0}",
"create-a-cookbook": "Szakácskönyv létrehozása",
"cookbook": "Szakácskönyv"
}
}

View File

@@ -199,7 +199,8 @@
"upload-file": "Upload File",
"created-on-date": "Created on: {0}",
"unsaved-changes": "You have unsaved changes. Do you want to save before leaving? Okay to save, Cancel to discard changes.",
"clipboard-copy-failure": "Failed to copy to the clipboard."
"clipboard-copy-failure": "Failed to copy to the clipboard.",
"confirm-delete-generic-items": "Are you sure you want to delete the following items?"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Are you sure you want to delete <b>{groupName}<b/>?",
@@ -1185,6 +1186,8 @@
"require-all-tags": "Require All Tags",
"require-all-tools": "Require All Tools",
"cookbook-name": "Cookbook Name",
"cookbook-with-name": "Cookbook {0}"
"cookbook-with-name": "Cookbook {0}",
"create-a-cookbook": "Create a Cookbook",
"cookbook": "Cookbook"
}
}

View File

@@ -199,7 +199,8 @@
"upload-file": "Carica file",
"created-on-date": "Creato il: {0}",
"unsaved-changes": "Sono state apportate modifiche non salvate. Salvare prima di uscire? Premi Ok per salvare, Annulla per scartare le modifiche.",
"clipboard-copy-failure": "Impossibile copiare negli appunti."
"clipboard-copy-failure": "Impossibile copiare negli appunti.",
"confirm-delete-generic-items": "Sei sicuro di voler eliminare i seguenti elementi?"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Sei sicuro di volerlo eliminare <b>{groupName}<b/>'?",
@@ -1185,6 +1186,8 @@
"require-all-tags": "Richiedi Tutti I Tag",
"require-all-tools": "Richiedi Tutti Gli Strumenti",
"cookbook-name": "Nome Ricettario",
"cookbook-with-name": "Ricettario {0}"
"cookbook-with-name": "Ricettario {0}",
"create-a-cookbook": "Crea un libro di cucina",
"cookbook": "Libro di cucina"
}
}

View File

@@ -199,7 +199,8 @@
"upload-file": "ファイルのアップロード",
"created-on-date": "Created on: {0}",
"unsaved-changes": "You have unsaved changes. Do you want to save before leaving? Okay to save, Cancel to discard changes.",
"clipboard-copy-failure": "Failed to copy to the clipboard."
"clipboard-copy-failure": "Failed to copy to the clipboard.",
"confirm-delete-generic-items": "Are you sure you want to delete the following items?"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "<b>{groupName}<b/> を削除しますか?",
@@ -1185,6 +1186,8 @@
"require-all-tags": "Require All Tags",
"require-all-tools": "Require All Tools",
"cookbook-name": "Cookbook Name",
"cookbook-with-name": "Cookbook {0}"
"cookbook-with-name": "Cookbook {0}",
"create-a-cookbook": "Create a Cookbook",
"cookbook": "Cookbook"
}
}

View File

@@ -199,7 +199,8 @@
"upload-file": "Upload File",
"created-on-date": "Created on: {0}",
"unsaved-changes": "You have unsaved changes. Do you want to save before leaving? Okay to save, Cancel to discard changes.",
"clipboard-copy-failure": "Failed to copy to the clipboard."
"clipboard-copy-failure": "Failed to copy to the clipboard.",
"confirm-delete-generic-items": "Are you sure you want to delete the following items?"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Are you sure you want to delete <b>{groupName}<b/>?",
@@ -1185,6 +1186,8 @@
"require-all-tags": "Require All Tags",
"require-all-tools": "Require All Tools",
"cookbook-name": "Cookbook Name",
"cookbook-with-name": "Cookbook {0}"
"cookbook-with-name": "Cookbook {0}",
"create-a-cookbook": "Create a Cookbook",
"cookbook": "Cookbook"
}
}

View File

@@ -199,7 +199,8 @@
"upload-file": "Įkelti failą",
"created-on-date": "Sukurta: {0}",
"unsaved-changes": "You have unsaved changes. Do you want to save before leaving? Okay to save, Cancel to discard changes.",
"clipboard-copy-failure": "Failed to copy to the clipboard."
"clipboard-copy-failure": "Failed to copy to the clipboard.",
"confirm-delete-generic-items": "Are you sure you want to delete the following items?"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Ar tikrai norite ištrinti <b>{groupName}<b/>?",
@@ -1185,6 +1186,8 @@
"require-all-tags": "Būtinos visos žymos",
"require-all-tools": "Būtini visi įrankiai",
"cookbook-name": "Receptų knygos pavadinimas",
"cookbook-with-name": "Receptų knyga {0}"
"cookbook-with-name": "Receptų knyga {0}",
"create-a-cookbook": "Create a Cookbook",
"cookbook": "Cookbook"
}
}

View File

@@ -199,7 +199,8 @@
"upload-file": "Upload File",
"created-on-date": "Created on: {0}",
"unsaved-changes": "You have unsaved changes. Do you want to save before leaving? Okay to save, Cancel to discard changes.",
"clipboard-copy-failure": "Failed to copy to the clipboard."
"clipboard-copy-failure": "Failed to copy to the clipboard.",
"confirm-delete-generic-items": "Are you sure you want to delete the following items?"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Are you sure you want to delete <b>{groupName}<b/>?",
@@ -1185,6 +1186,8 @@
"require-all-tags": "Require All Tags",
"require-all-tools": "Require All Tools",
"cookbook-name": "Cookbook Name",
"cookbook-with-name": "Cookbook {0}"
"cookbook-with-name": "Cookbook {0}",
"create-a-cookbook": "Create a Cookbook",
"cookbook": "Cookbook"
}
}

View File

@@ -53,7 +53,7 @@
"apprise-url": "Apprise URL",
"database": "Database",
"delete-event": "Gebeurtenis verwijderen",
"event-delete-confirmation": "Weet je zeker dat je deze gebeurtenis wil verwijderen?",
"event-delete-confirmation": "Weet je zeker dat je deze gebeurtenis wilt verwijderen?",
"event-deleted": "Gebeurtenis verwijderd",
"event-updated": "Gebeurtenis bijgewerkt",
"new-notification-form-description": "Mealie gebruikt de notificatieservices van Apprise om notificaties te genereren. Apprise biedt diverse services aan om notificaties te versturen. Raadpleeg hun wiki voor een uitgebreide handleiding over het creëren van een link voor je service. Afhankelijk van de gekozen service zijn er mogelijk extra functionaliteiten beschikbaar.",
@@ -84,7 +84,7 @@
"clear": "Wissen",
"close": "Sluiten",
"confirm": "Bevestigen",
"confirm-delete-generic": "Weet je zeker dat je dit wil verwijderen?",
"confirm-delete-generic": "Weet je zeker dat je dit wilt verwijderen?",
"copied_message": "Gekopieerd!",
"create": "Aanmaken",
"created": "Aangemaakt op",
@@ -199,7 +199,8 @@
"upload-file": "Bestand uploaden",
"created-on-date": "Gemaakt op {0}",
"unsaved-changes": "Er zijn niet-opgeslagen wijzigingen. Wil je eerst opslaan voordat je vertrekt? Okay om op te slaan, Annuleren om wijzigingen ongedaan te maken.",
"clipboard-copy-failure": "Kopiëren naar klembord mislukt."
"clipboard-copy-failure": "Kopiëren naar klembord mislukt.",
"confirm-delete-generic-items": "Are you sure you want to delete the following items?"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Weet je zeker dat je <b>{groupName}<b/> wil verwijderen?",
@@ -559,7 +560,7 @@
"recipe-yield": "Recept Opbrengst",
"unit": "Eenheid",
"upload-image": "Afbeelding uploaden",
"screen-awake": "Scherm laten aan staan",
"screen-awake": "Scherm aan laten staan",
"remove-image": "Afbeelding verwijderen",
"nextStep": "Volgende stap"
},
@@ -736,7 +737,7 @@
"shopping-lists": "Boodschappenlijsten",
"food": "Voedsel",
"note": "Notitie",
"label": "Etiket",
"label": "Label",
"linked-item-warning": "Dit element is gekoppeld aan een of meer recepten. Het aanpassen van de eenheden of ingrediënten zal onverwachte resultaten opleveren bij het toevoegen of verwijderen van het recept uit deze lijst.",
"toggle-food": "Voedsel schakelen",
"manage-labels": "Labels beheren",
@@ -746,10 +747,10 @@
"delete-checked": "Selectie verwijderen",
"toggle-label-sort": "Label sortering in-/uitschakelen",
"reorder-labels": "Labels opnieuw indelen",
"uncheck-all-items": "Deselecteer alle Items",
"check-all-items": "Alle producten controleren",
"uncheck-all-items": "Deselecteer alle items",
"check-all-items": "Selecteer alle items",
"linked-recipes-count": "Geen Gelinkte Recepten Eén Gekoppeld Recept{count} Gekoppelde Recepten",
"items-checked-count": "Geen items aangevinkt, Eén item gecontroleerd{count} items gecontroleerd",
"items-checked-count": "Geen items geselecteerd|Eén item geselecteerd|{count} items geselecteerd",
"no-label": "Geen label",
"completed-on": "Afgemaakt op {date}"
},
@@ -1185,6 +1186,8 @@
"require-all-tags": "Vereis alle tags",
"require-all-tools": "Vereis al het kookgerei",
"cookbook-name": "Naam van het kookboek",
"cookbook-with-name": "Kookboek {0}"
"cookbook-with-name": "Kookboek {0}",
"create-a-cookbook": "Maak een kookboek",
"cookbook": "Kookboek"
}
}

View File

@@ -199,7 +199,8 @@
"upload-file": "Last opp fil",
"created-on-date": "Opprettet: {0}",
"unsaved-changes": "Du har ulagrede endringer. Ønsker du å lagre før du forlater? Trykk 'OK' for å lagre, 'Avbryt' for å forkaste endringene.",
"clipboard-copy-failure": "Kunne ikke kopiere til utklippstavlen."
"clipboard-copy-failure": "Kunne ikke kopiere til utklippstavlen.",
"confirm-delete-generic-items": "Are you sure you want to delete the following items?"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Er du sikker på at du vil slette <b>{groupName}<b/>?",
@@ -1185,6 +1186,8 @@
"require-all-tags": "Krev alle emneord",
"require-all-tools": "Krev alle kjøkkenredskaper",
"cookbook-name": "Navn på kokebok",
"cookbook-with-name": "Kokebok {0}"
"cookbook-with-name": "Kokebok {0}",
"create-a-cookbook": "Create a Cookbook",
"cookbook": "Cookbook"
}
}

View File

@@ -117,7 +117,7 @@
"loading": "Ładowanie",
"loading-events": "Ładowanie wydarzeń",
"loading-recipe": "Ładowanie przepisów...",
"loading-ocr-data": "Loading OCR data...",
"loading-ocr-data": "Wczytywanie danych OCR...",
"loading-recipes": "Ładowanie przepisów",
"message": "Wiadomość",
"monday": "Poniedziałek",
@@ -198,8 +198,9 @@
"refresh": "Odśwież",
"upload-file": "Prześlij plik",
"created-on-date": "Utworzono dnia: {0}",
"unsaved-changes": "You have unsaved changes. Do you want to save before leaving? Okay to save, Cancel to discard changes.",
"clipboard-copy-failure": "Failed to copy to the clipboard."
"unsaved-changes": "Masz niezapisane zmiany. Czy chcesz zapisać przed wyjściem? Ok, aby zapisać, Anuluj, żeby odrzucić zmiany.",
"clipboard-copy-failure": "Failed to copy to the clipboard.",
"confirm-delete-generic-items": "Are you sure you want to delete the following items?"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Czy na pewno chcesz usunąć <b>{groupName}<b/>?",
@@ -258,7 +259,7 @@
},
"meal-plan": {
"create-a-new-meal-plan": "Utwórz nowy plan posiłku",
"update-this-meal-plan": "Update this Meal Plan",
"update-this-meal-plan": "Zaktualizuj plan posiłku",
"dinner-this-week": "Obiad w tym tygodniu",
"dinner-today": "Obiad dziś",
"dinner-tonight": "OBIAD DZIŚ",
@@ -473,7 +474,7 @@
"add-to-timeline": "Dodaj do osi czasu",
"recipe-added-to-list": "Przepis dodany do listy",
"recipes-added-to-list": "Przepisy dodane do listy",
"successfully-added-to-list": "Successfully added to list",
"successfully-added-to-list": "Pomyślnie dodano do listy",
"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-recipe-to-mealplan": "Nie udało się dodać przepisu do planu posiłków",
@@ -806,7 +807,7 @@
"create-new-tool": "Utwórz nowe narzędzie",
"on-hand-checkbox-label": "Pokaż jako Posiadane (Zaznaczono)",
"required-tools": "Wymagane Narzędzia",
"tool": "Tool"
"tool": "Narzędzie"
},
"user": {
"admin": "Administrator",
@@ -944,7 +945,7 @@
"fraction": "Ułamki",
"example-unit-singular": "np. Łyżka stołowa",
"example-unit-plural": "np. Łyżki stołowe",
"example-unit-abbreviation-singular": "ex: Tbsp",
"example-unit-abbreviation-singular": "na przykład: Łyżka stołowa",
"example-unit-abbreviation-plural": "ex: Tbsps"
},
"labels": {
@@ -1185,6 +1186,8 @@
"require-all-tags": "Wymagaj wszystkich tagów",
"require-all-tools": "Wymagaj wszystkich narzędzi",
"cookbook-name": "Nazwa książki kucharskiej",
"cookbook-with-name": "Książka kucharska {0}"
"cookbook-with-name": "Książka kucharska {0}",
"create-a-cookbook": "Utwórz nową książkę kucharską",
"cookbook": "Książka kucharska"
}
}

View File

@@ -199,7 +199,8 @@
"upload-file": "Enviar arquivo",
"created-on-date": "Criado em {0}",
"unsaved-changes": "Você possui alterações não salvas. Deseja salvar antes de sair? Ok para salvar, Cancelar para descartar alterações.",
"clipboard-copy-failure": "Failed to copy to the clipboard."
"clipboard-copy-failure": "Failed to copy to the clipboard.",
"confirm-delete-generic-items": "Are you sure you want to delete the following items?"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Tem certeza que deseja excluir o grupo <b>{groupName}<b/>?",
@@ -1185,6 +1186,8 @@
"require-all-tags": "Exigir todos os marcadores",
"require-all-tools": "Exigir todas as ferramentas",
"cookbook-name": "Nome do Livro de Receitas",
"cookbook-with-name": "Livro de Receitas {0}"
"cookbook-with-name": "Livro de Receitas {0}",
"create-a-cookbook": "Create a Cookbook",
"cookbook": "Cookbook"
}
}

View File

@@ -199,7 +199,8 @@
"upload-file": "Carregar ficheiro",
"created-on-date": "Criado em: {0}",
"unsaved-changes": "Tem alterações por gravar. Quer gravar antes de sair? OK para gravar, Cancelar para descartar alterações.",
"clipboard-copy-failure": "Erro ao copiar para a área de transferência."
"clipboard-copy-failure": "Erro ao copiar para a área de transferência.",
"confirm-delete-generic-items": "Tem a certeza de que deseja eliminar os seguintes itens?"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Tem a certeza que quer eliminar <b>{groupName}</b>?",
@@ -1185,6 +1186,8 @@
"require-all-tags": "Requer todas as etiquetas",
"require-all-tools": "Requer todas os utensílios",
"cookbook-name": "Nome do Livro de Receitas",
"cookbook-with-name": "Livro de Receitas {0}"
"cookbook-with-name": "Livro de Receitas {0}",
"create-a-cookbook": "Criar um Livro de Receitas",
"cookbook": "Livro de Receitas"
}
}

View File

@@ -199,7 +199,8 @@
"upload-file": "Încărcă fișier",
"created-on-date": "Creat pe {0}",
"unsaved-changes": "Aveți modificări nesalvate. Doriți să salvați înainte de a închide aplicația? Apăsați \"OK\" pentru a salva sau \"Anulare\" pentru a renunța la modificări.",
"clipboard-copy-failure": "Copierea în clipboard a eșuat."
"clipboard-copy-failure": "Copierea în clipboard a eșuat.",
"confirm-delete-generic-items": "Are you sure you want to delete the following items?"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Sunteți sigur că doriți să ștergeți <b>{groupName}<b/>?",
@@ -370,49 +371,49 @@
"google-ld-json-info": "Google ld+json Info",
"must-be-a-valid-url": "Trebuie să fie o adresă URL validă",
"paste-in-your-recipe-data-each-line-will-be-treated-as-an-item-in-a-list": "Paste in your recipe data. Each line will be treated as an item in a list",
"recipe-markup-specification": "Recipe Markup Specification",
"recipe-url": "Recipe URL",
"upload-a-recipe": "Upload a Recipe",
"recipe-markup-specification": "Specificație Markup rețetă",
"recipe-url": "URL rețetă",
"upload-a-recipe": "Încarcă o rețetă",
"upload-individual-zip-file": "Upload an individual .zip file exported from another Mealie instance.",
"url-form-hint": "Copy and paste a link from your favorite recipe website",
"url-form-hint": "Copiază și lipește un link de pe site-ul tău web preferat de rețete",
"view-scraped-data": "View Scraped Data",
"trim-whitespace-description": "Trim leading and trailing whitespace as well as blank lines",
"trim-prefix-description": "Trim first character from each line",
"split-by-numbered-line-description": "Attempts to split a paragraph by matching '1)' or '1.' patterns",
"import-by-url": "Import a recipe by URL",
"create-manually": "Create a recipe manually",
"import-by-url": "Importă rețetă prin URL",
"create-manually": "Creează o rețetă manual",
"make-recipe-image": "Make this the recipe image"
},
"page": {
"404-page-not-found": "404 Page not found",
"all-recipes": "All Recipes",
"new-page-created": "New page created",
"page": "Page",
"page-creation-failed": "Page creation failed",
"page-deleted": "Page deleted",
"page-deletion-failed": "Page deletion failed",
"page-update-failed": "Page update failed",
"page-updated": "Page updated",
"pages-update-failed": "Pages update failed",
"pages-updated": "Pages updated",
"404-not-found": "404 Not Found",
"an-error-occurred": "An error occurred"
"404-page-not-found": "404 Pagina nu a fost găsită",
"all-recipes": "Toate rețetele",
"new-page-created": "Pagină nouă creată",
"page": "Pagină",
"page-creation-failed": "Crearea paginii a eșuat",
"page-deleted": "Pagină ștearsă",
"page-deletion-failed": "Ștergerea paginii a eșuat",
"page-update-failed": "Actualizarea paginii a eșuat",
"page-updated": "Pagina a fost actualizată",
"pages-update-failed": "Actualizarea paginilor a eșuat",
"pages-updated": "Pagini actualizate",
"404-not-found": "404 Pagina nu a fost gasita",
"an-error-occurred": "A intervenit o eroare"
},
"recipe": {
"add-key": "Add Key",
"add-to-favorites": "Add to Favorites",
"add-key": "Adăugați cheia",
"add-to-favorites": "Adaugă la Favorite",
"api-extras": "API Extras",
"calories": "Calories",
"calories-suffix": "calories",
"carbohydrate-content": "Carbohydrate",
"categories": "Categories",
"comment-action": "Comment",
"comment": "Comment",
"calories": "Calorii",
"calories-suffix": "calorii",
"carbohydrate-content": "Carbohidrat",
"categories": "Categorii",
"comment-action": "Comentariu",
"comment": "Comentariu",
"comments": "Comentarii",
"delete-confirmation": "Sunteți sigur că doriți să ștergeți această rețetă?",
"delete-recipe": "Șterge rețeta",
"description": "Descriere",
"disable-amount": "Disable Ingredient Amounts",
"disable-amount": "Dezactivați cantitățile Ingredientelor",
"disable-comments": "Dezactivează comentariile",
"duplicate": "Reţeta duplicată",
"duplicate-name": "Denumirea noii rețete",
@@ -422,7 +423,7 @@
"grams": "grame",
"ingredient": "Ingredient",
"ingredients": "Ingrediente",
"insert-ingredient": "Insert Ingredient",
"insert-ingredient": "Inserați Ingredientul",
"insert-section": "Adăugare secțiune",
"instructions": "Instrucțiuni",
"key-name-required": "Numele cheii este necesar",
@@ -473,16 +474,16 @@
"add-to-timeline": "Adaugă la Cronologie",
"recipe-added-to-list": "Rețeta a fost adăugată la listă",
"recipes-added-to-list": "Rețeta a fost adăugată în listă",
"successfully-added-to-list": "Successfully added to list",
"successfully-added-to-list": "Adăugat cu succes la listă",
"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-recipe-to-mealplan": "Adăugarea rețetei la planul de mese a eșuat",
"failed-to-add-to-list": "Failed to add to list",
"failed-to-add-to-list": "Adăugarea la listă a eșuat",
"yield": "Producție",
"quantity": "Cantitate",
"choose-unit": "Alegeţi unitatea",
"press-enter-to-create": "Press Enter to Create",
"choose-food": "Choose Food",
"press-enter-to-create": "Apăsați Enter pentru a crea",
"choose-food": "Alege Mâncarea",
"notes": "Notițe",
"toggle-section": "Activează/dezactivează secțiunea",
"see-original-text": "Vezi Textul Original",
@@ -521,13 +522,13 @@
"drop-image": "Trage imaginea",
"enable-ingredient-amounts-to-use-this-feature": "Enable ingredient amounts to use this feature",
"recipes-with-units-or-foods-defined-cannot-be-parsed": "Recipes with units or foods defined cannot be parsed.",
"parse-ingredients": "Parse ingredients",
"edit-markdown": "Edit Markdown",
"recipe-creation": "Recipe Creation",
"select-one-of-the-various-ways-to-create-a-recipe": "Select one of the various ways to create a recipe",
"parse-ingredients": "Analizează ingredientele",
"edit-markdown": "Editează Markdown",
"recipe-creation": "Crearea rețetei",
"select-one-of-the-various-ways-to-create-a-recipe": "Selectează una dintre diferitele modalități de a crea o rețetă",
"looking-for-migrations": "Looking For Migrations?",
"import-with-url": "Import with URL",
"create-recipe": "Create Recipe",
"import-with-url": "Import cu URL",
"create-recipe": "Crează rețetă",
"import-with-zip": "Import with .zip",
"create-recipe-from-an-image": "Create recipe from an image",
"bulk-url-import": "Bulk URL Import",
@@ -608,13 +609,13 @@
"restore-backup": "Restore Backup"
},
"backup-and-exports": "Backups",
"change-password": "Change Password",
"current": "Version:",
"custom-pages": "Custom Pages",
"edit-page": "Edit Page",
"events": "Events",
"first-day-of-week": "First day of the week",
"group-settings-updated": "Group Settings Updated",
"change-password": "Schimbă parola",
"current": "Versiune:",
"custom-pages": "Pagini personalizate",
"edit-page": "Editare pagină",
"events": "Evenimente",
"first-day-of-week": "Prima zi a săptămânii",
"group-settings-updated": "Setări de grup actualizate",
"homepage": {
"all-categories": "All Categories",
"card-per-section": "Card Per Section",
@@ -1185,6 +1186,8 @@
"require-all-tags": "Require All Tags",
"require-all-tools": "Require All Tools",
"cookbook-name": "Cookbook Name",
"cookbook-with-name": "Cookbook {0}"
"cookbook-with-name": "Cookbook {0}",
"create-a-cookbook": "Create a Cookbook",
"cookbook": "Cookbook"
}
}

View File

@@ -199,7 +199,8 @@
"upload-file": "Загрузить файл",
"created-on-date": "Создано: {0}",
"unsaved-changes": "У вас есть несохраненные изменения. Вы хотите сохранить их перед выходом?",
"clipboard-copy-failure": "Не удалось скопировать текст."
"clipboard-copy-failure": "Не удалось скопировать текст.",
"confirm-delete-generic-items": "Вы уверены, что хотите удалить следующие элементы?"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Вы действительно хотите удалить <b>{groupName}<b/>?",
@@ -473,11 +474,11 @@
"add-to-timeline": "Добавить в историю",
"recipe-added-to-list": "Рецепт добавлен в список",
"recipes-added-to-list": "Рецепты добавлены в список",
"successfully-added-to-list": "Successfully added to list",
"successfully-added-to-list": "Успешно добавлено в список",
"recipe-added-to-mealplan": "Рецепт добавлен в план питания",
"failed-to-add-recipes-to-list": "Не удалось добавить рецепт в список",
"failed-to-add-recipe-to-mealplan": "Не удалось добавить рецепт в план питания",
"failed-to-add-to-list": "Failed to add to list",
"failed-to-add-to-list": "Не удалось добавить в список",
"yield": "Выход",
"quantity": "Количество",
"choose-unit": "Выберите единицу измерения",
@@ -1185,6 +1186,8 @@
"require-all-tags": "Требовать все теги",
"require-all-tools": "Требовать все инструменты",
"cookbook-name": "Название книги рецептов",
"cookbook-with-name": "Книга рецептов {0}"
"cookbook-with-name": "Книга рецептов {0}",
"create-a-cookbook": "Создать книгу рецептов",
"cookbook": "Книга рецептов"
}
}

View File

@@ -199,7 +199,8 @@
"upload-file": "Nahrať súbor",
"created-on-date": "Vytvorené: {0}",
"unsaved-changes": "You have unsaved changes. Do you want to save before leaving? Okay to save, Cancel to discard changes.",
"clipboard-copy-failure": "Failed to copy to the clipboard."
"clipboard-copy-failure": "Failed to copy to the clipboard.",
"confirm-delete-generic-items": "Are you sure you want to delete the following items?"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Naozaj chcete odstrániť <b>{groupName}<b/>?",
@@ -1185,6 +1186,8 @@
"require-all-tags": "Vyžadovať všetky štítky",
"require-all-tools": "Vyžadovať všetky nástroje",
"cookbook-name": "Názov kuchárky",
"cookbook-with-name": "Kuchárka {0}"
"cookbook-with-name": "Kuchárka {0}",
"create-a-cookbook": "Create a Cookbook",
"cookbook": "Cookbook"
}
}

View File

@@ -22,7 +22,7 @@
"support": "Podpora",
"version": "Verzija",
"unknown-version": "neznano",
"sponsor": "Sponsor"
"sponsor": "Sponzor"
},
"asset": {
"assets": "Viri",
@@ -53,9 +53,9 @@
"apprise-url": "Apprise URL",
"database": "Baza podatkov",
"delete-event": "Zbriši dogodek",
"event-delete-confirmation": "Are you sure you want to delete this event?",
"event-deleted": "Event Deleted",
"event-updated": "Event Updated",
"event-delete-confirmation": "Ali ste prepričani, da želite izbrisati ta dogodek?",
"event-deleted": "Dogodek izbrisan",
"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-version": "Na voljo je nova verzija!",
"notification": "Obvestila",
@@ -64,7 +64,7 @@
"something-went-wrong": "Nekaj je šlo narobe!",
"subscribed-events": "Naročeni dogodki",
"test-message-sent": "Testno sporočilo je bilo poslano",
"new-notification": "New Notification",
"new-notification": "Novo obvestilo",
"event-notifiers": "Event Notifiers",
"apprise-url-skipped-if-blank": "Apprise URL (skipped if blank)",
"enable-notifier": "Enable Notifier",
@@ -114,12 +114,12 @@
"json": "JSON",
"keyword": "Ključna beseda",
"link-copied": "Povezava kopirana",
"loading": "Loading",
"loading": "Nalaganje",
"loading-events": "Loading Events",
"loading-recipe": "Loading recipe...",
"loading-recipe": "Nalagam recepte...",
"loading-ocr-data": "Loading OCR data...",
"loading-recipes": "Nalagam recepte",
"message": "Message",
"message": "Sporočilo",
"monday": "Ponedeljek",
"name": "Ime",
"new": "Novo",
@@ -146,7 +146,7 @@
"sort": "Razvrsti",
"sort-alphabetically": "Po abecedi",
"status": "Stanje",
"subject": "Subject",
"subject": "Zadeva",
"submit": "Pošlji",
"success-count": "Uspešno: {count}",
"sunday": "Nedelja",
@@ -186,20 +186,21 @@
"color": "Barva",
"timestamp": "Časovni žig",
"last-made": "Last Made",
"learn-more": "Learn More",
"learn-more": "Več o tem",
"this-feature-is-currently-inactive": "This feature is currently inactive",
"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",
"copied-items-to-clipboard": "No item copied to clipboard|One item copied to clipboard|Copied {count} items to clipboard",
"actions": "Actions",
"selected-count": "Selected: {count}",
"export-all": "Export All",
"refresh": "Refresh",
"upload-file": "Upload File",
"export-all": "Izvozi vse",
"refresh": "Osveži",
"upload-file": "Naloži datoteko",
"created-on-date": "Created on: {0}",
"unsaved-changes": "You have unsaved changes. Do you want to save before leaving? Okay to save, Cancel to discard changes.",
"clipboard-copy-failure": "Failed to copy to the clipboard."
"clipboard-copy-failure": "Failed to copy to the clipboard.",
"confirm-delete-generic-items": "Are you sure you want to delete the following items?"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Ste prepričani, da želite izbrisati <b>{groupName}<b/>?",
@@ -225,15 +226,15 @@
"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."
},
"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": "Manage",
"invite": "Invite",
"invite": "Povabi",
"looking-to-update-your-profile": "Looking to Update Your Profile?",
"default-recipe-preferences-description": "These are the default settings when a new recipe is created in your group. These can be changed for individual recipes in the recipe settings menu.",
"default-recipe-preferences": "Default Recipe Preferences",
"group-preferences": "Group Preferences",
"private-group": "Private Group",
"private-group": "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.",
"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",
@@ -249,7 +250,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.",
"general-preferences": "General Preferences",
"group-recipe-preferences": "Group Recipe Preferences",
"report": "Report",
"report": "Prijavi",
"report-with-id": "Report ID: {id}",
"group-management": "Group Management",
"admin-group-management": "Admin Group Management",
@@ -407,7 +408,7 @@
"carbohydrate-content": "Ogljikovi hidrati",
"categories": "Kategorije",
"comment-action": "Pripomba",
"comment": "Comment",
"comment": "Komentar",
"comments": "Pripombe",
"delete-confirmation": "Ali želite izbrisati ta recept?",
"delete-recipe": "Izbriši recept",
@@ -472,8 +473,8 @@
"add-to-plan": "Dodaj v načrt",
"add-to-timeline": "Add to Timeline",
"recipe-added-to-list": "Recept dodan na seznam",
"recipes-added-to-list": "Recipes added to list",
"successfully-added-to-list": "Successfully 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",
"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",
@@ -500,18 +501,18 @@
"public-link": "Javna povezava",
"timer": {
"kitchen-timer": "Kitchen Timer",
"start-timer": "Start Timer",
"pause-timer": "Pause Timer",
"resume-timer": "Resume Timer",
"stop-timer": "Stop Timer"
"start-timer": "Zaženi časovnik",
"pause-timer": "Ustavi časovnik",
"resume-timer": "Nadaljuj časovnik",
"stop-timer": "Ustavi časovnik"
},
"edit-timeline-event": "Edit Timeline Event",
"timeline": "Timeline",
"timeline": "Časovnica",
"timeline-is-empty": "Nothing on the timeline yet. Try making this recipe!",
"group-global-timeline": "{groupName} Global Timeline",
"open-timeline": "Open Timeline",
"made-this": "I Made This",
"how-did-it-turn-out": "How did it turn out?",
"made-this": "Naredil sem to",
"how-did-it-turn-out": "Kako se je izkazalo?",
"user-made-this": "{user} made this",
"last-made-date": "Last Made {date}",
"api-extras-description": "Recipes extras are a key feature of the Mealie API. They allow you to create custom JSON key/value pairs within a recipe, to reference from 3rd party applications. You can use these keys to provide information, for example to trigger automations or custom messages to relay to your desired device.",
@@ -557,11 +558,11 @@
"debug": "Debug",
"tree-view": "Tree View",
"recipe-yield": "Recipe Yield",
"unit": "Unit",
"upload-image": "Upload image",
"screen-awake": "Keep Screen Awake",
"remove-image": "Remove image",
"nextStep": "Next step"
"unit": "Enota",
"upload-image": "Naloži sliko",
"screen-awake": "Ohranjanje budnega zaslona",
"remove-image": "Odstrani sliko",
"nextStep": "Naslednji korak"
},
"search": {
"advanced-search": "Napredno iskanje",
@@ -712,7 +713,7 @@
"general-about": "General About",
"application-version": "Application Version",
"application-version-error-text": "Your current version ({0}) does not match the latest release. Considering updating to the latest version ({1}).",
"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-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",
@@ -796,7 +797,7 @@
"untagged-count": "Brez značke {count}",
"create-a-tag": "Ustvari značko",
"tag-name": "Ime značke",
"tag": "Tag"
"tag": "Oznaka"
},
"tool": {
"tools": "Orodja",
@@ -877,10 +878,10 @@
"account-locked-please-try-again-later": "Account Locked. Please try again later",
"user-favorites": "User Favorites",
"password-strength-values": {
"weak": "Weak",
"good": "Good",
"strong": "Strong",
"very-strong": "Very Strong"
"weak": "Šibko",
"good": "Dobro",
"strong": "Močno",
"very-strong": "Zelo močno"
},
"user-management": "User Management",
"reset-locked-users": "Reset Locked Users",
@@ -898,7 +899,7 @@
"enable-advanced-features": "Enable advanced features",
"it-looks-like-this-is-your-first-time-logging-in": "It looks like this is your first time logging in.",
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Don't want to see this anymore? Be sure to change your email in your user settings!",
"forgot-password": "Forgot Password",
"forgot-password": "Ste pozabili geslo",
"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."
},
@@ -920,10 +921,10 @@
"target-food": "Target Food",
"create-food": "Create Food",
"food-label": "Food Label",
"edit-food": "Edit Food",
"edit-food": "Spremeni živilo",
"food-data": "Food Data",
"example-food-singular": "ex: Onion",
"example-food-plural": "ex: Onions"
"example-food-singular": "npr: Čebula",
"example-food-plural": "npr: Čebule"
},
"units": {
"seed-dialog-text": "Napolni podatkovno bazo z običajnimi enotami, glede na vaš lokalni jezik.",
@@ -981,12 +982,12 @@
"data-management": "Data Management",
"data-management-description": "Select which data set you want to make changes to.",
"select-data": "Select Data",
"select-language": "Select Language",
"select-language": "Izberite jezik",
"columns": "Columns",
"combine": "Combine",
"categories": {
"edit-category": "Edit Category",
"new-category": "New Category",
"edit-category": "Uredi kategorijo",
"new-category": "Nova kategorija",
"category-data": "Category Data"
},
"tags": {
@@ -1131,7 +1132,7 @@
"tasks": "Tasks"
},
"profile": {
"welcome-user": "👋 Welcome, {0}",
"welcome-user": "👋 Dobrodošel, {0}",
"description": "Manage your profile, recipes, and group settings.",
"get-invite-link": "Get Invite Link",
"get-public-link": "Get Public Link",
@@ -1150,7 +1151,7 @@
"group-settings": "Group Settings",
"group-settings-description": "Manage your common group settings like mealplan and privacy settings.",
"cookbooks-description": "Manage a collection of recipe categories and generate pages for them.",
"members": "Members",
"members": "Člani",
"members-description": "See who's in your group and manage their permissions.",
"webhooks-description": "Setup webhooks that trigger on days that you have have mealplan scheduled.",
"notifiers": "Notifiers",
@@ -1175,9 +1176,9 @@
"manage-data-migrations": "Manage Data Migrations"
},
"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.",
"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.",
"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.",
@@ -1185,6 +1186,8 @@
"require-all-tags": "Require All Tags",
"require-all-tools": "Require All Tools",
"cookbook-name": "Cookbook Name",
"cookbook-with-name": "Cookbook {0}"
"cookbook-with-name": "Cookbook {0}",
"create-a-cookbook": "Create a Cookbook",
"cookbook": "Cookbook"
}
}

View File

@@ -199,7 +199,8 @@
"upload-file": "Учитај датотеку",
"created-on-date": "Крерирано: {0}",
"unsaved-changes": "You have unsaved changes. Do you want to save before leaving? Okay to save, Cancel to discard changes.",
"clipboard-copy-failure": "Failed to copy to the clipboard."
"clipboard-copy-failure": "Failed to copy to the clipboard.",
"confirm-delete-generic-items": "Are you sure you want to delete the following items?"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Да ли сте сигурни да желите да обришете <b>{groupName}<b/>?",
@@ -1185,6 +1186,8 @@
"require-all-tags": "Захтевај све ознаке",
"require-all-tools": "Захтева сав прибор",
"cookbook-name": "Cookbook Name",
"cookbook-with-name": "Кувар {0}"
"cookbook-with-name": "Кувар {0}",
"create-a-cookbook": "Create a Cookbook",
"cookbook": "Cookbook"
}
}

View File

@@ -199,7 +199,8 @@
"upload-file": "Ladda upp fil",
"created-on-date": "Skapad {0}",
"unsaved-changes": "Du har osparade ändringar. Vill du spara innan du lämnar? Tryck Okej att spara, Avbryt för att ignorera ändringar.",
"clipboard-copy-failure": "Det gick inte att kopiera till urklipp."
"clipboard-copy-failure": "Det gick inte att kopiera till urklipp.",
"confirm-delete-generic-items": "Är du säker på att du vill radera följande objekt?"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Är du säker på att du vill radera <b>{groupName}<b/>?",
@@ -1185,6 +1186,8 @@
"require-all-tags": "Kräv alla taggar",
"require-all-tools": "Kräv alla verktyg",
"cookbook-name": "Namn på kokbok",
"cookbook-with-name": "Kokbok {0}"
"cookbook-with-name": "Kokbok {0}",
"create-a-cookbook": "Create a Cookbook",
"cookbook": "Cookbook"
}
}

View File

@@ -199,7 +199,8 @@
"upload-file": "Dosya Yükle",
"created-on-date": "{0} tarihinde oluşturuldu",
"unsaved-changes": "Kaydedilmemiş değişiklikleriniz mevcut. Ayrılmadan önce kaydetmek ister misiniz? Kaydetmek için Tamam'ı, değişiklikleri iptal etmek için İptal'i seçin.",
"clipboard-copy-failure": "Panoya kopyalanamadı."
"clipboard-copy-failure": "Panoya kopyalanamadı.",
"confirm-delete-generic-items": "Aşağıdaki öğeleri silmek istediğinizden emin misiniz?"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "<b>{groupName}<b/>'i silmek istediğine emin misin?",
@@ -1185,6 +1186,8 @@
"require-all-tags": "Require All Tags",
"require-all-tools": "Require All Tools",
"cookbook-name": "Cookbook Name",
"cookbook-with-name": "Cookbook {0}"
"cookbook-with-name": "Cookbook {0}",
"create-a-cookbook": "Yemek Kitabı Oluştur",
"cookbook": "Yemek kitabı"
}
}

View File

@@ -199,7 +199,8 @@
"upload-file": "Вивантажити файл",
"created-on-date": "Створено: {0}",
"unsaved-changes": "У вас є незбережені зміни. Ви хочете зберегти їх перед виходом? Гаразд, щоб зберегти, Скасувати, щоб скасувати.",
"clipboard-copy-failure": "Не вдалося скопіювати до буфера обміну."
"clipboard-copy-failure": "Не вдалося скопіювати до буфера обміну.",
"confirm-delete-generic-items": "Ви впевнені, що хочете видалити вибрані елементи?"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Ви дійсно бажаєте видалити <b>{groupName}<b/>?",
@@ -1185,6 +1186,8 @@
"require-all-tags": "Вимагати всі мітки",
"require-all-tools": "Вимагати всі інструменти",
"cookbook-name": "Назва кулінарної книги",
"cookbook-with-name": "Кулінарна книга {0}"
"cookbook-with-name": "Кулінарна книга {0}",
"create-a-cookbook": "Створити кулінарну книгу",
"cookbook": "Кулінарна книга"
}
}

View File

@@ -199,7 +199,8 @@
"upload-file": "Upload File",
"created-on-date": "Created on: {0}",
"unsaved-changes": "You have unsaved changes. Do you want to save before leaving? Okay to save, Cancel to discard changes.",
"clipboard-copy-failure": "Failed to copy to the clipboard."
"clipboard-copy-failure": "Failed to copy to the clipboard.",
"confirm-delete-generic-items": "Are you sure you want to delete the following items?"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Are you sure you want to delete <b>{groupName}<b/>?",
@@ -1185,6 +1186,8 @@
"require-all-tags": "Require All Tags",
"require-all-tools": "Require All Tools",
"cookbook-name": "Cookbook Name",
"cookbook-with-name": "Cookbook {0}"
"cookbook-with-name": "Cookbook {0}",
"create-a-cookbook": "Create a Cookbook",
"cookbook": "Cookbook"
}
}

View File

@@ -199,7 +199,8 @@
"upload-file": "上传文件",
"created-on-date": "创建于: {0}",
"unsaved-changes": "你有未保存的更改。你希望现在离开前保存吗?保存选择“是”,不保存选择“取消”。",
"clipboard-copy-failure": "未能复制到剪切板。"
"clipboard-copy-failure": "未能复制到剪切板。",
"confirm-delete-generic-items": "Are you sure you want to delete the following items?"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "您确定要删除<b>{groupName}<b/>吗?",
@@ -1185,6 +1186,8 @@
"require-all-tags": "包含全部标签",
"require-all-tools": "包含全部工具",
"cookbook-name": "食谱名称",
"cookbook-with-name": "{0}合集"
"cookbook-with-name": "{0}合集",
"create-a-cookbook": "Create a Cookbook",
"cookbook": "Cookbook"
}
}

View File

@@ -199,7 +199,8 @@
"upload-file": "上傳文件",
"created-on-date": "Created on: {0}",
"unsaved-changes": "You have unsaved changes. Do you want to save before leaving? Okay to save, Cancel to discard changes.",
"clipboard-copy-failure": "Failed to copy to the clipboard."
"clipboard-copy-failure": "Failed to copy to the clipboard.",
"confirm-delete-generic-items": "Are you sure you want to delete the following items?"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "確定要刪除<b>{groupName}<b/>",
@@ -1185,6 +1186,8 @@
"require-all-tags": "Require All Tags",
"require-all-tools": "Require All Tools",
"cookbook-name": "食譜名",
"cookbook-with-name": "食譜 {0}"
"cookbook-with-name": "食譜 {0}",
"create-a-cookbook": "Create a Cookbook",
"cookbook": "Cookbook"
}
}

View File

@@ -33,6 +33,7 @@ export interface AppInfo {
version: string;
demoStatus: boolean;
allowSignup: boolean;
defaultGroupSlug?: string;
}
export interface AppStartupInfo {
isFirstLogin: boolean;

View File

@@ -74,7 +74,13 @@ export default defineComponent({
const { response, data } = await adminApi.groups.updateOne(group.value.id, group.value);
if (response?.status === 200 && data) {
if (group.value.slug !== data.slug) {
// the slug updated, which invalidates the nav URLs
window.location.reload();
}
group.value = data;
} else {
alert.error(i18n.tc("settings.settings-update-failed"));
}
}

View File

@@ -121,7 +121,7 @@
</template>
<template v-else-if="property.slot === 'build'">
<v-list-item-subtitle>
<a target="_blank" :href="`https://github.com/hay-kot/mealie/commit/${property.value}`">
<a target="_blank" :href="`https://github.com/mealie-recipes/mealie/commit/${property.value}`">
{{ property.value }}
</a>
</v-list-item-subtitle>

View File

@@ -1,73 +1,81 @@
<template>
<v-container class="narrow-container">
<BasePageTitle divider>
<template #header>
<v-img max-height="100" max-width="100" :src="require('~/static/svgs/manage-cookbooks.svg')"></v-img>
</template>
<template #title> {{ $t('cookbook.cookbooks') }} </template>
{{ $t('cookbook.description') }}
</BasePageTitle>
<div>
<!-- Create Dialog -->
<BaseDialog
v-if="createTarget"
v-model="dialogStates.create"
:width="650"
:icon="$globals.icons.pages"
:title="$t('cookbook.create-a-cookbook')"
:submit-icon="$globals.icons.save"
:submit-text="$tc('general.save')"
@submit="actions.updateOne(createTarget)"
@cancel="actions.deleteOne(createTarget.id)"
>
<v-card-text>
<CookbookEditor
:cookbook=createTarget
:actions="actions"
/>
</v-card-text>
</BaseDialog>
<BaseButton create @click="actions.createOne()" />
<v-expansion-panels class="mt-2">
<draggable v-model="cookbooks" handle=".handle" style="width: 100%" @change="actions.updateOrder()">
<v-expansion-panel v-for="(cookbook, index) in cookbooks" :key="index" class="my-2 left-border rounded">
<v-expansion-panel-header disable-icon-rotate class="headline">
<div class="d-flex align-center">
<v-icon large left>
{{ $globals.icons.pages }}
</v-icon>
{{ cookbook.name }}
</div>
<template #actions>
<v-icon class="handle">
{{ $globals.icons.arrowUpDown }}
</v-icon>
<v-btn icon small class="ml-2">
<v-icon>
{{ $globals.icons.edit }}
<!-- Delete Dialog -->
<BaseDialog
v-model="dialogStates.delete"
:title="$t('general.delete-with-name', { name: $t('cookbook.cookbook') })"
:icon="$globals.icons.alertCircle"
color="error"
@confirm="deleteCookbook()"
>
<v-card-text>
<p>{{ $t("general.confirm-delete-generic-with-name", { name: $t('cookbook.cookbook') }) }}</p>
<p v-if="deleteTarget" class="mt-4 ml-4">{{ deleteTarget.name }}</p>
</v-card-text>
</BaseDialog>
<!-- Cookbook Page -->
<!-- Page Title -->
<v-container class="narrow-container">
<BasePageTitle divider>
<template #header>
<v-img max-height="100" max-width="100" :src="require('~/static/svgs/manage-cookbooks.svg')"></v-img>
</template>
<template #title> {{ $t('cookbook.cookbooks') }} </template>
{{ $t('cookbook.description') }}
</BasePageTitle>
<!-- Create New -->
<BaseButton create @click="createCookbook" />
<!-- Cookbook List -->
<v-expansion-panels class="mt-2">
<draggable v-model="cookbooks" handle=".handle" style="width: 100%" @change="actions.updateOrder()">
<v-expansion-panel v-for="(cookbook, index) in cookbooks" :key="index" class="my-2 left-border rounded">
<v-expansion-panel-header disable-icon-rotate class="headline">
<div class="d-flex align-center">
<v-icon large left>
{{ $globals.icons.pages }}
</v-icon>
</v-btn>
</template>
</v-expansion-panel-header>
<v-expansion-panel-content>
<v-card-text v-if="cookbooks">
<v-text-field v-model="cookbooks[index].name" :label="$t('cookbook.cookbook-name')"></v-text-field>
<v-textarea v-model="cookbooks[index].description" auto-grow :rows="2" :label="$t('recipe.description')"></v-textarea>
<RecipeOrganizerSelector v-model="cookbooks[index].categories" selector-type="categories" />
<RecipeOrganizerSelector v-model="cookbooks[index].tags" selector-type="tags" />
<RecipeOrganizerSelector v-model="cookbooks[index].tools" selector-type="tools" />
<v-switch v-model="cookbooks[index].public" hide-details single-line>
<template #label>
{{ $t('cookbook.public-cookbook') }}
<HelpIcon small right class="ml-2">
{{ $t('cookbook.public-cookbook-description') }}
</HelpIcon>
</template>
</v-switch>
<div class="mt-4">
<h3 class="text-subtitle-1 d-flex align-center mb-0 pb-0">
{{ $t('cookbook.filter-options') }}
<HelpIcon right small class="ml-2">
{{ $t('cookbook.filter-options-description') }}
</HelpIcon>
</h3>
<v-switch v-model="cookbooks[index].requireAllCategories" class="mt-0" hide-details single-line>
<template #label> {{ $t('cookbook.require-all-categories') }} </template>
</v-switch>
<v-switch v-model="cookbooks[index].requireAllTags" hide-details single-line>
<template #label> {{ $t('cookbook.require-all-tags') }} </template>
</v-switch>
<v-switch v-model="cookbooks[index].requireAllTools" hide-details single-line>
<template #label> {{ $t('cookbook.require-all-tools') }} </template>
</v-switch>
{{ cookbook.name }}
</div>
</v-card-text>
<v-card-actions>
<v-spacer></v-spacer>
<BaseButtonGroup
:buttons="[
{
<template #actions>
<v-icon class="handle">
{{ $globals.icons.arrowUpDown }}
</v-icon>
<v-btn icon small class="ml-2">
<v-icon>
{{ $globals.icons.edit }}
</v-icon>
</v-btn>
</template>
</v-expansion-panel-header>
<v-expansion-panel-content>
<CookbookEditor :cookbook="cookbook" :actions="actions" :collapsable="false" @delete="deleteEventHandler" />
<v-card-actions>
<v-spacer></v-spacer>
<BaseButtonGroup
:buttons="[{
icon: $globals.icons.delete,
text: $tc('general.delete'),
event: 'delete',
@@ -78,26 +86,27 @@
event: 'save',
},
]"
@delete="actions.deleteOne(cookbook.id)"
@save="actions.updateOne(cookbook)"
/>
</v-card-actions>
</v-expansion-panel-content>
</v-expansion-panel>
</draggable>
</v-expansion-panels>
</v-container>
@delete="deleteEventHandler(cookbook)"
@save="actions.updateOne(cookbook)" />
</v-card-actions>
</v-expansion-panel-content>
</v-expansion-panel>
</draggable>
</v-expansion-panels>
</v-container>
</div>
</template>
<script lang="ts">
import { defineComponent, useRouter } from "@nuxtjs/composition-api";
import { defineComponent, reactive, ref, useRouter } from "@nuxtjs/composition-api";
import draggable from "vuedraggable";
import { useCookbooks } from "@/composables/use-group-cookbooks";
import { useLoggedInState } from "~/composables/use-logged-in-state";
import RecipeOrganizerSelector from "~/components/Domain/Recipe/RecipeOrganizerSelector.vue";
import CookbookEditor from "~/components/Domain/Cookbook/CookbookEditor.vue";
import { ReadCookBook } from "~/lib/api/types/cookbook";
export default defineComponent({
components: { draggable, RecipeOrganizerSelector },
components: { CookbookEditor, draggable },
setup() {
const { isOwnGroup, loggedIn } = useLoggedInState();
const router = useRouter();
@@ -106,11 +115,50 @@ export default defineComponent({
router.back();
}
const dialogStates = reactive({
create: false,
delete: false,
});
const { cookbooks, actions } = useCookbooks();
// create
const createTarget = ref<ReadCookBook | null>(null);
async function createCookbook() {
await actions.createOne().then((cookbook) => {
createTarget.value = cookbook as ReadCookBook;
});
dialogStates.create = true;
}
// delete
const deleteTarget = ref<ReadCookBook | null>(null);
function deleteEventHandler(item: ReadCookBook){
deleteTarget.value = item;
dialogStates.delete = true;
}
function deleteCookbook() {
if (!deleteTarget.value) {
return;
}
actions.deleteOne(deleteTarget.value.id);
dialogStates.delete = false;
deleteTarget.value = null;
}
return {
cookbooks,
actions,
dialogStates,
// create
createTarget,
createCookbook,
// delete
deleteTarget,
deleteEventHandler,
deleteCookbook,
};
},
head() {

View File

@@ -49,15 +49,41 @@
</v-card-text>
</BaseDialog>
<!-- Bulk Delete Dialog -->
<BaseDialog
v-model="state.bulkDeleteDialog"
width="650px"
:title="$tc('general.confirm')"
:icon="$globals.icons.alertCircle"
color="error"
@confirm="deleteSelected"
>
<v-card-text>
<p class="h4">{{ $t('general.confirm-delete-generic-items') }}</p>
<v-card outlined>
<v-virtual-scroll height="400" item-height="25" :items="bulkDeleteTarget">
<template #default="{ item }">
<v-list-item class="pb-2">
<v-list-item-content>
<v-list-item-title>{{ item.name }}</v-list-item-title>
</v-list-item-content>
</v-list-item>
</template>
</v-virtual-scroll>
</v-card>
</v-card-text>
</BaseDialog>
<!-- Data Table -->
<BaseCardSectionTitle :icon="$globals.icons.categories" section :title="$tc('data-pages.categories.category-data')"> </BaseCardSectionTitle>
<CrudTable
:table-config="tableConfig"
:headers.sync="tableHeaders"
:data="categories || []"
:bulk-actions="[]"
:bulk-actions="[{icon: $globals.icons.delete, text: $tc('general.delete'), event: 'delete-selected'}]"
@delete-one="deleteEventHandler"
@edit-one="editEventHandler"
@delete-selected="bulkDeleteEventHandler"
>
<template #button-row>
<BaseButton create @click="state.createDialog = true">{{ $t("general.create") }}</BaseButton>
@@ -96,6 +122,7 @@ export default defineComponent({
createDialog: false,
editDialog: false,
deleteDialog: false,
bulkDeleteDialog: false,
});
const categoryData = useCategoryData();
const categoryStore = useCategoryStore();
@@ -149,6 +176,24 @@ export default defineComponent({
state.deleteDialog = false;
}
// ============================================================
// Bulk Delete Category
const bulkDeleteTarget = ref<RecipeCategory[]>([]);
function bulkDeleteEventHandler(selection: RecipeCategory[]) {
bulkDeleteTarget.value = selection;
state.bulkDeleteDialog = true;
}
async function deleteSelected() {
for (const item of bulkDeleteTarget.value) {
if (!item.id) {
continue;
}
await categoryStore.actions.deleteOne(item.id);
}
bulkDeleteTarget.value = [];
}
return {
state,
tableConfig,
@@ -168,7 +213,12 @@ export default defineComponent({
// delete
deleteTarget,
deleteEventHandler,
deleteCategory
deleteCategory,
// bulk delete
bulkDeleteTarget,
bulkDeleteEventHandler,
deleteSelected,
};
},
});

View File

@@ -155,16 +155,42 @@
</v-card-text>
</BaseDialog>
<!-- Bulk Delete Dialog -->
<BaseDialog
v-model="bulkDeleteDialog"
width="650px"
:title="$tc('general.confirm')"
:icon="$globals.icons.alertCircle"
color="error"
@confirm="deleteSelected"
>
<v-card-text>
<p class="h4">{{ $t('general.confirm-delete-generic-items') }}</p>
<v-card outlined>
<v-virtual-scroll height="400" item-height="25" :items="bulkDeleteTarget">
<template #default="{ item }">
<v-list-item class="pb-2">
<v-list-item-content>
<v-list-item-title>{{ item.name }}</v-list-item-title>
</v-list-item-content>
</v-list-item>
</template>
</v-virtual-scroll>
</v-card>
</v-card-text>
</BaseDialog>
<!-- Data Table -->
<BaseCardSectionTitle :icon="$globals.icons.foods" section :title="$tc('data-pages.foods.food-data')"> </BaseCardSectionTitle>
<CrudTable
:table-config="tableConfig"
:headers.sync="tableHeaders"
:data="foods || []"
:bulk-actions="[]"
:bulk-actions="[{icon: $globals.icons.delete, text: $tc('general.delete'), event: 'delete-selected'}]"
@delete-one="deleteEventHandler"
@edit-one="editEventHandler"
@create-one="createEventHandler"
@delete-selected="bulkDeleteEventHandler"
>
<template #button-row>
<BaseButton create @click="createDialog = true" />
@@ -306,6 +332,21 @@ export default defineComponent({
deleteDialog.value = false;
}
const bulkDeleteDialog = ref(false);
const bulkDeleteTarget = ref<IngredientFood[]>([]);
function bulkDeleteEventHandler(selection: IngredientFood[]) {
bulkDeleteTarget.value = selection;
bulkDeleteDialog.value = true;
}
async function deleteSelected() {
for (const item of bulkDeleteTarget.value) {
await foodStore.actions.deleteOne(item.id);
}
bulkDeleteTarget.value = [];
}
// ============================================================
// Alias Manager
@@ -396,6 +437,10 @@ export default defineComponent({
deleteDialog,
deleteFood,
deleteTarget,
bulkDeleteDialog,
bulkDeleteTarget,
bulkDeleteEventHandler,
deleteSelected,
// Alias Manager
aliasManagerDialog,
aliasManagerEventHandler,

View File

@@ -45,6 +45,31 @@
</v-card-text>
</BaseDialog>
<!-- Bulk Delete Dialog -->
<BaseDialog
v-model="state.bulkDeleteDialog"
width="650px"
:title="$tc('general.confirm')"
:icon="$globals.icons.alertCircle"
color="error"
@confirm="deleteSelected"
>
<v-card-text>
<p class="h4">{{ $t('general.confirm-delete-generic-items') }}</p>
<v-card outlined>
<v-virtual-scroll height="400" item-height="25" :items="bulkDeleteTarget">
<template #default="{ item }">
<v-list-item class="pb-2">
<v-list-item-content>
<v-list-item-title>{{ item.name }}</v-list-item-title>
</v-list-item-content>
</v-list-item>
</template>
</v-virtual-scroll>
</v-card>
</v-card-text>
</BaseDialog>
<!-- Seed Dialog-->
<BaseDialog
v-model="seedDialog"
@@ -88,9 +113,10 @@
:table-config="tableConfig"
:headers.sync="tableHeaders"
:data="labels || []"
:bulk-actions="[]"
:bulk-actions="[{icon: $globals.icons.delete, text: $tc('general.delete'), event: 'delete-selected'}]"
@delete-one="deleteEventHandler"
@edit-one="editEventHandler"
@delete-selected="bulkDeleteEventHandler"
>
<template #button-row>
<BaseButton create @click="state.createDialog = true">{{ $t("general.create") }}</BaseButton>
@@ -146,6 +172,7 @@ export default defineComponent({
createDialog: false,
editDialog: false,
deleteDialog: false,
bulkDeleteDialog: false,
});
// ============================================================
@@ -179,6 +206,21 @@ export default defineComponent({
state.deleteDialog = false;
}
// Bulk Delete
const bulkDeleteTarget = ref<MultiPurposeLabelSummary[]>([]);
function bulkDeleteEventHandler(selection: MultiPurposeLabelSummary[]) {
bulkDeleteTarget.value = selection;
state.bulkDeleteDialog = true;
}
async function deleteSelected() {
for (const item of bulkDeleteTarget.value) {
await labelStore.actions.deleteOne(item.id);
}
bulkDeleteTarget.value = [];
}
// Edit
const editLabel = ref<MultiPurposeLabelSummary | null>(null);
@@ -244,6 +286,9 @@ export default defineComponent({
deleteEventHandler,
deleteLabel,
deleteTarget,
bulkDeleteEventHandler,
deleteSelected,
bulkDeleteTarget,
// Seed
seedDatabase,

View File

@@ -49,15 +49,41 @@
</v-card-text>
</BaseDialog>
<!-- Bulk Delete Dialog -->
<BaseDialog
v-model="state.bulkDeleteDialog"
width="650px"
:title="$tc('general.confirm')"
:icon="$globals.icons.alertCircle"
color="error"
@confirm="deleteSelected"
>
<v-card-text>
<p class="h4">{{ $t('general.confirm-delete-generic-items') }}</p>
<v-card outlined>
<v-virtual-scroll height="400" item-height="25" :items="bulkDeleteTarget">
<template #default="{ item }">
<v-list-item class="pb-2">
<v-list-item-content>
<v-list-item-title>{{ item.name }}</v-list-item-title>
</v-list-item-content>
</v-list-item>
</template>
</v-virtual-scroll>
</v-card>
</v-card-text>
</BaseDialog>
<!-- Data Table -->
<BaseCardSectionTitle :icon="$globals.icons.tags" section :title="$tc('data-pages.tags.tag-data')"> </BaseCardSectionTitle>
<CrudTable
:table-config="tableConfig"
:headers.sync="tableHeaders"
:data="tags || []"
:bulk-actions="[]"
:bulk-actions="[{icon: $globals.icons.delete, text: $tc('general.delete'), event: 'delete-selected'}]"
@delete-one="deleteEventHandler"
@edit-one="editEventHandler"
@delete-selected="bulkDeleteEventHandler"
>
<template #button-row>
<BaseButton create @click="state.createDialog = true">{{ $t("general.create") }}</BaseButton>
@@ -96,6 +122,7 @@ export default defineComponent({
createDialog: false,
editDialog: false,
deleteDialog: false,
bulkDeleteDialog: false,
});
const tagData = useTagData();
@@ -150,6 +177,24 @@ export default defineComponent({
state.deleteDialog = false;
}
// ============================================================
// Bulk Delete Tag
const bulkDeleteTarget = ref<RecipeTag[]>([]);
function bulkDeleteEventHandler(selection: RecipeTag[]) {
bulkDeleteTarget.value = selection;
state.bulkDeleteDialog = true;
}
async function deleteSelected() {
for (const item of bulkDeleteTarget.value) {
if (!item.id) {
continue;
}
await tagStore.actions.deleteOne(item.id);
}
bulkDeleteTarget.value = [];
}
return {
state,
tableConfig,
@@ -169,7 +214,12 @@ export default defineComponent({
// delete
deleteTarget,
deleteEventHandler,
deleteTag
deleteTag,
// bulk delete
bulkDeleteTarget,
bulkDeleteEventHandler,
deleteSelected,
};
},
});

View File

@@ -51,15 +51,41 @@
</v-card-text>
</BaseDialog>
<!-- Bulk Delete Dialog -->
<BaseDialog
v-model="state.bulkDeleteDialog"
width="650px"
:title="$tc('general.confirm')"
:icon="$globals.icons.alertCircle"
color="error"
@confirm="deleteSelected"
>
<v-card-text>
<p class="h4">{{ $t('general.confirm-delete-generic-items') }}</p>
<v-card outlined>
<v-virtual-scroll height="400" item-height="25" :items="bulkDeleteTarget">
<template #default="{ item }">
<v-list-item class="pb-2">
<v-list-item-content>
<v-list-item-title>{{ item.name }}</v-list-item-title>
</v-list-item-content>
</v-list-item>
</template>
</v-virtual-scroll>
</v-card>
</v-card-text>
</BaseDialog>
<!-- Data Table -->
<BaseCardSectionTitle :icon="$globals.icons.potSteam" section :title="$tc('data-pages.tools.tool-data')"> </BaseCardSectionTitle>
<CrudTable
:table-config="tableConfig"
:headers.sync="tableHeaders"
:data="tools || []"
:bulk-actions="[]"
:bulk-actions="[{icon: $globals.icons.delete, text: $tc('general.delete'), event: 'delete-selected'}]"
@delete-one="deleteEventHandler"
@edit-one="editEventHandler"
@delete-selected="bulkDeleteEventHandler"
>
<template #button-row>
<BaseButton create @click="state.createDialog = true">{{ $t("general.create") }}</BaseButton>
@@ -108,6 +134,7 @@ export default defineComponent({
createDialog: false,
editDialog: false,
deleteDialog: false,
bulkDeleteDialog: false,
});
const toolData = useToolData();
@@ -162,6 +189,22 @@ export default defineComponent({
state.deleteDialog = false;
}
// ============================================================
// Bulk Delete Tag
const bulkDeleteTarget = ref<RecipeTool[]>([]);
function bulkDeleteEventHandler(selection: RecipeTool[]) {
bulkDeleteTarget.value = selection;
state.bulkDeleteDialog = true;
}
async function deleteSelected() {
for (const item of bulkDeleteTarget.value) {
await toolStore.actions.deleteOne(item.id);
}
bulkDeleteTarget.value = [];
}
return {
state,
tableConfig,
@@ -181,7 +224,12 @@ export default defineComponent({
// delete
deleteTarget,
deleteEventHandler,
deleteTool
deleteTool,
// bulk delete
bulkDeleteTarget,
bulkDeleteEventHandler,
deleteSelected,
};
},
});

View File

@@ -129,6 +129,31 @@
</v-card-text>
</BaseDialog>
<!-- Bulk Delete Dialog -->
<BaseDialog
v-model="bulkDeleteDialog"
width="650px"
:title="$tc('general.confirm')"
:icon="$globals.icons.alertCircle"
color="error"
@confirm="deleteSelected"
>
<v-card-text>
<p class="h4">{{ $t('general.confirm-delete-generic-items') }}</p>
<v-card outlined>
<v-virtual-scroll height="400" item-height="25" :items="bulkDeleteTarget">
<template #default="{ item }">
<v-list-item class="pb-2">
<v-list-item-content>
<v-list-item-title>{{ item.name }}</v-list-item-title>
</v-list-item-content>
</v-list-item>
</template>
</v-virtual-scroll>
</v-card>
</v-card-text>
</BaseDialog>
<!-- Seed Dialog-->
<BaseDialog
v-model="seedDialog"
@@ -172,10 +197,11 @@
:table-config="tableConfig"
:headers.sync="tableHeaders"
:data="units || []"
:bulk-actions="[]"
:bulk-actions="[{icon: $globals.icons.delete, text: $tc('general.delete'), event: 'delete-selected'}]"
@delete-one="deleteEventHandler"
@edit-one="editEventHandler"
@create-one="createEventHandler"
@delete-selected="bulkDeleteEventHandler"
>
<template #button-row>
<BaseButton create @click="createDialog = true" />
@@ -339,6 +365,22 @@ export default defineComponent({
deleteDialog.value = false;
}
// ============================================================
// Bulk Delete Units
const bulkDeleteDialog = ref(false);
const bulkDeleteTarget = ref<IngredientUnit[]>([]);
function bulkDeleteEventHandler(selection: IngredientUnit[]) {
bulkDeleteTarget.value = selection;
bulkDeleteDialog.value = true;
}
async function deleteSelected() {
for (const item of bulkDeleteTarget.value) {
await unitActions.deleteOne(item.id);
}
bulkDeleteTarget.value = [];
}
// ============================================================
// Alias Manager
@@ -423,6 +465,11 @@ export default defineComponent({
deleteDialog,
deleteUnit,
deleteTarget,
// Bulk Delete
bulkDeleteDialog,
bulkDeleteEventHandler,
bulkDeleteTarget,
deleteSelected,
// Alias Manager
aliasManagerDialog,
aliasManagerEventHandler,

View File

@@ -4,17 +4,28 @@
<script lang="ts">
import { computed, defineComponent, useContext, useRouter } from "@nuxtjs/composition-api";
import { AppInfo } from "~/lib/api/types/admin";
export default defineComponent({
layout: "blank",
setup() {
const { $auth } = useContext();
const { $auth, $axios } = useContext();
const router = useRouter();
const groupSlug = computed(() => $auth.user?.groupSlug);
async function redirectPublicUserToDefaultGroup() {
const { data } = await $axios.get<AppInfo>("/api/app/about");
if (data?.defaultGroupSlug) {
router.push(`/g/${data.defaultGroupSlug}`);
} else {
router.push("/login");
}
}
if (groupSlug.value) {
router.push(`/g/${groupSlug.value}`);
} else {
router.push("/login");
redirectPublicUserToDefaultGroup();
}
}
});

View File

@@ -1,21 +0,0 @@
<template>
<div></div>
</template>
<script lang="ts">
import { defineComponent } from "@nuxtjs/composition-api";
export default defineComponent({
setup() {
return {};
},
head() {
return {
title: this.$t("settings.profile") as string,
};
},
});
</script>
<style scoped>
</style>

View File

@@ -7,11 +7,9 @@ from mealie.core.config import get_app_settings
class Hasher(Protocol):
def hash(self, password: str) -> str:
...
def hash(self, password: str) -> str: ...
def verify(self, password: str, hashed: str) -> bool:
...
def verify(self, password: str, hashed: str) -> bool: ...
class FakeHasher:

View File

@@ -18,8 +18,7 @@ ALGORITHM = "HS256"
logger = root_logger.get_logger("security")
class UserLockedOut(Exception):
...
class UserLockedOut(Exception): ...
def create_access_token(data: dict, expires_delta: timedelta | None = None) -> str:

View File

@@ -7,13 +7,11 @@ from pydantic import BaseModel, BaseSettings, PostgresDsn
class AbstractDBProvider(ABC):
@property
@abstractmethod
def db_url(self) -> str:
...
def db_url(self) -> str: ...
@property
@abstractmethod
def db_url_public(self) -> str:
...
def db_url_public(self) -> str: ...
class SQLiteProvider(AbstractDBProvider, BaseModel):

View File

@@ -31,5 +31,4 @@ class GroupWebhooksModel(SqlAlchemyBase, BaseMixins):
time: Mapped[str | None] = mapped_column(String, default="00:00")
@auto_init()
def __init__(self, **_) -> None:
...
def __init__(self, **_) -> None: ...

View File

@@ -31,5 +31,14 @@
"generic-updated-with-url": "{name} is opgedateer, {url}",
"generic-duplicated": "{name} is gekopieer",
"generic-deleted": "{name} is verwyder"
},
"datetime": {
"year": "year|years",
"day": "day|days",
"hour": "hour|hours",
"minute": "minute|minutes",
"second": "second|seconds",
"millisecond": "millisecond|milliseconds",
"microsecond": "microsecond|microseconds"
}
}

View File

@@ -31,5 +31,14 @@
"generic-updated-with-url": "{name} تم تحديثه، {url}",
"generic-duplicated": "تم تكرار {name}",
"generic-deleted": "تم حذف {name}"
},
"datetime": {
"year": "year|years",
"day": "day|days",
"hour": "hour|hours",
"minute": "minute|minutes",
"second": "second|seconds",
"millisecond": "millisecond|milliseconds",
"microsecond": "microsecond|microseconds"
}
}

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