Compare commits

..

277 Commits

Author SHA1 Message Date
vabene1111
cd2c4b35df Merge pull request #3742 from TandoorRecipes/dependabot/pip/psycopg2-binary-2.9.10
Bump psycopg2-binary from 2.9.9 to 2.9.10
2025-06-11 19:34:54 +02:00
dependabot[bot]
d1d4cec00f Bump psycopg2-binary from 2.9.9 to 2.9.10
Bumps [psycopg2-binary](https://github.com/psycopg/psycopg2) from 2.9.9 to 2.9.10.
- [Changelog](https://github.com/psycopg/psycopg2/blob/master/NEWS)
- [Commits](https://github.com/psycopg/psycopg2/compare/2.9.9...2.9.10)

---
updated-dependencies:
- dependency-name: psycopg2-binary
  dependency-version: 2.9.10
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-11 17:33:27 +00:00
vabene1111
6940f405eb Merge pull request #3757 from TandoorRecipes/dependabot/pip/requests-2.32.4
Bump requests from 2.32.3 to 2.32.4
2025-06-11 19:32:20 +02:00
dependabot[bot]
3e6f7a554a Bump requests from 2.32.3 to 2.32.4
Bumps [requests](https://github.com/psf/requests) from 2.32.3 to 2.32.4.
- [Release notes](https://github.com/psf/requests/releases)
- [Changelog](https://github.com/psf/requests/blob/main/HISTORY.md)
- [Commits](https://github.com/psf/requests/compare/v2.32.3...v2.32.4)

---
updated-dependencies:
- dependency-name: requests
  dependency-version: 2.32.4
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-10 10:03:22 +00:00
vabene1111
4df451a540 Merge pull request #3752 from TandoorRecipes/dependabot/pip/django-4.2.22
Bump django from 4.2.21 to 4.2.22
2025-06-09 11:07:17 +02:00
dependabot[bot]
fd06d67218 Bump django from 4.2.21 to 4.2.22
Bumps [django](https://github.com/django/django) from 4.2.21 to 4.2.22.
- [Commits](https://github.com/django/django/compare/4.2.21...4.2.22)

---
updated-dependencies:
- dependency-name: django
  dependency-version: 4.2.22
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-06 23:32:28 +00:00
Hennadii Lysenko
f546a4d382 Translated using Weblate (Ukrainian)
Currently translated at 53.6% (306 of 570 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/uk/
2025-05-21 14:58:39 +00:00
querty
c2ecf7ef57 Translated using Weblate (Portuguese)
Currently translated at 60.0% (342 of 570 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/pt/
2025-05-18 10:58:40 +00:00
querty
b9771d7c11 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (488 of 488 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/pt_BR/
2025-05-18 10:58:39 +00:00
querty
d5b53d2bca Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (570 of 570 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/pt_BR/
2025-05-18 10:58:39 +00:00
Vincenzo Reale
f502cd47e1 Translated using Weblate (Italian)
Currently translated at 100.0% (488 of 488 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/it/
2025-05-18 10:58:39 +00:00
Anna Kh
358fab9a8f Translated using Weblate (Russian)
Currently translated at 84.9% (484 of 570 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/ru/
2025-05-16 13:58:39 +00:00
Tales Garcia Fernandes
445e78825a Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (488 of 488 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/pt_BR/
2025-05-15 10:58:40 +00:00
vabene1111
e7d9824520 Merge pull request #3691 from TandoorRecipes/dependabot/pip/pytubefix-8.13.1
Bump pytubefix from 8.12.2 to 8.13.1
2025-05-14 07:08:37 +02:00
vabene1111
c9ebbdd4ec Merge pull request #3707 from EifX/fix-doc-updating
Fix doc updating postgress
2025-05-14 07:07:07 +02:00
vabene1111
85fa211390 Merge pull request #3695 from tpansino/s3-secret-access-key-file
Support reading S3_SECRET_ACCESS_KEY from file
2025-05-14 07:05:42 +02:00
EifX
3f5db2cb03 fix: removing sudo 2025-05-10 20:42:10 +02:00
EifX
79227b347e fix: Documentation around updating postgres 2025-05-10 20:39:14 +02:00
vabene1111
ffe0c22b3e Merge pull request #3704 from TandoorRecipes/dependabot/pip/django-4.2.21
Bump django from 4.2.20 to 4.2.21
2025-05-09 11:07:02 +02:00
dependabot[bot]
25e5faf135 Bump django from 4.2.20 to 4.2.21
Bumps [django](https://github.com/django/django) from 4.2.20 to 4.2.21.
- [Commits](https://github.com/django/django/compare/4.2.20...4.2.21)

---
updated-dependencies:
- dependency-name: django
  dependency-version: 4.2.21
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-08 15:44:57 +00:00
Tom Pansino
a6f8a9ef06 Support reading S3_SECRET_ACCESS_KEY from file 2025-05-03 09:07:14 -07:00
dependabot[bot]
05b51e83a6 Bump pytubefix from 8.12.2 to 8.13.1
Bumps [pytubefix](https://github.com/juanbindez/pytubefix) from 8.12.2 to 8.13.1.
- [Release notes](https://github.com/juanbindez/pytubefix/releases)
- [Commits](https://github.com/juanbindez/pytubefix/compare/v8.12.2...v8.13.1)

---
updated-dependencies:
- dependency-name: pytubefix
  dependency-version: 8.13.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-01 00:42:16 +00:00
Nico G
5625a9ae4f Translated using Weblate (Catalan)
Currently translated at 100.0% (488 of 488 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/ca/
2025-04-29 02:39:17 +00:00
Nico G
8e60a1954b Translated using Weblate (Catalan)
Currently translated at 96.3% (470 of 488 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/ca/
2025-04-26 11:58:40 +00:00
vabene1111
52d2d75fe9 Merge pull request #3653 from TandoorRecipes/dependabot/npm_and_yarn/vue/http-proxy-middleware-2.0.9
Bump http-proxy-middleware from 2.0.6 to 2.0.9 in /vue
2025-04-25 16:12:56 +02:00
Nico G
edb669ab36 Translated using Weblate (Catalan)
Currently translated at 95.6% (467 of 488 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/ca/
2025-04-25 09:58:39 +00:00
Nico G
e9ed28b44d Translated using Weblate (Catalan)
Currently translated at 94.2% (460 of 488 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/ca/
2025-04-24 07:58:39 +00:00
Nico G
343373bf4d Translated using Weblate (Catalan)
Currently translated at 93.4% (456 of 488 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/ca/
2025-04-22 10:12:51 +00:00
dependabot[bot]
698ede9eb6 Bump http-proxy-middleware from 2.0.6 to 2.0.9 in /vue
Bumps [http-proxy-middleware](https://github.com/chimurai/http-proxy-middleware) from 2.0.6 to 2.0.9.
- [Release notes](https://github.com/chimurai/http-proxy-middleware/releases)
- [Changelog](https://github.com/chimurai/http-proxy-middleware/blob/v2.0.9/CHANGELOG.md)
- [Commits](https://github.com/chimurai/http-proxy-middleware/compare/v2.0.6...v2.0.9)

---
updated-dependencies:
- dependency-name: http-proxy-middleware
  dependency-version: 2.0.9
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-16 15:34:33 +00:00
Nico G
3ae73f7cad Translated using Weblate (Catalan)
Currently translated at 100.0% (570 of 570 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/ca/
2025-04-16 07:58:39 +00:00
Nico G
340d36c628 Translated using Weblate (Catalan)
Currently translated at 88.1% (430 of 488 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/ca/
2025-04-16 07:58:39 +00:00
Nico G
703f782be1 Translated using Weblate (Catalan)
Currently translated at 87.3% (498 of 570 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/ca/
2025-04-11 13:58:39 +00:00
Nico G
2ef4514987 Translated using Weblate (Catalan)
Currently translated at 84.5% (482 of 570 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/ca/
2025-04-08 08:58:38 +00:00
Nico G
a89411aeec Translated using Weblate (Catalan)
Currently translated at 85.4% (417 of 488 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/ca/
2025-04-01 12:58:40 +00:00
vabene1111
0cf89ca33c Merge pull request #3614 from stritti/feature/mobile-apps-update
docs: mobile apps updated
2025-03-27 17:14:03 +01:00
Stephan Strittmatter
68ceada28b chore: mobile apps updated 2025-03-25 11:16:18 +00:00
Vlad
192ca44d89 Translated using Weblate (Ukrainian)
Currently translated at 44.7% (255 of 570 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/uk/
2025-03-23 15:07:19 +00:00
vabene1111
3204aaf161 Merge pull request #3607 from TandoorRecipes/dependabot/pip/gunicorn-23.0.0
Bump gunicorn from 22.0.0 to 23.0.0
2025-03-22 09:33:08 +01:00
dependabot[bot]
6cf6791fe6 Bump gunicorn from 22.0.0 to 23.0.0
Bumps [gunicorn](https://github.com/benoitc/gunicorn) from 22.0.0 to 23.0.0.
- [Release notes](https://github.com/benoitc/gunicorn/releases)
- [Commits](https://github.com/benoitc/gunicorn/compare/22.0.0...23.0.0)

---
updated-dependencies:
- dependency-name: gunicorn
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-22 03:20:08 +00:00
vabene1111
6ebb18a932 more ci dependency tests 2025-03-16 13:11:28 +01:00
vabene1111
7bde1bf44f split migrations, CI denendencies 2025-03-16 13:08:06 +01:00
vabene1111
3075ec066f Merge pull request #3595 from TandoorRecipes/dependabot/npm_and_yarn/vue/babel/runtime-7.26.10
Bump @babel/runtime from 7.22.15 to 7.26.10 in /vue
2025-03-16 12:53:55 +01:00
vabene1111
3ddc3c3768 Merge pull request #3594 from TandoorRecipes/dependabot/npm_and_yarn/vue/babel/helpers-7.26.10
Bump @babel/helpers from 7.22.15 to 7.26.10 in /vue
2025-03-16 12:53:46 +01:00
vabene1111
7b7b726ec5 migration to store space and created_by on ShoppingListRecipe
ATTENTION: This deletes all old shopping list recipes that do not have entries associated with it. This should not matter but just for the record
2025-03-14 13:51:49 +01:00
vabene1111
5484506bc3 build requirements 2025-03-14 10:41:03 +01:00
vabene1111
136f05b886 requirments for django allauth 2025-03-14 10:31:42 +01:00
dependabot[bot]
83cf03a10b Bump @babel/runtime from 7.22.15 to 7.26.10 in /vue
Bumps [@babel/runtime](https://github.com/babel/babel/tree/HEAD/packages/babel-runtime) from 7.22.15 to 7.26.10.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.26.10/packages/babel-runtime)

---
updated-dependencies:
- dependency-name: "@babel/runtime"
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-14 09:17:29 +00:00
dependabot[bot]
7b56719716 Bump @babel/helpers from 7.22.15 to 7.26.10 in /vue
Bumps [@babel/helpers](https://github.com/babel/babel/tree/HEAD/packages/babel-helpers) from 7.22.15 to 7.26.10.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.26.10/packages/babel-helpers)

---
updated-dependencies:
- dependency-name: "@babel/helpers"
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-14 09:17:26 +00:00
vabene1111
348296763d Merge branch 'develop' 2025-03-14 10:15:46 +01:00
vabene1111
5c7a57ac32 added missing dependency 2025-03-14 10:15:40 +01:00
Jader Moraes
0c0b8ea455 Translated using Weblate (Portuguese (Brazil))
Currently translated at 66.5% (325 of 488 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/pt_BR/
2025-03-13 22:58:38 +00:00
Jader Moraes
2f20f43efe Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (570 of 570 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/pt_BR/
2025-03-13 22:58:38 +00:00
Nico G
1662b793a5 Translated using Weblate (Catalan)
Currently translated at 84.8% (414 of 488 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/ca/
2025-03-12 09:58:39 +00:00
vabene1111
2e4efe2500 Merge branch 'develop' 2025-03-11 17:42:32 +01:00
vabene1111
3d01faed5f updated recipe scrapers 2025-03-11 17:21:47 +01:00
vabene1111
9bc3443a3c Merge pull request #3565 from TandoorRecipes/dependabot/pip/bleach-6.2.0
Bump bleach from 6.0.0 to 6.2.0
2025-03-11 17:18:36 +01:00
vabene1111
87dc32210e Merge pull request #3566 from TandoorRecipes/dependabot/pip/django-treebeard-4.7.1
Bump django-treebeard from 4.7 to 4.7.1
2025-03-11 17:18:07 +01:00
vabene1111
671216488e Merge pull request #3562 from TandoorRecipes/dependabot/pip/lxml-5.3.1
Bump lxml from 5.3.0 to 5.3.1
2025-03-11 17:17:50 +01:00
vabene1111
f596fc33a1 Merge pull request #3564 from TandoorRecipes/dependabot/pip/pytest-django-4.10.0
Bump pytest-django from 4.9.0 to 4.10.0
2025-03-11 17:17:43 +01:00
vabene1111
82756923ad Merge pull request #3563 from TandoorRecipes/dependabot/pip/pytubefix-8.12.2
Bump pytubefix from 8.12.0 to 8.12.2
2025-03-11 17:17:27 +01:00
vabene1111
14042563bf Merge pull request #3576 from racehd/develop
Revise Synology Guide
2025-03-11 17:16:07 +01:00
vabene1111
06e12396e8 Merge pull request #3574 from JiDW/develop
Add webp file as allowed file type
2025-03-11 17:14:18 +01:00
vabene1111
b698eee3a1 Merge pull request #3590 from TandoorRecipes/dependabot/pip/django-4.2.20
Bump django from 4.2.18 to 4.2.20
2025-03-11 17:13:51 +01:00
vabene1111
9d15634dc8 Merge pull request #3589 from TandoorRecipes/dependabot/pip/jinja2-3.1.6
Bump jinja2 from 3.1.5 to 3.1.6
2025-03-11 17:13:40 +01:00
dependabot[bot]
5f6c298d04 Bump django from 4.2.18 to 4.2.20
Bumps [django](https://github.com/django/django) from 4.2.18 to 4.2.20.
- [Commits](https://github.com/django/django/compare/4.2.18...4.2.20)

---
updated-dependencies:
- dependency-name: django
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-11 16:13:19 +00:00
dependabot[bot]
f20a2ca781 Bump jinja2 from 3.1.5 to 3.1.6
Bumps [jinja2](https://github.com/pallets/jinja) from 3.1.5 to 3.1.6.
- [Release notes](https://github.com/pallets/jinja/releases)
- [Changelog](https://github.com/pallets/jinja/blob/main/CHANGES.rst)
- [Commits](https://github.com/pallets/jinja/compare/3.1.5...3.1.6)

---
updated-dependencies:
- dependency-name: jinja2
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-11 16:13:12 +00:00
vabene1111
6dcfbc24a9 Merge pull request #3588 from TandoorRecipes/dependabot/npm_and_yarn/vue/prismjs-1.30.0
Bump prismjs from 1.29.0 to 1.30.0 in /vue
2025-03-11 17:12:18 +01:00
vabene1111
ea9404301b Merge pull request #3580 from TandoorRecipes/dependabot/npm_and_yarn/vue/axios-1.8.2
Bump axios from 1.6.7 to 1.8.2 in /vue
2025-03-11 17:12:12 +01:00
dependabot[bot]
da268b4429 Bump prismjs from 1.29.0 to 1.30.0 in /vue
Bumps [prismjs](https://github.com/PrismJS/prism) from 1.29.0 to 1.30.0.
- [Release notes](https://github.com/PrismJS/prism/releases)
- [Changelog](https://github.com/PrismJS/prism/blob/master/CHANGELOG.md)
- [Commits](https://github.com/PrismJS/prism/compare/v1.29.0...v1.30.0)

---
updated-dependencies:
- dependency-name: prismjs
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-10 22:29:43 +00:00
Nico G
2775960cf7 Translated using Weblate (Catalan)
Currently translated at 77.8% (444 of 570 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/ca/
2025-03-10 12:39:16 +00:00
dependabot[bot]
bff6b2ffb0 Bump axios from 1.6.7 to 1.8.2 in /vue
Bumps [axios](https://github.com/axios/axios) from 1.6.7 to 1.8.2.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v1.6.7...v1.8.2)

---
updated-dependencies:
- dependency-name: axios
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-07 20:47:21 +00:00
yonatan ben-menachem
193600564e Translated using Weblate (Hebrew)
Currently translated at 18.4% (90 of 488 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/he/
2025-03-07 15:08:51 +00:00
Nico G
2abd683759 Translated using Weblate (Catalan)
Currently translated at 72.4% (413 of 570 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/ca/
2025-03-06 03:42:27 +00:00
Toni Miquel
0163800a05 Translated using Weblate (Spanish)
Currently translated at 99.2% (566 of 570 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/es/
2025-03-04 17:58:38 +00:00
racehd
958ccd7f7d Revise Synology Guide
- Rewrote/revised most of the guide to bring it to current
- Previous guide was last updated several years ago and was largely depreciated. I moved the prior guide references to the end for historical purposes
- Added a depreciated warning under the Firewall section. I have been using the project for a week so far without a firewall rule set-up and have not had any issues.
2025-03-03 22:50:07 +00:00
Mathias Latournerie
a0eb1df4fa Add webp file as allowed file type 2025-03-03 01:30:36 +01:00
fabio souza jr
3f1c6d1dd0 Translated using Weblate (Portuguese (Brazil))
Currently translated at 66.1% (323 of 488 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/pt_BR/
2025-03-02 16:58:38 +00:00
Nico G
87a80e0caa Translated using Weblate (Catalan)
Currently translated at 69.8% (398 of 570 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/ca/
2025-03-01 07:58:38 +00:00
dependabot[bot]
debdd03a7a Bump django-treebeard from 4.7 to 4.7.1
Bumps [django-treebeard](https://github.com/django-treebeard/django-treebeard) from 4.7 to 4.7.1.
- [Changelog](https://github.com/django-treebeard/django-treebeard/blob/master/CHANGES.md)
- [Commits](https://github.com/django-treebeard/django-treebeard/compare/4.7...4.7.1)

---
updated-dependencies:
- dependency-name: django-treebeard
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-01 00:11:59 +00:00
dependabot[bot]
c58697aecd Bump bleach from 6.0.0 to 6.2.0
Bumps [bleach](https://github.com/mozilla/bleach) from 6.0.0 to 6.2.0.
- [Changelog](https://github.com/mozilla/bleach/blob/main/CHANGES)
- [Commits](https://github.com/mozilla/bleach/compare/v6.0.0...v6.2.0)

---
updated-dependencies:
- dependency-name: bleach
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-01 00:11:56 +00:00
dependabot[bot]
3b3ad37d64 Bump pytest-django from 4.9.0 to 4.10.0
Bumps [pytest-django](https://github.com/pytest-dev/pytest-django) from 4.9.0 to 4.10.0.
- [Release notes](https://github.com/pytest-dev/pytest-django/releases)
- [Changelog](https://github.com/pytest-dev/pytest-django/blob/main/docs/changelog.rst)
- [Commits](https://github.com/pytest-dev/pytest-django/compare/v4.9.0...v4.10.0)

---
updated-dependencies:
- dependency-name: pytest-django
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-01 00:11:54 +00:00
dependabot[bot]
d392b06e98 Bump pytubefix from 8.12.0 to 8.12.2
Bumps [pytubefix](https://github.com/juanbindez/pytubefix) from 8.12.0 to 8.12.2.
- [Release notes](https://github.com/juanbindez/pytubefix/releases)
- [Commits](https://github.com/juanbindez/pytubefix/compare/v8.12.0...v8.12.2)

---
updated-dependencies:
- dependency-name: pytubefix
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-01 00:11:52 +00:00
dependabot[bot]
99a9f594e2 Bump lxml from 5.3.0 to 5.3.1
Bumps [lxml](https://github.com/lxml/lxml) from 5.3.0 to 5.3.1.
- [Release notes](https://github.com/lxml/lxml/releases)
- [Changelog](https://github.com/lxml/lxml/blob/master/CHANGES.txt)
- [Commits](https://github.com/lxml/lxml/compare/lxml-5.3.0...lxml-5.3.1)

---
updated-dependencies:
- dependency-name: lxml
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-01 00:11:48 +00:00
Nico G
549a5b764d Translated using Weblate (Catalan)
Currently translated at 63.8% (364 of 570 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/ca/
2025-02-27 10:58:38 +00:00
Nico G
26592c31a9 Translated using Weblate (Catalan)
Currently translated at 82.5% (403 of 488 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/ca/
2025-02-27 10:58:38 +00:00
Nico G
378eb924e9 Translated using Weblate (Catalan)
Currently translated at 58.5% (334 of 570 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/ca/
2025-02-26 08:58:38 +00:00
Andre Bovendorp
f8f4a87a99 Translated using Weblate (Portuguese (Brazil))
Currently translated at 65.7% (321 of 488 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/pt_BR/
2025-02-26 08:58:38 +00:00
Nico G
55289e6837 Translated using Weblate (Catalan)
Currently translated at 52.6% (300 of 570 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/ca/
2025-02-21 10:58:38 +00:00
Filipe Neves
60efbd0389 Translated using Weblate (Portuguese)
Currently translated at 32.9% (161 of 488 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/pt/
2025-02-21 10:58:38 +00:00
Nico G
f3903c1aa5 Translated using Weblate (Catalan)
Currently translated at 47.5% (271 of 570 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/ca/
2025-02-20 08:58:38 +00:00
Nico G
b01e62007f Translated using Weblate (Catalan)
Currently translated at 78.2% (382 of 488 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/ca/
2025-02-20 08:58:38 +00:00
Cots Partier
7730890525 Translated using Weblate (Romanian)
Currently translated at 89.9% (439 of 488 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/ro/
2025-02-16 14:58:38 +00:00
Cots Partier
29977609aa Translated using Weblate (Dutch)
Currently translated at 100.0% (488 of 488 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/nl/
2025-02-16 14:58:38 +00:00
Elvis Gosselin
88c3a7d0bf Translated using Weblate (French)
Currently translated at 89.3% (436 of 488 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/fr/
2025-02-16 14:58:38 +00:00
Juha Antikainen
ba0335bb28 Translated using Weblate (Finnish)
Currently translated at 90.5% (516 of 570 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/fi/
2025-02-14 23:58:39 +00:00
Juha Antikainen
51e01ee40c Translated using Weblate (Finnish)
Currently translated at 37.0% (181 of 488 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/fi/
2025-02-14 23:58:39 +00:00
vabene1111
b55ceda978 Merge pull request #3549 from TandoorRecipes/dependabot/pip/cryptography-44.0.1
Bump cryptography from 44.0.0 to 44.0.1
2025-02-12 09:15:10 +01:00
dependabot[bot]
37b4f5c896 Bump cryptography from 44.0.0 to 44.0.1
Bumps [cryptography](https://github.com/pyca/cryptography) from 44.0.0 to 44.0.1.
- [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pyca/cryptography/compare/44.0.0...44.0.1)

---
updated-dependencies:
- dependency-name: cryptography
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-11 19:36:25 +00:00
Mattias G
a78b42d9ab Translated using Weblate (Swedish)
Currently translated at 65.3% (319 of 488 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/sv/
2025-02-07 08:58:37 +00:00
Domagoj Levanić
d1b6a4eb43 Translated using Weblate (Croatian)
Currently translated at 54.5% (266 of 488 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/hr/
2025-02-03 16:58:38 +00:00
Juha Antikainen
61bfaf012b Translated using Weblate (Finnish)
Currently translated at 87.0% (496 of 570 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/fi/
2025-02-03 16:58:38 +00:00
Juha Antikainen
92adc9b610 Translated using Weblate (Finnish)
Currently translated at 36.8% (180 of 488 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/fi/
2025-02-03 16:58:37 +00:00
Juha Antikainen
feb4a63bb0 Translated using Weblate (Finnish)
Currently translated at 81.7% (466 of 570 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/fi/
2025-02-02 09:58:38 +00:00
Juha Antikainen
30f8318531 Translated using Weblate (Finnish)
Currently translated at 35.2% (172 of 488 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/fi/
2025-02-02 09:58:37 +00:00
Domagoj Levanić
5b040900a7 Translated using Weblate (Croatian)
Currently translated at 33.1% (162 of 488 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/hr/
2025-02-01 08:58:39 +00:00
Juha Antikainen
717666fc14 Translated using Weblate (Finnish)
Currently translated at 72.1% (411 of 570 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/fi/
2025-02-01 08:58:39 +00:00
Juha Antikainen
a012a6f0d5 Translated using Weblate (Finnish)
Currently translated at 28.6% (140 of 488 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/fi/
2025-02-01 08:58:39 +00:00
vabene1111
3341c6db19 Merge pull request #3523 from Honza-m/default-debug-variables
Disable DEBUG and DEBUG_TOOLBAR by default
2025-02-01 08:12:50 +01:00
vabene1111
206d13594a Merge pull request #3530 from TandoorRecipes/dependabot/pip/pillow-11.1.0
Bump pillow from 10.4.0 to 11.1.0
2025-02-01 08:11:59 +01:00
vabene1111
37af406831 Merge pull request #3531 from TandoorRecipes/dependabot/pip/drf-writable-nested-0.7.1
Bump drf-writable-nested from 0.7.0 to 0.7.1
2025-02-01 08:11:51 +01:00
vabene1111
88f18a1b24 Merge pull request #3532 from TandoorRecipes/dependabot/pip/django-allauth-65.3.1
Bump django-allauth from 0.61.1 to 65.3.1
2025-02-01 08:11:43 +01:00
vabene1111
8bf410dbca Merge pull request #3533 from TandoorRecipes/dependabot/pip/django-prometheus-2.3.1
Bump django-prometheus from 2.2.0 to 2.3.1
2025-02-01 08:11:35 +01:00
vabene1111
c98411ca0e Merge pull request #3534 from TandoorRecipes/dependabot/pip/autopep8-2.3.2
Bump autopep8 from 2.0.4 to 2.3.2
2025-02-01 08:11:25 +01:00
vabene1111
fcfb404edf Merge pull request #3535 from TandoorRecipes/dependabot/github_actions/awalsh128/cache-apt-pkgs-action-1.4.3
Bump awalsh128/cache-apt-pkgs-action from 1.4.2 to 1.4.3
2025-02-01 08:10:40 +01:00
vabene1111
a0c8b39f0c Merge branch 'develop' 2025-02-01 08:08:55 +01:00
dependabot[bot]
3a1f2540b1 Bump awalsh128/cache-apt-pkgs-action from 1.4.2 to 1.4.3
Bumps [awalsh128/cache-apt-pkgs-action](https://github.com/awalsh128/cache-apt-pkgs-action) from 1.4.2 to 1.4.3.
- [Release notes](https://github.com/awalsh128/cache-apt-pkgs-action/releases)
- [Commits](https://github.com/awalsh128/cache-apt-pkgs-action/compare/v1.4.2...v1.4.3)

---
updated-dependencies:
- dependency-name: awalsh128/cache-apt-pkgs-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-01 00:48:21 +00:00
dependabot[bot]
9c680bc59c Bump autopep8 from 2.0.4 to 2.3.2
Bumps [autopep8](https://github.com/hhatto/autopep8) from 2.0.4 to 2.3.2.
- [Release notes](https://github.com/hhatto/autopep8/releases)
- [Commits](https://github.com/hhatto/autopep8/compare/v2.0.4...v2.3.2)

---
updated-dependencies:
- dependency-name: autopep8
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-01 00:30:40 +00:00
dependabot[bot]
fde95a6a8e Bump django-prometheus from 2.2.0 to 2.3.1
Bumps [django-prometheus](https://github.com/korfuri/django-prometheus) from 2.2.0 to 2.3.1.
- [Release notes](https://github.com/korfuri/django-prometheus/releases)
- [Changelog](https://github.com/korfuri/django-prometheus/blob/master/CHANGELOG.md)
- [Commits](https://github.com/korfuri/django-prometheus/compare/v2.2.0...v2.3.1)

---
updated-dependencies:
- dependency-name: django-prometheus
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-01 00:30:37 +00:00
dependabot[bot]
150a0332f6 Bump django-allauth from 0.61.1 to 65.3.1
Bumps [django-allauth](https://github.com/sponsors/pennersr) from 0.61.1 to 65.3.1.
- [Commits](https://github.com/sponsors/pennersr/commits)

---
updated-dependencies:
- dependency-name: django-allauth
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-01 00:30:34 +00:00
dependabot[bot]
618c32bdb8 Bump drf-writable-nested from 0.7.0 to 0.7.1
Bumps [drf-writable-nested](https://github.com/beda-software/drf-writable-nested) from 0.7.0 to 0.7.1.
- [Release notes](https://github.com/beda-software/drf-writable-nested/releases)
- [Changelog](https://github.com/beda-software/drf-writable-nested/blob/master/CHANGELOG.md)
- [Commits](https://github.com/beda-software/drf-writable-nested/compare/v0.7.0...v0.7.1)

---
updated-dependencies:
- dependency-name: drf-writable-nested
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-01 00:30:30 +00:00
dependabot[bot]
ea35850b71 Bump pillow from 10.4.0 to 11.1.0
Bumps [pillow](https://github.com/python-pillow/Pillow) from 10.4.0 to 11.1.0.
- [Release notes](https://github.com/python-pillow/Pillow/releases)
- [Changelog](https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst)
- [Commits](https://github.com/python-pillow/Pillow/compare/10.4.0...11.1.0)

---
updated-dependencies:
- dependency-name: pillow
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-01 00:30:28 +00:00
Neuri Jr
87561943f9 Translated using Weblate (Portuguese)
Currently translated at 53.8% (307 of 570 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/pt/
2025-01-31 01:58:38 +00:00
Jan Morawiec
5fd8d4e847 Disable DEBUG and DEBUG_TOOLBAR by default 2025-01-30 23:13:54 +00:00
Vinicius José Fritzen
eb6d0d7922 Translated using Weblate (Portuguese (Brazil))
Currently translated at 57.5% (281 of 488 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/pt_BR/
2025-01-29 13:44:16 +00:00
Ángel
d3dd9099f6 Translated using Weblate (Spanish)
Currently translated at 52.8% (258 of 488 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/es/
2025-01-29 13:44:16 +00:00
Vinicius José Fritzen
a112b23d07 Translated using Weblate (Portuguese (Brazil))
Currently translated at 48.3% (236 of 488 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/pt_BR/
2025-01-28 23:17:34 +00:00
Vinicius José Fritzen
4c591f3827 Translated using Weblate (Spanish)
Currently translated at 52.6% (257 of 488 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/es/
2025-01-28 23:17:34 +00:00
Ángel
62a28f57f6 Translated using Weblate (Spanish)
Currently translated at 52.6% (257 of 488 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/es/
2025-01-28 23:17:34 +00:00
Vinicius José Fritzen
ef689b0857 Translated using Weblate (Portuguese (Brazil))
Currently translated at 99.2% (566 of 570 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/pt_BR/
2025-01-28 19:08:20 +00:00
vabene1111
aa903da042 fixed file type check case sensitivity 2025-01-28 07:37:37 +01:00
Anders
9587d8832d Translated using Weblate (Norwegian Bokmål)
Currently translated at 70.5% (402 of 570 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/nb_NO/
2025-01-28 02:08:22 +00:00
Ole Martin Ruud
f125be1347 Translated using Weblate (Norwegian Bokmål)
Currently translated at 65.9% (376 of 570 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/nb_NO/
2025-01-26 05:58:39 +00:00
Dominik Ruczajewski
269301852a Translated using Weblate (Polish)
Currently translated at 100.0% (570 of 570 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/pl/
2025-01-26 05:58:39 +00:00
Ole Martin Ruud
8e5dcd57ce Translated using Weblate (Norwegian Bokmål)
Currently translated at 31.3% (153 of 488 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/nb_NO/
2025-01-26 05:58:39 +00:00
Dominik Ruczajewski
920273197d Translated using Weblate (Polish)
Currently translated at 56.9% (278 of 488 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/pl/
2025-01-26 05:58:39 +00:00
vabene1111
1be2e9fbb2 Merge branch 'develop' 2025-01-21 16:34:26 +01:00
vabene1111
7c93eededf fixed RecipeImageSerializer 2025-01-20 09:43:43 +01:00
Yigit
1b17031523 Translated using Weblate (Turkish)
Currently translated at 100.0% (570 of 570 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/tr/
2025-01-20 05:20:47 +00:00
Yigit
2d76c3e84c Translated using Weblate (Turkish)
Currently translated at 13.7% (67 of 488 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/tr/
2025-01-20 05:20:47 +00:00
vabene1111
03dd4370b9 update nextcloud import docs 2025-01-19 18:44:09 +01:00
smilerz
157af15a2a added (',', ';', ':') to notes tokenization in ingredient_parser.py 2025-01-18 09:29:09 -06:00
vabene1111
b930ecdcd0 Merge branch 'develop' 2025-01-18 12:49:49 +01:00
vabene1111
100242f0a6 Merge pull request #3498 from TandoorRecipes/dependabot/pip/pytubefix-8.12.0
Bump pytubefix from 8.9.0 to 8.12.0
2025-01-18 12:48:23 +01:00
vabene1111
d695f71d36 Merge pull request #3497 from mitcdh/develop
Prevent paprika.py from importing empty image_url content
2025-01-18 12:47:53 +01:00
dependabot[bot]
5d60b7a67c Bump pytubefix from 8.9.0 to 8.12.0
Bumps [pytubefix](https://github.com/juanbindez/pytubefix) from 8.9.0 to 8.12.0.
- [Release notes](https://github.com/juanbindez/pytubefix/releases)
- [Commits](https://github.com/juanbindez/pytubefix/compare/v8.9.0...v8.12.0)

---
updated-dependencies:
- dependency-name: pytubefix
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-18 11:47:22 +00:00
vabene1111
5d5d89dab9 Merge pull request #3477 from TandoorRecipes/dependabot/pip/pytubefix-8.9.0
Bump pytubefix from 8.5.1 to 8.9.0
2025-01-18 12:46:53 +01:00
vabene1111
35a625e04b Merge pull request #3476 from TandoorRecipes/dependabot/pip/django-tables2-2.7.4
Bump django-tables2 from 2.7.0 to 2.7.4
2025-01-18 12:46:45 +01:00
vabene1111
1a2d3bb441 Merge pull request #3474 from TandoorRecipes/dependabot/pip/whitenoise-6.8.2
Bump whitenoise from 6.7.0 to 6.8.2
2025-01-18 12:46:35 +01:00
vabene1111
2e3ac02afb Merge pull request #3473 from TandoorRecipes/dependabot/pip/redis-5.2.1
Bump redis from 5.2.0 to 5.2.1
2025-01-18 12:46:29 +01:00
vabene1111
a5b8a65b7d actually fixed test 2025-01-18 11:33:51 +01:00
vabene1111
dc320f2e6d Merge branch 'develop' 2025-01-18 09:30:51 +01:00
vabene1111
acbca83553 fixed test to reflect new permission 2025-01-18 09:30:43 +01:00
vabene1111
cb26c5dfc8 allow gif 2025-01-18 09:23:56 +01:00
vabene1111
b5c4174700 default mediafiles content disposition header attatchement 2025-01-18 09:22:46 +01:00
vabene1111
3e37d11c6a restrict file upload to certain types 2025-01-18 09:22:29 +01:00
vabene1111
36e83a9d01 restrict local external recipes to superusers and restrict file path/type 2025-01-18 08:57:46 +01:00
vabene1111
efcd759869 Merge pull request #3496 from TandoorRecipes/dependabot/pip/django-4.2.18
Bump django from 4.2.17 to 4.2.18
2025-01-18 08:11:35 +01:00
Mitchell Hewes
9f8830b341 Prevent paprika.py from importing empty image_url content 2025-01-17 15:04:28 +01:00
dependabot[bot]
7c81396ec5 Bump django from 4.2.17 to 4.2.18
Bumps [django](https://github.com/django/django) from 4.2.17 to 4.2.18.
- [Commits](https://github.com/django/django/compare/4.2.17...4.2.18)

---
updated-dependencies:
- dependency-name: django
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-17 13:58:22 +00:00
smilerz
9b50665375 bump recipe-scrapers
fixes #3495
2025-01-17 07:57:30 -06:00
Anton Shevtsov
83795581e6 Translated using Weblate (Ukrainian)
Currently translated at 44.3% (253 of 570 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/uk/
2025-01-16 18:58:38 +00:00
Anton Shevtsov
af51524109 Translated using Weblate (Ukrainian)
Currently translated at 2.8% (14 of 488 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/uk/
2025-01-16 18:58:38 +00:00
vabene1111
738aa12243 Merge branch 'develop' 2025-01-05 11:38:52 +01:00
vabene1111
f25de4b4ce remove healthcheck 2025-01-05 11:38:35 +01:00
vabene1111
698aa5a753 Merge branch 'develop' 2025-01-01 09:24:51 +01:00
vabene1111
6444680e06 Merge pull request #3475 from TandoorRecipes/dependabot/pip/cryptography-44.0.0
Bump cryptography from 43.0.1 to 44.0.0
2025-01-01 08:16:19 +01:00
dependabot[bot]
38e1db9c53 Bump pytubefix from 8.5.1 to 8.9.0
Bumps [pytubefix](https://github.com/juanbindez/pytubefix) from 8.5.1 to 8.9.0.
- [Release notes](https://github.com/juanbindez/pytubefix/releases)
- [Commits](https://github.com/juanbindez/pytubefix/compare/v8.5.1...v8.9.0)

---
updated-dependencies:
- dependency-name: pytubefix
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-01 00:33:54 +00:00
dependabot[bot]
d71c929ba8 Bump django-tables2 from 2.7.0 to 2.7.4
Bumps [django-tables2](https://github.com/jieter/django-tables2) from 2.7.0 to 2.7.4.
- [Changelog](https://github.com/jieter/django-tables2/blob/master/CHANGELOG.md)
- [Commits](https://github.com/jieter/django-tables2/compare/v2.7.0...v2.7.4)

---
updated-dependencies:
- dependency-name: django-tables2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-01 00:33:51 +00:00
dependabot[bot]
c604369e86 Bump cryptography from 43.0.1 to 44.0.0
Bumps [cryptography](https://github.com/pyca/cryptography) from 43.0.1 to 44.0.0.
- [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pyca/cryptography/compare/43.0.1...44.0.0)

---
updated-dependencies:
- dependency-name: cryptography
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-01 00:33:49 +00:00
dependabot[bot]
4865b742c7 Bump whitenoise from 6.7.0 to 6.8.2
Bumps [whitenoise](https://github.com/evansd/whitenoise) from 6.7.0 to 6.8.2.
- [Changelog](https://github.com/evansd/whitenoise/blob/main/docs/changelog.rst)
- [Commits](https://github.com/evansd/whitenoise/compare/6.7.0...6.8.2)

---
updated-dependencies:
- dependency-name: whitenoise
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-01 00:33:45 +00:00
dependabot[bot]
1246549f4b Bump redis from 5.2.0 to 5.2.1
Bumps [redis](https://github.com/redis/redis-py) from 5.2.0 to 5.2.1.
- [Release notes](https://github.com/redis/redis-py/releases)
- [Changelog](https://github.com/redis/redis-py/blob/master/CHANGES)
- [Commits](https://github.com/redis/redis-py/compare/v5.2.0...v5.2.1)

---
updated-dependencies:
- dependency-name: redis
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-01 00:33:42 +00:00
vabene1111
79abb8bf8f Merge branch 'develop' 2024-12-29 13:46:24 +01:00
vabene1111
fd4236672e update gitignore like vue3 branch 2024-12-29 13:46:17 +01:00
vabene1111
00148a2993 made shopping list compatible with SLR entries without a recipe 2024-12-29 13:44:43 +01:00
vabene1111
359fcb24cf fixed social signup form 2024-12-29 13:42:12 +01:00
vabene1111
f5d7919f72 Merge pull request #3448 from igorsantos07/patch-1
Update system.html: Django Recipes > Tandoor
2024-12-28 08:26:53 +01:00
vabene1111
86c4278553 Merge pull request #3454 from TandoorRecipes/dependabot/pip/jinja2-3.1.5
Bump jinja2 from 3.1.4 to 3.1.5
2024-12-28 08:26:44 +01:00
dependabot[bot]
2a5c0bb740 Bump jinja2 from 3.1.4 to 3.1.5
Bumps [jinja2](https://github.com/pallets/jinja) from 3.1.4 to 3.1.5.
- [Release notes](https://github.com/pallets/jinja/releases)
- [Changelog](https://github.com/pallets/jinja/blob/main/CHANGES.rst)
- [Commits](https://github.com/pallets/jinja/compare/3.1.4...3.1.5)

---
updated-dependencies:
- dependency-name: jinja2
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-28 07:25:33 +00:00
Igor Santos
432dfa9e86 Update system.html: Django Recipes > Tandoor 2024-12-24 02:28:21 -03:00
vabene1111
f61a8371f4 Revert "added user filkes to recipe and added is_image flag to user file"
This reverts commit 0bcdf5e0a3.
2024-12-22 12:12:37 +01:00
vabene1111
0bcdf5e0a3 added user filkes to recipe and added is_image flag to user file 2024-12-22 12:05:47 +01:00
vabene1111
169f799a23 Merge pull request #3428 from hawthorc/develop
Add note about Python 3.12 dependency to manual.md
2024-12-11 15:19:59 +01:00
vabene1111
942d1130a1 Merge pull request #3416 from zodac/develop
Adding healthcheck to docker image
2024-12-11 15:17:28 +01:00
vabene1111
64cc20aed2 Merge pull request #3426 from TandoorRecipes/dependabot/pip/icalendar-6.1.0
Bump icalendar from 5.0.11 to 6.1.0
2024-12-11 15:12:09 +01:00
vabene1111
3a6731ec8d Merge pull request #3425 from TandoorRecipes/dependabot/pip/pytest-factoryboy-2.7.0
Bump pytest-factoryboy from 2.6.0 to 2.7.0
2024-12-11 15:11:32 +01:00
vabene1111
e6f11a17b9 Merge pull request #3423 from TandoorRecipes/dependabot/pip/pytest-django-4.9.0
Bump pytest-django from 4.8.0 to 4.9.0
2024-12-11 15:11:17 +01:00
vabene1111
cc1cd610e7 Merge pull request #3424 from TandoorRecipes/dependabot/pip/crispy-bootstrap4-2024.10
Bump crispy-bootstrap4 from 2024.1 to 2024.10
2024-12-11 15:10:19 +01:00
vabene1111
6a3b5ee844 Merge pull request #3431 from TandoorRecipes/dependabot/pip/django-4.2.17
Bump django from 4.2.16 to 4.2.17
2024-12-11 15:09:46 +01:00
Matjaž T
49b119571e Translated using Weblate (Slovenian)
Currently translated at 100.0% (570 of 570 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/sl/
2024-12-10 07:58:36 +00:00
Vincenzo Reale
e024e3deb0 Translated using Weblate (Italian)
Currently translated at 100.0% (488 of 488 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/it/
2024-12-09 00:58:36 +00:00
dependabot[bot]
7ccedb559d Bump django from 4.2.16 to 4.2.17
Bumps [django](https://github.com/django/django) from 4.2.16 to 4.2.17.
- [Commits](https://github.com/django/django/compare/4.2.16...4.2.17)

---
updated-dependencies:
- dependency-name: django
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-06 18:57:23 +00:00
zodac
103daf000d Using --spider for healthcheck, which performs a HEAD request instead of a GET request 2024-12-02 20:44:12 +13:00
Vincenzo Reale
70df456307 Translated using Weblate (Italian)
Currently translated at 100.0% (488 of 488 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/it/
2024-12-02 04:53:51 +00:00
Carter Hawthorne
375174ee41 Add note about Python 3.12 dependency to manual.md 2024-12-01 18:38:38 -08:00
dependabot[bot]
f19beba014 Bump icalendar from 5.0.11 to 6.1.0
Bumps [icalendar](https://github.com/collective/icalendar) from 5.0.11 to 6.1.0.
- [Release notes](https://github.com/collective/icalendar/releases)
- [Changelog](https://github.com/collective/icalendar/blob/main/CHANGES.rst)
- [Commits](https://github.com/collective/icalendar/compare/v5.0.11...v6.1.0)

---
updated-dependencies:
- dependency-name: icalendar
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-01 00:39:31 +00:00
dependabot[bot]
865756e4b2 Bump pytest-factoryboy from 2.6.0 to 2.7.0
Bumps [pytest-factoryboy](https://github.com/pytest-dev/pytest-factoryboy) from 2.6.0 to 2.7.0.
- [Changelog](https://github.com/pytest-dev/pytest-factoryboy/blob/master/CHANGES.rst)
- [Commits](https://github.com/pytest-dev/pytest-factoryboy/compare/2.6.0...2.7.0)

---
updated-dependencies:
- dependency-name: pytest-factoryboy
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-01 00:39:28 +00:00
dependabot[bot]
41f834db08 Bump crispy-bootstrap4 from 2024.1 to 2024.10
Bumps [crispy-bootstrap4](https://github.com/django-crispy-forms/crispy-bootstrap4) from 2024.1 to 2024.10.
- [Release notes](https://github.com/django-crispy-forms/crispy-bootstrap4/releases)
- [Changelog](https://github.com/django-crispy-forms/crispy-bootstrap4/blob/main/CHANGELOG.md)
- [Commits](https://github.com/django-crispy-forms/crispy-bootstrap4/compare/2024.1...2024.10)

---
updated-dependencies:
- dependency-name: crispy-bootstrap4
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-01 00:39:26 +00:00
dependabot[bot]
2c94753a5a Bump pytest-django from 4.8.0 to 4.9.0
Bumps [pytest-django](https://github.com/pytest-dev/pytest-django) from 4.8.0 to 4.9.0.
- [Release notes](https://github.com/pytest-dev/pytest-django/releases)
- [Changelog](https://github.com/pytest-dev/pytest-django/blob/main/docs/changelog.rst)
- [Commits](https://github.com/pytest-dev/pytest-django/compare/v4.8.0...v4.9.0)

---
updated-dependencies:
- dependency-name: pytest-django
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-01 00:39:23 +00:00
zodac
0e05c77fa7 Adding healthcheck to docker image 2024-11-29 14:15:24 +13:00
vabene1111
793c152b26 Merge pull request #3412 from lavanyamehn/duplicate_urls
Display a warning message when duplicate recipe is imported
2024-11-27 15:50:54 +01:00
Lavanya Mehndiratta
9df75f551c Changed functionality to only display a warning message 2024-11-26 18:09:55 -05:00
vabene1111
da49280ef2 Merge branch 'develop' 2024-11-26 17:29:57 +01:00
vabene1111
e6087d5129 use Sandbox Environment to render templates 2024-11-26 17:18:47 +01:00
vabene1111
4f9bff20c8 Merge pull request #3411 from bishtawi/bishtawi/secret-files
Support reading more secrets from files
2024-11-25 16:46:56 +01:00
Anders Obro
683f1ac10a Translated using Weblate (Danish)
Currently translated at 100.0% (570 of 570 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/da/
2024-11-25 12:45:13 +00:00
Bishtawi
e844d2995a Support reading secrets from files 2024-11-24 12:31:17 -08:00
vabene1111
c0af3d19cd Merge branch 'develop' 2024-11-23 21:59:46 +01:00
vabene1111
78d20e8340 removed log 2024-11-23 21:59:40 +01:00
vabene1111
6a90caee04 removed log 2024-11-23 21:58:57 +01:00
vabene1111
98c95a94bc fixed youtube importer 2024-11-23 21:56:32 +01:00
vabene1111
d4dc4a30b8 fixed system page 2024-11-23 13:26:12 +01:00
Oleh Hudyma
70d2dc089c Translated using Weblate (Ukrainian)
Currently translated at 2.2% (11 of 488 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/uk/
2024-11-22 07:58:36 +00:00
Matjaž T
8698ad3054 Translated using Weblate (Slovenian)
Currently translated at 100.0% (570 of 570 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/sl/
2024-11-22 07:58:36 +00:00
Daniel Legin
6188f175ae Translated using Weblate (Croatian)
Currently translated at 30.9% (151 of 488 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/hr/
2024-11-19 06:58:39 +00:00
Daniel Legin
189fab2401 Translated using Weblate (Croatian)
Currently translated at 100.0% (570 of 570 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/hr/
2024-11-19 06:58:39 +00:00
Anders Obro
a3adba1941 Translated using Weblate (Danish)
Currently translated at 94.5% (539 of 570 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/da/
2024-11-19 06:58:39 +00:00
Mario Dvorsek
cea41af1b8 Translated using Weblate (Slovenian)
Currently translated at 100.0% (570 of 570 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/sl/
2024-11-19 06:58:39 +00:00
Matjaž T
a325070f7f Translated using Weblate (Slovenian)
Currently translated at 100.0% (570 of 570 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/sl/
2024-11-19 06:58:39 +00:00
Matjaž T
d782c54c2c Translated using Weblate (Slovenian)
Currently translated at 100.0% (488 of 488 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/sl/
2024-11-19 06:58:39 +00:00
vabene1111
58917fbc4d Merge pull request #3403 from TandoorRecipes/dependabot/pip/aiohttp-3.10.11
Bump aiohttp from 3.10.2 to 3.10.11
2024-11-19 07:11:06 +01:00
dependabot[bot]
8b0547aeb9 Bump aiohttp from 3.10.2 to 3.10.11
---
updated-dependencies:
- dependency-name: aiohttp
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-19 06:10:25 +00:00
Daniel Legin
9efc101161 Added translation using Weblate (Croatian) 2024-11-18 19:04:53 +00:00
Daniel Legin
691e8a940b Added translation using Weblate (Croatian) 2024-11-18 11:13:47 +00:00
Matjaž T
bee7623eaf Translated using Weblate (Slovenian)
Currently translated at 71.7% (409 of 570 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/sl/
2024-11-17 16:58:38 +00:00
Matjaž T
430697879f Translated using Weblate (Slovenian)
Currently translated at 84.0% (410 of 488 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/sl/
2024-11-17 16:58:38 +00:00
Vincenzo Reale
749974654a Translated using Weblate (Italian)
Currently translated at 100.0% (570 of 570 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/it/
2024-11-17 16:58:36 +00:00
Matjaž T
f31a661aaf Translated using Weblate (Slovenian)
Currently translated at 71.7% (409 of 570 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/sl/
2024-11-16 14:09:25 +00:00
Matjaž T
70ea3acb05 Translated using Weblate (Slovenian)
Currently translated at 15.3% (75 of 488 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/sl/
2024-11-16 14:09:25 +00:00
vabene1111
81547563c6 Merge branch 'develop' 2024-11-14 16:07:51 +01:00
vabene1111
c107f2f497 fixed system view 2024-11-14 16:06:58 +01:00
Владислав
5fea2131cd Translated using Weblate (Russian)
Currently translated at 5.5% (27 of 488 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/ru/
2024-11-12 17:58:38 +00:00
Владислав
d671df30a3 Translated using Weblate (Russian)
Currently translated at 82.9% (473 of 570 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/ru/
2024-11-12 17:58:38 +00:00
vabene1111
100b75a5d2 Merge branch 'develop' 2024-11-12 16:15:31 +01:00
vabene1111
7dba36d210 switched to space stats 2024-11-12 16:15:01 +01:00
vabene1111
0dea5c9877 api stats 2024-11-12 15:53:13 +01:00
vabene1111
1777dfe821 Revert "Merge pull request #3334 from TandoorRecipes/dependabot/pip/pytest-asyncio-0.24.0"
This reverts commit c30e1bb43a, reversing
changes made to 31051086ba.
2024-11-11 18:10:14 +01:00
vabene1111
2b6edfb96d fixed import_export docs format 2024-11-11 18:06:29 +01:00
vabene1111
faa3c99965 Merge pull request #3280 from vitoller/feature/import-gourmet
import of gourmet files
2024-11-11 18:04:55 +01:00
vabene1111
1cc5a0a094 Merge pull request #3382 from TandoorRecipes/dependabot/pip/django-cors-headers-4.6.0
Bump django-cors-headers from 4.3.1 to 4.6.0
2024-11-11 17:58:58 +01:00
vabene1111
cbafbd44a4 Merge pull request #3337 from TandoorRecipes/dependabot/pip/flake8-7.1.1
Bump flake8 from 6.1.0 to 7.1.1
2024-11-11 17:58:52 +01:00
vabene1111
f16a804758 Merge pull request #3335 from TandoorRecipes/dependabot/pip/lxml-5.3.0
Bump lxml from 5.1.0 to 5.3.0
2024-11-11 17:58:36 +01:00
vabene1111
c30e1bb43a Merge pull request #3334 from TandoorRecipes/dependabot/pip/pytest-asyncio-0.24.0
Bump pytest-asyncio from 0.23.5 to 0.24.0
2024-11-11 17:58:29 +01:00
vabene1111
31051086ba Merge pull request #3333 from TandoorRecipes/dependabot/pip/requests-2.32.3
Bump requests from 2.32.0 to 2.32.3
2024-11-11 17:58:22 +01:00
vabene1111
67d3c852dd Merge pull request #3381 from TandoorRecipes/dependabot/npm_and_yarn/vue/elliptic-6.6.0
Bump elliptic from 6.5.7 to 6.6.0 in /vue
2024-11-11 17:57:18 +01:00
Aija Kozlovska
4ea9b10fc4 Translated using Weblate (Latvian)
Currently translated at 2.8% (16 of 570 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/lv/
2024-11-05 10:58:36 +00:00
Aija Kozlovska
e609f4e0e0 Translated using Weblate (Latvian)
Currently translated at 67.6% (330 of 488 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/lv/
2024-11-05 10:58:36 +00:00
Dragan
b9ee2611a3 Translated using Weblate (Slovenian)
Currently translated at 54.0% (308 of 570 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/sl/
2024-11-04 10:29:24 +00:00
Johnny Ip
8de3c41958 Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (570 of 570 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/zh_Hant/
2024-11-04 10:29:24 +00:00
Johnny Ip
2a350a9bbe Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (488 of 488 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/zh_Hant/
2024-11-04 10:29:23 +00:00
Johnny Ip
89c4c09481 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (488 of 488 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/zh_Hans/
2024-11-04 10:29:23 +00:00
Aija Kozlovska
a97b023504 Translated using Weblate (Latvian)
Currently translated at 45.9% (224 of 488 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/lv/
2024-11-04 10:29:23 +00:00
Aija Kozlovska
4aa7152ab4 Added translation using Weblate (Latvian) 2024-11-04 08:31:40 +00:00
Johnny Ip
80ff8ddb12 Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (570 of 570 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/zh_Hant/
2024-11-03 16:34:45 +00:00
Johnny Ip
45aeeaa069 Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (570 of 570 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/zh_Hant/
2024-11-03 16:32:49 +00:00
Vincenzo Reale
0c24db72c6 Translated using Weblate (Italian)
Currently translated at 100.0% (570 of 570 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/it/
2024-11-01 06:58:36 +00:00
Vincenzo Reale
95c4d72b74 Translated using Weblate (Italian)
Currently translated at 100.0% (488 of 488 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/it/
2024-11-01 06:58:36 +00:00
dependabot[bot]
1330c0e7a3 Bump django-cors-headers from 4.3.1 to 4.6.0
Bumps [django-cors-headers](https://github.com/adamchainz/django-cors-headers) from 4.3.1 to 4.6.0.
- [Changelog](https://github.com/adamchainz/django-cors-headers/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/adamchainz/django-cors-headers/compare/4.3.1...4.6.0)

---
updated-dependencies:
- dependency-name: django-cors-headers
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-01 00:03:14 +00:00
Vincenzo Reale
9af22bcf9f Translated using Weblate (Italian)
Currently translated at 100.0% (570 of 570 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/it/
2024-10-31 06:00:00 +00:00
Vincenzo Reale
d24214c463 Translated using Weblate (Italian)
Currently translated at 100.0% (488 of 488 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/it/
2024-10-31 06:00:00 +00:00
dependabot[bot]
e8101dd433 Bump elliptic from 6.5.7 to 6.6.0 in /vue
Bumps [elliptic](https://github.com/indutny/elliptic) from 6.5.7 to 6.6.0.
- [Commits](https://github.com/indutny/elliptic/compare/v6.5.7...v6.6.0)

---
updated-dependencies:
- dependency-name: elliptic
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-31 02:20:39 +00:00
Vincenzo Reale
94bd343eed Translated using Weblate (Italian)
Currently translated at 96.6% (551 of 570 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/it/
2024-10-30 16:02:55 +00:00
Vincenzo Reale
f409633ade Translated using Weblate (Italian)
Currently translated at 93.4% (456 of 488 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/it/
2024-10-30 16:02:55 +00:00
Vincenzo Reale
e927418535 Translated using Weblate (Italian)
Currently translated at 82.6% (471 of 570 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/it/
2024-10-30 13:30:42 +00:00
Vincenzo Reale
be9f9d68db Translated using Weblate (Italian)
Currently translated at 89.3% (436 of 488 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/it/
2024-10-30 13:30:42 +00:00
vabene1111
3a002cce9e Merge pull request #3359 from Chronophylos/mealie-import
Fix null-constrait errors in mealie import
2024-10-14 08:25:11 +02:00
vabene1111
416ddf3d34 Merge pull request #3361 from tlambertz/paprika-fix
Fix Paprika Import Images when not downloading from URL.
2024-10-14 08:22:19 +02:00
vabene1111
8b0a19c6a2 Merge pull request #3357 from TandoorRecipes/dependabot/npm_and_yarn/vue/elliptic-6.5.7
Bump elliptic from 6.5.4 to 6.5.7 in /vue
2024-10-13 12:30:59 +02:00
Thomas Lambertz
757fa1b768 Fix Paprika Import Images when not downloading from URL.
Previously, the code only tried to use the cropped image from paprika when downloading actively failed.
But if a user takes an image himself, the url will be empty, thus downloading won't be attempted and won't fail.
This change makes it so that the download is tried first, but the photo_data is always tried if no image exists for whatever reason.
2024-10-12 21:15:37 +02:00
Chronophylos
736d829bd0 Fix null-constrait errors in mealie import 2024-10-12 16:01:32 +02:00
dependabot[bot]
6829d5351d Bump elliptic from 6.5.4 to 6.5.7 in /vue
Bumps [elliptic](https://github.com/indutny/elliptic) from 6.5.4 to 6.5.7.
- [Commits](https://github.com/indutny/elliptic/compare/v6.5.4...v6.5.7)

---
updated-dependencies:
- dependency-name: elliptic
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-12 03:18:39 +00:00
vabene1111
805eb87754 Merge pull request #3353 from TandoorRecipes/dependabot/pip/django-4.2.16
Bump django from 4.2.15 to 4.2.16
2024-10-10 13:07:43 +02:00
dependabot[bot]
e910ec4a51 Bump django from 4.2.15 to 4.2.16
Bumps [django](https://github.com/django/django) from 4.2.15 to 4.2.16.
- [Commits](https://github.com/django/django/compare/4.2.15...4.2.16)

---
updated-dependencies:
- dependency-name: django
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-08 21:29:14 +00:00
dependabot[bot]
969b7ba492 Bump flake8 from 6.1.0 to 7.1.1
Bumps [flake8](https://github.com/pycqa/flake8) from 6.1.0 to 7.1.1.
- [Commits](https://github.com/pycqa/flake8/compare/6.1.0...7.1.1)

---
updated-dependencies:
- dependency-name: flake8
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-01 00:42:42 +00:00
dependabot[bot]
c9edec6308 Bump lxml from 5.1.0 to 5.3.0
Bumps [lxml](https://github.com/lxml/lxml) from 5.1.0 to 5.3.0.
- [Release notes](https://github.com/lxml/lxml/releases)
- [Changelog](https://github.com/lxml/lxml/blob/master/CHANGES.txt)
- [Commits](https://github.com/lxml/lxml/compare/lxml-5.1.0...lxml-5.3.0)

---
updated-dependencies:
- dependency-name: lxml
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-01 00:42:37 +00:00
dependabot[bot]
9f0ff1348c Bump pytest-asyncio from 0.23.5 to 0.24.0
Bumps [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio) from 0.23.5 to 0.24.0.
- [Release notes](https://github.com/pytest-dev/pytest-asyncio/releases)
- [Commits](https://github.com/pytest-dev/pytest-asyncio/compare/v0.23.5...v0.24.0)

---
updated-dependencies:
- dependency-name: pytest-asyncio
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-01 00:42:31 +00:00
dependabot[bot]
c85d62fc66 Bump requests from 2.32.0 to 2.32.3
Bumps [requests](https://github.com/psf/requests) from 2.32.0 to 2.32.3.
- [Release notes](https://github.com/psf/requests/releases)
- [Changelog](https://github.com/psf/requests/blob/main/HISTORY.md)
- [Commits](https://github.com/psf/requests/compare/v2.32.0...v2.32.3)

---
updated-dependencies:
- dependency-name: requests
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-01 00:42:28 +00:00
Horst
15abe9f24b import of gourmet files
* in gourmet export as html and zip folder
* 'menus' are not imported

Note: it appears that the native format '.grmt' does not include the unit for ingredients
2024-08-30 10:05:19 +02:00
82 changed files with 9975 additions and 3309 deletions

View File

@@ -14,9 +14,9 @@ jobs:
steps:
- uses: actions/checkout@v4
- uses: awalsh128/cache-apt-pkgs-action@v1.4.2
- uses: awalsh128/cache-apt-pkgs-action@v1.4.3
with:
packages: libsasl2-dev python3-dev libldap2-dev libssl-dev
packages: libsasl2-dev python3-dev libxml2-dev libxmlsec1-dev libxslt-dev libxmlsec1-openssl libldap2-dev libssl-dev gcc musl-dev postgresql-dev zlib-dev jpeg-dev libwebp-dev openssl-dev libffi-dev cargo openldap-dev python3-dev xmlsec-dev xmlsec build-base g++ curl
version: 1.0
# Setup python & dependencies

2
.gitignore vendored
View File

@@ -84,3 +84,5 @@ vue3/.vite
# Configs
vetur.config.js
venv/
.idea/easy-i18n.xml
cookbook/static/vue3

View File

@@ -23,7 +23,7 @@ RUN \
fi
# remove Development dependencies from requirements.txt
RUN sed -i '/# Development/,$d' requirements.txt
RUN apk add --no-cache --virtual .build-deps gcc musl-dev postgresql-dev zlib-dev jpeg-dev libwebp-dev openssl-dev libffi-dev cargo openldap-dev python3-dev && \
RUN apk add --no-cache --virtual .build-deps gcc musl-dev postgresql-dev zlib-dev jpeg-dev libwebp-dev openssl-dev libffi-dev cargo openldap-dev python3-dev xmlsec-dev xmlsec build-base && \
echo -n "INPUT ( libldap.so )" > /usr/lib/libldap_r.so && \
python -m venv venv && \
/opt/recipes/venv/bin/python -m pip install --upgrade pip && \
@@ -35,6 +35,13 @@ RUN apk add --no-cache --virtual .build-deps gcc musl-dev postgresql-dev zlib-de
#Copy project and execute it.
COPY . ./
# commented for now https://github.com/TandoorRecipes/recipes/issues/3478
#HEALTHCHECK --interval=30s \
# --timeout=5s \
# --start-period=10s \
# --retries=3 \
# CMD [ "/usr/bin/wget", "--no-verbose", "--tries=1", "--spider", "http://127.0.0.1:8080/openapi" ]
# collect information from git repositories
RUN /opt/recipes/venv/bin/python version.py
# delete git repositories to reduce image size

17
boot.sh
View File

@@ -29,6 +29,21 @@ if [ -z "${SECRET_KEY}" ]; then
display_warning "The environment variable 'SECRET_KEY' (or 'SECRET_KEY_FILE' that points to an existing file) is not set but REQUIRED for running Tandoor!"
fi
if [ -f "${AUTH_LDAP_BIND_PASSWORD_FILE}" ]; then
export AUTH_LDAP_BIND_PASSWORD=$(cat "$AUTH_LDAP_BIND_PASSWORD_FILE")
fi
if [ -f "${EMAIL_HOST_PASSWORD_FILE}" ]; then
export EMAIL_HOST_PASSWORD=$(cat "$EMAIL_HOST_PASSWORD_FILE")
fi
if [ -f "${SOCIALACCOUNT_PROVIDERS_FILE}" ]; then
export SOCIALACCOUNT_PROVIDERS=$(cat "$SOCIALACCOUNT_PROVIDERS_FILE")
fi
if [ -f "${S3_SECRET_ACCESS_KEY_FILE}" ]; then
export S3_SECRET_ACCESS_KEY=$(cat "$S3_SECRET_ACCESS_KEY_FILE")
fi
echo "Waiting for database to be ready..."
@@ -83,4 +98,4 @@ if [ "$ipv6_disable" -eq 0 ]; then
exec gunicorn -b "[::]:$TANDOOR_PORT" --workers $GUNICORN_WORKERS --threads $GUNICORN_THREADS --access-logfile - --error-logfile - --log-level $GUNICORN_LOG_LEVEL recipes.wsgi
else
exec gunicorn -b ":$TANDOOR_PORT" --workers $GUNICORN_WORKERS --threads $GUNICORN_THREADS --access-logfile - --error-logfile - --log-level $GUNICORN_LOG_LEVEL recipes.wsgi
fi
fi

View File

@@ -1,6 +1,8 @@
from datetime import datetime
from allauth.account.forms import ResetPasswordForm, SignupForm
from allauth.socialaccount.forms import SignupForm as SocialSignupForm
from django import forms
from django.conf import settings
from django.core.exceptions import ValidationError
@@ -14,15 +16,13 @@ from .models import Comment, InviteLink, Keyword, Recipe, SearchPreference, Spac
class SelectWidget(widgets.Select):
class Media:
js = ('custom/js/form_select.js', )
js = ('custom/js/form_select.js',)
class MultiSelectWidget(widgets.SelectMultiple):
class Media:
js = ('custom/js/form_multiselect.js', )
js = ('custom/js/form_multiselect.js',)
# Yes there are some stupid browsers that still dont support this but
@@ -89,12 +89,13 @@ class ImportExportBase(forms.Form):
COOKMATE = 'COOKMATE'
REZEPTSUITEDE = 'REZEPTSUITEDE'
PDF = 'PDF'
GOURMET = 'GOURMET'
type = forms.ChoiceField(choices=((DEFAULT, _('Default')), (PAPRIKA, 'Paprika'), (NEXTCLOUD, 'Nextcloud Cookbook'), (MEALIE, 'Mealie'), (CHOWDOWN, 'Chowdown'),
(SAFFRON, 'Saffron'), (CHEFTAP, 'ChefTap'), (PEPPERPLATE, 'Pepperplate'), (RECETTETEK, 'RecetteTek'), (RECIPESAGE, 'Recipe Sage'),
(DOMESTICA, 'Domestica'), (MEALMASTER, 'MealMaster'), (REZKONV, 'RezKonv'), (OPENEATS, 'Openeats'), (RECIPEKEEPER, 'Recipe Keeper'),
(PLANTOEAT, 'Plantoeat'), (COOKBOOKAPP, 'CookBookApp'), (COPYMETHAT, 'CopyMeThat'), (PDF, 'PDF'), (MELARECIPES, 'Melarecipes'),
(COOKMATE, 'Cookmate'), (REZEPTSUITEDE, 'Recipesuite.de')))
(COOKMATE, 'Cookmate'), (REZEPTSUITEDE, 'Recipesuite.de'), (GOURMET, 'Gourmet')))
class MultipleFileInput(forms.ClearableFileInput):
@@ -138,7 +139,7 @@ class CommentForm(forms.ModelForm):
class Meta:
model = Comment
fields = ('text', )
fields = ('text',)
labels = {'text': _('Add your comment: '), }
widgets = {'text': forms.Textarea(attrs={'rows': 2, 'cols': 15}), }
@@ -160,7 +161,6 @@ class StorageForm(forms.ModelForm):
help_texts = {'url': _('Leave empty for dropbox and enter only base url for nextcloud (<code>/remote.php/webdav/</code> is added automatically)'), }
class ConnectorConfigForm(forms.ModelForm):
enabled = forms.BooleanField(
help_text="Is the connector enabled",
@@ -314,6 +314,18 @@ class AllAuthSignupForm(SignupForm):
pass
class AllAuthSocialSignupForm(SocialSignupForm):
terms = forms.BooleanField(label=_('Accept Terms and Privacy'))
def __init__(self, **kwargs):
super().__init__(**kwargs)
if settings.PRIVACY_URL == '' and settings.TERMS_URL == '':
self.fields.pop('terms')
def signup(self, request, user):
pass
class CustomPasswordResetForm(ResetPasswordForm):
captcha = hCaptchaField()
@@ -344,12 +356,13 @@ class SearchPreferenceForm(forms.ModelForm):
help_texts = {
'search': _('Select type method of search. Click <a href="/docs/search/">here</a> for full description of choices.'), 'lookup':
_('Use fuzzy matching on units, keywords and ingredients when editing and importing recipes.'), 'unaccent':
_('Fields to search ignoring accents. Selecting this option can improve or degrade search quality depending on language'), 'icontains':
_("Fields to search for partial matches. (e.g. searching for 'Pie' will return 'pie' and 'piece' and 'soapie')"), 'istartswith':
_("Fields to search for beginning of word matches. (e.g. searching for 'sa' will return 'salad' and 'sandwich')"), 'trigram':
_("Fields to 'fuzzy' search. (e.g. searching for 'recpie' will find 'recipe'.) Note: this option will conflict with 'web' and 'raw' methods of search."), 'fulltext':
_("Fields to full text search. Note: 'web', 'phrase', and 'raw' search methods only function with fulltext fields."),
_('Use fuzzy matching on units, keywords and ingredients when editing and importing recipes.'), 'unaccent':
_('Fields to search ignoring accents. Selecting this option can improve or degrade search quality depending on language'), 'icontains':
_("Fields to search for partial matches. (e.g. searching for 'Pie' will return 'pie' and 'piece' and 'soapie')"), 'istartswith':
_("Fields to search for beginning of word matches. (e.g. searching for 'sa' will return 'salad' and 'sandwich')"), 'trigram':
_("Fields to 'fuzzy' search. (e.g. searching for 'recpie' will find 'recipe'.) Note: this option will conflict with 'web' and 'raw' methods of search."),
'fulltext':
_("Fields to full text search. Note: 'web', 'phrase', and 'raw' search methods only function with fulltext fields."),
}
labels = {
@@ -359,5 +372,5 @@ class SearchPreferenceForm(forms.ModelForm):
widgets = {
'search': SelectWidget, 'unaccent': MultiSelectWidget, 'icontains': MultiSelectWidget, 'istartswith': MultiSelectWidget, 'trigram': MultiSelectWidget, 'fulltext':
MultiSelectWidget,
MultiSelectWidget,
}

View File

@@ -35,6 +35,20 @@ def get_filetype(name):
return '.jpeg'
def is_file_type_allowed(filename, image_only=False):
is_file_allowed = False
allowed_file_types = ['.pdf','.docx', '.xlsx']
allowed_image_types = ['.png', '.jpg', '.jpeg', '.gif', '.webp']
check_list = allowed_image_types
if not image_only:
check_list += allowed_file_types
for file_type in check_list:
if filename.lower().endswith(file_type):
is_file_allowed = True
return is_file_allowed
# TODO this whole file needs proper documentation, refactoring, and testing
# TODO also add env variable to define which images sizes should be compressed
# filetype argument can not be optional, otherwise this function will treat all images as if they were a jpeg

View File

@@ -118,7 +118,7 @@ class IngredientParser:
note = ''
start = 0
# search for first occurrence of an argument ending in a comma
while start < len(tokens) and not tokens[start].endswith(','):
while start < len(tokens) and not tokens[start].endswith((',', ';', ':')):
start += 1
if start == len(tokens):
# no token ending in a comma found -> use everything as food

View File

@@ -6,7 +6,7 @@ from django.utils.dateparse import parse_duration
from django.utils.translation import gettext as _
from isodate import parse_duration as iso_parse_duration
from isodate.isoerror import ISO8601Error
from pytube import YouTube
from pytubefix import YouTube
from recipe_scrapers._utils import get_host_name, get_minutes
from cookbook.helper.automation_helper import AutomationEngine
@@ -274,9 +274,8 @@ def get_from_youtube_scraper(url, request):
default_recipe_json['image'] = video.thumbnail_url
if video.description:
default_recipe_json['steps'][0]['instruction'] = automation_engine.apply_regex_replace_automation(video.description, Automation.INSTRUCTION_REPLACE)
except Exception:
pass
traceback.print_exc()
return default_recipe_json

View File

@@ -113,7 +113,7 @@ class RecipeShoppingEditor():
if not self.servings:
self.servings = getattr(self.mealplan, 'servings', None) or getattr(self.recipe, 'servings', 1.0)
self._shopping_list_recipe = ShoppingListRecipe.objects.create(recipe=self.recipe, mealplan=self.mealplan, servings=self.servings)
self._shopping_list_recipe = ShoppingListRecipe.objects.create(recipe=self.recipe, mealplan=self.mealplan, servings=self.servings, space=self.space, created_by=self.created_by)
if ingredients:
self._add_ingredients(ingredients=ingredients)

View File

@@ -3,6 +3,8 @@ from gettext import gettext as _
import bleach
import markdown as md
from jinja2 import Template, TemplateSyntaxError, UndefinedError
from jinja2.exceptions import SecurityError
from jinja2.sandbox import SandboxedEnvironment
from markdown.extensions.tables import TableExtension
from cookbook.helper.mdx_attributes import MarkdownFormatExtension
@@ -89,11 +91,13 @@ def render_instructions(step): # TODO deduplicate markdown cleanup code
return f"<scalable-number v-bind:number='{bleach.clean(str(number))}' v-bind:factor='ingredient_factor'></scalable-number>"
try:
template = Template(instructions)
instructions = template.render(ingredients=ingredients, scale=scale)
env = SandboxedEnvironment()
instructions = env.from_string(instructions).render(ingredients=ingredients, scale=scale)
except TemplateSyntaxError:
return _('Could not parse template code.') + ' Error: Template Syntax broken'
except UndefinedError:
return _('Could not parse template code.') + ' Error: Undefined Error'
except SecurityError:
return _('Could not parse template code.') + ' Error: Security Error'
return instructions

View File

@@ -0,0 +1,211 @@
import base64
from io import BytesIO
from lxml import etree
import requests
from pathlib import Path
from bs4 import BeautifulSoup, Tag
from cookbook.helper.HelperFunctions import validate_import_url
from cookbook.helper.ingredient_parser import IngredientParser
from cookbook.helper.recipe_url_import import parse_servings, parse_servings_text, parse_time, iso_duration_to_minutes
from cookbook.integration.integration import Integration
from cookbook.models import Ingredient, Recipe, Step, Keyword
from recipe_scrapers import scrape_html
class Gourmet(Integration):
def split_recipe_file(self, file):
encoding = 'utf-8'
byte_string = file.read()
text_obj = byte_string.decode(encoding, errors="ignore")
soup = BeautifulSoup(text_obj, "html.parser")
return soup.find_all("div", {"class": "recipe"})
def get_ingredients_recursive(self, step, ingredients, ingredient_parser):
if isinstance(ingredients, Tag):
for ingredient in ingredients.children:
if not isinstance(ingredient, Tag):
continue
if ingredient.name in ["li"]:
step_name = "".join(ingredient.findAll(text=True, recursive=False)).strip().rstrip(":")
step.ingredients.add(Ingredient.objects.create(
is_header=True,
note=step_name[:256],
original_text=step_name,
space=self.request.space,
))
next_ingrediets = ingredient.find("ul", {"class": "ing"})
self.get_ingredients_recursive(step, next_ingrediets, ingredient_parser)
else:
try:
amount, unit, food, note = ingredient_parser.parse(ingredient.text.strip())
f = ingredient_parser.get_food(food)
u = ingredient_parser.get_unit(unit)
step.ingredients.add(
Ingredient.objects.create(
food=f,
unit=u,
amount=amount,
note=note,
original_text=ingredient.text.strip(),
space=self.request.space,
)
)
except ValueError:
pass
def get_recipe_from_file(self, file):
# 'file' comes is as a beautifulsoup object
source_url = None
for item in file.find_all('a'):
if item.has_attr('href'):
source_url = item.get("href")
break
name = file.find("p", {"class": "title"}).find("span", {"itemprop": "name"}).text.strip()
recipe = Recipe.objects.create(
name=name[:128],
source_url=source_url,
created_by=self.request.user,
internal=True,
space=self.request.space,
)
for category in file.find_all("span", {"itemprop": "recipeCategory"}):
keyword, created = Keyword.objects.get_or_create(name=category.text, space=self.request.space)
recipe.keywords.add(keyword)
try:
recipe.servings = parse_servings(file.find("span", {"itemprop": "recipeYield"}).text.strip())
except AttributeError:
pass
try:
prep_time = file.find("span", {"itemprop": "prepTime"}).text.strip().split()
prep_time[0] = prep_time[0].replace(',', '.')
if prep_time[1].lower() in ['stunde', 'stunden', 'hour', 'hours']:
prep_time_min = int(float(prep_time[0]) * 60)
elif prep_time[1].lower() in ['tag', 'tage', 'day', 'days']:
prep_time_min = int(float(prep_time[0]) * 60 * 24)
else:
prep_time_min = int(prep_time[0])
recipe.waiting_time = prep_time_min
except AttributeError:
pass
try:
cook_time = file.find("span", {"itemprop": "cookTime"}).text.strip().split()
cook_time[0] = cook_time[0].replace(',', '.')
if cook_time[1].lower() in ['stunde', 'stunden', 'hour', 'hours']:
cook_time_min = int(float(cook_time[0]) * 60)
elif cook_time[1].lower() in ['tag', 'tage', 'day', 'days']:
cook_time_min = int(float(cook_time[0]) * 60 * 24)
else:
cook_time_min = int(cook_time[0])
recipe.working_time = cook_time_min
except AttributeError:
pass
for cuisine in file.find_all('span', {'itemprop': 'recipeCuisine'}):
cuisine_name = cuisine.text
keyword = Keyword.objects.get_or_create(space=self.request.space, name=cuisine_name)
if len(keyword):
recipe.keywords.add(keyword[0])
for category in file.find_all('span', {'itemprop': 'recipeCategory'}):
category_name = category.text
keyword = Keyword.objects.get_or_create(space=self.request.space, name=category_name)
if len(keyword):
recipe.keywords.add(keyword[0])
step = Step.objects.create(
instruction='',
space=self.request.space,
show_ingredients_table=self.request.user.userpreference.show_step_ingredients,
)
ingredient_parser = IngredientParser(self.request, True)
ingredients = file.find("ul", {"class": "ing"})
self.get_ingredients_recursive(step, ingredients, ingredient_parser)
instructions = file.find("div", {"class": "instructions"})
if isinstance(instructions, Tag):
for instruction in instructions.children:
if not isinstance(instruction, Tag) or instruction.text == "":
continue
if instruction.name == "h3":
if step.instruction:
step.save()
recipe.steps.add(step)
step = Step.objects.create(
instruction='',
space=self.request.space,
)
step.name = instruction.text.strip()[:128]
else:
if instruction.name == "div":
for instruction_step in instruction.children:
for br in instruction_step.find_all("br"):
br.replace_with("\n")
step.instruction += instruction_step.text.strip() + ' \n\n'
notes = file.find("div", {"class": "modifications"})
if notes:
for n in notes.children:
if n.text == "":
continue
if n.name == "h3":
step.instruction += f'*{n.text.strip()}:* \n\n'
else:
for br in n.find_all("br"):
br.replace_with("\n")
step.instruction += '*' + n.text.strip() + '* \n\n'
description = ''
try:
description = file.find("div", {"id": "description"}).text.strip()
except AttributeError:
pass
if len(description) <= 512:
recipe.description = description
else:
recipe.description = description[:480] + ' ... (full description below)'
step.instruction += '*Description:* \n\n*' + description + '* \n\n'
step.save()
recipe.steps.add(step)
# import the Primary recipe image that is stored in the Zip
try:
image_path = file.find("img").get("src")
image_filename = image_path.split("\\")[1]
for f in self.import_zip.filelist:
zip_file_name = Path(f.filename).name
if image_filename == zip_file_name:
image_file = self.import_zip.read(f)
image_bytes = BytesIO(image_file)
self.import_recipe_image(recipe, image_bytes, filetype='.jpeg')
break
except Exception as e:
print(recipe.name, ': failed to import image ', str(e))
recipe.save()
return recipe
def get_files_from_recipes(self, recipes, el, cookie):
raise NotImplementedError('Method not implemented in storage integration')
def get_file_from_recipe(self, recipe):
raise NotImplementedError('Method not implemented in storage integration')

View File

@@ -153,6 +153,19 @@ class Integration:
il.total_recipes = len(new_file_list)
file_list = new_file_list
if isinstance(self, cookbook.integration.gourmet.Gourmet):
self.import_zip = import_zip
new_file_list = []
for file in file_list:
if file.file_size == 0:
next
if file.filename.startswith("index.htm"):
next
if file.filename.endswith(".htm"):
new_file_list += self.split_recipe_file(BytesIO(import_zip.read(file.filename)))
il.total_recipes = len(new_file_list)
file_list = new_file_list
for z in file_list:
try:
if not hasattr(z, 'filename') or isinstance(z, Tag):

View File

@@ -72,14 +72,14 @@ class Mealie(Integration):
)
recipe.steps.add(step)
if 'recipe_yield' in recipe_json:
if 'recipe_yield' in recipe_json and recipe_json['recipe_yield'] is not None:
recipe.servings = parse_servings(recipe_json['recipe_yield'])
recipe.servings_text = parse_servings_text(recipe_json['recipe_yield'])
if 'total_time' in recipe_json and recipe_json['total_time'] is not None:
recipe.working_time = parse_time(recipe_json['total_time'])
if 'org_url' in recipe_json:
if 'org_url' in recipe_json and recipe_json['org_url'] is not None:
recipe.source_url = recipe_json['org_url']
recipe.save()

View File

@@ -84,13 +84,23 @@ class Paprika(Integration):
recipe.steps.add(step)
# Paprika exports can have images in either of image_url, or photo_data.
# If a user takes an image himself, only photo_data will be set.
# If a user imports an image, both will be set. But the photo_data will be a center-cropped square resized version, so the image_url is preferred.
# Try to download image if possible
try:
if recipe_json.get("image_url", None):
url = recipe_json.get("image_url", None)
if validate_import_url(url):
response = requests.get(url)
self.import_recipe_image(recipe, BytesIO(response.content))
if response.status_code == 200 and len(response.content) > 0:
self.import_recipe_image(recipe, BytesIO(response.content))
except Exception:
pass
# If no image downloaded, try to extract from photo_data
if not recipe.image:
if recipe_json.get("photo_data", None):
self.import_recipe_image(recipe, BytesIO(base64.b64decode(recipe_json['photo_data'])), filetype='.jpeg')

File diff suppressed because it is too large Load Diff

View File

@@ -14,8 +14,8 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
"PO-Revision-Date: 2024-03-27 19:02+0000\n"
"Last-Translator: Axel Breiterman <axelbreiterman@gmail.com>\n"
"PO-Revision-Date: 2025-01-29 13:44+0000\n"
"Last-Translator: Ángel <1024mb@users.noreply.translate.tandoor.dev>\n"
"Language-Team: Spanish <http://translate.tandoor.dev/projects/tandoor/"
"recipes-backend/es/>\n"
"Language: es\n"
@@ -23,7 +23,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.4.2\n"
"X-Generator: Weblate 5.8.4\n"
#: .\cookbook\forms.py:45
msgid ""
@@ -66,31 +66,30 @@ msgid ""
"To prevent duplicates recipes with the same name as existing ones are "
"ignored. Check this box to import everything."
msgstr ""
"Para evitar duplicados, las recetas con el mismo nombre serán ignoradas. "
"Marca esta opción para importar todas las recetas."
"Para evitar duplicados, las recetas con el mismo nombre que las ya "
"existentes serán ignoradas. Marca esta casilla para importar todo."
#: .\cookbook\forms.py:143
msgid "Add your comment: "
msgstr "Añada su comentario: "
msgstr "Añade tu comentario: "
#: .\cookbook\forms.py:151
msgid "Leave empty for dropbox and enter app password for nextcloud."
msgstr ""
"Déjelo vacío para Dropbox e ingrese la contraseña de la aplicación para "
"nextcloud."
"Déjalo vacío para Dropbox o ingresa la contraseña de la aplicación para "
"Nextcloud."
#: .\cookbook\forms.py:154
msgid "Leave empty for nextcloud and enter api token for dropbox."
msgstr ""
"Déjelo en blanco para nextcloud e ingrese el token de api para dropbox."
msgstr "Déjalo vacío para Nextcloud o ingresa el token API para Dropbox."
#: .\cookbook\forms.py:160
msgid ""
"Leave empty for dropbox and enter only base url for nextcloud (<code>/remote."
"php/webdav/</code> is added automatically)"
msgstr ""
"Dejar vac para Dropbox e introducir sólo la URL base para Nextcloud "
"(<code>/remote.php/webdav/</code> se añade automáticamente)"
"Déjalo vacío para Dropbox o ingresa solo la URL base para Nextcloud "
"(<code>/remote.php/webdav/</code> es añadido automáticamente)"
#: .\cookbook\forms.py:188
msgid ""
@@ -98,15 +97,16 @@ msgid ""
"profile\">Long Lived Access Token</a> for your HomeAssistant instance"
msgstr ""
"<a href=\"https://www.home-assistant.io/docs/authentication/#your-account-"
"profile\">Token de larga duración</a>para tu instancia de HomeAssistant"
"profile\">Token de acceso de larga duración</a> para tu instancia de "
"HomeAssistant"
#: .\cookbook\forms.py:193
msgid "Something like http://homeassistant.local:8123/api"
msgstr "Algo similar a http://homeassistant.local:8123/api"
msgstr "Algo como http://homeassistant.local:8123/api"
#: .\cookbook\forms.py:205
msgid "http://homeassistant.local:8123/api for example"
msgstr "por ejemplo http://homeassistant.local:8123/api for example"
msgstr "Por ejemplo http://homeassistant.local:8123/api"
#: .\cookbook\forms.py:222 .\cookbook\views\edit.py:117
msgid "Storage"

File diff suppressed because it is too large Load Diff

View File

@@ -14,16 +14,16 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
"PO-Revision-Date: 2024-05-28 00:57+0000\n"
"Last-Translator: tarek EL SOL <tarek.elsol@gmail.com>\n"
"Language-Team: French <http://translate.tandoor.dev/projects/tandoor/recipes-"
"backend/fr/>\n"
"PO-Revision-Date: 2025-02-16 14:58+0000\n"
"Last-Translator: Elvis Gosselin <elvis.gosselin@tutanota.com>\n"
"Language-Team: French <http://translate.tandoor.dev/projects/tandoor/"
"recipes-backend/fr/>\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 5.4.2\n"
"X-Generator: Weblate 5.8.4\n"
#: .\cookbook\forms.py:45
msgid ""
@@ -506,18 +506,16 @@ msgid "Nutrition"
msgstr "Informations nutritionnelles"
#: .\cookbook\models.py:918
#, fuzzy
#| msgid "Merge"
msgid "Allergen"
msgstr "Fusionner"
msgstr "Allergène"
#: .\cookbook\models.py:919
msgid "Price"
msgstr ""
msgstr "Prix"
#: .\cookbook\models.py:919
msgid "Goal"
msgstr ""
msgstr "Objectif"
#: .\cookbook\models.py:1408 .\cookbook\templates\search_info.html:28
msgid "Simple"
@@ -1039,7 +1037,7 @@ msgstr "Exporter"
#: .\cookbook\templates\base.html:287
msgid "Properties"
msgstr ""
msgstr "Propriétés"
#: .\cookbook\templates\base.html:301 .\cookbook\views\lists.py:255
#, fuzzy
@@ -2112,6 +2110,11 @@ msgid ""
"script to generate version information (done automatically in docker).\n"
" "
msgstr ""
"\n"
" Vous devez exécuter <code>version.py</code> dans votre script de "
"mise à jour pour générer les informations de version (automatique avec "
"docker).\n"
" "
#: .\cookbook\templates\system.html:46
msgid "Media Serving"
@@ -2199,7 +2202,7 @@ msgstr ""
#: .\cookbook\templates\system.html:86
msgid "Allowed Hosts"
msgstr ""
msgstr "Hôtes autorisés"
#: .\cookbook\templates\system.html:90
msgid ""
@@ -2209,6 +2212,11 @@ msgid ""
"this.\n"
" "
msgstr ""
"\n"
" Votre configuration autorise tous les hôtes, cela ok dans "
"certaines installations mais évité. Veuillez consulter les documentations à "
"ce sujet.\n"
" "
#: .\cookbook\templates\system.html:97
msgid "Database"
@@ -2235,18 +2243,26 @@ msgid ""
"issue.\n"
" "
msgstr ""
"\n"
" Les migrations de données ne devraient jamais échouer!\n"
" Les échecs de migrations vont causer des problèmes de "
"fonctionnement majeurs dans lapplication..\n"
" Si une migration échoue, vérifiez que vous êtes sur la dernière "
"version et si c'est le cas veuillez créer un ticket sur GitHub avec le "
"contenu du journal de migration.\n"
" "
#: .\cookbook\templates\system.html:182
msgid "False"
msgstr ""
msgstr "Faux"
#: .\cookbook\templates\system.html:182
msgid "True"
msgstr ""
msgstr "Vrai"
#: .\cookbook\templates\system.html:207
msgid "Hide"
msgstr ""
msgstr "Cacher"
#: .\cookbook\templates\system.html:210
#, fuzzy
@@ -2328,11 +2344,13 @@ msgstr "{obj.name} a été ajouté(e) à la liste de courses."
#: .\cookbook\views\api.py:742
msgid "Filter meal plans from date (inclusive) in the format of YYYY-MM-DD."
msgstr ""
msgstr "Filtrer les repas depuis la date (incluse) avec le format YYYY-MM-DD."
#: .\cookbook\views\api.py:743
msgid "Filter meal plans to date (inclusive) in the format of YYYY-MM-DD."
msgstr ""
"Filtrer les plannings de repas depuis la date (incluse) avec le format YYYY-"
"MM-DD."
#: .\cookbook\views\api.py:744
#, fuzzy

View File

@@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
"PO-Revision-Date: 2024-09-08 12:58+0000\n"
"Last-Translator: Tomer Alcavi <alcavi1991@gmail.com>\n"
"PO-Revision-Date: 2025-03-07 15:08+0000\n"
"Last-Translator: yonatan ben-menachem <2bmyonatan@gmail.com>\n"
"Language-Team: Hebrew <http://translate.tandoor.dev/projects/tandoor/"
"recipes-backend/he/>\n"
"Language: he\n"
@@ -18,7 +18,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=4; plural=(n == 1) ? 0 : ((n == 2) ? 1 : ((n > 10 && "
"n % 10 == 0) ? 2 : 3));\n"
"X-Generator: Weblate 5.6.2\n"
"X-Generator: Weblate 5.8.4\n"
#: .\cookbook\forms.py:45
msgid ""
@@ -59,6 +59,8 @@ msgid ""
"To prevent duplicates recipes with the same name as existing ones are "
"ignored. Check this box to import everything."
msgstr ""
"בשביל למנוע כפילויות, מתוכנים בעלי שם זהה למתכון קיים לא יעובדו. סמן כאן כדי "
"לייבא בכל זאת."
#: .\cookbook\forms.py:143
msgid "Add your comment: "

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
"PO-Revision-Date: 2023-08-19 21:36+0000\n"
"Last-Translator: NeoID <neoid@animenord.com>\n"
"PO-Revision-Date: 2025-01-26 05:58+0000\n"
"Last-Translator: Ole Martin Ruud <nett@barskern.no>\n"
"Language-Team: Norwegian Bokmål <http://translate.tandoor.dev/projects/"
"tandoor/recipes-backend/nb_NO/>\n"
"Language: nb_NO\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.15\n"
"X-Generator: Weblate 5.8.4\n"
#: .\cookbook\forms.py:45
msgid ""
@@ -326,10 +326,8 @@ msgid "Imported %s recipes."
msgstr "Importerte %s oppskrifter."
#: .\cookbook\integration\openeats.py:28
#, fuzzy
#| msgid "Recipes"
msgid "Recipe source:"
msgstr "Oppskrifter"
msgstr "Oppskriftskilde:"
#: .\cookbook\integration\paprika.py:49
msgid "Notes"
@@ -555,7 +553,7 @@ msgstr "Oppskrift"
#: .\cookbook\models.py:1504
msgid "Food"
msgstr ""
msgstr "Mat"
#: .\cookbook\models.py:1505 .\cookbook\templates\base.html:149
msgid "Keyword"
@@ -846,10 +844,8 @@ msgid ""
msgstr ""
#: .\cookbook\templates\account\password_reset.html:32
#, fuzzy
#| msgid "Password reset is not implemented for the time being!"
msgid "Password reset is disabled on this instance."
msgstr "Det er foreløpig ikke implementert funksjon for å nullstille passord!"
msgstr "Nullstilling av passord er skrudd av for denne instansen."
#: .\cookbook\templates\account\password_reset_done.html:25
msgid ""
@@ -912,7 +908,7 @@ msgstr ""
#: .\cookbook\templates\account\signup.html:48
#: .\cookbook\templates\socialaccount\signup.html:39
msgid "and"
msgstr ""
msgstr "og"
#: .\cookbook\templates\account\signup.html:52
#: .\cookbook\templates\socialaccount\signup.html:43
@@ -946,8 +942,6 @@ msgid "Recipes"
msgstr "Oppskrifter"
#: .\cookbook\templates\base.html:161 .\cookbook\views\lists.py:120
#, fuzzy
#| msgid "New Food"
msgid "Foods"
msgstr "Ny matvare"
@@ -989,10 +983,8 @@ msgstr "Historikk"
#: .\cookbook\templates\base.html:263
#: .\cookbook\templates\ingredient_editor.html:7
#: .\cookbook\templates\ingredient_editor.html:13
#, fuzzy
#| msgid "Ingredients"
msgid "Ingredient Editor"
msgstr "Ingredienser"
msgstr "Ingrediensredigerer"
#: .\cookbook\templates\base.html:275
#: .\cookbook\templates\export_response.html:7
@@ -1002,7 +994,7 @@ msgstr "Eksporter"
#: .\cookbook\templates\base.html:287
msgid "Properties"
msgstr ""
msgstr "Egenskaper"
#: .\cookbook\templates\base.html:301 .\cookbook\views\lists.py:255
msgid "Unit Conversions"
@@ -1179,7 +1171,7 @@ msgstr ""
#: .\cookbook\templates\generic\delete_template.html:27
msgid "Protected"
msgstr ""
msgstr "Beskyttet"
#: .\cookbook\templates\generic\delete_template.html:42
msgid "Cascade"
@@ -1938,7 +1930,7 @@ msgstr ""
#: .\cookbook\templates\system.html:75 .\cookbook\templates\system.html:88
#: .\cookbook\templates\system.html:102 .\cookbook\templates\system.html:113
msgid "Warning"
msgstr ""
msgstr "Advarsel"
#: .\cookbook\templates\system.html:47 .\cookbook\templates\system.html:61
#: .\cookbook\templates\system.html:75 .\cookbook\templates\system.html:88

View File

@@ -13,8 +13,8 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
"PO-Revision-Date: 2024-09-03 19:58+0000\n"
"Last-Translator: \"S. v.d. Gevel\" <stefan18_gw@hotmail.com>\n"
"PO-Revision-Date: 2025-02-16 14:58+0000\n"
"Last-Translator: Cots Partier <cots.pastier.34@icloud.com>\n"
"Language-Team: Dutch <http://translate.tandoor.dev/projects/tandoor/"
"recipes-backend/nl/>\n"
"Language: nl\n"
@@ -22,7 +22,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.6.2\n"
"X-Generator: Weblate 5.8.4\n"
#: .\cookbook\forms.py:45
msgid ""
@@ -286,7 +286,7 @@ msgstr "omgekeerde rotatie"
#: .\cookbook\helper\recipe_url_import.py:311
msgid "careful rotation"
msgstr "voorzichtige rotatie"
msgstr "rotire atentă"
#: .\cookbook\helper\recipe_url_import.py:312
msgid "knead"

View File

@@ -11,18 +11,18 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
"PO-Revision-Date: 2024-03-19 23:47+0000\n"
"Last-Translator: Tomasz Klimczak <klemensble@gmail.com>\n"
"Language-Team: Polish <http://translate.tandoor.dev/projects/tandoor/recipes-"
"backend/pl/>\n"
"PO-Revision-Date: 2025-01-26 05:58+0000\n"
"Last-Translator: Dominik Ruczajewski <slick.moose.dev@gmail.com>\n"
"Language-Team: Polish <http://translate.tandoor.dev/projects/tandoor/"
"recipes-backend/pl/>\n"
"Language: pl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n"
"%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n"
"%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
"X-Generator: Weblate 5.4.2\n"
"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && ("
"n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && "
"n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
"X-Generator: Weblate 5.8.4\n"
#: .\cookbook\forms.py:45
msgid ""
@@ -65,6 +65,8 @@ msgid ""
"To prevent duplicates recipes with the same name as existing ones are "
"ignored. Check this box to import everything."
msgstr ""
"Aby zapobiec duplikatom, przepisy o tej samej nazwie co istniejące zostaną "
"pominięte. Zaznacz to pole, aby zaimportować wszystko."
#: .\cookbook\forms.py:143
msgid "Add your comment: "
@@ -91,14 +93,16 @@ msgid ""
"<a href=\"https://www.home-assistant.io/docs/authentication/#your-account-"
"profile\">Long Lived Access Token</a> for your HomeAssistant instance"
msgstr ""
"<a href=\"https://www.home-assistant.io/docs/authentication/#your-account-"
"profile\">Long Lived Access Token</a> dla Twojej instancji Home Assistant"
#: .\cookbook\forms.py:193
msgid "Something like http://homeassistant.local:8123/api"
msgstr ""
msgstr "Coś w stylu http://homeassistant.local:8123/api"
#: .\cookbook\forms.py:205
msgid "http://homeassistant.local:8123/api for example"
msgstr ""
msgstr "na przykład http://homeassistant.local:8123/api"
#: .\cookbook\forms.py:222 .\cookbook\views\edit.py:117
msgid "Storage"
@@ -106,11 +110,11 @@ msgstr "Magazyn"
#: .\cookbook\forms.py:222
msgid "Active"
msgstr ""
msgstr "Aktywuj"
#: .\cookbook\forms.py:226
msgid "Search String"
msgstr "Wyszukaj ciąg"
msgstr "Wyszukaj tekst"
#: .\cookbook\forms.py:246
msgid "File ID"
@@ -118,101 +122,117 @@ msgstr "Numer identyfikacyjny pliku"
#: .\cookbook\forms.py:262
msgid "Maximum number of users for this space reached."
msgstr ""
msgstr "Osiągnięto maksymalną liczbę użytkowników dla tej przestrzeni."
#: .\cookbook\forms.py:268
msgid "Email address already taken!"
msgstr ""
msgstr "Wybrany adres email jest już zajęty!"
#: .\cookbook\forms.py:275
msgid ""
"An email address is not required but if present the invite link will be sent "
"to the user."
msgstr ""
"Adres email nie jest wymagany, jednak gdy zostanie podany link z "
"zaproszeniem zostanie wysłany do użytkownika."
#: .\cookbook\forms.py:287
msgid "Name already taken."
msgstr ""
msgstr "Podana nazwa jest już zajęta."
#: .\cookbook\forms.py:298
msgid "Accept Terms and Privacy"
msgstr ""
msgstr "Zaakceptuj Regulamin oraz Politykę Prywatności"
#: .\cookbook\forms.py:332
msgid ""
"Determines how fuzzy a search is if it uses trigram similarity matching (e."
"g. low values mean more typos are ignored)."
msgstr ""
"Określa, jak niedokładne może być wyszukiwanie, jeśli wykorzystuje "
"dopasowanie podobieństwa trigramowego (np. niskie wartości oznaczają, że "
"więcej literówek jest ignorowanych)."
#: .\cookbook\forms.py:340
msgid ""
"Select type method of search. Click <a href=\"/docs/search/\">here</a> for "
"full description of choices."
msgstr ""
"Wybierz metodę wyszukiwania. Kliknij <a href=\"/docs/search/\">tutaj</a>, "
"aby zapoznać się z pełnym opisem dostępnych opcji."
#: .\cookbook\forms.py:341
msgid ""
"Use fuzzy matching on units, keywords and ingredients when editing and "
"importing recipes."
msgstr ""
"Użyj niedokładnego dopasowywania dla jednostek, słów kluczowych i składników "
"podczas edytowania i importowania przepisów."
#: .\cookbook\forms.py:342
msgid ""
"Fields to search ignoring accents. Selecting this option can improve or "
"degrade search quality depending on language"
msgstr ""
"Pola do przeszukiwania z pominięciem akcentów. Wybranie tej opcji może "
"poprawić lub pogorszyć jakość wyszukiwania w zależności od języka"
#: .\cookbook\forms.py:343
msgid ""
"Fields to search for partial matches. (e.g. searching for 'Pie' will return "
"'pie' and 'piece' and 'soapie')"
msgstr ""
"Pola do przeszukiwania częściowych dopasowań (np. wyszukiwanie 'Ciasto' "
"zwróci 'ciasto', 'ciasteczko' i 'ciastolina')"
#: .\cookbook\forms.py:344
msgid ""
"Fields to search for beginning of word matches. (e.g. searching for 'sa' "
"will return 'salad' and 'sandwich')"
msgstr ""
"Pola do przeszukiwania dopasowań na początku wyrazu (np. wyszukiwanie 'sa' "
"zwróci 'sałatka' i 'sandwich')"
#: .\cookbook\forms.py:345
msgid ""
"Fields to 'fuzzy' search. (e.g. searching for 'recpie' will find 'recipe'.) "
"Note: this option will conflict with 'web' and 'raw' methods of search."
msgstr ""
"Pola do wyszukiwania z użyciem 'niedokładnego' dopasowywania (np. "
"wyszukiwanie 'przepisz' znajdzie 'przepis'). Uwaga: ta opcja będzie "
"kolidować z metodami wyszukiwania 'web' i 'raw'."
#: .\cookbook\forms.py:346
msgid ""
"Fields to full text search. Note: 'web', 'phrase', and 'raw' search methods "
"only function with fulltext fields."
msgstr ""
"Pola do wyszukiwania pełno tekstowego. Uwaga: metody wyszukiwania 'web', "
"'phrase' i 'raw' działają wyłącznie z polami pełno tekstowymi."
#: .\cookbook\forms.py:350
#, fuzzy
#| msgid "Search"
msgid "Search Method"
msgstr "Szukaj"
msgstr "Metoda wyszukiwania"
#: .\cookbook\forms.py:350
msgid "Fuzzy Lookups"
msgstr ""
msgstr "Niedokładne dopasowanie"
#: .\cookbook\forms.py:350
msgid "Ignore Accent"
msgstr ""
msgstr "Ignoruj akcenty"
#: .\cookbook\forms.py:350
msgid "Partial Match"
msgstr ""
msgstr "Częściowe dopasowanie"
#: .\cookbook\forms.py:350
msgid "Starts With"
msgstr ""
msgstr "Zaczyna się od"
#: .\cookbook\forms.py:351
#, fuzzy
#| msgid "Search"
msgid "Fuzzy Search"
msgstr "Szukaj"
msgstr "Niedokładne wyszukiwanie"
#: .\cookbook\forms.py:351
#, fuzzy
@@ -225,6 +245,8 @@ msgid ""
"In order to prevent spam, the requested email was not send. Please wait a "
"few minutes and try again."
msgstr ""
"Aby zapobiec spamowi, żądany e-mail nie został wysłany. Proszę poczekać "
"kilka minut i spróbować ponownie."
#: .\cookbook\helper\permission_helper.py:164
#: .\cookbook\helper\permission_helper.py:187 .\cookbook\views\views.py:117
@@ -255,57 +277,57 @@ msgstr ""
#: .\cookbook\helper\permission_helper.py:402
msgid "You have reached the maximum number of recipes for your space."
msgstr ""
msgstr "Osiągnąłeś maksymalną liczbę przepisów dla swojej przestrzeni."
#: .\cookbook\helper\permission_helper.py:414
msgid "You have more users than allowed in your space."
msgstr ""
msgstr "Masz więcej użytkowników, niż jest dozwolone w Twojej przestrzeni."
#: .\cookbook\helper\recipe_url_import.py:310
msgid "reverse rotation"
msgstr ""
msgstr "rotacja wsteczna"
#: .\cookbook\helper\recipe_url_import.py:311
msgid "careful rotation"
msgstr ""
msgstr "delikatna rotacja"
#: .\cookbook\helper\recipe_url_import.py:312
msgid "knead"
msgstr ""
msgstr "zagnieść"
#: .\cookbook\helper\recipe_url_import.py:313
msgid "thicken"
msgstr ""
msgstr "zagęścić"
#: .\cookbook\helper\recipe_url_import.py:314
msgid "warm up"
msgstr ""
msgstr "podgrzać"
#: .\cookbook\helper\recipe_url_import.py:315
msgid "ferment"
msgstr ""
msgstr "doprowadzić do wrzenia"
#: .\cookbook\helper\recipe_url_import.py:316
msgid "sous-vide"
msgstr ""
msgstr "gotować w próżni"
#: .\cookbook\helper\shopping_helper.py:150
msgid "You must supply a servings size"
msgstr ""
msgstr "Musisz podać wielkość porcji"
#: .\cookbook\helper\template_helper.py:95
#: .\cookbook\helper\template_helper.py:97
msgid "Could not parse template code."
msgstr ""
msgstr "Nie można przeanalizować kodu szablonu."
#: .\cookbook\integration\copymethat.py:44
#: .\cookbook\integration\melarecipes.py:37
msgid "Favorite"
msgstr ""
msgstr "Ulubione"
#: .\cookbook\integration\copymethat.py:50
msgid "I made this"
msgstr ""
msgstr "Stworzyłem to"
#: .\cookbook\integration\integration.py:209
msgid ""
@@ -320,10 +342,12 @@ msgid ""
"An unexpected error occurred during the import. Please make sure you have "
"uploaded a valid file."
msgstr ""
"Wystąpił nieoczekiwany błąd podczas importu. Upewnij się, że przesłałeś "
"prawidłowy plik."
#: .\cookbook\integration\integration.py:217
msgid "The following recipes were ignored because they already existed:"
msgstr ""
msgstr "Następujące przepisy zostały pominięte, ponieważ już istnieją:"
#: .\cookbook\integration\integration.py:221
#, python-format
@@ -341,14 +365,12 @@ msgid "Notes"
msgstr "Notatka"
#: .\cookbook\integration\paprika.py:52
#, fuzzy
#| msgid "Information"
msgid "Nutritional Information"
msgstr "Informacja"
msgstr "Informacje o wartości odżywczej"
#: .\cookbook\integration\paprika.py:56
msgid "Source"
msgstr ""
msgstr "Źródło"
#: .\cookbook\integration\recettetek.py:54
#: .\cookbook\integration\recipekeeper.py:70
@@ -377,23 +399,25 @@ msgstr "Sekcja"
#: .\cookbook\management\commands\fix_duplicate_properties.py:15
msgid "Fixes foods with "
msgstr ""
msgstr "Poprawia potrawy z "
#: .\cookbook\management\commands\rebuildindex.py:14
msgid "Rebuilds full text search index on Recipe"
msgstr ""
msgstr "Odbudowuje indeks wyszukiwania pełno tekstowego dla przepisu"
#: .\cookbook\management\commands\rebuildindex.py:18
msgid "Only Postgresql databases use full text search, no index to rebuild"
msgstr ""
"Pełno tekstowe wyszukiwanie jest używane tylko w bazach danych PostgreSQL, "
"brak indeksu do odbudowy"
#: .\cookbook\management\commands\rebuildindex.py:29
msgid "Recipe index rebuild complete."
msgstr ""
msgstr "Odbudowa indeksu przepisu zakończona."
#: .\cookbook\management\commands\rebuildindex.py:31
msgid "Recipe index rebuild failed."
msgstr ""
msgstr "Odbudowa indeksu przepisu nie powiodła się."
#: .\cookbook\migrations\0047_auto_20200602_1133.py:14
msgid "Breakfast"
@@ -412,8 +436,6 @@ msgid "Other"
msgstr "Inne"
#: .\cookbook\migrations\0190_auto_20230525_1506.py:17
#, fuzzy
#| msgid "Fats"
msgid "Fat"
msgstr "Tłuszcze"
@@ -421,7 +443,7 @@ msgstr "Tłuszcze"
#: .\cookbook\migrations\0190_auto_20230525_1506.py:18
#: .\cookbook\migrations\0190_auto_20230525_1506.py:19
msgid "g"
msgstr ""
msgstr "g"
#: .\cookbook\migrations\0190_auto_20230525_1506.py:18
msgid "Carbohydrates"
@@ -437,13 +459,15 @@ msgstr "Kalorie"
#: .\cookbook\migrations\0190_auto_20230525_1506.py:20
msgid "kcal"
msgstr ""
msgstr "kcal"
#: .\cookbook\models.py:325
msgid ""
"Maximum file storage for space in MB. 0 for unlimited, -1 to disable file "
"upload."
msgstr ""
"Maksymalna pojemność na pliki dla przestrzeni w MB. 0 oznacza brak limitu, -"
"1 wyłącza możliwość przesyłania plików."
#: .\cookbook\models.py:454 .\cookbook\templates\search.html:7
#: .\cookbook\templates\settings.html:18

View File

@@ -12,8 +12,8 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
"PO-Revision-Date: 2023-10-07 18:02+0000\n"
"Last-Translator: Guilherme Roda <glealroda@gmail.com>\n"
"PO-Revision-Date: 2025-02-21 10:58+0000\n"
"Last-Translator: Filipe Neves <homemdasneves@gmail.com>\n"
"Language-Team: Portuguese <http://translate.tandoor.dev/projects/tandoor/"
"recipes-backend/pt/>\n"
"Language: pt\n"
@@ -21,7 +21,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Weblate 4.15\n"
"X-Generator: Weblate 5.8.4\n"
#: .\cookbook\forms.py:45
msgid ""
@@ -94,14 +94,16 @@ msgid ""
"<a href=\"https://www.home-assistant.io/docs/authentication/#your-account-"
"profile\">Long Lived Access Token</a> for your HomeAssistant instance"
msgstr ""
"<a href=\"https://www.home-assistant.io/docs/authentication/#your-account-"
"profile\">Token de longa duração</a>para a sua instância HomeAssistant"
#: .\cookbook\forms.py:193
msgid "Something like http://homeassistant.local:8123/api"
msgstr ""
msgstr "Algo como http://homeassistant.local:8123/api"
#: .\cookbook\forms.py:205
msgid "http://homeassistant.local:8123/api for example"
msgstr ""
msgstr "http://homeassistant.local:8123/api por exemplo"
#: .\cookbook\forms.py:222 .\cookbook\views\edit.py:117
msgid "Storage"
@@ -181,18 +183,25 @@ msgid ""
"Fields to search for partial matches. (e.g. searching for 'Pie' will return "
"'pie' and 'piece' and 'soapie')"
msgstr ""
"Campos a pesquisar por correspondência. (Ex: pesquisar por 'mor' retorna "
"'morango' e 'amora')"
#: .\cookbook\forms.py:344
msgid ""
"Fields to search for beginning of word matches. (e.g. searching for 'sa' "
"will return 'salad' and 'sandwich')"
msgstr ""
"Campos a pesquisar para correspondências no início da palavra. (por exemplo, "
"pesquisar por \"sa\" retornará \"salada\" e \"sanduíche\")"
#: .\cookbook\forms.py:345
msgid ""
"Fields to 'fuzzy' search. (e.g. searching for 'recpie' will find 'recipe'.) "
"Note: this option will conflict with 'web' and 'raw' methods of search."
msgstr ""
"Campos para pesquisa aproximada. (por exemplo, pesquisar por \"recita\" "
"encontrará \"receita\"). Nota: esta opção entra em conflito com os métodos "
"de pesquisa \"web\" e \"raw\"."
#: .\cookbook\forms.py:346
msgid ""
@@ -206,19 +215,19 @@ msgstr "Método de Pesquisa"
#: .\cookbook\forms.py:350
msgid "Fuzzy Lookups"
msgstr ""
msgstr "Pesquisas Aproximadas"
#: .\cookbook\forms.py:350
msgid "Ignore Accent"
msgstr ""
msgstr "Ignorar pronúncia"
#: .\cookbook\forms.py:350
msgid "Partial Match"
msgstr ""
msgstr "Correspondência parcial"
#: .\cookbook\forms.py:350
msgid "Starts With"
msgstr ""
msgstr "Começa com"
#: .\cookbook\forms.py:351
msgid "Fuzzy Search"
@@ -233,6 +242,8 @@ msgid ""
"In order to prevent spam, the requested email was not send. Please wait a "
"few minutes and try again."
msgstr ""
"Para evitar spam, o email solicitado não foi enviado. Por favor, aguarde "
"alguns minutos e tente novamente."
#: .\cookbook\helper\permission_helper.py:164
#: .\cookbook\helper\permission_helper.py:187 .\cookbook\views\views.py:117
@@ -257,11 +268,11 @@ msgstr "Sem permissões para aceder a esta página!"
#: .\cookbook\helper\permission_helper.py:237
#: .\cookbook\helper\permission_helper.py:252
msgid "You cannot interact with this object as it is not owned by you!"
msgstr ""
msgstr "Não pode interagir com este objeto, pois não é seu!"
#: .\cookbook\helper\permission_helper.py:402
msgid "You have reached the maximum number of recipes for your space."
msgstr ""
msgstr "Atingiu o número máximo de receitas para o seu espaço."
#: .\cookbook\helper\permission_helper.py:414
msgid "You have more users than allowed in your space."

File diff suppressed because it is too large Load Diff

View File

@@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
"PO-Revision-Date: 2023-04-27 08:55+0000\n"
"Last-Translator: noxonad <noxonad@proton.me>\n"
"PO-Revision-Date: 2025-02-16 14:58+0000\n"
"Last-Translator: Cots Partier <cots.pastier.34@icloud.com>\n"
"Language-Team: Romanian <http://translate.tandoor.dev/projects/tandoor/"
"recipes-backend/ro/>\n"
"Language: ro\n"
@@ -18,7 +18,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < "
"20)) ? 1 : 2;\n"
"X-Generator: Weblate 4.15\n"
"X-Generator: Weblate 5.8.4\n"
#: .\cookbook\forms.py:45
msgid ""
@@ -91,14 +91,16 @@ msgid ""
"<a href=\"https://www.home-assistant.io/docs/authentication/#your-account-"
"profile\">Long Lived Access Token</a> for your HomeAssistant instance"
msgstr ""
"<a href=\"https://www.home-assistant.io/docs/authentication/#your-account-"
"profile\">Token the acces</a> pentru instanța ta de HomeAssistant"
#: .\cookbook\forms.py:193
msgid "Something like http://homeassistant.local:8123/api"
msgstr ""
msgstr "Asemănător cu http://homeassistant.local:8123/api"
#: .\cookbook\forms.py:205
msgid "http://homeassistant.local:8123/api for example"
msgstr ""
msgstr "http://homeassistant.local:8123/api de exemplu"
#: .\cookbook\forms.py:222 .\cookbook\views\edit.py:117
msgid "Storage"
@@ -150,10 +152,6 @@ msgstr ""
"multe greșeli de scriere sunt ignorate)."
#: .\cookbook\forms.py:340
#, fuzzy
#| msgid ""
#| "Select type method of search. Click <a href=\"/docs/search/\">here</a> "
#| "for full desciption of choices."
msgid ""
"Select type method of search. Click <a href=\"/docs/search/\">here</a> for "
"full description of choices."
@@ -227,8 +225,6 @@ msgid "Partial Match"
msgstr "Potrivire parțială"
#: .\cookbook\forms.py:350
#, fuzzy
#| msgid "Starts Wtih"
msgid "Starts With"
msgstr "Începe cu"
@@ -284,38 +280,36 @@ msgid "You have more users than allowed in your space."
msgstr "Aveți mai mulți utilizatori decât este permis în spațiul dvs."
#: .\cookbook\helper\recipe_url_import.py:310
#, fuzzy
#| msgid "Use fractions"
msgid "reverse rotation"
msgstr "Utilizare fracții"
msgstr "rotație inversă"
#: .\cookbook\helper\recipe_url_import.py:311
msgid "careful rotation"
msgstr ""
msgstr "rotire atentă"
#: .\cookbook\helper\recipe_url_import.py:312
msgid "knead"
msgstr ""
msgstr "frământă"
#: .\cookbook\helper\recipe_url_import.py:313
msgid "thicken"
msgstr ""
msgstr "se îngroașă"
#: .\cookbook\helper\recipe_url_import.py:314
msgid "warm up"
msgstr ""
msgstr "încălzire"
#: .\cookbook\helper\recipe_url_import.py:315
msgid "ferment"
msgstr ""
msgstr "ferment"
#: .\cookbook\helper\recipe_url_import.py:316
msgid "sous-vide"
msgstr ""
msgstr "sous-vide"
#: .\cookbook\helper\shopping_helper.py:150
msgid "You must supply a servings size"
msgstr ""
msgstr "Trebuie să specificați dimensiunea porției"
#: .\cookbook\helper\template_helper.py:95
#: .\cookbook\helper\template_helper.py:97
@@ -325,11 +319,11 @@ msgstr "Nu s-a putut analiza codul șablonului."
#: .\cookbook\integration\copymethat.py:44
#: .\cookbook\integration\melarecipes.py:37
msgid "Favorite"
msgstr ""
msgstr "Favorit"
#: .\cookbook\integration\copymethat.py:50
msgid "I made this"
msgstr ""
msgstr "Am făcut acest lucru"
#: .\cookbook\integration\integration.py:209
msgid ""
@@ -357,10 +351,8 @@ msgid "Imported %s recipes."
msgstr "%s rețete importate."
#: .\cookbook\integration\openeats.py:28
#, fuzzy
#| msgid "Recipe Home"
msgid "Recipe source:"
msgstr "Rețetă acasă"
msgstr "Sursa rețetei:"
#: .\cookbook\integration\paprika.py:49
msgid "Notes"
@@ -376,10 +368,8 @@ msgstr "Sursă"
#: .\cookbook\integration\recettetek.py:54
#: .\cookbook\integration\recipekeeper.py:70
#, fuzzy
#| msgid "Import Log"
msgid "Imported from"
msgstr "Jurnal de import"
msgstr "Importat din"
#: .\cookbook\integration\saffron.py:23
msgid "Servings"
@@ -403,19 +393,17 @@ msgstr "Secțiune"
#: .\cookbook\management\commands\fix_duplicate_properties.py:15
msgid "Fixes foods with "
msgstr ""
msgstr "Corectează alimentele cu "
#: .\cookbook\management\commands\rebuildindex.py:14
msgid "Rebuilds full text search index on Recipe"
msgstr "Reconstruiește indexul de căutare text complet pe rețetă"
#: .\cookbook\management\commands\rebuildindex.py:18
#, fuzzy
#| msgid "Only Postgress databases use full text search, no index to rebuild"
msgid "Only Postgresql databases use full text search, no index to rebuild"
msgstr ""
"Numai bazele de date Postgress utilizează căutare text complet, nici un "
"index de reconstruit"
"Numai bazele de date Postgress utilizează ccăutarea textului integral, nici "
"un index de reconstruit"
#: .\cookbook\management\commands\rebuildindex.py:29
msgid "Recipe index rebuild complete."
@@ -443,29 +431,29 @@ msgstr "Altele"
#: .\cookbook\migrations\0190_auto_20230525_1506.py:17
msgid "Fat"
msgstr ""
msgstr "Grăsime"
#: .\cookbook\migrations\0190_auto_20230525_1506.py:17
#: .\cookbook\migrations\0190_auto_20230525_1506.py:18
#: .\cookbook\migrations\0190_auto_20230525_1506.py:19
msgid "g"
msgstr ""
msgstr "g"
#: .\cookbook\migrations\0190_auto_20230525_1506.py:18
msgid "Carbohydrates"
msgstr ""
msgstr "Carbohidrați"
#: .\cookbook\migrations\0190_auto_20230525_1506.py:19
msgid "Proteins"
msgstr ""
msgstr "Proteine"
#: .\cookbook\migrations\0190_auto_20230525_1506.py:20
msgid "Calories"
msgstr ""
msgstr "Calorii"
#: .\cookbook\migrations\0190_auto_20230525_1506.py:20
msgid "kcal"
msgstr ""
msgstr "kcal"
#: .\cookbook\models.py:325
msgid ""
@@ -500,24 +488,20 @@ msgid " is part of a recipe step and cannot be deleted"
msgstr " face parte dintr-un pas de rețetă și nu poate fi șters"
#: .\cookbook\models.py:918
#, fuzzy
#| msgid "Automations"
msgid "Nutrition"
msgstr "Automatizări"
msgstr "Nutriție"
#: .\cookbook\models.py:918
#, fuzzy
#| msgid "Merge"
msgid "Allergen"
msgstr "Unire"
msgstr "Alergen"
#: .\cookbook\models.py:919
msgid "Price"
msgstr ""
msgstr "Preț"
#: .\cookbook\models.py:919
msgid "Goal"
msgstr ""
msgstr "Obiectiv"
#: .\cookbook\models.py:1408 .\cookbook\templates\search_info.html:28
msgid "Simple"
@@ -548,42 +532,32 @@ msgid "Keyword Alias"
msgstr "Pseudonim cuvânt cheie"
#: .\cookbook\models.py:1470
#, fuzzy
#| msgid "Description"
msgid "Description Replace"
msgstr "Descriere"
msgstr "Înlocuire Descriere"
#: .\cookbook\models.py:1471
#, fuzzy
#| msgid "Instructions"
msgid "Instruction Replace"
msgstr "Instrucțiuni"
msgstr "Înlocuire Instrucțiuni"
#: .\cookbook\models.py:1472
#, fuzzy
#| msgid "Select Unit"
msgid "Never Unit"
msgstr "Selectare unitate"
msgstr "Unitate nulă"
#: .\cookbook\models.py:1473
msgid "Transpose Words"
msgstr ""
msgstr "Schimbă Ordinea Cuvintelor"
#: .\cookbook\models.py:1474
#, fuzzy
#| msgid "Food Alias"
msgid "Food Replace"
msgstr "Pseudonim produse alimentare"
msgstr "Aliment echivalent"
#: .\cookbook\models.py:1475
#, fuzzy
#| msgid "Unit Alias"
msgid "Unit Replace"
msgstr "Pseudonim unități"
msgstr "Unitate echivalentă"
#: .\cookbook\models.py:1476
msgid "Name Replace"
msgstr ""
msgstr "Înlocuire Nume"
#: .\cookbook\models.py:1503 .\cookbook\views\delete.py:40
#: .\cookbook\views\edit.py:210 .\cookbook\views\new.py:39
@@ -591,10 +565,8 @@ msgid "Recipe"
msgstr "Rețetă"
#: .\cookbook\models.py:1504
#, fuzzy
#| msgid "Foods"
msgid "Food"
msgstr "Alimente"
msgstr "Mâncare"
#: .\cookbook\models.py:1505 .\cookbook\templates\base.html:149
msgid "Keyword"
@@ -610,7 +582,7 @@ msgstr "Ați atins limita de încărcare a fișierelor."
#: .\cookbook\serializer.py:328
msgid "Cannot modify Space owner permission."
msgstr ""
msgstr "Nu se poate modifica permisiunea proprietarului spațiului."
#: .\cookbook\serializer.py:1270
msgid "Hello"
@@ -651,30 +623,35 @@ msgstr "Invitație Tandoor Recipes"
#: .\cookbook\serializer.py:1426
msgid "Existing shopping list to update"
msgstr ""
msgstr "Lista de cumpărături existentă de actualizat"
#: .\cookbook\serializer.py:1428
msgid ""
"List of ingredient IDs from the recipe to add, if not provided all "
"ingredients will be added."
msgstr ""
"ID-urile ingredientelor din rețetă pentru a fi adăugate, dacă nu sunt "
"specificate toate ingrediente vor fi adăugate."
#: .\cookbook\serializer.py:1430
msgid ""
"Providing a list_recipe ID and servings of 0 will delete that shopping list."
msgstr ""
"Furnizarea unui ID de rețetă și un număr de porții egal cu 0 va șterge lista "
"cumpărături."
#: .\cookbook\serializer.py:1439
msgid "Amount of food to add to the shopping list"
msgstr ""
msgstr "Cantitatea de mâncare pentru a fi adăugată în lista cumpărături"
#: .\cookbook\serializer.py:1441
msgid "ID of unit to use for the shopping list"
msgstr ""
msgstr "ID-ul unității pentru a fi utilizat în lista de cumpărături"
#: .\cookbook\serializer.py:1443
msgid "When set to true will delete all food from active shopping lists."
msgstr ""
"Când este activ se șterge toată mâncarea din listele de cumpărături active."
#: .\cookbook\tables.py:69 .\cookbook\tables.py:83
#: .\cookbook\templates\generic\delete_template.html:7
@@ -1027,10 +1004,8 @@ msgstr "Istoric"
#: .\cookbook\templates\base.html:263
#: .\cookbook\templates\ingredient_editor.html:7
#: .\cookbook\templates\ingredient_editor.html:13
#, fuzzy
#| msgid "Ingredients"
msgid "Ingredient Editor"
msgstr "Ingrediente"
msgstr "Editor de Ingrediente"
#: .\cookbook\templates\base.html:275
#: .\cookbook\templates\export_response.html:7
@@ -1040,13 +1015,11 @@ msgstr "Exportă"
#: .\cookbook\templates\base.html:287
msgid "Properties"
msgstr ""
msgstr "Atribute"
#: .\cookbook\templates\base.html:301 .\cookbook\views\lists.py:255
#, fuzzy
#| msgid "Account Connections"
msgid "Unit Conversions"
msgstr "Conexiuni de cont"
msgstr "Conversii de unități"
#: .\cookbook\templates\base.html:318 .\cookbook\templates\index.html:47
msgid "Import Recipe"
@@ -1066,10 +1039,8 @@ msgid "Space Settings"
msgstr "Setări spațiu"
#: .\cookbook\templates\base.html:340
#, fuzzy
#| msgid "External Recipes"
msgid "External Connectors"
msgstr "Rețete externe"
msgstr "Conectori externi"
#: .\cookbook\templates\base.html:345 .\cookbook\templates\system.html:13
msgid "System"
@@ -1081,15 +1052,13 @@ msgstr "Admin"
#: .\cookbook\templates\base.html:351
#: .\cookbook\templates\space_overview.html:25
#, fuzzy
#| msgid "No Space"
msgid "Your Spaces"
msgstr "Fără spațiu"
msgstr "Spațiul tău"
#: .\cookbook\templates\base.html:362
#: .\cookbook\templates\space_overview.html:6
msgid "Overview"
msgstr ""
msgstr "Sumar"
#: .\cookbook\templates\base.html:372
msgid "Markdown Guide"
@@ -1113,11 +1082,11 @@ msgstr "Deconectare"
#: .\cookbook\templates\base.html:406
msgid "You are using the free version of Tandor"
msgstr ""
msgstr "Utilizați o versiune gratuită de Tandor"
#: .\cookbook\templates\base.html:407
msgid "Upgrade Now"
msgstr ""
msgstr "Actualizează acum"
#: .\cookbook\templates\batch\edit.html:6
msgid "Batch edit Category"
@@ -1213,7 +1182,7 @@ msgstr "Sunteți sigur că doriți să ștergeți %(title)s: <b>%(object)s</b> "
#: .\cookbook\templates\generic\delete_template.html:22
msgid "This cannot be undone!"
msgstr ""
msgstr "Este ireversibil!"
#: .\cookbook\templates\generic\delete_template.html:27
msgid "Protected"
@@ -1230,7 +1199,7 @@ msgstr "Anulare"
#: .\cookbook\templates\generic\edit_template.html:6
#: .\cookbook\templates\generic\edit_template.html:14
msgid "Edit"
msgstr "Editare"
msgstr "Editează"
#: .\cookbook\templates\generic\edit_template.html:32
msgid "View"
@@ -1379,8 +1348,6 @@ msgstr ""
#: .\cookbook\templates\markdown_info.html:57
#: .\cookbook\templates\markdown_info.html:73
#, fuzzy
#| msgid "or by leaving a blank line inbetween."
msgid "or by leaving a blank line in between."
msgstr "sau lăsând o linie goală între ele."
@@ -1404,10 +1371,6 @@ msgid "Lists"
msgstr "Liste"
#: .\cookbook\templates\markdown_info.html:85
#, fuzzy
#| msgid ""
#| "Lists can ordered or unorderd. It is <b>important to leave a blank line "
#| "before the list!</b>"
msgid ""
"Lists can ordered or unordered. It is <b>important to leave a blank line "
"before the list!</b>"
@@ -1539,11 +1502,11 @@ msgstr ""
#: .\cookbook\templates\openid\login.html:27
#: .\cookbook\templates\socialaccount\authentication_error.html:27
msgid "Back"
msgstr ""
msgstr "Înapoi"
#: .\cookbook\templates\property_editor.html:7
msgid "Property Editor"
msgstr ""
msgstr "Editor atribute"
#: .\cookbook\templates\recipe_view.html:36
msgid "Comments"
@@ -1620,15 +1583,6 @@ msgstr ""
" "
#: .\cookbook\templates\search_info.html:29
#, fuzzy
#| msgid ""
#| " \n"
#| " Simple searches ignore punctuation and common words such as "
#| "'the', 'a', 'and'. And will treat seperate words as required.\n"
#| " Searching for 'apple or flour' will return any recipe that "
#| "includes both 'apple' and 'flour' anywhere in the fields that have been "
#| "selected for a full text search.\n"
#| " "
msgid ""
" \n"
" Simple searches ignore punctuation and common words such as "
@@ -1666,23 +1620,6 @@ msgstr ""
" "
#: .\cookbook\templates\search_info.html:39
#, fuzzy
#| msgid ""
#| " \n"
#| " Web searches simulate functionality found on many web search "
#| "sites supporting special syntax.\n"
#| " Placing quotes around several words will convert those words "
#| "into a phrase.\n"
#| " 'or' is recongized as searching for the word (or phrase) "
#| "immediately before 'or' OR the word (or phrase) directly after.\n"
#| " '-' is recognized as searching for recipes that do not "
#| "include the word (or phrase) that comes immediately after. \n"
#| " For example searching for 'apple pie' or cherry -butter will "
#| "return any recipe that includes the phrase 'apple pie' or the word "
#| "'cherry' \n"
#| " in any field included in the full text search but exclude any "
#| "recipe that has the word 'butter' in any field included.\n"
#| " "
msgid ""
" \n"
" Web searches simulate functionality found on many web search "
@@ -1705,8 +1642,8 @@ msgstr ""
"uri de căutare web care acceptă sintaxa specială.\n"
" Plasarea ghilimelelor în jurul mai multor cuvinte va converti "
"aceste cuvinte într-o frază.\n"
" 'sau' este recunoscut pentru căutarea pentru cuvântul (sau "
"fraza) imediat înainte de 'sau' SAU cuvântul (sau fraza) direct după.\n"
" 'sau' este recunoscut pentru căutarea pentru cuvântul (sau fraza)"
" imediat înainte de 'sau' SAU cuvântul (sau fraza) direct după.\n"
" '-' este recunoscut pentru căutarea rețetelor care nu includ "
"cuvântul (sau fraza) care vine imediat după. \n"
" De exemplu, căutarea 'plăcintei cu mere' sau a untului de cireșe "
@@ -1729,19 +1666,6 @@ msgstr ""
" "
#: .\cookbook\templates\search_info.html:59
#, fuzzy
#| msgid ""
#| " \n"
#| " Another approach to searching that also requires Postgresql "
#| "is fuzzy search or trigram similarity. A trigram is a group of three "
#| "consecutive characters.\n"
#| " For example searching for 'apple' will create x trigrams "
#| "'app', 'ppl', 'ple' and will create a score of how closely words match "
#| "the generated trigrams.\n"
#| " One benefit of searching trigams is that a search for "
#| "'sandwich' will find mispelled words such as 'sandwhich' that would be "
#| "missed by other methods.\n"
#| " "
msgid ""
" \n"
" Another approach to searching that also requires Postgresql is "
@@ -1948,17 +1872,15 @@ msgstr "Creează cont superuser"
#: .\cookbook\templates\socialaccount\authentication_error.html:7
#: .\cookbook\templates\socialaccount\authentication_error.html:23
#, fuzzy
#| msgid "Social Login"
msgid "Social Network Login Failure"
msgstr "Autentificare utilizând rețeaua socială"
msgstr "Eșec la conectarea la rețeaua socială"
#: .\cookbook\templates\socialaccount\authentication_error.html:25
#, fuzzy
#| msgid "An error occurred attempting to move "
msgid ""
"An error occurred while attempting to login via your social network account."
msgstr "A apărut o eroare la încercarea de a muta "
msgstr ""
"S-a produs o eroare în timp ce se încearca autentificarea prin contul tău de "
"rețea socială."
#: .\cookbook\templates\socialaccount\connections.html:4
#: .\cookbook\templates\socialaccount\connections.html:15
@@ -1994,17 +1916,18 @@ msgstr "Înregistrare"
#: .\cookbook\templates\socialaccount\login.html:9
#, python-format
msgid "Connect %(provider)s"
msgstr ""
msgstr "Conectează %(provider)s"
#: .\cookbook\templates\socialaccount\login.html:11
#, python-format
msgid "You are about to connect a new third party account from %(provider)s."
msgstr ""
"Sunteți pe cale să conectați un nou cont de terță parte din %(provider)s."
#: .\cookbook\templates\socialaccount\login.html:13
#, python-format
msgid "Sign In Via %(provider)s"
msgstr ""
msgstr "Intră în cont prin %(provider)s"
#: .\cookbook\templates\socialaccount\login.html:15
#, python-format
@@ -2013,7 +1936,7 @@ msgstr ""
#: .\cookbook\templates\socialaccount\login.html:20
msgid "Continue"
msgstr ""
msgstr "Continuă"
#: .\cookbook\templates\socialaccount\signup.html:10
#, python-format
@@ -2046,7 +1969,7 @@ msgstr "Conectați-vă utilizând"
#: .\cookbook\templates\space_manage.html:7
msgid "Space Management"
msgstr ""
msgstr "Managementul spațiului"
#: .\cookbook\templates\space_manage.html:26
msgid "Space:"
@@ -2057,10 +1980,8 @@ msgid "Manage Subscription"
msgstr "Gestionarea abonamentului"
#: .\cookbook\templates\space_overview.html:13 .\cookbook\views\delete.py:184
#, fuzzy
#| msgid "Space:"
msgid "Space"
msgstr "Spațiu:"
msgstr "Spațiu"
#: .\cookbook\templates\space_overview.html:17
msgid ""
@@ -2078,13 +1999,11 @@ msgstr ""
#: .\cookbook\templates\space_overview.html:53
msgid "Owner"
msgstr ""
msgstr "Proprietar"
#: .\cookbook\templates\space_overview.html:57
#, fuzzy
#| msgid "Create Space"
msgid "Leave Space"
msgstr "Creare spațiu"
msgstr "Părăsire spațiu"
#: .\cookbook\templates\space_overview.html:78
#: .\cookbook\templates\space_overview.html:88
@@ -2147,6 +2066,11 @@ msgid ""
"script to generate version information (done automatically in docker).\n"
" "
msgstr ""
"\n"
" Trebuie să executați <code>version.py</code> în scripturile de "
"actualizare pentru a genera informații despre versiune (realizate automat în "
"docker).\n"
" "
#: .\cookbook\templates\system.html:46
msgid "Media Serving"
@@ -2237,7 +2161,7 @@ msgstr ""
#: .\cookbook\templates\system.html:86
msgid "Allowed Hosts"
msgstr ""
msgstr "Domenii Permise"
#: .\cookbook\templates\system.html:90
msgid ""
@@ -2257,10 +2181,8 @@ msgid "Info"
msgstr "Informație"
#: .\cookbook\templates\system.html:110 .\cookbook\templates\system.html:127
#, fuzzy
#| msgid "Use fractions"
msgid "Migrations"
msgstr "Utilizare fracții"
msgstr "Migrări"
#: .\cookbook\templates\system.html:116
msgid ""
@@ -2276,19 +2198,17 @@ msgstr ""
#: .\cookbook\templates\system.html:182
msgid "False"
msgstr ""
msgstr "Fals"
#: .\cookbook\templates\system.html:182
msgid "True"
msgstr ""
msgstr "Adevărat"
#: .\cookbook\templates\system.html:207
msgid "Hide"
msgstr ""
msgstr "Ascunde"
#: .\cookbook\templates\system.html:210
#, fuzzy
#| msgid "Show Log"
msgid "Show"
msgstr "Afișare jurnal"
@@ -2355,29 +2275,34 @@ msgstr "{child.name} a fost mutat cu succes la părintele {parent.name}"
#: .\cookbook\views\api.py:589
#, python-brace-format
msgid "{obj.name} was removed from the shopping list."
msgstr ""
msgstr "{obj.name} a fost șters din lista de cumpărături."
#: .\cookbook\views\api.py:594 .\cookbook\views\api.py:1037
#: .\cookbook\views\api.py:1050
#, python-brace-format
msgid "{obj.name} was added to the shopping list."
msgstr ""
msgstr "{obj.name} a fost adăugat la lista de cumpărături."
#: .\cookbook\views\api.py:742
msgid "Filter meal plans from date (inclusive) in the format of YYYY-MM-DD."
msgstr ""
msgstr "Filtrează planurile de masă din data (inclusiv) în formatul AAAA-LL-ZZ."
#: .\cookbook\views\api.py:743
msgid "Filter meal plans to date (inclusive) in the format of YYYY-MM-DD."
msgstr ""
"Filtrează planurile de masă până la data (inclusiv) în formatul AAAA-LL-ZZ."
#: .\cookbook\views\api.py:744
msgid "Filter meal plans with MealType ID. For multiple repeat parameter."
msgstr ""
"Filtrează planurile de masă cu ID-ul tipului de rețetă. Pentru mai multe "
"repetă parametrul."
#: .\cookbook\views\api.py:872
msgid "ID of recipe a step is part of. For multiple repeat parameter."
msgstr ""
"ID-ul rețetei din care face pasul face parte. Pentru mai multe repetă "
"parametrul."
#: .\cookbook\views\api.py:873
msgid "Query string matched (fuzzy) against object name."
@@ -2555,8 +2480,6 @@ msgid "Bad URL Schema."
msgstr ""
#: .\cookbook\views\api.py:1474
#, fuzzy
#| msgid "No useable data could be found."
msgid "No usable data could be found."
msgstr "Nu au putut fi găsite date utilizabile."
@@ -2611,20 +2534,16 @@ msgstr ""
"puțin un supervizor."
#: .\cookbook\views\delete.py:135
#, fuzzy
#| msgid "Storage Backend"
msgid "Connectors Config Backend"
msgstr "Backend de stocare"
msgstr "Configurare Backend Conectori"
#: .\cookbook\views\delete.py:157
msgid "Invite Link"
msgstr "Link de invitare"
#: .\cookbook\views\delete.py:168
#, fuzzy
#| msgid "Members"
msgid "Space Membership"
msgstr "Membri"
msgstr "Membri spațiu"
#: .\cookbook\views\edit.py:84
msgid "You cannot edit this storage!"
@@ -2639,10 +2558,8 @@ msgid "There was an error updating this storage backend!"
msgstr "A existat o eroare la actualizarea acestui backend de stocare!"
#: .\cookbook\views\edit.py:134
#, fuzzy
#| msgid "Changes saved!"
msgid "Config saved!"
msgstr "Modificări salvate!"
msgstr "Configurare salvată!"
#: .\cookbook\views\edit.py:142
msgid "ConnectorConfig"
@@ -2675,10 +2592,8 @@ msgid "Shopping List"
msgstr "Listă de cumpărături"
#: .\cookbook\views\lists.py:77 .\cookbook\views\new.py:98
#, fuzzy
#| msgid "Storage Backend"
msgid "Connector Config Backend"
msgstr "Backend de stocare"
msgstr "Configurare Backend pentru Conector"
#: .\cookbook\views\lists.py:91
msgid "Invite Links"
@@ -2693,10 +2608,8 @@ msgid "Shopping Categories"
msgstr "Categorii de cumpărături"
#: .\cookbook\views\lists.py:202
#, fuzzy
#| msgid "Filter"
msgid "Custom Filters"
msgstr "Filtru"
msgstr "Filtre Personalizate"
#: .\cookbook\views\lists.py:239
msgid "Steps"
@@ -2707,10 +2620,8 @@ msgid "Property Types"
msgstr ""
#: .\cookbook\views\new.py:86
#, fuzzy
#| msgid "This feature is not available in the demo version!"
msgid "This feature is not enabled by the server admin!"
msgstr "Această funcție nu este disponibilă în versiunea demo!"
msgstr "Această funcție nu a fost activată de către administrator!"
#: .\cookbook\views\new.py:123
msgid "Imported new recipe!"
@@ -2726,11 +2637,9 @@ msgid "This feature is not available in the demo version!"
msgstr "Această funcție nu este disponibilă în versiunea demo!"
#: .\cookbook\views\views.py:74
#, fuzzy
#| msgid "You have reached the maximum number of recipes for your space."
msgid ""
"You have the reached the maximum amount of spaces that can be owned by you."
msgstr "Ai ajuns la numărul maxim de rețete pentru spațiul dvs."
msgstr "Ai ajuns la numărul maxim de spații pe care le poți deține."
#: .\cookbook\views\views.py:89
msgid ""
@@ -2779,29 +2688,15 @@ msgid "Unable to determine PostgreSQL version."
msgstr ""
#: .\cookbook\views\views.py:317
#, fuzzy
#| msgid ""
#| "\n"
#| " This application is not running with a Postgres database "
#| "backend. This is ok but not recommended as some\n"
#| " features only work with postgres databases.\n"
#| " "
msgid ""
"This application is not running with a Postgres database backend. This is ok "
"but not recommended as some features only work with postgres databases."
msgstr ""
"\n"
" Această aplicație nu se execută cu un backend de bază de date "
"Postgres. Acest lucru este ok, dar nu este recomandat deoarece unele\n"
" caracteristicile funcționează numai cu baze de date Postgres.\n"
" "
"Această aplicație nu se execută cu un backend de bază de date Postgres. "
"Acest lucru este ok, dar nu este recomandat deoarece unele caracteristicile "
"funcționează numai cu baze de date Postgres."
#: .\cookbook\views\views.py:360
#, fuzzy
#| msgid ""
#| "The setup page can only be used to create the first user! If you have "
#| "forgotten your superuser credentials please consult the django "
#| "documentation on how to reset passwords."
msgid ""
"The setup page can only be used to create the first "
"user! If you have forgotten your superuser credentials "
@@ -2852,10 +2747,8 @@ msgid "Manage recipes, shopping list, meal plans and more."
msgstr ""
#: .\cookbook\views\views.py:458
#, fuzzy
#| msgid "Meal-Plan"
msgid "Plan"
msgstr "Plan de alimentare"
msgstr "Plan"
#: .\cookbook\views\views.py:458
msgid "View your meal Plan"
@@ -2863,13 +2756,11 @@ msgstr ""
#: .\cookbook\views\views.py:459
msgid "View your cookbooks"
msgstr ""
msgstr "Vizualizează cărțile de bucate"
#: .\cookbook\views\views.py:460
#, fuzzy
#| msgid "New Shopping List"
msgid "View your shopping lists"
msgstr "Listă de cumpărături nouă"
msgstr "Vezi listele de cumpărături"
#~ msgid "Default unit"
#~ msgstr "Unitate implicită"

View File

@@ -8,17 +8,17 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
"PO-Revision-Date: 2023-05-01 07:55+0000\n"
"Last-Translator: axeron2036 <admin@axeron2036.ru>\n"
"PO-Revision-Date: 2024-11-12 17:58+0000\n"
"Last-Translator: Владислав <vlad@kelonmyosa.ru>\n"
"Language-Team: Russian <http://translate.tandoor.dev/projects/tandoor/"
"recipes-backend/ru/>\n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 4.15\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 5.6.2\n"
#: .\cookbook\forms.py:45
msgid ""
@@ -454,17 +454,17 @@ msgstr ""
#: .\cookbook\models.py:455 .\cookbook\templates\base.html:114
#: .\cookbook\templates\meal_plan.html:7
msgid "Meal-Plan"
msgstr ""
msgstr "План питания"
#: .\cookbook\models.py:456 .\cookbook\templates\base.html:122
#: .\cookbook\views\views.py:459
msgid "Books"
msgstr "Книги"
msgstr "Книги рецептов"
#: .\cookbook\models.py:457 .\cookbook\templates\base.html:118
#: .\cookbook\views\views.py:460
msgid "Shopping"
msgstr ""
msgstr "Покупки"
#: .\cookbook\models.py:752
msgid " is part of a recipe step and cannot be deleted"
@@ -929,7 +929,7 @@ msgstr ""
#: .\cookbook\templates\base.html:110 .\cookbook\templates\index.html:87
msgid "Recipes"
msgstr ""
msgstr "Рецепты"
#: .\cookbook\templates\base.html:161 .\cookbook\views\lists.py:120
msgid "Foods"

File diff suppressed because it is too large Load Diff

View File

@@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
"PO-Revision-Date: 2024-09-17 11:58+0000\n"
"Last-Translator: Bebbe K <kajolekk91@gmail.com>\n"
"PO-Revision-Date: 2025-02-07 08:58+0000\n"
"Last-Translator: Mattias G <mattias.granlund@gmail.com>\n"
"Language-Team: Swedish <http://translate.tandoor.dev/projects/tandoor/"
"recipes-backend/sv/>\n"
"Language: sv\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.6.2\n"
"X-Generator: Weblate 5.8.4\n"
#: .\cookbook\forms.py:45
msgid ""
@@ -549,7 +549,7 @@ msgstr "Ersätt Enhet"
#: .\cookbook\models.py:1476
msgid "Name Replace"
msgstr ""
msgstr "Ersättningsnamn"
#: .\cookbook\models.py:1503 .\cookbook\views\delete.py:40
#: .\cookbook\views\edit.py:210 .\cookbook\views\new.py:39
@@ -566,15 +566,15 @@ msgstr "Nyckelord"
#: .\cookbook\serializer.py:222
msgid "File uploads are not enabled for this Space."
msgstr ""
msgstr "Filuppladdning är inte aktiverat för det här utrymmet."
#: .\cookbook\serializer.py:233
msgid "You have reached your file upload limit."
msgstr ""
msgstr "Du har nått din maxgräns för uppladdningar."
#: .\cookbook\serializer.py:328
msgid "Cannot modify Space owner permission."
msgstr ""
msgstr "Kan inte modifiera utrymmets ägar-rättigheter."
#: .\cookbook\serializer.py:1270
msgid "Hello"
@@ -582,56 +582,61 @@ msgstr "Hej"
#: .\cookbook\serializer.py:1270
msgid "You have been invited by "
msgstr ""
msgstr "Du har bjudits in av "
#: .\cookbook\serializer.py:1272
msgid " to join their Tandoor Recipes space "
msgstr ""
msgstr " för att ansluta till deras Tandoor recept utrymme "
#: .\cookbook\serializer.py:1274
msgid "Click the following link to activate your account: "
msgstr ""
msgstr "Klicka på länken för att aktivera ditt konto: "
#: .\cookbook\serializer.py:1276
msgid ""
"If the link does not work use the following code to manually join the space: "
msgstr ""
"Om länken inte fungerar kan du testa följande kod för att manuellt aktivera "
"ditt utrymme: "
#: .\cookbook\serializer.py:1278
msgid "The invitation is valid until "
msgstr ""
msgstr "Inbjudningen är giltig till "
#: .\cookbook\serializer.py:1280
msgid ""
"Tandoor Recipes is an Open Source recipe manager. Check it out on GitHub "
msgstr ""
"Tandoor recept är en recept-hanterar med öppen källkod. Se mer på GitHub "
#: .\cookbook\serializer.py:1283
msgid "Tandoor Recipes Invite"
msgstr ""
msgstr "Tandoor recept inbjudan"
#: .\cookbook\serializer.py:1426
msgid "Existing shopping list to update"
msgstr ""
msgstr "Existerande inköpslistor att uppdatera"
#: .\cookbook\serializer.py:1428
msgid ""
"List of ingredient IDs from the recipe to add, if not provided all "
"ingredients will be added."
msgstr ""
"Lista med ingrediens ID:n från receptet att lägga till, om inget angetts "
"kommer alla ingredienser bli tillagda."
#: .\cookbook\serializer.py:1430
msgid ""
"Providing a list_recipe ID and servings of 0 will delete that shopping list."
msgstr ""
msgstr "Anges ett list_recept ID och 0 portioner kommer den listan raderas."
#: .\cookbook\serializer.py:1439
msgid "Amount of food to add to the shopping list"
msgstr ""
msgstr "Mängd av ingrediens att lägga till på inköpslistan"
#: .\cookbook\serializer.py:1441
msgid "ID of unit to use for the shopping list"
msgstr ""
msgstr "ID eller enhet att använda för inköpslistan"
#: .\cookbook\serializer.py:1443
msgid "When set to true will delete all food from active shopping lists."
@@ -681,7 +686,7 @@ msgstr "Email"
#: .\cookbook\templates\account\email.html:19
msgid "The following e-mail addresses are associated with your account:"
msgstr ""
msgstr "Följande epost-addresser är associerade med ditt konto:"
#: .\cookbook\templates\account\email.html:36
msgid "Verified"
@@ -696,14 +701,12 @@ msgid "Primary"
msgstr "Primär"
#: .\cookbook\templates\account\email.html:47
#, fuzzy
#| msgid "Make Header"
msgid "Make Primary"
msgstr "Skapa titel"
msgstr "Markera som primär"
#: .\cookbook\templates\account\email.html:49
msgid "Re-send Verification"
msgstr ""
msgstr "Sänd verifikationen igen"
#: .\cookbook\templates\account\email.html:50
#: .\cookbook\templates\generic\delete_template.html:57

View File

@@ -11,8 +11,8 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
"PO-Revision-Date: 2024-07-03 16:38+0000\n"
"Last-Translator: Taylan TATLI <uyelik-tandoor@tatli.me>\n"
"PO-Revision-Date: 2025-01-20 05:20+0000\n"
"Last-Translator: Yigit <yigit.gungor@outlook.com>\n"
"Language-Team: Turkish <http://translate.tandoor.dev/projects/tandoor/"
"recipes-backend/tr/>\n"
"Language: tr\n"
@@ -20,7 +20,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Generator: Weblate 5.4.2\n"
"X-Generator: Weblate 5.8.4\n"
#: .\cookbook\forms.py:45
msgid ""
@@ -199,7 +199,7 @@ msgstr ""
#: .\cookbook\forms.py:350
msgid "Search Method"
msgstr ""
msgstr "Arama Metodu"
#: .\cookbook\forms.py:350
msgid "Fuzzy Lookups"
@@ -207,15 +207,15 @@ msgstr ""
#: .\cookbook\forms.py:350
msgid "Ignore Accent"
msgstr ""
msgstr "Harflerdeki Vurguları Görmezden Gel"
#: .\cookbook\forms.py:350
msgid "Partial Match"
msgstr ""
msgstr "Kısmi Eşleşme"
#: .\cookbook\forms.py:350
msgid "Starts With"
msgstr ""
msgstr "İle başlayan"
#: .\cookbook\forms.py:351
msgid "Fuzzy Search"
@@ -223,18 +223,20 @@ msgstr ""
#: .\cookbook\forms.py:351
msgid "Full Text"
msgstr ""
msgstr "Tam Metin"
#: .\cookbook\helper\AllAuthCustomAdapter.py:41
msgid ""
"In order to prevent spam, the requested email was not send. Please wait a "
"few minutes and try again."
msgstr ""
"İstenmeyen e-postayı önlemek için istenen e-posta gönderilemedi. Lütfen "
"birkaç dakika bekleyin ve tekrar deneyin."
#: .\cookbook\helper\permission_helper.py:164
#: .\cookbook\helper\permission_helper.py:187 .\cookbook\views\views.py:117
msgid "You are not logged in and therefore cannot view this page!"
msgstr ""
msgstr "Giriş yapmadınız ve bu nedenle bu sayfayı görüntüleyemezsiniz!"
#: .\cookbook\helper\permission_helper.py:168
#: .\cookbook\helper\permission_helper.py:174
@@ -247,68 +249,68 @@ msgstr ""
#: .\cookbook\helper\permission_helper.py:341 .\cookbook\views\data.py:35
#: .\cookbook\views\views.py:127 .\cookbook\views\views.py:131
msgid "You do not have the required permissions to view this page!"
msgstr ""
msgstr "Bu sayfayı görüntülemek için gerekli izinlere sahip değilsiniz!"
#: .\cookbook\helper\permission_helper.py:192
#: .\cookbook\helper\permission_helper.py:215
#: .\cookbook\helper\permission_helper.py:237
#: .\cookbook\helper\permission_helper.py:252
msgid "You cannot interact with this object as it is not owned by you!"
msgstr ""
msgstr "Bu nesne size ait olmadığı için onunla etkileşime giremezsiniz!"
#: .\cookbook\helper\permission_helper.py:402
msgid "You have reached the maximum number of recipes for your space."
msgstr ""
msgstr "Alanınız için maksimum tarif sayısına ulaştınız."
#: .\cookbook\helper\permission_helper.py:414
msgid "You have more users than allowed in your space."
msgstr ""
msgstr "Alanınızda izin verilenden daha fazla kullanıcı var."
#: .\cookbook\helper\recipe_url_import.py:310
msgid "reverse rotation"
msgstr ""
msgstr "ters dönüş"
#: .\cookbook\helper\recipe_url_import.py:311
msgid "careful rotation"
msgstr ""
msgstr "dikkatli dönüş"
#: .\cookbook\helper\recipe_url_import.py:312
msgid "knead"
msgstr ""
msgstr "yoğur"
#: .\cookbook\helper\recipe_url_import.py:313
msgid "thicken"
msgstr ""
msgstr "kalınlaştır"
#: .\cookbook\helper\recipe_url_import.py:314
msgid "warm up"
msgstr ""
msgstr "ısıt"
#: .\cookbook\helper\recipe_url_import.py:315
msgid "ferment"
msgstr ""
msgstr "mayala"
#: .\cookbook\helper\recipe_url_import.py:316
msgid "sous-vide"
msgstr ""
msgstr "sous-vide"
#: .\cookbook\helper\shopping_helper.py:150
msgid "You must supply a servings size"
msgstr ""
msgstr "Bir porsiyon büyüklüğü vermelisiniz"
#: .\cookbook\helper\template_helper.py:95
#: .\cookbook\helper\template_helper.py:97
msgid "Could not parse template code."
msgstr ""
msgstr "Şablon kodu ayrıştırılamadı."
#: .\cookbook\integration\copymethat.py:44
#: .\cookbook\integration\melarecipes.py:37
msgid "Favorite"
msgstr ""
msgstr "Favori"
#: .\cookbook\integration\copymethat.py:50
msgid "I made this"
msgstr ""
msgstr "Bunu yaptım"
#: .\cookbook\integration\integration.py:209
msgid ""
@@ -324,28 +326,28 @@ msgstr ""
#: .\cookbook\integration\integration.py:217
msgid "The following recipes were ignored because they already existed:"
msgstr ""
msgstr "Aşağıdaki tarifler zaten mevcut olduğu için göz ardı edildi:"
#: .\cookbook\integration\integration.py:221
#, python-format
msgid "Imported %s recipes."
msgstr ""
msgstr "%s tarif içe aktarıldı."
#: .\cookbook\integration\openeats.py:28
msgid "Recipe source:"
msgstr ""
msgstr "Tarif kaynağı:"
#: .\cookbook\integration\paprika.py:49
msgid "Notes"
msgstr ""
msgstr "Notlar"
#: .\cookbook\integration\paprika.py:52
msgid "Nutritional Information"
msgstr ""
msgstr "Beslenme Bilgileri"
#: .\cookbook\integration\paprika.py:56
msgid "Source"
msgstr ""
msgstr "Kaynak"
#: .\cookbook\integration\recettetek.py:54
#: .\cookbook\integration\recipekeeper.py:70
@@ -354,23 +356,23 @@ msgstr ""
#: .\cookbook\integration\saffron.py:23
msgid "Servings"
msgstr ""
msgstr "Porsiyon"
#: .\cookbook\integration\saffron.py:25
msgid "Waiting time"
msgstr ""
msgstr "Bekleme süresi"
#: .\cookbook\integration\saffron.py:27
msgid "Preparation Time"
msgstr ""
msgstr "Hazırlık Süresi"
#: .\cookbook\integration\saffron.py:29 .\cookbook\templates\index.html:7
msgid "Cookbook"
msgstr ""
msgstr "Yemek kitabı"
#: .\cookbook\integration\saffron.py:31
msgid "Section"
msgstr ""
msgstr "Bölüm"
#: .\cookbook\management\commands\fix_duplicate_properties.py:15
msgid "Fixes foods with "
@@ -383,6 +385,8 @@ msgstr ""
#: .\cookbook\management\commands\rebuildindex.py:18
msgid "Only Postgresql databases use full text search, no index to rebuild"
msgstr ""
"Yalnızca Postgresql veritabanları tam metin araması kullanır, yeniden "
"oluşturulacak dizin yoktur"
#: .\cookbook\management\commands\rebuildindex.py:29
msgid "Recipe index rebuild complete."

View File

@@ -8,17 +8,17 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
"PO-Revision-Date: 2023-04-12 11:55+0000\n"
"Last-Translator: noxonad <noxonad@proton.me>\n"
"PO-Revision-Date: 2025-01-16 18:58+0000\n"
"Last-Translator: Anton Shevtsov <ashevtsovs@gmail.com>\n"
"Language-Team: Ukrainian <http://translate.tandoor.dev/projects/tandoor/"
"recipes-backend/uk/>\n"
"Language: uk\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 4.15\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 5.8.4\n"
#: .\cookbook\forms.py:45
msgid ""
@@ -32,51 +32,55 @@ msgstr ""
#: .\cookbook\forms.py:62 .\cookbook\forms.py:246 .\cookbook\views\lists.py:103
msgid "Keywords"
msgstr ""
msgstr "Ключові слова"
#: .\cookbook\forms.py:62
msgid "Preparation time in minutes"
msgstr ""
msgstr "Час приготування у хвилинах"
#: .\cookbook\forms.py:62
msgid "Waiting time (cooking/baking) in minutes"
msgstr ""
msgstr "Час очікування (варіння/випічка) у хвилинах"
#: .\cookbook\forms.py:63 .\cookbook\forms.py:222 .\cookbook\forms.py:246
msgid "Path"
msgstr ""
msgstr "Шлях"
#: .\cookbook\forms.py:63
msgid "Storage UID"
msgstr ""
msgstr "UID сховища"
#: .\cookbook\forms.py:93
msgid "Default"
msgstr ""
msgstr "За замовчуванням"
#: .\cookbook\forms.py:121
msgid ""
"To prevent duplicates recipes with the same name as existing ones are "
"ignored. Check this box to import everything."
msgstr ""
"Щоб запобігти дублюванням, рецепти з назвами, що вже існують, "
"ігноруватимуться. Установіть цей прапорець, щоб імпортувати все."
#: .\cookbook\forms.py:143
msgid "Add your comment: "
msgstr ""
msgstr "Додайте ваш коментар: "
#: .\cookbook\forms.py:151
msgid "Leave empty for dropbox and enter app password for nextcloud."
msgstr ""
msgstr "Залиште порожнім для dropbox і введіть api ключі для nextcloud."
#: .\cookbook\forms.py:154
msgid "Leave empty for nextcloud and enter api token for dropbox."
msgstr ""
msgstr "Залиште порожнім для nextcloud і введіть api ключі для dropbox."
#: .\cookbook\forms.py:160
msgid ""
"Leave empty for dropbox and enter only base url for nextcloud (<code>/remote."
"php/webdav/</code> is added automatically)"
msgstr ""
"Залиште порожнім для dropbox і введіть лише базовий url для nextcloud "
"(<code>/remote.php/webdav/</code> буде додано автоматично)"
#: .\cookbook\forms.py:188
msgid ""
@@ -937,13 +941,13 @@ msgstr ""
#: .\cookbook\templates\ingredient_editor.html:7
#: .\cookbook\templates\ingredient_editor.html:13
msgid "Ingredient Editor"
msgstr ""
msgstr "Редактор Інгредієнтів"
#: .\cookbook\templates\base.html:275
#: .\cookbook\templates\export_response.html:7
#: .\cookbook\templates\test2.html:14 .\cookbook\templates\test2.html:20
msgid "Export"
msgstr ""
msgstr "Експорт"
#: .\cookbook\templates\base.html:287
msgid "Properties"

View File

@@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
"PO-Revision-Date: 2024-08-27 07:58+0000\n"
"Last-Translator: Known Rabbit <opensource@rabit.pw>\n"
"PO-Revision-Date: 2024-11-04 10:29+0000\n"
"Last-Translator: Johnny Ip <ip.iohnny@gmail.com>\n"
"Language-Team: Chinese (Simplified) <http://translate.tandoor.dev/projects/"
"tandoor/recipes-backend/zh_Hans/>\n"
"Language: zh_CN\n"
@@ -1988,9 +1988,11 @@ msgid ""
" your installation.\n"
" "
msgstr ""
"<b>不推荐</b> 使用 gunicorn/python 提供媒体文件\n"
" 请按照 <a href=\"https://github.com/vabene1111/recipes/releases/"
"tag/0.8.1\">这里</a> 描述的步骤操作更新安装。\n"
"<b>不推荐</b> 使用 gunicorn/python 提供媒体文件\n"
" 请按照\n"
" <a href=\"https://github.com/vabene1111/recipes/releases/tag/0.8."
"1\">这里</a> 描述的步骤\n"
" 操作更新安装。\n"
" "
#: .\cookbook\templates\system.html:55 .\cookbook\templates\system.html:70

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,24 @@
# Generated by Django 4.2.18 on 2025-03-14 10:50
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('cookbook', '0219_connectorconfig_supports_description_field'),
]
operations = [
migrations.AddField(
model_name='shoppinglistrecipe',
name='created_by',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
),
migrations.AddField(
model_name='shoppinglistrecipe',
name='space',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='cookbook.space'),
),
]

View File

@@ -0,0 +1,42 @@
# Generated by Django 4.2.18 on 2025-03-14 10:50
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
from django.db.models import F, Count
from django_scopes import scopes_disabled
def add_space_and_owner_to_shopping_list_recipe(apps, schema_editor):
print('migrating shopping list recipe space attribute, this might take a while ...')
with scopes_disabled():
ShoppingListRecipe = apps.get_model('cookbook', 'ShoppingListRecipe')
# delete all shopping list recipes that do not have entries as those are of no use anyway
ShoppingListRecipe.objects.annotate(entry_count=Count('entries')).filter(entry_count__lte=0).delete()
shopping_list_recipes = ShoppingListRecipe.objects.all().prefetch_related('entries')
update_list = []
for slr in shopping_list_recipes:
if entry := slr.entries.first():
if entry.space and entry.created_by:
slr.space = entry.space
slr.created_by = entry.created_by
update_list.append(slr)
else:
print(slr, 'missing data on entry')
else:
print(slr, 'missing entry')
ShoppingListRecipe.objects.bulk_update(update_list, ['space', 'created_by'], batch_size=500)
class Migration(migrations.Migration):
dependencies = [
('cookbook', '0220_shoppinglistrecipe_created_by_and_more'),
]
operations = [
migrations.RunPython(add_space_and_owner_to_shopping_list_recipe),
]

View File

@@ -0,0 +1,26 @@
# Generated by Django 4.2.18 on 2025-03-14 12:41
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('cookbook', '0221_migrate_shoppinglistrecipe_space_created_by'),
]
operations = [
migrations.AlterField(
model_name='shoppinglistrecipe',
name='created_by',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
),
migrations.AlterField(
model_name='shoppinglistrecipe',
name='space',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='cookbook.space'),
),
]

View File

@@ -1179,31 +1179,18 @@ class MealPlan(ExportModelOperationsMixin('meal_plan'), models.Model, Permission
class ShoppingListRecipe(ExportModelOperationsMixin('shopping_list_recipe'), models.Model, PermissionModelMixin):
name = models.CharField(max_length=32, blank=True, default='')
recipe = models.ForeignKey(Recipe, on_delete=models.CASCADE, null=True, blank=True) # TODO make required after old shoppinglist deprecated
servings = models.DecimalField(default=1, max_digits=8, decimal_places=4)
recipe = models.ForeignKey(Recipe, on_delete=models.CASCADE, null=True, blank=True)
mealplan = models.ForeignKey(MealPlan, on_delete=models.CASCADE, null=True, blank=True)
objects = ScopedManager(space='recipe__space')
created_by = models.ForeignKey(User, on_delete=models.CASCADE)
space = models.ForeignKey(Space, on_delete=models.CASCADE)
@staticmethod
def get_space_key():
return 'recipe', 'space'
def get_space(self):
return self.recipe.space
objects = ScopedManager(space='space')
def __str__(self):
return f'Shopping list recipe {self.id} - {self.recipe}'
def get_owner(self):
try:
if not self.entries.exists():
return 'orphan'
else:
return getattr(self.entries.first(), 'created_by', None)
except AttributeError:
return None
class ShoppingListEntry(ExportModelOperationsMixin('shopping_list_entry'), models.Model, PermissionModelMixin):
list_recipe = models.ForeignKey(ShoppingListRecipe, on_delete=models.CASCADE, null=True, blank=True, related_name='entries')

View File

@@ -12,21 +12,25 @@ class Local(Provider):
@staticmethod
def import_all(monitor):
if '/etc/' in monitor.path or '/root/' in monitor.path or '/mediafiles/' in monitor.path or '/usr/' in monitor.path:
return False
files = [f for f in listdir(monitor.path) if isfile(join(monitor.path, f))]
import_count = 0
for file in files:
path = monitor.path + '/' + file
if not Recipe.objects.filter(file_path__iexact=path, space=monitor.space).exists() and not RecipeImport.objects.filter(file_path=path, space=monitor.space).exists():
name = os.path.splitext(file)[0]
new_recipe = RecipeImport(
name=name,
file_path=path,
storage=monitor.storage,
space=monitor.space,
)
new_recipe.save()
import_count += 1
if file.endswith('.pdf') or file.endswith('.png') or file.endswith('.jpg') or file.endswith('.jpeg') or file.endswith('.gif'):
path = monitor.path + '/' + file
if not Recipe.objects.filter(file_path__iexact=path, space=monitor.space).exists() and not RecipeImport.objects.filter(file_path=path, space=monitor.space).exists():
name = os.path.splitext(file)[0]
new_recipe = RecipeImport(
name=name,
file_path=path,
storage=monitor.storage,
space=monitor.space,
)
new_recipe.save()
import_count += 1
log_entry = SyncLog(
status='SUCCESS',

View File

@@ -22,6 +22,7 @@ from rest_framework.fields import IntegerField
from cookbook.helper.CustomStorageClass import CachedS3Boto3Storage
from cookbook.helper.HelperFunctions import str2bool
from cookbook.helper.image_processing import is_file_type_allowed
from cookbook.helper.permission_helper import above_space_limit
from cookbook.helper.property_helper import FoodPropertyHelper
from cookbook.helper.shopping_helper import RecipeShoppingEditor
@@ -233,12 +234,17 @@ class UserFileSerializer(serializers.ModelSerializer):
raise ValidationError(_('You have reached your file upload limit.'))
def create(self, validated_data):
if not is_file_type_allowed(validated_data['file'].name):
return None
self.check_file_limit(validated_data)
validated_data['created_by'] = self.context['request'].user
validated_data['space'] = self.context['request'].space
return super().create(validated_data)
def update(self, instance, validated_data):
if not is_file_type_allowed(validated_data['file'].name):
return None
self.check_file_limit(validated_data)
return super().update(instance, validated_data)
@@ -958,6 +964,16 @@ class RecipeImageSerializer(WritableNestedModelSerializer):
image = serializers.ImageField(required=False, allow_null=True)
image_url = serializers.CharField(max_length=4096, required=False, allow_null=True)
def create(self, validated_data):
if 'image' in validated_data and not is_file_type_allowed(validated_data['image'].name, image_only=True):
return None
return super().create( validated_data)
def update(self, instance, validated_data):
if 'image' in validated_data and not is_file_type_allowed(validated_data['image'].name, image_only=True):
return None
return super().update(instance, validated_data)
class Meta:
model = Recipe
fields = ['image', 'image_url', ]
@@ -1077,6 +1093,7 @@ class ShoppingListRecipeSerializer(serializers.ModelSerializer):
mealplan_from_date = serializers.ReadOnlyField(source='mealplan.from_date')
mealplan_type = serializers.ReadOnlyField(source='mealplan.meal_type.name')
servings = CustomDecimalField()
created_by = UserSerializer(read_only=True)
def get_name(self, obj):
if not isinstance(value := obj.servings, Decimal):
@@ -1090,6 +1107,11 @@ class ShoppingListRecipeSerializer(serializers.ModelSerializer):
or obj.recipe.name
) + f' ({value:.2g})'
def create(self, validated_data):
validated_data['space'] = self.context['request'].space
validated_data['created_by'] = self.context['request'].user
return super().create(validated_data)
def update(self, instance, validated_data):
# TODO remove once old shopping list
if 'servings' in validated_data and self.context.get('view', None).__class__.__name__ != 'ShoppingListViewSet':
@@ -1100,8 +1122,8 @@ class ShoppingListRecipeSerializer(serializers.ModelSerializer):
class Meta:
model = ShoppingListRecipe
fields = ('id', 'recipe_name', 'name', 'recipe', 'mealplan', 'servings', 'mealplan_note', 'mealplan_from_date',
'mealplan_type')
read_only_fields = ('id',)
'mealplan_type', 'created_by')
read_only_fields = ('id', 'created_by',)
class ShoppingListEntrySerializer(WritableNestedModelSerializer):

View File

@@ -1,6 +1,5 @@
{% extends "base.html" %}
{% load crispy_forms_filters %}
{% load crispy_forms_filters %}
{% load i18n %}
{% block title %}{% trans 'Register' %}{% endblock %}

View File

@@ -16,7 +16,6 @@
{% if redirect_field_value %}
<input type="hidden" name="{{ redirect_field_name }}" value="{{ redirect_field_value }}"/>
{% endif %}
<div class="form-group">
{{ form.username |as_crispy_field }}
</div>
@@ -30,7 +29,7 @@
<div class="form-group">
{{ form.terms |as_crispy_field }}
<small>
{% trans 'I accept the follwoing' %}
{% trans 'I accept the following' %}
{% if TERMS_URL != '' %}
<a href="{{ TERMS_URL }}" target="_blank"
rel="noreferrer nofollow">{% trans 'Terms and Conditions' %}</a>

View File

@@ -12,9 +12,9 @@
<h1>{% trans 'System' %}</h1>
{% blocktrans %}
Django Recipes is an open source free software application. It can be found on
<a href="https://github.com/vabene1111/recipes">GitHub</a>.
Changelogs can be found <a href="https://github.com/vabene1111/recipes/releases">here</a>.
Tandoor Recipes is an open source free software application. It can be found on
<a href="https://github.com/TandoorRecipes/recipes">GitHub</a>.
Changelogs can be found <a href="https://github.com/TandoorRecipes/recipes/releases">here</a>.
{% endblocktrans %}
<h3 class="mt-5">{% trans 'System Information' %}</h3>
@@ -82,9 +82,9 @@
{% else %}
{% trans 'Everything is fine!' %}
{% endif %}
<h4 class="mt-3">{% trans 'Allowed Hosts' %} <span
class="badge badge-{% if '*' in allowed_hosts %}warning{% else %}success{% endif %}">{% if '*' in allowed_hosts %}
class="badge badge-{% if '*' in allowed_hosts %}warning{% else %}success{% endif %}">{% if '*' in allowed_hosts %}
{% trans 'Warning' %}{% else %}{% trans 'Ok' %}{% endif %}</span></h4>
{% if debug %}
{% blocktrans %}
@@ -175,7 +175,34 @@
{#{% for orphan in orphans %}{{ orphan }}#}
{#{% endfor %}#}
{# </textarea>#}
{% if api_space_stats %}
<h4 class="mt-3">API Stats</h4>
<h6 >Space Stats</h6>
<table class="table table-bordered table-striped">
{% for r in api_space_stats %}
<tr>
{% for c in r %}
<td>
{{ c }}
</td>
{% endfor %}
</tr>
{% endfor %}
</table>
<h6 >Endpoint Stats</h6>
<table class="table table-bordered table-striped">
{% for r in api_stats %}
<tr>
{% for c in r %}
<td>
{{ c }}
</td>
{% endfor %}
</tr>
{% endfor %}
</table>
{% endif %}
<h4 class="mt-3">Debug</h4>
<textarea class="form-control" rows="20">
Gunicorn Media: {{ gunicorn_media }}

View File

@@ -12,7 +12,7 @@ DETAIL_URL = 'api:shoppinglistrecipe-detail'
@pytest.fixture()
def obj_1(space_1, u1_s1, recipe_1_s1):
r = ShoppingListRecipe.objects.create(recipe=recipe_1_s1, servings=1)
r = ShoppingListRecipe.objects.create(recipe=recipe_1_s1, servings=1, space=space_1, created_by=auth.get_user(u1_s1))
for ing in r.recipe.steps.first().ingredients.all():
ShoppingListEntry.objects.create(list_recipe=r, ingredient=ing, food=ing.food, unit=ing.unit, amount=ing.amount, created_by=auth.get_user(u1_s1), space=space_1)
return r

View File

@@ -31,12 +31,12 @@ def test_edit_storage(storage_obj, a1_s1, a1_s2):
}
)
storage_obj.refresh_from_db()
assert r.status_code == 200
r_messages = [m for m in get_messages(r.wsgi_request)]
assert not any(m.level > messages.SUCCESS for m in r_messages)
assert r.status_code == 302
#r_messages = [m for m in get_messages(r.wsgi_request)]
#assert not any(m.level > messages.SUCCESS for m in r_messages)
assert storage_obj.password == '1234_pw'
assert storage_obj.token == '1234_token'
#assert storage_obj.password == '1234_pw'
#assert storage_obj.token == '1234_token'
r = a1_s2.post(
reverse('edit_storage', args={storage_obj.pk}),
@@ -54,7 +54,7 @@ def test_edit_storage(storage_obj, a1_s1, a1_s2):
['a_u', 302],
['g1_s1', 302],
['u1_s1', 302],
['a1_s1', 200],
['a1_s1', 302],
['g1_s2', 302],
['u1_s2', 302],
['a1_s2', 404],

View File

@@ -12,6 +12,7 @@ from json import JSONDecodeError
from urllib.parse import unquote
from zipfile import ZipFile
import redis
import requests
from PIL import UnidentifiedImageError
from annoying.decorators import ajax_request
@@ -30,6 +31,7 @@ from django.http import FileResponse, HttpResponse, JsonResponse
from django.shortcuts import get_object_or_404, redirect
from django.urls import reverse
from django.utils import timezone
from django.utils.datetime_safe import date
from django.utils.translation import gettext as _
from django_scopes import scopes_disabled
from icalendar import Calendar, Event
@@ -101,6 +103,49 @@ from recipes import settings
from recipes.settings import DRF_THROTTLE_RECIPE_URL_IMPORT, FDC_API_KEY
class LoggingMixin(object):
"""
logs request counts to redis cache total/per user/
"""
def initial(self, request, *args, **kwargs):
super(LoggingMixin, self).initial(request, *args, **kwargs)
if settings.REDIS_HOST:
try:
d = date.today().isoformat()
space = request.space
endpoint = request.resolver_match.url_name
r = redis.StrictRedis(
host=settings.REDIS_HOST,
port=settings.REDIS_PORT,
username=settings.REDIS_USERNAME,
password=settings.REDIS_PASSWORD,
db=settings.REDIS_DATABASES['STATS'],
)
pipe = r.pipeline()
# Global and daily tallies for all URLs.
pipe.incr('api:request-count')
pipe.incr(f'api:request-count:{d}')
# Use a sorted set to store the user stats, with the score representing
# the number of queries the user made total or on a given day.
pipe.zincrby(f'api:space-request-count', 1, space.pk)
pipe.zincrby(f'api:space-request-count:{d}', 1, space.pk)
# Use a sorted set to store all the endpoints with score representing
# the number of queries the endpoint received total or on a given day.
pipe.zincrby(f'api:endpoint-request-count', 1, endpoint)
pipe.zincrby(f'api:endpoint-request-count:{d}', 1, endpoint)
pipe.execute()
except:
pass
class StandardFilterMixin(ViewSetMixin):
def get_queryset(self):
@@ -184,9 +229,9 @@ class FuzzyFilterMixin(ViewSetMixin, ExtendedRecipeMixin):
if query is not None and query not in ["''", '']:
if fuzzy and (settings.DATABASES['default']['ENGINE'] == 'django.db.backends.postgresql'):
if self.request.user.is_authenticated and any(
[self.model.__name__.lower() in x for x in self.request.user.searchpreference.unaccent.values_list('field', flat=True)]
):
self.queryset = self.queryset.annotate(trigram=TrigramSimilarity('name__unaccent', query))
[self.model.__name__.lower() in x for x in self.request.user.searchpreference.unaccent.values_list('field', flat=True)]
):
self.queryset = self.queryset.annotate(trigram=TrigramSimilarity('name__unaccent', query))
else:
self.queryset = self.queryset.annotate(trigram=TrigramSimilarity('name', query))
self.queryset = self.queryset.order_by('-trigram')
@@ -370,7 +415,7 @@ class TreeMixin(MergeMixin, FuzzyFilterMixin, ExtendedRecipeMixin):
return Response(content, status=status.HTTP_400_BAD_REQUEST)
class UserViewSet(viewsets.ModelViewSet):
class UserViewSet(LoggingMixin, viewsets.ModelViewSet):
"""
list:
optional parameters
@@ -394,14 +439,14 @@ class UserViewSet(viewsets.ModelViewSet):
return queryset
class GroupViewSet(viewsets.ModelViewSet):
class GroupViewSet(LoggingMixin, viewsets.ModelViewSet):
queryset = Group.objects.all()
serializer_class = GroupSerializer
permission_classes = [CustomIsAdmin & CustomTokenHasReadWriteScope]
http_method_names = ['get', ]
class SpaceViewSet(viewsets.ModelViewSet):
class SpaceViewSet(LoggingMixin, viewsets.ModelViewSet):
queryset = Space.objects
serializer_class = SpaceSerializer
permission_classes = [IsReadOnlyDRF & CustomIsGuest | CustomIsOwner & CustomIsAdmin & CustomTokenHasReadWriteScope]
@@ -411,7 +456,7 @@ class SpaceViewSet(viewsets.ModelViewSet):
return self.queryset.filter(id=self.request.space.id)
class UserSpaceViewSet(viewsets.ModelViewSet):
class UserSpaceViewSet(LoggingMixin, viewsets.ModelViewSet):
queryset = UserSpace.objects
serializer_class = UserSpaceSerializer
permission_classes = [(CustomIsSpaceOwner | CustomIsOwnerReadOnly) & CustomTokenHasReadWriteScope]
@@ -434,7 +479,7 @@ class UserSpaceViewSet(viewsets.ModelViewSet):
return self.queryset.filter(user=self.request.user, space=self.request.space)
class UserPreferenceViewSet(viewsets.ModelViewSet):
class UserPreferenceViewSet(LoggingMixin, viewsets.ModelViewSet):
queryset = UserPreference.objects
serializer_class = UserPreferenceSerializer
permission_classes = [CustomIsOwner & CustomTokenHasReadWriteScope]
@@ -445,7 +490,7 @@ class UserPreferenceViewSet(viewsets.ModelViewSet):
return self.queryset.filter(user=self.request.user)
class StorageViewSet(viewsets.ModelViewSet):
class StorageViewSet(LoggingMixin, viewsets.ModelViewSet):
# TODO handle delete protect error and adjust test
queryset = Storage.objects
serializer_class = StorageSerializer
@@ -455,7 +500,7 @@ class StorageViewSet(viewsets.ModelViewSet):
return self.queryset.filter(space=self.request.space)
class ConnectorConfigConfigViewSet(viewsets.ModelViewSet):
class ConnectorConfigConfigViewSet(LoggingMixin, viewsets.ModelViewSet):
queryset = ConnectorConfig.objects
serializer_class = ConnectorConfigConfigSerializer
permission_classes = [CustomIsAdmin & CustomTokenHasReadWriteScope]
@@ -464,7 +509,7 @@ class ConnectorConfigConfigViewSet(viewsets.ModelViewSet):
return self.queryset.filter(space=self.request.space)
class SyncViewSet(viewsets.ModelViewSet):
class SyncViewSet(LoggingMixin, viewsets.ModelViewSet):
queryset = Sync.objects
serializer_class = SyncSerializer
permission_classes = [CustomIsAdmin & CustomTokenHasReadWriteScope]
@@ -473,7 +518,7 @@ class SyncViewSet(viewsets.ModelViewSet):
return self.queryset.filter(space=self.request.space)
class SyncLogViewSet(viewsets.ReadOnlyModelViewSet):
class SyncLogViewSet(LoggingMixin, viewsets.ReadOnlyModelViewSet):
queryset = SyncLog.objects
serializer_class = SyncLogSerializer
permission_classes = [CustomIsAdmin & CustomTokenHasReadWriteScope]
@@ -483,7 +528,7 @@ class SyncLogViewSet(viewsets.ReadOnlyModelViewSet):
return self.queryset.filter(sync__space=self.request.space)
class SupermarketViewSet(viewsets.ModelViewSet, StandardFilterMixin):
class SupermarketViewSet(LoggingMixin, viewsets.ModelViewSet, StandardFilterMixin):
schema = FilterSchema()
queryset = Supermarket.objects
serializer_class = SupermarketSerializer
@@ -494,7 +539,7 @@ class SupermarketViewSet(viewsets.ModelViewSet, StandardFilterMixin):
return super().get_queryset()
class SupermarketCategoryViewSet(viewsets.ModelViewSet, FuzzyFilterMixin, MergeMixin):
class SupermarketCategoryViewSet(LoggingMixin, viewsets.ModelViewSet, FuzzyFilterMixin, MergeMixin):
queryset = SupermarketCategory.objects
model = SupermarketCategory
serializer_class = SupermarketCategorySerializer
@@ -505,7 +550,7 @@ class SupermarketCategoryViewSet(viewsets.ModelViewSet, FuzzyFilterMixin, MergeM
return super().get_queryset()
class SupermarketCategoryRelationViewSet(viewsets.ModelViewSet, StandardFilterMixin):
class SupermarketCategoryRelationViewSet(LoggingMixin, viewsets.ModelViewSet, StandardFilterMixin):
queryset = SupermarketCategoryRelation.objects
serializer_class = SupermarketCategoryRelationSerializer
permission_classes = [CustomIsUser & CustomTokenHasReadWriteScope]
@@ -516,7 +561,7 @@ class SupermarketCategoryRelationViewSet(viewsets.ModelViewSet, StandardFilterMi
return super().get_queryset()
class KeywordViewSet(viewsets.ModelViewSet, TreeMixin):
class KeywordViewSet(LoggingMixin, viewsets.ModelViewSet, TreeMixin):
queryset = Keyword.objects
model = Keyword
serializer_class = KeywordSerializer
@@ -524,7 +569,7 @@ class KeywordViewSet(viewsets.ModelViewSet, TreeMixin):
pagination_class = DefaultPagination
class UnitViewSet(viewsets.ModelViewSet, MergeMixin, FuzzyFilterMixin):
class UnitViewSet(LoggingMixin, viewsets.ModelViewSet, MergeMixin, FuzzyFilterMixin):
queryset = Unit.objects
model = Unit
serializer_class = UnitSerializer
@@ -532,7 +577,7 @@ class UnitViewSet(viewsets.ModelViewSet, MergeMixin, FuzzyFilterMixin):
pagination_class = DefaultPagination
class FoodInheritFieldViewSet(viewsets.ReadOnlyModelViewSet):
class FoodInheritFieldViewSet(LoggingMixin, viewsets.ReadOnlyModelViewSet):
queryset = FoodInheritField.objects
serializer_class = FoodInheritFieldSerializer
permission_classes = [CustomIsUser & CustomTokenHasReadWriteScope]
@@ -543,7 +588,7 @@ class FoodInheritFieldViewSet(viewsets.ReadOnlyModelViewSet):
return super().get_queryset()
class FoodViewSet(viewsets.ModelViewSet, TreeMixin):
class FoodViewSet(LoggingMixin, viewsets.ModelViewSet, TreeMixin):
queryset = Food.objects
model = Food
serializer_class = FoodSerializer
@@ -610,8 +655,8 @@ class FoodViewSet(viewsets.ModelViewSet, TreeMixin):
return JsonResponse(
{
'msg':
'API Key Rate Limit reached/exceeded, see https://api.data.gov/docs/rate-limits/ for more information. \
Configure your key in Tandoor using environment FDC_API_KEY variable.'
'API Key Rate Limit reached/exceeded, see https://api.data.gov/docs/rate-limits/ for more information. \
Configure your key in Tandoor using environment FDC_API_KEY variable.'
},
status=429,
json_dumps_params={'indent': 4})
@@ -680,7 +725,7 @@ class FoodViewSet(viewsets.ModelViewSet, TreeMixin):
return Response(content, status=status.HTTP_403_FORBIDDEN)
class RecipeBookViewSet(viewsets.ModelViewSet, StandardFilterMixin):
class RecipeBookViewSet(LoggingMixin, viewsets.ModelViewSet, StandardFilterMixin):
queryset = RecipeBook.objects
serializer_class = RecipeBookSerializer
permission_classes = [(CustomIsOwner | CustomIsShared) & CustomTokenHasReadWriteScope]
@@ -698,7 +743,7 @@ class RecipeBookViewSet(viewsets.ModelViewSet, StandardFilterMixin):
return super().get_queryset()
class RecipeBookEntryViewSet(viewsets.ModelViewSet, viewsets.GenericViewSet):
class RecipeBookEntryViewSet(LoggingMixin, viewsets.ModelViewSet, viewsets.GenericViewSet):
"""
list:
optional parameters
@@ -724,7 +769,7 @@ class RecipeBookEntryViewSet(viewsets.ModelViewSet, viewsets.GenericViewSet):
return queryset
class MealPlanViewSet(viewsets.ModelViewSet):
class MealPlanViewSet(LoggingMixin, viewsets.ModelViewSet):
"""
list:
optional parameters
@@ -762,7 +807,7 @@ class MealPlanViewSet(viewsets.ModelViewSet):
return queryset
class AutoPlanViewSet(viewsets.ViewSet):
class AutoPlanViewSet(LoggingMixin, viewsets.ViewSet):
def create(self, request):
serializer = AutoMealPlanSerializer(data=request.data)
@@ -824,7 +869,7 @@ class AutoPlanViewSet(viewsets.ViewSet):
return Response(serializer.errors, 400)
class MealTypeViewSet(viewsets.ModelViewSet):
class MealTypeViewSet(LoggingMixin, viewsets.ModelViewSet):
"""
returns list of meal types created by the
requesting user ordered by the order field.
@@ -838,7 +883,7 @@ class MealTypeViewSet(viewsets.ModelViewSet):
return queryset
class IngredientViewSet(viewsets.ModelViewSet):
class IngredientViewSet(LoggingMixin, viewsets.ModelViewSet):
queryset = Ingredient.objects
serializer_class = IngredientSerializer
permission_classes = [CustomIsUser & CustomTokenHasReadWriteScope]
@@ -862,7 +907,7 @@ class IngredientViewSet(viewsets.ModelViewSet):
return queryset.select_related('food')
class StepViewSet(viewsets.ModelViewSet):
class StepViewSet(LoggingMixin, viewsets.ModelViewSet):
queryset = Step.objects
serializer_class = StepSerializer
permission_classes = [CustomIsUser & CustomTokenHasReadWriteScope]
@@ -897,7 +942,7 @@ class RecipePagination(PageNumberPagination):
return Response(OrderedDict([('count', self.page.paginator.count), ('next', self.get_next_link()), ('previous', self.get_previous_link()), ('results', data), ]))
class RecipeViewSet(viewsets.ModelViewSet):
class RecipeViewSet(LoggingMixin, viewsets.ModelViewSet):
queryset = Recipe.objects
serializer_class = RecipeSerializer
# TODO split read and write permission for meal plan guest
@@ -1064,7 +1109,7 @@ class RecipeViewSet(viewsets.ModelViewSet):
return Response(self.serializer_class(qs, many=True).data)
class UnitConversionViewSet(viewsets.ModelViewSet):
class UnitConversionViewSet(LoggingMixin, viewsets.ModelViewSet):
queryset = UnitConversion.objects
serializer_class = UnitConversionSerializer
permission_classes = [CustomIsUser & CustomTokenHasReadWriteScope]
@@ -1081,7 +1126,7 @@ class UnitConversionViewSet(viewsets.ModelViewSet):
return self.queryset.filter(space=self.request.space)
class PropertyTypeViewSet(viewsets.ModelViewSet):
class PropertyTypeViewSet(LoggingMixin, viewsets.ModelViewSet):
queryset = PropertyType.objects
serializer_class = PropertyTypeSerializer
permission_classes = [CustomIsUser & CustomTokenHasReadWriteScope]
@@ -1090,7 +1135,7 @@ class PropertyTypeViewSet(viewsets.ModelViewSet):
return self.queryset.filter(space=self.request.space)
class PropertyViewSet(viewsets.ModelViewSet):
class PropertyViewSet(LoggingMixin, viewsets.ModelViewSet):
queryset = Property.objects
serializer_class = PropertySerializer
permission_classes = [CustomIsUser & CustomTokenHasReadWriteScope]
@@ -1099,7 +1144,7 @@ class PropertyViewSet(viewsets.ModelViewSet):
return self.queryset.filter(space=self.request.space)
class ShoppingListRecipeViewSet(viewsets.ModelViewSet):
class ShoppingListRecipeViewSet(LoggingMixin, viewsets.ModelViewSet):
queryset = ShoppingListRecipe.objects
serializer_class = ShoppingListRecipeSerializer
permission_classes = [(CustomIsOwner | CustomIsShared) & CustomTokenHasReadWriteScope]
@@ -1110,10 +1155,10 @@ class ShoppingListRecipeViewSet(viewsets.ModelViewSet):
Q(entries__isnull=True)
| Q(entries__created_by=self.request.user)
| Q(entries__created_by__in=list(self.request.user.get_shopping_share()))
).distinct().all()
).distinct().all()
class ShoppingListEntryViewSet(viewsets.ModelViewSet):
class ShoppingListEntryViewSet(LoggingMixin, viewsets.ModelViewSet):
queryset = ShoppingListEntry.objects
serializer_class = ShoppingListEntrySerializer
permission_classes = [(CustomIsOwner | CustomIsShared) & CustomTokenHasReadWriteScope]
@@ -1123,7 +1168,7 @@ class ShoppingListEntryViewSet(viewsets.ModelViewSet):
name='checked',
description=_('Filter shopping list entries on checked. [''true'', ''false'', ''both'', ''<b>recent</b>'']<br> \
- ''recent'' includes unchecked items and recently completed items.')
),
),
QueryParam(name='supermarket', description=_('Returns the shopping list entries sorted by supermarket category order.'), qtype='integer'),
]
schema = QueryParamAutoSchema()
@@ -1171,7 +1216,7 @@ class ShoppingListEntryViewSet(viewsets.ModelViewSet):
print(serializer.validated_data)
bulk_entries = ShoppingListEntry.objects.filter(
Q(created_by=self.request.user) | Q(created_by__in=list(self.request.user.get_shopping_share()))
).filter(space=request.space, id__in=serializer.validated_data['ids'])
).filter(space=request.space, id__in=serializer.validated_data['ids'])
bulk_entries.update(checked=(checked := serializer.validated_data['checked']), updated_at=timezone.now(), )
# update the onhand for food if shopping_add_onhand is True
@@ -1189,7 +1234,7 @@ class ShoppingListEntryViewSet(viewsets.ModelViewSet):
return Response(serializer.errors, 400)
class ViewLogViewSet(viewsets.ModelViewSet):
class ViewLogViewSet(LoggingMixin, viewsets.ModelViewSet):
queryset = ViewLog.objects
serializer_class = ViewLogSerializer
permission_classes = [CustomIsOwner & CustomTokenHasReadWriteScope]
@@ -1200,7 +1245,7 @@ class ViewLogViewSet(viewsets.ModelViewSet):
return self.queryset.filter(created_by=self.request.user).filter(space=self.request.space)
class CookLogViewSet(viewsets.ModelViewSet):
class CookLogViewSet(LoggingMixin, viewsets.ModelViewSet):
queryset = CookLog.objects
serializer_class = CookLogSerializer
permission_classes = [CustomIsOwner & CustomTokenHasReadWriteScope]
@@ -1215,7 +1260,7 @@ class CookLogViewSet(viewsets.ModelViewSet):
return self.queryset.filter(space=self.request.space)
class ImportLogViewSet(viewsets.ModelViewSet):
class ImportLogViewSet(LoggingMixin, viewsets.ModelViewSet):
queryset = ImportLog.objects
serializer_class = ImportLogSerializer
permission_classes = [CustomIsUser & CustomTokenHasReadWriteScope]
@@ -1225,7 +1270,7 @@ class ImportLogViewSet(viewsets.ModelViewSet):
return self.queryset.filter(space=self.request.space)
class ExportLogViewSet(viewsets.ModelViewSet):
class ExportLogViewSet(LoggingMixin, viewsets.ModelViewSet):
queryset = ExportLog.objects
serializer_class = ExportLogSerializer
permission_classes = [CustomIsUser & CustomTokenHasReadWriteScope]
@@ -1235,7 +1280,7 @@ class ExportLogViewSet(viewsets.ModelViewSet):
return self.queryset.filter(space=self.request.space)
class BookmarkletImportViewSet(viewsets.ModelViewSet):
class BookmarkletImportViewSet(LoggingMixin, viewsets.ModelViewSet):
queryset = BookmarkletImport.objects
serializer_class = BookmarkletImportSerializer
permission_classes = [CustomIsUser & CustomTokenHasScope]
@@ -1250,7 +1295,7 @@ class BookmarkletImportViewSet(viewsets.ModelViewSet):
return self.queryset.filter(space=self.request.space).all()
class UserFileViewSet(viewsets.ModelViewSet, StandardFilterMixin):
class UserFileViewSet(LoggingMixin, viewsets.ModelViewSet, StandardFilterMixin):
schema = FilterSchema()
queryset = UserFile.objects
serializer_class = UserFileSerializer
@@ -1262,7 +1307,7 @@ class UserFileViewSet(viewsets.ModelViewSet, StandardFilterMixin):
return super().get_queryset()
class AutomationViewSet(viewsets.ModelViewSet, StandardFilterMixin):
class AutomationViewSet(LoggingMixin, viewsets.ModelViewSet, StandardFilterMixin):
"""
list:
optional parameters
@@ -1313,7 +1358,7 @@ class AutomationViewSet(viewsets.ModelViewSet, StandardFilterMixin):
return super().get_queryset()
class InviteLinkViewSet(viewsets.ModelViewSet, StandardFilterMixin):
class InviteLinkViewSet(LoggingMixin, viewsets.ModelViewSet, StandardFilterMixin):
queryset = InviteLink.objects
serializer_class = InviteLinkSerializer
permission_classes = [CustomIsSpaceOwner & CustomIsAdmin & CustomTokenHasReadWriteScope]
@@ -1331,7 +1376,7 @@ class InviteLinkViewSet(viewsets.ModelViewSet, StandardFilterMixin):
return None
class CustomFilterViewSet(viewsets.ModelViewSet, StandardFilterMixin):
class CustomFilterViewSet(LoggingMixin, viewsets.ModelViewSet, StandardFilterMixin):
queryset = CustomFilter.objects
serializer_class = CustomFilterSerializer
permission_classes = [CustomIsOwner & CustomTokenHasReadWriteScope]
@@ -1342,7 +1387,7 @@ class CustomFilterViewSet(viewsets.ModelViewSet, StandardFilterMixin):
return super().get_queryset()
class AccessTokenViewSet(viewsets.ModelViewSet):
class AccessTokenViewSet(LoggingMixin, viewsets.ModelViewSet):
queryset = AccessToken.objects
serializer_class = AccessTokenSerializer
permission_classes = [CustomIsOwner & CustomTokenHasReadWriteScope]
@@ -1410,13 +1455,21 @@ class RecipeUrlImportView(APIView):
url = serializer.validated_data.get('url', None)
data = unquote(serializer.validated_data.get('data', None))
duplicate = False
if url:
# Check for existing recipes with provided url
existing_recipe = Recipe.objects.filter(source_url=url).first()
if existing_recipe:
duplicate = True
if not url and not data:
return Response({'error': True, 'msg': _('Nothing to do.')}, status=status.HTTP_400_BAD_REQUEST)
elif url and not data:
if re.match('^(https?://)?(www\\.youtube\\.com|youtu\\.be)/.+$', url):
if validate_import_url(url):
return Response({'recipe_json': get_from_youtube_scraper(url, request), 'recipe_images': [], }, status=status.HTTP_200_OK)
return Response({'recipe_json': get_from_youtube_scraper(url, request), 'recipe_images': [], 'duplicate': duplicate}, status=status.HTTP_200_OK)
if re.match('^(.)*/view/recipe/[0-9]+/[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$', url):
recipe_json = requests.get(
url.replace('/view/recipe/', '/api/recipe/').replace(re.split('/view/recipe/[0-9]+', url)[1], '') + '?share='
@@ -1431,7 +1484,7 @@ class RecipeUrlImportView(APIView):
filetype=pathlib.Path(recipe_json['image']).suffix),
name=f'{uuid.uuid4()}_{recipe.pk}{pathlib.Path(recipe_json["image"]).suffix}')
recipe.save()
return Response({'link': request.build_absolute_uri(reverse('view_recipe', args={recipe.pk}))}, status=status.HTTP_201_CREATED)
return Response({'link': request.build_absolute_uri(reverse('view_recipe', args={recipe.pk})), 'duplicate': duplicate}, status=status.HTTP_201_CREATED)
else:
try:
if validate_import_url(url):
@@ -1466,8 +1519,9 @@ class RecipeUrlImportView(APIView):
return Response({
'recipe_json': helper.get_from_scraper(scrape, request),
'recipe_images': list(dict.fromkeys(get_images_from_soup(scrape.soup, url))),
'duplicate': duplicate
},
status=status.HTTP_200_OK)
status=status.HTTP_200_OK)
else:
return Response({'error': True, 'msg': _('No usable data could be found.')}, status=status.HTTP_400_BAD_REQUEST)
@@ -1678,7 +1732,7 @@ def sync_all(request):
# @schema(AutoSchema()) #TODO add proper schema
@permission_classes([CustomIsUser & CustomTokenHasReadWriteScope])
def share_link(request, pk):
if request.space.allow_sharing and has_group_permission(request.user, ('user', )):
if request.space.allow_sharing and has_group_permission(request.user, ('user',)):
recipe = get_object_or_404(Recipe, pk=pk, space=request.space)
link = ShareLink.objects.create(recipe=recipe, created_by=request.user, space=request.space)
return JsonResponse({'pk': pk, 'share': link.uuid, 'link': request.build_absolute_uri(reverse('view_recipe', args=[pk, link.uuid]))})

View File

@@ -80,7 +80,7 @@ class SyncUpdate(GroupRequiredMixin, UpdateView, SpaceFormMixing):
def edit_storage(request, pk):
instance: Storage = get_object_or_404(Storage, pk=pk, space=request.space)
if not (instance.created_by == request.user or request.user.is_superuser):
if not request.user.is_superuser:
messages.add_message(request, messages.ERROR, _('You cannot edit this storage!'))
return HttpResponseRedirect(reverse('list_storage'))

View File

@@ -31,6 +31,7 @@ from cookbook.integration.recipesage import RecipeSage
from cookbook.integration.rezeptsuitede import Rezeptsuitede
from cookbook.integration.rezkonv import RezKonv
from cookbook.integration.saffron import Saffron
from cookbook.integration.gourmet import Gourmet
from cookbook.models import ExportLog, Recipe
from recipes import settings
@@ -80,6 +81,8 @@ def get_integration(request, export_type):
return Cookmate(request, export_type)
if export_type == ImportExportBase.REZEPTSUITEDE:
return Rezeptsuitede(request, export_type)
if export_type == ImportExportBase.GOURMET:
return Gourmet(request, export_type)
@group_required('user')

View File

@@ -58,10 +58,16 @@ class StorageCreate(GroupRequiredMixin, CreateView):
obj = form.save(commit=False)
obj.created_by = self.request.user
obj.space = self.request.space
obj.save()
if self.request.space.demo or settings.HOSTED:
messages.add_message(self.request, messages.ERROR, _('This feature is not yet available in the hosted version of tandoor!'))
return redirect('index')
if not self.request.user.is_superuser:
messages.add_message(self.request, messages.ERROR, _('This feature is only available for the instance administrator (superuser)'))
return redirect('index')
obj.save()
return HttpResponseRedirect(reverse('edit_storage', kwargs={'pk': obj.pk}))
def get_context_data(self, **kwargs):

View File

@@ -1,9 +1,10 @@
import os
import re
from datetime import datetime
from datetime import datetime, timedelta
from io import StringIO
from uuid import UUID
import redis
from django.apps import apps
from django.conf import settings
from django.contrib import messages
@@ -17,6 +18,7 @@ from django.http import HttpResponseRedirect, JsonResponse
from django.shortcuts import get_object_or_404, redirect, render
from django.urls import reverse, reverse_lazy
from django.utils import timezone
from django.utils.datetime_safe import date
from django.utils.translation import gettext as _
from django_scopes import scopes_disabled
@@ -38,7 +40,8 @@ def index(request):
return HttpResponseRedirect(reverse_lazy('view_search'))
try:
page_map = {UserPreference.SEARCH: reverse_lazy('view_search'), UserPreference.PLAN: reverse_lazy('view_plan'), UserPreference.BOOKS: reverse_lazy('view_books'), UserPreference.SHOPPING: reverse_lazy('view_shopping'),}
page_map = {UserPreference.SEARCH: reverse_lazy('view_search'), UserPreference.PLAN: reverse_lazy('view_plan'), UserPreference.BOOKS: reverse_lazy('view_books'),
UserPreference.SHOPPING: reverse_lazy('view_shopping'), }
return HttpResponseRedirect(page_map.get(request.user.userpreference.default_page))
except UserPreference.DoesNotExist:
@@ -160,7 +163,6 @@ def recipe_view(request, pk, share=None):
return render(request, 'recipe_view.html', {'recipe': recipe, 'comments': comments, 'comment_form': comment_form, 'share': share, 'servings': servings})
@group_required('user')
def books(request):
return render(request, 'books.html', {})
@@ -344,11 +346,51 @@ def system(request):
for key in migration_info.keys():
migration_info[key]['total'] = len(migration_info[key]['unapplied_migrations']) + len(migration_info[key]['applied_migrations'])
api_stats = None
api_space_stats = None
# API endpoint logging
if settings.REDIS_HOST:
r = redis.StrictRedis(
host=settings.REDIS_HOST,
port=settings.REDIS_PORT,
password='',
username='',
db=settings.REDIS_DATABASES['STATS'],
)
api_stats = [['Endpoint', 'Total']]
api_space_stats = [['User', 'Total']]
total_stats = ['All', int(r.get('api:request-count'))]
for i in range(0, 6):
d = (date.today() - timedelta(days=i)).isoformat()
api_stats[0].append(d)
api_space_stats[0].append(d)
total_stats.append(int(r.get(f'api:request-count:{d}')) if r.get(f'api:request-count:{d}') else 0)
api_stats.append(total_stats)
for x in r.zrange('api:endpoint-request-count', 0, -1, withscores=True, desc=True):
endpoint = x[0].decode('utf-8')
endpoint_stats = [endpoint, x[1]]
for i in range(0, 6):
d = (date.today() - timedelta(days=i)).isoformat()
endpoint_stats.append(r.zscore(f'api:endpoint-request-count:{d}', endpoint))
api_stats.append(endpoint_stats)
for x in r.zrange('api:space-request-count', 0, 20, withscores=True, desc=True):
s = x[0].decode('utf-8')
space_stats = [Space.objects.get(pk=s).name, x[1]]
for i in range(0, 6):
d = (date.today() - timedelta(days=i)).isoformat()
space_stats.append(r.zscore(f'api:space-request-count:{d}', s))
api_space_stats.append(space_stats)
return render(
request, 'system.html', {
'gunicorn_media': settings.GUNICORN_MEDIA, 'debug': settings.DEBUG, 'postgres': postgres, 'postgres_version': postgres_ver, 'postgres_status': database_status,
'postgres_message': database_message, 'version_info': VERSION_INFO, 'plugins': PLUGINS, 'secret_key': secret_key, 'orphans': orphans, 'migration_info': migration_info,
'missing_migration': missing_migration, 'allowed_hosts': settings.ALLOWED_HOSTS,
'missing_migration': missing_migration, 'allowed_hosts': settings.ALLOWED_HOSTS, 'api_stats': api_stats, 'api_space_stats': api_space_stats
})

View File

@@ -5,7 +5,20 @@ package by hhursev.
If you have the skills to add new sites or help resolve issues you are indirectly helping Tandoor.
## Unofficial mobile app
## Unofficial mobile apps
### kitshn
Unofficial Tandoor recipes client
Maintained by [Aimo](https://github.com/aimok04/kitshn)
- Website: [https://kitshn.app/](https://kitshn.app/)
- Appstores: [Apple](https://apps.apple.com/us/app/kitshn-for-tandoor/id6740168361), [Android](https://play.google.com/store/apps/details?id=de.kitshn.android)
### Untare (discontinued)
Maintained by [phantomate](https://github.com/phantomate/Untare)

View File

@@ -1,8 +1,8 @@
Besides the normal django username and password authentication this application supports multiple
Besides the normal django username and password authentication this application supports multiple
methods of central account management and authentication.
## Allauth
[Django Allauth](https://django-allauth.readthedocs.io/en/latest/index.html) is an awesome project that
[Django Allauth](https://django-allauth.readthedocs.io/en/latest/index.html) is an awesome project that
allows you to use a [huge number](https://docs.allauth.org/en/latest/socialaccount/providers/index.html) of different
authentication providers.
@@ -11,8 +11,8 @@ They basically explain everything in their documentation, but the following is a
!!! warning "Public Providers"
If you choose Google, Github or any other publicly available service as your authentication provider anyone
with an account on that site can create an account on your installation.
A new account does not have any permission but it is still **not recommended** to give public access to
your installation.
A new account does not have any permission but it is still **not recommended** to give public access to
your installation.
Choose a provider from the [list](https://docs.allauth.org/en/latest/socialaccount/providers/index.html) and install it using the environment variable `SOCIAL_PROVIDERS` as shown
in the example below.
@@ -28,15 +28,15 @@ SOCIAL_PROVIDERS=allauth.socialaccount.providers.openid_connect,allauth.socialac
### Configuration, via environment
Depending on your authentication provider you **might need** to configure it.
This needs to be done through the settings system. To make the system flexible (allow multiple providers) and to
Depending on your authentication provider you **might need** to configure it.
This needs to be done through the settings system. To make the system flexible (allow multiple providers) and to
not require another file to be mounted into the container the configuration ins done through a single
environment variable. The downside of this approach is that the configuration needs to be put into a single line
as environment files loaded by docker compose don't support multiple lines for a single variable.
The line data needs to either be in json or as Python dictionary syntax.
Take the example configuration from the allauth docs, fill in your settings and then inline the whole object
Take the example configuration from the allauth docs, fill in your settings and then inline the whole object
(you can use a service like [www.freeformatter.com](https://www.freeformatter.com/json-formatter.html) for formatting).
Assign it to the additional `SOCIALACCOUNT_PROVIDERS` variable.
@@ -46,6 +46,13 @@ The example below is for a generic OIDC provider with PKCE enabled. Most values
SOCIALACCOUNT_PROVIDERS = "{ 'openid_connect': { 'OAUTH_PKCE_ENABLED': True, 'APPS': [ { 'provider_id': 'oidc', 'name': 'My-IDM', 'client_id': 'my_client_id', 'secret': 'my_client_secret', 'settings': { 'server_url': 'https://idm.example.com/oidc/recipes' } } ] } }"
```
Because this JSON contains sensitive data (client id and secret), you may instead choose to save the JSON in a file
and set the environment variable `SOCIALACCOUNT_PROVIDERS_FILE` to the path of the file containing the JSON.
```
SOCIALACCOUNT_PROVIDERS_FILE=/run/secrets/socialaccount_providers.txt
```
!!! success "Improvements ?"
There are most likely ways to achieve the same goal but with a cleaner or simpler system.
If you know such a way feel free to let me know.
@@ -81,7 +88,7 @@ SOCIALACCOUNT_PROVIDERS='{"openid_connect":{"APPS":[{"provider_id":"keycloak","n
You are now able to sign in using Keycloak after a restart of the service.
### Linking accounts
To link an account to an already existing normal user go to the settings page of the user and link it.
To link an account to an already existing normal user go to the settings page of the user and link it.
Here you can also unlink your account if you no longer want to use a social login method.
## LDAP
@@ -111,7 +118,7 @@ AUTH_LDAP_TLS_CACERTFILE=/etc/ssl/certs/own-ca.pem
If you just set `REMOTE_USER_AUTH=1` without any additional configuration, _anybody_ can authenticate with _any_ username!
!!! Info "Community Contributed Tutorial"
This tutorial was provided by a community member. We are not able to provide any support! Please only use, if you know what you are doing!
This tutorial was provided by a community member. We are not able to provide any support! Please only use, if you know what you are doing!
In order use external authentication (i.e. using a proxy auth like Authelia, Authentik, etc.) you will need to:

View File

@@ -1,4 +1,4 @@
This application features a very versatile import and export feature in order
This application features a very versatile import and export feature in order
to offer the best experience possible and allow you to freely choose where your data goes.
!!! WARNING "WIP"
@@ -12,7 +12,7 @@ Feel like there is an important integration missing? Just take a look at the [in
if your favorite one is missing.
!!! info "Export"
I strongly believe in everyone's right to use their data as they please and therefore want to give you
I strongly believe in everyone's right to use their data as they please and therefore want to give you
the best possible flexibility with your recipes.
That said for most of the people getting this application running with their recipes is the biggest priority.
Because of this importing as many formats as possible is prioritized over exporting.
@@ -21,94 +21,98 @@ if your favorite one is missing.
Overview of the capabilities of the different integrations.
| Integration | Import | Export | Images |
|--------------------| ------ | -- | ------ |
| Default | ✔️ | ✔️ | ✔️ |
| Nextcloud | ✔️ | ⌚ | ✔️ |
| Mealie | ✔️ | ⌚ | ✔️ |
| Chowdown | ✔️ | ⌚ | ✔️ |
| Safron | ✔️ | ✔️ | ❌ |
| Paprika | ✔️ | ⌚ | ✔️ |
| ChefTap | ✔️ | ❌ | ❌ |
| Pepperplate | ✔️ | ⌚ | ❌ |
| RecipeSage | ✔️ | ✔️ | ✔️ |
| Rezeptsuite.de | ✔️ | ❌ | ✔️ |
| Domestica | ✔️ | ⌚ | ✔️ |
| MealMaster | ✔️ | ❌ | ❌ |
| RezKonv | ✔️ | ❌ | ❌ |
| OpenEats | ✔️ | ❌ | ⌚ |
| Plantoeat | ✔️ | ❌ | |
| CookBookApp | ✔️ | ⌚ | ✔️ |
| CopyMeThat | ✔️ | ❌ | ✔️ |
| Melarecipes | ✔️ | ⌚ | ✔️ |
| Cookmate | ✔️ | ⌚ | ✔️ |
| PDF (experimental) | ⌚️ | ✔️ | ✔️ |
| ------------------ | ------ | ------ | ------ |
| Default | ✔️ | ✔️ | ✔️ |
| Nextcloud | ✔️ | ⌚ | ✔️ |
| Mealie | ✔️ | ⌚ | ✔️ |
| Chowdown | ✔️ | ⌚ | ✔️ |
| Safron | ✔️ | ✔️ | ❌ |
| Paprika | ✔️ | ⌚ | ✔️ |
| ChefTap | ✔️ | ❌ | ❌ |
| Pepperplate | ✔️ | ⌚ | ❌ |
| RecipeSage | ✔️ | ✔️ | ✔️ |
| Rezeptsuite.de | ✔️ | ❌ | ✔️ |
| Domestica | ✔️ | ⌚ | ✔️ |
| MealMaster | ✔️ | ❌ | ❌ |
| RezKonv | ✔️ | ❌ | ❌ |
| OpenEats | ✔️ | ❌ | ⌚ |
| Plantoeat | ✔️ | ❌ | ✔ |
| CookBookApp | ✔️ | ⌚ | ✔️ |
| CopyMeThat | ✔️ | ❌ | ✔️ |
| Melarecipes | ✔️ | ⌚ | ✔️ |
| Cookmate | ✔️ | ⌚ | ✔️ |
| PDF (experimental) | ⌚️ | ✔️ | ✔️ |
| Gourmet | ✔️ | ❌ | ✔️ |
✔️ = implemented, ❌ = not implemented and not possible/planned, ⌚ = not yet implemented
## Default
The default integration is the built in (and preferred) way to import and export recipes.
It is maintained with new fields added and contains all data to transfer your recipes from one installation to another.
It is also one of the few recipe formats that is actually structured in a way that allows for
easy machine readability if you want to use the data for any other purpose.
It is also one of the few recipe formats that is actually structured in a way that allows for
easy machine readability if you want to use the data for any other purpose.
## RecipeSage
Go to Settings > Export Recipe Data and select `EXPORT AS JSON-LD (BEST)`. Then simply upload the exported file
Go to Settings > Export Recipe Data and select `EXPORT AS JSON-LD (BEST)`. Then simply upload the exported file
to Tandoor.
The RecipeSage integration also allows exporting. To migrate from Tandoor to RecipeSage simply export with Recipe Sage
The RecipeSage integration also allows exporting. To migrate from Tandoor to RecipeSage simply export with Recipe Sage
selected and import the json file in RecipeSage. Images are currently not supported for exporting.
## Domestica
Go to Import/Export and select `Export Recipes`. Then simply upload the exported file
Go to Import/Export and select `Export Recipes`. Then simply upload the exported file
to Tandoor.
## Nextcloud
Importing recipes from Nextcloud cookbook is very easy and since Nextcloud Cookbook provides nice, standardized and
Importing recipes from Nextcloud cookbook is very easy and since Nextcloud Cookbook provides nice, standardized and
structured information most of your recipe is going to be intact.
Follow these steps to import your recipes
1. Go to your Nextcloud Webinterface
2. Open the `Recipes` folder where your recipes are stored
3. Select the recipes you want to export or use the checkbox at the top of the list to select all of them
4. Click on the three dot **Actions** and press Download
2. Find the `Recipes` folder (usually located in the root directory of your account)
3. Download that folder to get your `Recipes.zip` which includes the folder `Recipes` and in that a folder for each recipe
4. Upload the `Recipes.zip` to Tandoor and import it
You will get a `Recipes.zip` file. Simply upload the file and choose the Nextcloud Cookbook type.
!!! WARNING "Folder Structure"
Importing only works if the folder structure is correct. If you do not use the standard path or create the
Importing only works if the folder structure is correct. If you do not use the standard path or create the
zip file in any other way make sure the structure is as follows
```
Recipes.zip/
── Recipes/
├── Recipe1/
── recipe.json
└── full.jpg
── Recipe2/
├── recipe.json
└── full.jpg
```
` Recipes.zip/
└── Recipes/
── Recipe1/
├── recipe.json
── full.jpg
└── Recipe2/
── recipe.json
└── full.jpg
`
## Mealie
Mealie provides structured data similar to nextcloud.
To migrate your recipes
Mealie provides structured data similar to nextcloud.
To migrate your recipes
1. Go to your Mealie settings and create a new Backup.
2. Download the backup by clicking on it and pressing download (this wasn't working for me, so I had to manually pull it from the server).
3. Upload the entire `.zip` file to the importer page and import everything.
## Chowdown
Chowdown stores all your recipes in plain text markdown files in a directory called `_recipes`.
Chowdown stores all your recipes in plain text markdown files in a directory called `_recipes`.
Images are saved in a directory called `images`.
In order to import your Chowdown recipes simply create a `.zip` file from those two folders and import them.
In order to import your Chowdown recipes simply create a `.zip` file from those two folders and import them.
The folder structure should look as follows
!!! info "_recipes"
For some reason chowdown uses `_` before the `recipes` folder. To avoid confusion the import supports both
`_recipes` and `recipes`
For some reason chowdown uses `_`before the`recipes`folder. To avoid confusion the import supports both `\_recipes`and`recipes`
```
Recipes.zip/
@@ -123,31 +127,35 @@ Recipes.zip/
```
## Safron
Go to your safron settings page and export your recipes.
Then simply upload the entire `.zip` file to the importer.
!!! warning "Images"
Safron exports do not contain any images. They will be lost during import.
Safron exports do not contain any images. They will be lost during import.
## Paprika
A Paprika export contains a folder with a html representation of your recipes and a `.paprikarecipes` file.
The `.paprikarecipes` file is basically just a zip with gzipped contents. Simply upload the whole file and import
all your recipes.
The `.paprikarecipes` file is basically just a zip with gzipped contents. Simply upload the whole file and import
all your recipes.
## Pepperplate
Pepperplate provides a `.zip` file containing all of your recipes as `.txt` files. These files are well-structured and allow
the import of all data without losing anything.
Simply export the recipes from Pepperplate and upload the zip to Tandoor. Images are not included in the export and
Simply export the recipes from Pepperplate and upload the zip to Tandoor. Images are not included in the export and
thus cannot be imported.
## ChefTap
ChefTaps allows you to export your recipes from the app (I think). The export is a zip file containing a folder called
`cheftap_export` which in turn contains `.txt` files with your recipes.
This format is basically completely unstructured and every export looks different. This makes importing it very hard
and leads to suboptimal results. Images are also not supported as they are not included in the export (at least
and leads to suboptimal results. Images are also not supported as they are not included in the export (at least
the tests I had).
Usually the import should recognize all ingredients and put everything else into the instructions. If your import fails
@@ -156,31 +164,36 @@ or is worse than this feel free to provide me with more example data and I can t
As ChefTap cannot import these files anyway there won't be an exporter implemented in Tandoor.
## MealMaster
Meal master can be imported by uploading one or more meal master files.
The files should either be `.txt`, `.MMF` or `.MM` files.
Meal master can be imported by uploading one or more meal master files.
The files should either be `.txt`, `.MMF` or `.MM` files.
The MealMaster spec allows for many variations. Currently, only the one column format for ingredients is supported.
Second line notes to ingredients are currently also not imported as a note but simply put into the instructions.
If you have MealMaster recipes that cannot be imported feel free to raise an issue.
## RezKonv
The RezKonv format is primarily used in the german recipe manager RezKonv Suite.
The RezKonv format is primarily used in the german recipe manager RezKonv Suite.
To migrate from RezKonv Suite to Tandoor select `Export > Gesamtes Kochbuch exportieren` (the last option in the export menu).
The generated file can simply be imported into Tandoor.
As I only had limited sample data feel free to open an issue if your RezKonv export cannot be imported.
## Recipekeeper
Recipe keeper allows you to export a zip file containing recipes and images using its apps.
Recipe keeper allows you to export a zip file containing recipes and images using its apps.
This zip file can simply be imported into Tandoor.
## OpenEats
OpenEats does not provide any way to export the data using the interface. Luckily it is relatively easy to export it from the command line.
You need to run the command `python manage.py dumpdata recipe ingredient` inside of the application api container.
If you followed the default installation method you can use the following command `docker-compose -f docker-prod.yml run --rm --entrypoint 'sh' api ./manage.py dumpdata recipe ingredient`.
This command might also work `docker exec -it openeats_api_1 ./manage.py dumpdata recipe ingredient rating recipe_groups > recipe_ingredients.json`
Store the outputted json string in a `.json` file and simply import it using the importer. The file should look something like this
```json
[
{
@@ -231,30 +244,44 @@ CookBookApp can export .zip files containing .html files. Upload the entire ZIP
CopyMeThat can export .zip files containing an `.html` file as well as a folder containing all the images. Upload the entire ZIP to Tandoor to import all included recipes.
## Cookmate
Cookmate allows you to export a `.mcb` file which you can simply upload to tandoor and import all your recipes.
## RecetteTek
RecetteTek exports are `.rtk` files which can simply be uploaded to tandoor to import all your recipes.
RecetteTek exports are `.rtk` files which can simply be uploaded to tandoor to import all your recipes.
## Rezeptsuite.de
Rezeptsuite.de exports are `.xml` files which can simply be uploaded to tandoor to import all your recipes.
It appears that Reptsuite, depending on the client, might export a `.zip` file containing a `.cml` file.
If this happens just unzip the zip file and change `.cml` to `.xml` to import your recipes.
If this happens just unzip the zip file and change `.cml` to `.xml` to import your recipes.
## Melarecipes
Melarecipes provides multiple export formats but only the `MelaRecipes` format can export the complete collection.
Perform this export and open the `.melarecipes` file using your favorite archive opening program (e.g 7zip).
Perform this export and open the `.melarecipes` file using your favorite archive opening program (e.g 7zip).
Repeat this if the file contains another `.melarecipes` file until you get a list of one or many `.melarecipe` files.
Upload all `.melarecipe` files you want to import to tandoor and start the import.
## PDF
The PDF Exporter is an experimental feature that uses the puppeteer browser renderer to render each recipe and export it to PDF.
For that to work it downloads a chromium binary of about 140 MB to your server and then renders the PDF files using that.
The PDF Exporter is an experimental feature that uses the puppeteer browser renderer to render each recipe and export it to PDF.
For that to work it downloads a chromium binary of about 140 MB to your server and then renders the PDF files using that.
Since that is something some server administrators might not want there the PDF exporter is disabled by default and can be enabled with `ENABLE_PDF_EXPORT=1` in `.env`.
See [this issue](https://github.com/TandoorRecipes/recipes/pull/1211) for more discussion on this and
See [this issue](https://github.com/TandoorRecipes/recipes/pull/1211) for more discussion on this and
[this issue](https://github.com/TandoorRecipes/recipes/issues/781) for the future plans to support server side rendering.
## Gourmet
An importer for files from [Gourmet](https://github.com/thinkle/gourmet/). As the `.grmt` files appears to lack the unit for ingredients
a file with `.zip` file with `.htm` and `.jpg`is expected.
To generate the file export to 'html' in Gourmet and zip the folder generated.
The import of menues is not supported
Export is not supported due to problems with `.grmt` format.

View File

@@ -3,7 +3,7 @@
These instructions are inspired from a standard django/gunicorn/postgresql instructions ([for example](https://www.digitalocean.com/community/tutorials/how-to-set-up-django-with-postgres-nginx-and-gunicorn-on-ubuntu-16-04))
!!! warning
Make sure to use Python 3.10 or higher, and ensure that `pip` is associated with Python 3. Depending on your system configuration, using `python` or `pip` might default to Python 2. Make sure your machine has at least 2048 MB of memory; otherwise, the `yarn build` process may fail with the error: `FATAL ERROR: Reached heap limit - Allocation failed: JavaScript heap out of memory`.
Make sure to use at least Python 3.10 (although 3.12 is preferred) or higher, and ensure that `pip` is associated with Python 3. Depending on your system configuration, using `python` or `pip` might default to Python 2. Make sure your machine has at least 2048 MB of memory; otherwise, the `yarn build` process may fail with the error: `FATAL ERROR: Reached heap limit - Allocation failed: JavaScript heap out of memory`.
## Prerequisites

View File

@@ -1,67 +1,71 @@
!!! info "Community Contributed"
This guide was contributed by the community and is neither officially supported, nor updated or tested.
Many people appear to host this application on their Synology NAS. The following documentation was provided by
@therealschimmi in [this issue discussion](https://github.com/vabene1111/recipes/issues/98#issuecomment-643062907).
There is also this
([word](https://github.com/vabene1111/recipes/files/6708738/Tandoor.on.a.Synology.Disk.Station.docx),
[pdf](https://github.com/vabene1111/recipes/files/6901601/Tandoor.on.a.Synology.Disk.Station.pdf)) awesome and
very detailed guide provided by @DiversityBug.
There are, as always, most likely other ways to do this but this can be used as a starting point for your
setup. Since I cannot test it myself feedback and improvements are always very welcome.
This guide was contributed by the community and is neither officially supported, nor updated or tested. Since I cannot test it myself, feedback and improvements are always very welcome.
## **Instructions**
Basic guide to setup `vabenee1111/recipes` docker container on Synology NAS.
### 1. Login to Synology DSM through your browser
- Install Docker through package center
- Optional: Create a shared folder for your docker projects, they have to store data somewhere outside the containers
- Create a folder somewhere, I suggest naming it 'recipes' and storing it in the dedicated docker folder
### 1. Preparations
- Login to Synology DSM through your browser
- Install `Container Manager` through package center
- Install `Text Editor` through package center (needed to edit `.env` if you don't edit it locally first)
- If you do not already have a `docker` folder in your File Station, create one at the root of your volume.
- inside of your `volume1/docker` folder, create a `recipes` folder.
- Within, create the necessary folder structure. You will need these folders:
![grafik](https://user-images.githubusercontent.com/66269214/84472395-63042580-ac87-11ea-8779-37555210e47a.png)
### 2. Download templates
!!!info
vabene1111 gives you a few samples for various setups to work with. I chose to use the plain setup for now.
* Open https://github.com/vabene1111/recipes/tree/develop/docs/install/docker ([link](https://github.com/vabene1111/recipes/tree/develop/docs/install/docker))
* Download docker-compose.yml to your recipes folder ([direct link to plain](https://github.com/TandoorRecipes/recipes/raw/develop/docs/install/docker/plain/docker-compose.yml))
* Open https://github.com/vabene1111/recipes/tree/develop/nginx/conf.d ([link](https://github.com/vabene1111/recipes/tree/develop/nginx/conf.d))
* Download Recipes.conf to your conf.d folder ([direct link](https://raw.githubusercontent.com/TandoorRecipes/recipes/develop/nginx/conf.d/Recipes.conf))
* Open https://github.com/vabene1111/recipes/blob/develop/.env.template ([link](https://github.com/vabene1111/recipes/blob/develop/.env.template))
* Copy the text and save it as ```.env``` to your recipes folder (no filename extension!)
* Add a ```POSTGRES_PASSWORD```
* Once done, it should look like this:
![grafik](https://user-images.githubusercontent.com/66269214/84471828-75319400-ac86-11ea-97e1-42bcb166720e.png)
### 3. Edit docker-compose.yml
* Open docker-compose.yml in a text editor
* This file tells docker how to setup recipes. Docker will create three containers for recipes to work, recipes, nginx and postgresql. They are all required and need to store and share data through the folders you created before.
* Edit line 26, this line specifies which external synology port will point to which internal docker port. Chose a free port to use and replace the first number with it. You will open recipes by browsing to http://your.synology.ip:chosen.port, e.g. http://192.168.1.1:2000
* If you want to use port 2000 you would edit to 2000:80
### 4. SSH into your Synology
- You need to access your Synology through SSH
- Execute following commands
- `ssh root@your.synology.ip` connect to your synology. root password is the same as admin password, sometimes root access is not possible for whatever reason, then replace root with admin
- `cd /volume1/docker/recipes` access the folder where you store docker-compose.yml
- `docker-compose up -d` this starts your containers according to your docker-compose.yml. if you logged in with admin you will have to use `sudo docker-compose up -d` instead, it will ask for the admin password again.
- This output tells you all 3 containers have been setup
```
...
Creating recipes_nginx_recipes_1 ... done
Creating recipes_db_recipes_1 ... done
Creating recipes_web_recipes_1 ... done
volume1/docker/
├─ recipes/
│ ├─ postgresql/
│ ├─ mediafiles/
│ ├─ staticfiles/
│ ├─ nginx_config/
```
* Browse to 192.168.1.1:2000 or whatever your IP and port are
* While the containers are starting and doing whatever they need to do, you might still get HTTP errors e.g. 500 or 502. Just be patient and try again in a moment
### 5. Firewall
### 2. `.env` and `docker-compose.yml`
!!!info The guide uses the `plain` setup.
- Open the [.env template](https://github.com/vabene1111/recipes/blob/develop/.env.template)
- Copy the text and save it as `.env.txt` to your recipes folder (the .txt extension allows you to modify it)
- Open the file with Text Editor. Populate the necessary fields, such as `SECRET_KEY` and `POSTGRES_PASSWORD`.
- Save the file and then rename it as `.env` (without the .txt extension)
- Open the [docker-compose.yml template](https://raw.githubusercontent.com/TandoorRecipes/recipes/refs/heads/develop/docs/install/docker/plain/docker-compose.yml)
- Copy the text and keep reading.
### 3. Creating the Container
- In DSM, open `Container Manager`. Click on `Project`.
- Click `Create` to create a new project. Fill out the following fields:
- `Name`: `tandoor_recipes` or similar.
- `Path`: select your `recipes` folder. If you have been following along `/docker/recipes`
- `Source`: Select `Create docker-compose.yml`. A textbox will appear.
### 4. Edit docker-compose.yml
- Paste the `docker-compose.yml` into the `source` textbox.
- This file tells docker how to setup recipes. Docker will create three containers for recipes to work, recipes, nginx and postgresql. They are all required and need to store and share data through the folders you created before.
- Under the `nginx_recipes` section, look for `ports` that lists `80:80` as the default. This line specifies which external synology port will point to which internal docker port. Chose a free port to use and replace the first number with it. You will open recipes by browsing to http://your.synology.ip:chosen.port, e.g. http://192.168.1.1:2000
- If you want to use port 2000 you would edit the `ports` to `2000:80`
### 5. Finishing up
- Click `Next`.
- Synology will take you to a `web portal settings` page. Skip this page by clicking `Next`.
- If you enable this option then the container will not build because your specified port will be used by the Web Service. The Container already comes with nginx configured to serve files so you do not need the `web portal settings`.
- You'll see a `Summary` page. Review and click `Done`.
- The project will begin being built and should finish.
```bash
Container recipes-db_recipes-1 Starting
Container recipes-db_recipes-1 Started
Container recipes-web_recipes-1 Starting
Container recipes-web_recipes-1 Started
Container recipes-nginx_recipes-1 Starting
Container recipes-nginx_recipes-1 Started
Exit Code: 0
```
- If you get an error, review the error and fix. A common reason it might fail is because you did not create the folders specified in the directory tree in step 1.
- Browse to 192.168.1.1:2000 or whatever your IP and port are
### 6. Firewall
!!!info "Depreciated?" This section may be depreciated and may no longer needed. The container may be able to be used without any firewall rules enabled. Further datapoints needed before section or this warning is removed.
You need to set up firewall rules in order for the recipes_web container to be able to connect to the recipes_db container.
- Control Panel -> Security -> Firewall -> Edit Rules -> Create
@@ -72,10 +76,10 @@ You need to set up firewall rules in order for the recipes_web container to be a
- Action: Allow
- Save and make sure it's above the deny rules
### 6. Additional SSL Setup
### 7. Additional SSL Setup
Easiest way is to do it via Reverse Proxy.
- Control Panel -> Login Portal (renamed Since DSM 7, previously Application Portal) -> Advanced -> Reverse Proxy
- Control Panel -> Login Portal -> Advanced -> Reverse Proxy
- Create
- insert name
- Source:
@@ -94,25 +98,14 @@ Easiest way is to do it via Reverse Proxy.
- Source IP: Depends, All allows access from outside, i use specific to only connect in my network
- Action: Allow
- Save and make sure it's above the deny rules
[Deprecated, Note: ssl Path changed for DSM 7]
6.1 Additional SSL Setup
- create folder `ssl` inside `nginx` folder
- download your ssl certificate from `security` tab in dsm `control panel`
- or create a task in `task manager` because Synology will update the certificate every few months
- set task to repeat every day
- in the script write:
```
SRC="/usr/syno/etc/certificate/system/default"
DEST="/volume1/docker/recipes/nginx/ssl/"
if [ ! -f "$DEST/fullchain.pem" ] || [ "$SRC/fullchain.pem" -nt "$DEST/fullchain.pem" ]; then
cp "$SRC/fullchain.pem" "$DEST/"
cp "$SRC/privkey.pem" "$DEST/"
chown root:root "$DEST/fullchain.pem" "$DEST/privkey.pem"
chmod 600 "$DEST/fullchain.pem" "$DEST/privkey.pem"
/usr/syno/bin/synowebapi --exec api=SYNO.Docker.Container version=1 method=restart name=recipes_nginx_recipes_1
fi
```
- change `docker-compose.yml`
add `- ./nginx/ssl:/etc/nginx/certs` to the `volumes` of `nginx_recipes`
### 8. Depreciated Guides
The following are older guides that may be useful if you are running older versions of DSM.
- The following documentation was provided by
@therealschimmi in [this issue discussion](https://github.com/vabene1111/recipes/issues/98#issuecomment-643062907).
- There is also this
([word](https://github.com/vabene1111/recipes/files/6708738/Tandoor.on.a.Synology.Disk.Station.docx),
[pdf](https://github.com/vabene1111/recipes/files/6901601/Tandoor.on.a.Synology.Disk.Station.pdf)) awesome and very detailed guide provided by @DiversityBug.

View File

@@ -354,7 +354,7 @@ SOCIAL_PROVIDERS = allauth.socialaccount.providers.github, allauth.socialaccount
Allow authentication via the REMOTE-USER header (can be used for e.g. authelia).
!!! danger
Leave off if you don't know what you are doing! Enabling this without proper configuration will enable anybody
Leave off if you don't know what you are doing! Enabling this without proper configuration will enable anybody
to login with any username!
```
@@ -377,6 +377,14 @@ AUTH_LDAP_TLS_CACERTFILE=
AUTH_LDAP_START_TLS=
```
Instead of passing the LDAP password directly through the environment variable `AUTH_LDAP_BIND_PASSWORD`,
you can set the password in a file and set the environment variable `AUTH_LDAP_BIND_PASSWORD_FILE`
to the path of the file containing the ldap secret.
```
AUTH_LDAP_BIND_PASSWORD_FILE=/run/secrets/ldap_password.txt
```
### External Services
#### Email
@@ -396,6 +404,14 @@ EMAIL_USE_SSL=0
DEFAULT_FROM_EMAIL=
```
Instead of passing the email password directly through the environment variable `EMAIL_HOST_PASSWORD`,
you can set the password in a file and set the environment variable `EMAIL_HOST_PASSWORD_FILE`
to the path of the file containing the ldap secret.
```
EMAIL_HOST_PASSWORD_FILE=/run/secrets/email_password.txt
```
Optional settings (only copy the ones you need)
```
@@ -424,6 +440,13 @@ S3_SECRET_ACCESS_KEY=
S3_BUCKET_NAME=
```
Alternatively you can point to a file containing the S3_SECRET_ACCESS_KEY value. If using containers make sure the file is
persistent and available inside the container.
```
S3_SECRET_ACCESS_KEY_FILE=/path/to/file.txt
```
Optional settings (only copy the ones you need)
```
@@ -561,7 +584,7 @@ STICKY_NAV_PREF_DEFAULT=1
> default `100` - options: `0-X`
The default for the number of spaces a user can own. By setting to 0 space creation for users will be disabled.
The default for the number of spaces a user can own. By setting to 0 space creation for users will be disabled.
Superusers can always bypass this limit.
```
@@ -586,7 +609,7 @@ TZ=Europe/Berlin
#### Default Theme
> default `0` - options `1-X` (space ID)
Tandoors appearance can be changed on a user and space level but unauthenticated users always see the tandoor default style.
Tandoors appearance can be changed on a user and space level but unauthenticated users always see the tandoor default style.
With this setting you can specify the ID of a space of which the appearance settings should be applied if a user is not logged in.
```
@@ -633,7 +656,7 @@ DRF_THROTTLE_RECIPE_URL_IMPORT=60/hour
#### Default Space Limits
You might want to limit how many resources a user might create. The following settings apply automatically to newly
created spaces. These defaults can be changed in the admin view after a space has been created.
created spaces. These defaults can be changed in the admin view after a space has been created.
If unset, all settings default to unlimited/enabled

View File

@@ -7,9 +7,9 @@ While intermediate updates can be skipped when updating please make sure to
For all setups using Docker the updating process look something like this
0. Before updating it is recommended to **create a [backup](/system/backup)!**
1. Stop the container using `docker-compose down`
2. Pull the latest image using `docker-compose pull`
3. Start the container again using `docker-compose up -d`
1. Stop the container using `docker compose down`
2. Pull the latest image using `docker compose pull`
3. Start the container again using `docker compose up -d`
## Manual
@@ -45,49 +45,50 @@ docker ps -a --format 'table {{.ID}}\t{{.Names}}\t{{.Image}}\t{{.Status}}' | awk
docker exec -t {{database_container}} pg_dumpall -U {{djangouser}} > ~/tandoor.sql
```
3. Stop the postgres container
3. Stop the tandoor application
``` bash
docker stop {{database_container}} {{tandoor_container}}
docker compose down
```
4. Rename the tandoor volume
``` bash
sudo mv ~/.docker/compose/postgres ~/.docker/compose/postgres.old
mv ./postgresql ./postgresql.old
```
5. Update image tag on postgres container.
5. Update image tag on postgres container in the docker-compose.yaml
``` yaml
db_recipes:
restart: always
image: postgres:16-alpine
volumes:
- ./postgresql:/var/lib/postgresql/data
env_file:
- ./.env
```
``` yaml
db_recipes:
restart: always
image: postgres:16-alpine
volumes:
- ./postgresql:/var/lib/postgresql/data
env_file:
- ./.env
```
6. Pull and rebuild container.
6. Pull and rebuild database container
``` bash
docker-compose pull && docker-compose up -d
```
``` bash
docker compose pull && docker compose up -d db_recipes
```
7. Import the database export
``` bash
cat ~/tandoor.sql | sudo docker exec -i {{database_container}} psql postgres -U {{djangouser}}
```
8. Install postgres extensions
``` bash
docker exec -it {{database_container}} psql postgres -U {{djangouser}}
```
``` bash
cat ~/tandoor.sql | docker exec -i {{database_container}} psql postgres -U {{djangouser}}
```
8. Install postgres extensions
``` bash
docker exec -it {{database_container}} psql postgres -U {{djangouser}}
```
then
``` psql
CREATE EXTENSION IF NOT EXISTS unaccent;
CREATE EXTENSION IF NOT EXISTS pg_trgm;
```
``` psql
CREATE EXTENSION IF NOT EXISTS unaccent;
CREATE EXTENSION IF NOT EXISTS pg_trgm;
```
If anything fails, go back to the old postgres version and data directory and try again.

View File

@@ -8,6 +8,7 @@ server {
# serve media files
location /media/ {
alias /media/;
add_header Content-Disposition 'attachment; filename="$args"';
}
# pass requests for dynamic content to gunicorn
location / {

View File

@@ -27,8 +27,8 @@ BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# Get vars from .env files
SECRET_KEY = os.getenv('SECRET_KEY') if os.getenv('SECRET_KEY') else 'INSECURE_STANDARD_KEY_SET_IN_ENV'
DEBUG = bool(int(os.getenv('DEBUG', True)))
DEBUG_TOOLBAR = bool(int(os.getenv('DEBUG_TOOLBAR', True)))
DEBUG = bool(int(os.getenv('DEBUG', '0')))
DEBUG_TOOLBAR = bool(int(os.getenv('DEBUG_TOOLBAR', '0')))
LOG_LEVEL = os.getenv("LOG_LEVEL", "WARNING")
@@ -66,7 +66,6 @@ LOGGING = {
},
}
# allow djangos wsgi server to server mediafiles
GUNICORN_MEDIA = bool(int(os.getenv('GUNICORN_MEDIA', False)))
@@ -126,6 +125,14 @@ PRIVACY_URL = os.getenv('PRIVACY_URL', '')
IMPRINT_URL = os.getenv('IMPRINT_URL', '')
HOSTED = bool(int(os.getenv('HOSTED', False)))
REDIS_HOST = os.getenv('REDIS_HOST', None)
REDIS_PORT = int(os.getenv('REDIS_PORT', 6379))
REDIS_USERNAME = os.getenv('REDIS_USERNAME', None)
REDIS_PASSWORD = os.getenv('REDIS_PASSWORD', None)
REDIS_DATABASES = {
'STATS': 0
}
MESSAGE_TAGS = {messages.ERROR: 'danger'}
# Application definition
@@ -239,14 +246,14 @@ MIDDLEWARE = [
]
if DEBUG_TOOLBAR:
MIDDLEWARE += ('debug_toolbar.middleware.DebugToolbarMiddleware', )
INSTALLED_APPS += ('debug_toolbar', )
MIDDLEWARE += ('debug_toolbar.middleware.DebugToolbarMiddleware',)
INSTALLED_APPS += ('debug_toolbar',)
SORT_TREE_BY_NAME = bool(int(os.getenv('SORT_TREE_BY_NAME', False)))
DISABLE_TREE_FIX_STARTUP = bool(int(os.getenv('DISABLE_TREE_FIX_STARTUP', False)))
if bool(int(os.getenv('SQL_DEBUG', False))):
MIDDLEWARE += ('recipes.middleware.SqlPrintingMiddleware', )
MIDDLEWARE += ('recipes.middleware.SqlPrintingMiddleware',)
if ENABLE_METRICS:
MIDDLEWARE += 'django_prometheus.middleware.PrometheusAfterMiddleware',
@@ -286,7 +293,6 @@ if LDAP_AUTH:
"handlers": ["console"]
}
AUTHENTICATION_BACKENDS += [
'django.contrib.auth.backends.ModelBackend',
'allauth.account.auth_backends.AuthenticationBackend',
@@ -556,6 +562,9 @@ ACCOUNT_EMAIL_SUBJECT_PREFIX = os.getenv('ACCOUNT_EMAIL_SUBJECT_PREFIX', '[Tando
# ACCOUNT_SIGNUP_FORM_CLASS = 'cookbook.forms.AllAuthSignupForm'
ACCOUNT_FORMS = {'signup': 'cookbook.forms.AllAuthSignupForm', 'reset_password': 'cookbook.forms.CustomPasswordResetForm'}
SOCIALACCOUNT_FORMS = {
'signup': 'cookbook.forms.AllAuthSocialSignupForm',
}
ACCOUNT_EMAIL_UNKNOWN_ACCOUNTS = False
ACCOUNT_RATE_LIMITS = {

View File

@@ -1,58 +1,63 @@
Django==4.2.15
cryptography===43.0.1
Django==4.2.22
cryptography===44.0.1
django-annoying==0.10.6
django-cleanup==8.0.0
django-crispy-forms==2.3
crispy-bootstrap4==2024.1
django-tables2==2.7.0
crispy-bootstrap4==2024.10
django-tables2==2.7.4
djangorestframework==3.15.2
drf-writable-nested==0.7.0
drf-writable-nested==0.7.1
django-oauth-toolkit==2.4.0
django-debug-toolbar==4.3.0
bleach==6.0.0
gunicorn==22.0.0
lxml==5.1.0
bleach==6.2.0
gunicorn==23.0.0
lxml==5.3.1
Markdown==3.5.1
Pillow==10.4.0
psycopg2-binary==2.9.9
Pillow==11.1.0
psycopg2-binary==2.9.10
python-dotenv==1.0.0
requests==2.32.0
requests==2.32.4
six==1.16.0
webdavclient3==3.14.6
whitenoise==6.7.0
icalendar==5.0.11
whitenoise==6.8.2
icalendar==6.1.0
pyyaml==6.0.2
uritemplate==4.1.1
beautifulsoup4==4.12.3
microdata==0.8.0
mock==5.1.0
Jinja2==3.1.4
Jinja2==3.1.6
django-webpack-loader==3.0.1
git+https://github.com/BITSOLVER/django-js-reverse@071e304fd600107bc64bbde6f2491f1fe049ec82
django-allauth==0.61.1
recipe-scrapers==15.2.1
django-allauth==65.3.1
recipe-scrapers==15.6.0
django-scopes==2.0.0
django-treebeard==4.7
django-cors-headers==4.3.1
django-treebeard==4.7.1
django-cors-headers==4.6.0
django-storages==1.14.2
boto3==1.28.75
django-prometheus==2.2.0
django-prometheus==2.3.1
django-hCaptcha==0.2.0
python-ldap==3.4.4
django-auth-ldap==4.6.0
pyppeteer==2.0.0
pytube==15.0.0
aiohttp==3.10.2
pytubefix==8.13.1
aiohttp==3.10.11
inflection==0.5.1
redis==5.2.1
requests-oauthlib==2.0.0
pyjwt==2.10.1
python3-openid==3.2.0
python3-saml==1.16.0
# Development
pytest==8.0.0
pytest-django==4.8.0
pytest-django==4.10.0
pytest-cov===5.0.0
pytest-factoryboy==2.6.0
pytest-factoryboy==2.7.0
pytest-html==4.1.1
pytest-asyncio==0.23.5
pytest-xdist==3.6.1
autopep8==2.0.4
flake8==6.1.0
autopep8==2.3.2
flake8==7.1.1
yapf==0.40.2

View File

@@ -17,7 +17,7 @@
"@popperjs/core": "^2.11.7",
"@vue/cli": "^5.0.8",
"@vue/composition-api": "1.7.2",
"axios": "^1.6.7",
"axios": "^1.8.2",
"babel": "^6.23.0",
"babel-core": "^6.26.3",
"babel-loader": "^9.1.0",
@@ -27,7 +27,7 @@
"mavon-editor": "^2.10.4",
"moment": "^2.30.1",
"pinia": "^2.1.7",
"prismjs": "^1.29.0",
"prismjs": "^1.30.0",
"string-similarity": "^4.0.4",
"vue": "^2.6.14",
"vue-class-component": "^7.2.3",

View File

@@ -83,6 +83,11 @@
<loading-spinner></loading-spinner>
</b-card>
<!-- Warnings -->
<b-card no-body v-if="duplicateWarning" class="warning">
{{ duplicateWarning }}
</b-card>
<!-- OPTIONS -->
<b-card no-body v-if="recipe_json !== undefined">
<b-card-header header-tag="header" class="p-1" role="tab">
@@ -463,6 +468,7 @@ export default {
},
// URL import
LS_IMPORT_RECENT: 'import_recent_urls', //TODO use central helper to manage all local storage keys (and maybe even access)
duplicateWarning: '',
website_url: '',
website_url_list: '',
import_multiple: false,
@@ -643,6 +649,12 @@ export default {
return
}
if ('duplicate' in response.data && response.data['duplicate']) {
this.duplicateWarning = "A recipe with this URL already exists.";
} else {
this.duplicateWarning = "";
}
this.loading = false
this.recipe_json = response.data['recipe_json'];
@@ -763,6 +775,16 @@ export default {
<style>
.warning {
color: rgb(255, 149, 0);
align-items: center;
background-color: #fff4ec;
padding: 10px;
border: 1px solid rgb(255, 149, 0);
border-radius: 5px;
margin: 10px 0;
}
.bounce {
animation: bounce 0.82s cubic-bezier(0.36, 0.07, 0.19, 0.97) both;
transform: translate3d(0, 0, 0);

View File

@@ -238,7 +238,7 @@ export default {
if (e.recipe_mealplan !== null) {
let recipe_name = e.recipe_mealplan.recipe_name
if (recipes.indexOf(recipe_name) === -1) {
if (recipes.indexOf(recipe_name) === -1 && recipe_name !== undefined) {
recipes.push(recipe_name.substring(0, 14) + (recipe_name.length > 14 ? '..' : ''))
}

View File

@@ -79,492 +79,494 @@
"Private_Recipe_Help": "Només tu i la gent amb qui l'has compartit podran veure aquesta recepta.",
"reusable_help_text": "L'enllaç d'invitació es pot fer servir per més d'un usuari.",
"open_data_help_text": "El projecte de dades obertes de Tandoor proporciona dades per a Tandoor a partir de les contribucions de la comunitat. Aquest camp s'emplena automàticament quan s'importa i permet que es facin actualitzacions en un futur.",
"Open_Data_Slug": "",
"Open_Data_Import": "",
"Properties_Food_Amount": "",
"Properties_Food_Unit": "",
"Calculator": "",
"FDC_ID": "",
"FDC_Search": "",
"FDC_ID_help": "",
"property_type_fdc_hint": "",
"Data_Import_Info": "",
"Update_Existing_Data": "",
"Use_Metric": "",
"Learn_More": "",
"converted_unit": "",
"converted_amount": "",
"base_unit": "",
"base_amount": "",
"Datatype": "",
"Input": "",
"Undo": "",
"NoMoreUndo": "",
"Number of Objects": "",
"Add_Step": "",
"Keywords": "",
"Books": "",
"Proteins": "",
"Fats": "",
"Carbohydrates": "",
"Calories": "",
"Energy": "",
"Nutrition": "",
"Date": "",
"StartDate": "",
"EndDate": "",
"Share": "",
"Automation": "",
"Parameter": "",
"Export": "",
"Copy": "",
"Rating": "",
"Close": "",
"Cancel": "",
"Link": "",
"Add": "",
"New": "",
"Note": "",
"Alignment": "",
"Success": "",
"Failure": "",
"Protected": "",
"Ingredients": "",
"Supermarket": "",
"Categories": "",
"Category": "",
"Selected": "",
"min": "",
"Servings": "",
"Waiting": "",
"Preparation": "",
"External": "",
"Size": "",
"Files": "",
"File": "",
"Edit": "",
"Image": "",
"Delete": "",
"Delete_All": "",
"Open": "",
"Ok": "",
"Save": "",
"Step": "",
"Search": "",
"Import": "",
"Print": "",
"Settings": "",
"or": "",
"and": "",
"Information": "",
"Download": "",
"Create": "",
"Search Settings": "",
"View": "",
"Recipes": "",
"Welcome": "",
"Move": "",
"Merge": "",
"Parent": "",
"Copy Link": "",
"Copy Token": "",
"delete_confirmation": "",
"move_confirmation": "",
"merge_confirmation": "",
"create_rule": "",
"move_selection": "",
"merge_selection": "",
"Root": "",
"Ignore_Shopping": "",
"Shopping_Category": "",
"Shopping_Categories": "",
"Shopping_input_placeholder": "",
"Edit_Food": "",
"Move_Food": "",
"New_Food": "",
"Hide_Food": "",
"Food_Alias": "",
"Unit_Alias": "",
"Keyword_Alias": "",
"Delete_Food": "",
"No_ID": "",
"Meal_Plan_Days": "",
"merge_title": "",
"move_title": "",
"Food": "",
"Property": "",
"Property_Editor": "",
"Conversion": "",
"Original_Text": "",
"Recipe_Book": "",
"del_confirmation_tree": "",
"delete_title": "",
"create_title": "",
"edit_title": "",
"Name": "",
"Properties": "",
"Type": "",
"Description": "",
"Recipe": "",
"tree_root": "",
"Icon": "",
"Unit": "",
"Decimals": "",
"Default_Unit": "",
"No_Results": "",
"New_Unit": "",
"Create_New_Shopping Category": "",
"Create_New_Food": "",
"Create_New_Keyword": "",
"Create_New_Unit": "",
"Create_New_Meal_Type": "",
"Create_New_Shopping_Category": "",
"and_up": "",
"and_down": "",
"Instructions": "",
"Unrated": "",
"Automate": "",
"Empty": "",
"Key_Ctrl": "",
"Key_Shift": "",
"Time": "",
"Text": "",
"Shopping_list": "",
"Added_by": "",
"Added_on": "",
"AddToShopping": "",
"IngredientInShopping": "",
"NotInShopping": "",
"OnHand": "",
"FoodOnHand": "",
"FoodNotOnHand": "",
"Undefined": "",
"Create_Meal_Plan_Entry": "",
"Edit_Meal_Plan_Entry": "",
"Title": "",
"Week": "",
"Month": "",
"Year": "",
"created_by": "",
"Planner": "",
"Planner_Settings": "",
"Period": "",
"Plan_Period_To_Show": "",
"Periods": "",
"Plan_Show_How_Many_Periods": "",
"Starting_Day": "",
"Meal_Types": "",
"Meal_Type": "",
"New_Entry": "",
"Clone": "",
"Drag_Here_To_Delete": "",
"Meal_Type_Required": "",
"Title_or_Recipe_Required": "",
"Color": "",
"New_Meal_Type": "",
"Use_Fractions": "",
"Use_Fractions_Help": "",
"AddFoodToShopping": "",
"RemoveFoodFromShopping": "",
"DeleteShoppingConfirm": "",
"IgnoredFood": "",
"Add_Servings_to_Shopping": "",
"Week_Numbers": "",
"Show_Week_Numbers": "",
"Export_As_ICal": "",
"Export_To_ICal": "",
"Cannot_Add_Notes_To_Shopping": "",
"Added_To_Shopping_List": "",
"Shopping_List_Empty": "",
"Next_Period": "",
"Previous_Period": "",
"Current_Period": "",
"Next_Day": "",
"Previous_Day": "",
"Inherit": "",
"InheritFields": "",
"FoodInherit": "",
"ShowUncategorizedFood": "",
"GroupBy": "",
"Language": "",
"Theme": "",
"CustomTheme": "",
"CustomThemeHelp": "",
"CustomImageHelp": "",
"CustomNavLogoHelp": "",
"CustomLogoHelp": "",
"CustomLogos": "",
"SupermarketCategoriesOnly": "",
"MoveCategory": "",
"CountMore": "",
"IgnoreThis": "",
"DelayFor": "",
"Warning": "",
"NoCategory": "",
"InheritWarning": "",
"ShowDelayed": "",
"ShowRecentlyCompleted": "",
"Completed": "",
"OfflineAlert": "",
"ShoppingBackgroundSyncWarning": "",
"shopping_share": "",
"shopping_auto_sync": "",
"one_url_per_line": "",
"mealplan_autoadd_shopping": "",
"mealplan_autoexclude_onhand": "",
"mealplan_autoinclude_related": "",
"default_delay": "",
"plan_share_desc": "",
"shopping_share_desc": "",
"shopping_auto_sync_desc": "",
"mealplan_autoadd_shopping_desc": "",
"mealplan_autoexclude_onhand_desc": "",
"mealplan_autoinclude_related_desc": "",
"default_delay_desc": "",
"filter_to_supermarket": "",
"Coming_Soon": "",
"Auto_Planner": "",
"New_Cookbook": "",
"Hide_Keyword": "",
"Hour": "",
"Hours": "",
"Day": "",
"Days": "",
"Second": "",
"Seconds": "",
"Clear": "",
"Users": "",
"Invites": "",
"err_move_self": "",
"nothing": "",
"err_merge_self": "",
"show_sql": "",
"filter_to_supermarket_desc": "",
"CategoryName": "",
"SupermarketName": "",
"CategoryInstruction": "",
"OrderInformation": "",
"shopping_recent_days_desc": "",
"shopping_recent_days": "",
"download_pdf": "",
"download_csv": "",
"csv_delim_help": "",
"csv_delim_label": "",
"SuccessClipboard": "",
"copy_to_clipboard": "",
"csv_prefix_help": "",
"csv_prefix_label": "",
"copy_markdown_table": "",
"in_shopping": "",
"DelayUntil": "",
"Pin": "",
"Unpin": "",
"PinnedConfirmation": "",
"UnpinnedConfirmation": "",
"mark_complete": "",
"QuickEntry": "",
"shopping_add_onhand_desc": "",
"shopping_add_onhand": "",
"related_recipes": "",
"today_recipes": "",
"sql_debug": "",
"remember_search": "",
"remember_hours": "",
"tree_select": "",
"OnHand_help": "",
"ignore_shopping_help": "",
"shopping_category_help": "",
"food_recipe_help": "",
"Foods": "",
"Account": "",
"Cosmetic": "",
"API": "",
"enable_expert": "",
"expert_mode": "",
"simple_mode": "",
"advanced": "",
"fields": "",
"show_keywords": "",
"show_foods": "",
"show_books": "",
"show_rating": "",
"show_units": "",
"show_filters": "",
"not": "",
"save_filter": "",
"filter_name": "",
"left_handed": "",
"left_handed_help": "",
"show_step_ingredients_setting": "",
"show_step_ingredients_setting_help": "",
"show_step_ingredients": "",
"hide_step_ingredients": "",
"Custom Filter": "",
"shared_with": "",
"sort_by": "",
"asc": "",
"desc": "",
"date_viewed": "",
"last_cooked": "",
"times_cooked": "",
"date_created": "",
"show_sortby": "",
"search_rank": "",
"make_now": "",
"Created": "",
"Updated": "",
"Unchanged": "",
"Error": "",
"make_now_count": "",
"recipe_filter": "",
"book_filter_help": "",
"review_shopping": "",
"view_recipe": "",
"copy_to_new": "",
"recipe_name": "",
"paste_ingredients_placeholder": "",
"paste_ingredients": "",
"ingredient_list": "",
"explain": "",
"filter": "",
"Website": "",
"App": "",
"Message": "",
"Bookmarklet": "",
"Sticky_Nav": "",
"Sticky_Nav_Help": "",
"Logo": "",
"Show_Logo": "",
"Show_Logo_Help": "",
"Nav_Color": "",
"Nav_Text_Mode": "",
"Nav_Text_Mode_Help": "",
"Nav_Color_Help": "",
"Space_Cosmetic_Settings": "",
"Use_Kj": "",
"Comments_setting": "",
"click_image_import": "",
"no_more_images_found": "",
"import_duplicates": "",
"paste_json": "",
"Click_To_Edit": "",
"search_no_recipes": "",
"search_import_help_text": "",
"search_create_help_text": "",
"warning_duplicate_filter": "",
"reset_children": "",
"reset_children_help": "",
"reset_food_inheritance": "",
"reset_food_inheritance_info": "",
"substitute_help": "",
"substitute_siblings_help": "",
"substitute_children_help": "",
"substitute_siblings": "",
"substitute_children": "",
"SubstituteOnHand": "",
"ChildInheritFields": "",
"ChildInheritFields_help": "",
"InheritFields_help": "",
"show_ingredients_table": "",
"show_ingredient_overview": "",
"Ingredient Overview": "",
"last_viewed": "",
"created_on": "",
"updatedon": "",
"Imported_From": "",
"advanced_search_settings": "",
"nothing_planned_today": "",
"no_pinned_recipes": "",
"Planned": "",
"Pinned": "",
"Imported": "",
"Quick actions": "",
"Ratings": "",
"Internal": "",
"Units": "",
"Manage_Emails": "",
"Change_Password": "",
"Social_Authentication": "",
"Random Recipes": "",
"parameter_count": "",
"select_keyword": "",
"add_keyword": "",
"select_file": "",
"select_recipe": "",
"select_unit": "",
"select_food": "",
"remove_selection": "",
"empty_list": "",
"Select": "",
"Supermarkets": "",
"User": "",
"Username": "",
"First_name": "",
"Last_name": "",
"Keyword": "",
"Advanced": "",
"Page": "",
"Single": "",
"Multiple": "",
"Reset": "",
"Disabled": "",
"Disable": "",
"Enable": "",
"Options": "",
"Create Food": "",
"create_food_desc": "",
"additional_options": "",
"Importer_Help": "",
"Documentation": "",
"Select_App_To_Import": "",
"Import_Supported": "",
"Export_Supported": "",
"Import_Not_Yet_Supported": "",
"Export_Not_Yet_Supported": "",
"Import_Result_Info": "",
"Recipes_In_Import": "",
"Toggle": "",
"total": "",
"Import_Error": "",
"Warning_Delete_Supermarket_Category": "",
"New_Supermarket": "",
"New_Supermarket_Category": "",
"Are_You_Sure": "",
"Valid Until": "",
"Split_All_Steps": "",
"Combine_All_Steps": "",
"Plural": "",
"plural_short": "",
"g": "",
"kg": "",
"ounce": "",
"pound": "",
"ml": "",
"l": "",
"fluid_ounce": "",
"pint": "",
"quart": "",
"gallon": "",
"tbsp": "",
"tsp": "",
"imperial_fluid_ounce": "",
"imperial_pint": "",
"imperial_quart": "",
"imperial_gallon": "",
"imperial_tbsp": "",
"imperial_tsp": "",
"Choose_Category": "",
"Back": "",
"Use_Plural_Unit_Always": "",
"Use_Plural_Unit_Simple": "",
"Use_Plural_Food_Always": "",
"Use_Plural_Food_Simple": "",
"plural_usage_info": "",
"Create Recipe": "",
"Import Recipe": "",
"Never_Unit": "",
"Transpose_Words": "",
"Name_Replace": "",
"Food_Replace": "",
"Unit_Replace": ""
"Open_Data_Slug": "Open Data Slug",
"Open_Data_Import": "Importar Open Data",
"Properties_Food_Amount": "Propietats de les quantitats d'aliments",
"Properties_Food_Unit": "Propietats de les unitats d'aliments",
"Calculator": "Calculadora",
"FDC_ID": "FDC ID",
"FDC_Search": "Cerca FDC",
"FDC_ID_help": "Base de dades FDC ID",
"property_type_fdc_hint": "Només els tipus de propietat amb un ID FDC poden treure automàticament dades de la base de dades FDC",
"Data_Import_Info": "Millora el teu Espai important llistes daliments, unitats i més, seleccionats per la comunitat per millorar la teva col·lecció de receptes.",
"Update_Existing_Data": "Actualitzar les Dades Existents",
"Use_Metric": "Utilitzar Unitats Mètriques",
"Learn_More": "Saber-me més",
"converted_unit": "Unitat convertida",
"converted_amount": "Quantitat Convertida",
"base_unit": "Unitat Base",
"base_amount": "Quantitat Base",
"Datatype": "Tipus de Dades",
"Input": "Entrada",
"Undo": "Desfer",
"NoMoreUndo": "No hi ha canvis per desar.",
"Number of Objects": "Nombre d'Objectes",
"Add_Step": "Afegir pas",
"Keywords": "Paraules clau",
"Books": "Llibres",
"Proteins": "Proteïnes",
"Fats": "Greixos",
"Carbohydrates": "Carbohidrats",
"Calories": "Calories",
"Energy": "Energia",
"Nutrition": "Valors nutricionals",
"Date": "Data",
"StartDate": "Data d'inici",
"EndDate": "Data de Finalització",
"Share": "Compartir",
"Automation": "Automatizació",
"Parameter": "Paràmetre",
"Export": "Exportar",
"Copy": "Copiar",
"Rating": "Puntuació",
"Close": "Tancar",
"Cancel": "Cancelar",
"Link": "Enllaç",
"Add": "Afegir",
"New": "Nou",
"Note": "Nota",
"Alignment": "Alineació",
"Success": "Èxit",
"Failure": "Error",
"Protected": "Protegit",
"Ingredients": "Ingredients",
"Supermarket": "Supermercat",
"Categories": "Categories",
"Category": "Categoria",
"Selected": "Seleccionat",
"min": "Mínim",
"Servings": "Racions",
"Waiting": "Esperant",
"Preparation": "Preparació",
"External": "Extern",
"Size": "Mida",
"Files": "Arxius",
"File": "Arxiu",
"Edit": "Editar",
"Image": "Imatge",
"Delete": "Eliminar",
"Delete_All": "Eliminar tot",
"Open": "Obrir",
"Ok": "Ok",
"Save": "Desar",
"Step": "Pas",
"Search": "Cercar",
"Import": "Importar",
"Print": "Imprimir",
"Settings": "Opcions",
"or": "o",
"and": "i",
"Information": "Informació",
"Download": "Descarregar",
"Create": "Crear",
"Search Settings": "Cercar Ajustos",
"View": "Mostrar",
"Recipes": "Receptes",
"Welcome": "Benvingut/da",
"Move": "Moure",
"Merge": "Unificar",
"Parent": "Principal",
"Copy Link": "Copiar Enllaç",
"Copy Token": "Copiar Token",
"delete_confirmation": "¿Estàs segur que vols eliminar {source}?",
"move_confirmation": "Moure <i>{child}</i> a principal <i>{parent}</i>",
"merge_confirmation": "Reemplaça <i>{source}</i> amb <i>{target}</i>",
"create_rule": "i crear automatització",
"move_selection": "Selecciona un {type} principal on moure {source}.",
"merge_selection": "Reemplaça totes les ocurrències de {source} amb el {type} seleccionat.",
"Root": "Arrel",
"Ignore_Shopping": "Ignorar les compres",
"Shopping_Category": "Categoria de compres",
"Shopping_Categories": "Categoria de compres",
"Shopping_input_placeholder": "p.e. Patata/100 Patates/100 g Patates",
"Edit_Food": "Editar l'aliment",
"Move_Food": "Moure l'Aliment",
"New_Food": "Nou Aliment",
"Hide_Food": "Amagar Aliment",
"Food_Alias": "Àlies per l'aliment",
"Unit_Alias": "Àlies per les unitats",
"Keyword_Alias": "Àlies per les etiquetes",
"Delete_Food": "Eliminar Aliment",
"No_ID": "No s'ha trobat l'ID, no es pot eliminar.",
"Meal_Plan_Days": "Menús futurs",
"merge_title": "Unificar {type}",
"move_title": "Moure {type}",
"Food": "Aliment",
"Property": "Propietat",
"Property_Editor": "Editor de propietats",
"Conversion": "Conversió",
"Original_Text": "Text original",
"Recipe_Book": "Llibre de receptes",
"del_confirmation_tree": "Estàs segur que vols eliminar {source} i tots els seus elements fills?",
"delete_title": "Eliminar {type}",
"create_title": "Nou {type}",
"edit_title": "Editar {type}",
"Name": "Nom",
"Properties": "Propietats",
"Type": "Tipus",
"Description": "Descripció",
"Recipe": "Recepta",
"tree_root": "Arrel de l'Arbre",
"Icon": "Icona",
"Unit": "Unitat",
"Decimals": "Decimals",
"Default_Unit": "Unitat Predeterminada",
"No_Results": "No hi ha resultats",
"New_Unit": "Nova unitat",
"Create_New_Shopping Category": "Crear nova Categoria de Compres",
"Create_New_Food": "Afegir nou ingredient",
"Create_New_Keyword": "Afegir nova Paraula Clau",
"Create_New_Unit": "Afegir nova unitat",
"Create_New_Meal_Type": "Afegir nou tipus de menjar",
"Create_New_Shopping_Category": "Afegir nova Categoria de Compres",
"and_up": "& Amunt",
"and_down": "& A sota",
"Instructions": "Instruccions",
"Unrated": "Sense puntuar",
"Automate": "Automatitzar",
"Empty": "Buit",
"Key_Ctrl": "Ctrl",
"Key_Shift": "Shift",
"Time": "Temps",
"Text": "Text",
"Shopping_list": "Llista de la Compra",
"Added_by": "Afegit per",
"Added_on": "Afegit el",
"AddToShopping": "Afegir a la llista de la compra",
"IngredientInShopping": "Aquest ingredient ja està a la teva llista de la compra.",
"NotInShopping": "{food} no està a la teva llista de la compra.",
"OnHand": "Ja en tinc",
"FoodOnHand": "Ja tens {food}.",
"FoodNotOnHand": "No disposes de {food}.",
"Undefined": "indefinit",
"Create_Meal_Plan_Entry": "Crear una entrada de la planificació d'àpats",
"Edit_Meal_Plan_Entry": "Elimina les entrades de la planificació d'àpats",
"Title": "Títol",
"Week": "Setmana",
"Month": "Mes",
"Year": "Any",
"created_by": "Creat per",
"Planner": "Planificador",
"Planner_Settings": "Opcions del planificador",
"Period": "Període",
"Plan_Period_To_Show": "Mostrar setmanes, mesos o anys",
"Periods": "Períodes",
"Plan_Show_How_Many_Periods": "Quants períodes mostrar",
"Starting_Day": "Dia d'inici de la setmana",
"Meal_Types": "Tipus de menjars",
"Meal_Type": "Tipus de menjar",
"New_Entry": "Nova entrada",
"Clone": "Clonar",
"Drag_Here_To_Delete": "Arrossega aquí per a eliminar",
"Meal_Type_Required": "El tipus és obligatori",
"Title_or_Recipe_Required": "És necessari especificar un títol o escollir una recepta",
"Color": "Color",
"New_Meal_Type": "Nou tipus de menjar",
"Use_Fractions": "Utilitza fraccions",
"Use_Fractions_Help": "Convertir de forma automàtica els decimals en fraccions en veure una recepta.",
"AddFoodToShopping": "Afegeix {food} a la llista de la compra",
"RemoveFoodFromShopping": "Elimina {food} de la llista de la compra",
"DeleteShoppingConfirm": "Segur que vols eliminar tot el/la {food} de la llista de la compra?",
"IgnoredFood": "{food} està marcat per a ser ignorat a la llista de la compra.",
"Add_Servings_to_Shopping": "Afegir {servings} racions a la compra",
"Week_Numbers": "Números de la setmana",
"Show_Week_Numbers": "Mostrar els números de la setmana?",
"Export_As_ICal": "Exportar el període actual en format iCal",
"Export_To_ICal": "Exportar .ics",
"Cannot_Add_Notes_To_Shopping": "Les notes no poden afegir-se a la llista de la compra",
"Added_To_Shopping_List": "Afegit a la llista de la compra",
"Shopping_List_Empty": "Actualment, la teva llista de compres està buida, pots afegir nous elements a través del menú dun pla d'àpats (fes clic amb el botó dret a la targeta o fes clic a la icona del menú)",
"Next_Period": "Període següent",
"Previous_Period": "Període anterior",
"Current_Period": "Període Actual",
"Next_Day": "Següent dia",
"Previous_Day": "Dia Anterior",
"Inherit": "heretar",
"InheritFields": "Heretar Valors de Camp",
"FoodInherit": "Camps Heretats",
"ShowUncategorizedFood": "Mostra Camps Sense Definir",
"GroupBy": "Agrupat per",
"Language": "Llenguatge",
"Theme": "Tema",
"CustomTheme": "Tema Personalitzat",
"CustomThemeHelp": "Cancel·la els estils del tema seleccionat Carregant un fitxer CSS personalitzat.",
"CustomImageHelp": "Carregar una imatge per mostrar a la vista general de lespai.",
"CustomNavLogoHelp": "Pengeu una imatge per utilitzar com a logotip a la barra de navegació.",
"CustomLogoHelp": "Carregar imatges quadrades de diferents mides del logotip per fer-les servir a la pestanya del navegador i a l'aplicació web instal·lada.",
"CustomLogos": "Logos personalitzats",
"SupermarketCategoriesOnly": "Només les categories del supermercat",
"MoveCategory": "Moure a: ",
"CountMore": "....+{count} més",
"IgnoreThis": "No afegir {food} automàticament a la compra",
"DelayFor": "Endarrerir durant {hours} hores",
"Warning": "Advertència",
"NoCategory": "No s'ha seleccionat categoria.",
"InheritWarning": "{Food} està marcat per heretar, és possible que els canvis no es guardin.",
"ShowDelayed": "Mostra elements endarrerits",
"ShowRecentlyCompleted": "Mostrar els elements completats fa poc",
"Completed": "Completat",
"OfflineAlert": "Estàs desconnectat, la llista de la compra no pot actualitzar-se.",
"ShoppingBackgroundSyncWarning": "Error de la connexió, esperant per sincronitzar ...",
"shopping_share": "Compartir llista de la compra",
"shopping_auto_sync": "Sincr. Automàticamente",
"one_url_per_line": "Una URL per línia",
"mealplan_autoadd_shopping": "Afegir pla d'àpats automàticament",
"mealplan_autoexclude_onhand": "Excloure els ingredients que ja tinc",
"mealplan_autoinclude_related": "Afegir receptes relacionades",
"default_delay": "Hores de retard per defecte",
"plan_share_desc": "Les noves entrades del pla dàpats es compartiran automàticament amb usuaris seleccionats.",
"shopping_share_desc": "Els usuaris veuran tots els elements de la teva llista de compres. Perquè puguis veure les seves t'han d'afegir.",
"shopping_auto_sync_desc": "Establiu 0 per deshabilitar la sincronització automàtica. Quan es mostra una llista de compres aquesta es guarda de forma automàtica cada pocs segons per recarregar els canvis d'altres usuaris. És útil per a llistes compartides, però utilitza més dades mòbils.",
"mealplan_autoadd_shopping_desc": "Afegir automàticament tots els ingredients del Pla d'Àpats a la llista de compres.",
"mealplan_autoexclude_onhand_desc": "En afegir alguna cosa a la llista de la compra (manualment o automàticament), excloure aquells ingredients que ja estan en possessió.",
"mealplan_autoinclude_related_desc": "Si afegiu a un pla d'àpats a la llista de compres (de forma manual o automàticament), incloureu totes les receptes relacionades.",
"default_delay_desc": "Nombre dhores per defecte per retardar lentrada de la llista de compres.",
"filter_to_supermarket": "Filtrar per supermercat",
"Coming_Soon": "Próximament",
"Auto_Planner": "Planificador automàtic",
"New_Cookbook": "Nou Llibre de receptes",
"Hide_Keyword": "Amaga les paraules clau",
"Hour": "Hora",
"Hours": "Hores",
"Day": "Dia",
"Days": "Dies",
"Second": "Segon",
"Seconds": "Segons",
"Clear": "Netejar",
"Users": "Usuaris",
"Invites": "Invitacions",
"err_move_self": "No pots moure un element a si mateix",
"nothing": "Res a fer",
"err_merge_self": "No pots unificar un element amb ell mateix",
"show_sql": "Mostrar SQL",
"filter_to_supermarket_desc": "De manera predeterminada, filtra la llista de compres per incloure només categories del supermercat seleccionat.",
"CategoryName": "Nom Categoria",
"SupermarketName": "Nom del supermercat",
"CategoryInstruction": "Arrossega les categories per canviar l'ordre que apareixen les categories a la llista de compres.",
"OrderInformation": "Els objectes estan ordenats de número petit a gran.",
"shopping_recent_days_desc": "Dies d'entrades de la llista de compres recents a mostrar.",
"shopping_recent_days": "Dies Recents",
"download_pdf": "Descarregar PDF",
"download_csv": "Descarregar CSV",
"csv_delim_help": "Delimitador que s'utilitzarà per a les exportacions de CSV.",
"csv_delim_label": "Delimitador CSV",
"SuccessClipboard": "Llista de la compra copiada",
"copy_to_clipboard": "Copiar al porta-retalls",
"csv_prefix_help": "Prefix a afegir en copiar una llista al porta-retalls.",
"csv_prefix_label": "Prefix Llista",
"copy_markdown_table": "Copiar com a Taula Markdown",
"in_shopping": "A la llista de la compra",
"DelayUntil": "Endarrerir fins",
"Pin": "Fixar",
"Unpin": "Desanclar",
"PinnedConfirmation": "{recipe} s'ha fixat.",
"UnpinnedConfirmation": "{recipe} s'ha desfixat.",
"mark_complete": "Marcar com a Completat",
"QuickEntry": "Entrada Ràpida",
"shopping_add_onhand_desc": "Marcar menjar com 'En Possessió' en marcar-lo a la llista de la compra.",
"shopping_add_onhand": "Auto 'En Possessió'",
"related_recipes": "Receptes relacionades",
"today_recipes": "Receptes del dia",
"sql_debug": "Depuració SQL",
"remember_search": "Recordar la Cerca",
"remember_hours": "Hores a Recordar",
"tree_select": "Utilitzar l'arbre de selecció",
"OnHand_help": "L'aliment ja es troba a l'inventari i no s'afegirà automàticament a la llista de la compra. L'estat sobre la disponibilitat es comparteix amb els usuaris \"compradors\".",
"ignore_shopping_help": "No afegir mai l'aliment a la llista de la compra (p. ex. aigua)",
"shopping_category_help": "Els supermercats es poden ordenar i filtrar per les categories dingredients segons la disposició dels prestatges.",
"food_recipe_help": "Afegir un enllaç a una recepta aquí inclourà aquesta recepta en qualsevol altra recepta que utilitzi aquest aliment o ingredient",
"Foods": "Aliments",
"Account": "Compte",
"Cosmetic": "Aparença",
"API": "API",
"enable_expert": "Activar el Mode Expert",
"expert_mode": "Mode Expert",
"simple_mode": "Mode bàsic",
"advanced": "Avançat",
"fields": "Camps",
"show_keywords": "Mostra les paraules clau",
"show_foods": "Mostra els aliments",
"show_books": "Mostra els Llibres",
"show_rating": "Mostra les puntuacions",
"show_units": "Mostrar les Unitats",
"show_filters": "Mostra els Filtres",
"not": "no",
"save_filter": "Desar els Filtres",
"filter_name": "Filtrar per nom",
"left_handed": "Mode Esquerrà",
"left_handed_help": "Optimitzarà la interfície dusuari per utilitzar-la amb la mà esquerra.",
"show_step_ingredients_setting": "Mostra els Ingredients al costat dels passo de la recepta",
"show_step_ingredients_setting_help": "Afegir la taula d'ingredients al costat dels passos de la recepta. S'aplica al moment de la creació. Pot anul·lar-se des de la vista d'edició de la recepta.",
"show_step_ingredients": "Mostrar els ingredients de cada pas",
"hide_step_ingredients": "No mostrar els ingredients per passos",
"Custom Filter": "Filtre Personalitzat",
"shared_with": "Compartit amb",
"sort_by": "Ordenar per",
"asc": "Ordre ascendent",
"desc": "Ordre descendent",
"date_viewed": "Darreres Vistes",
"last_cooked": "Cuinades últimament",
"times_cooked": "Nombre de cops elaborada",
"date_created": "Data de creació",
"show_sortby": "Mostrar \"Ordenar per\"",
"search_rank": "Buscar per puntuació",
"make_now": "Cuinar Ara",
"Created": "Creada",
"Updated": "Actualitzada",
"Unchanged": "Sense Canvis",
"Error": "Error",
"make_now_count": "Com a màxim els ingredients que falten",
"recipe_filter": "Filtre de receptes",
"book_filter_help": "Incloure les receptes del filtre de receptes a més de les assignades manualment.",
"review_shopping": "Comprova els elements de la llista abans de desar",
"view_recipe": "Veure la recepta",
"copy_to_new": "Copiar nova recepta",
"recipe_name": "Nom de la recepta",
"paste_ingredients_placeholder": "Enganxar aquí la llista d'ingredients...",
"paste_ingredients": "Enganxar els ingredients",
"ingredient_list": "Llista d'ingredients",
"explain": "Explicar",
"filter": "Filtre",
"Website": "Lloc Web",
"App": "Aplicació",
"Message": "Missatge",
"Bookmarklet": "Marcadors",
"Sticky_Nav": "Barra de Navegació fixada",
"Sticky_Nav_Help": "Mostrar sempre el menú de navegació a la part superior de la pantalla.",
"Logo": "Logotip",
"Show_Logo": "Mostrar Logotip",
"Show_Logo_Help": "Mostrar el logotip de Tandoo o de l'espai a la barra de navegació.",
"Nav_Color": "Color de la Navegació",
"Nav_Text_Mode": "Mode de navegació per text",
"Nav_Text_Mode_Help": "Es comporta de forma diferent per cada tema.",
"Nav_Color_Help": "Canviar el color de navegació.",
"Space_Cosmetic_Settings": "Un administrador de l'espai podria canviar algunes configuracions estètiques i tindrien prioritat sobre la configuració dels usuaris per a aquest espai.",
"Use_Kj": "Utilitzar kJ en comptes de kcal",
"Comments_setting": "Mostrar comentaris",
"click_image_import": "Fes clic a la imatge que vols importar per a aquesta recepta",
"no_more_images_found": "No s'han trobat imatges addicionals en aquest lloc web.",
"import_duplicates": "Per evitar duplicats, s'ignoraran les receptes amb el mateix nom. Marqueu la casella per importar-ho tot.",
"paste_json": "Enganxeu una font json o html per carregar la recepta.",
"Click_To_Edit": "Clic per editar",
"search_no_recipes": "No s'ha trobat cap recepta!",
"search_import_help_text": "Importar una recepta d'un web extern o aplicació.",
"search_create_help_text": "Crear una nova recepta directament a Tandoor.",
"warning_duplicate_filter": "Avís: A causa de limitacions tècniques, tenir múltiples filtres de la mateixa combinació (i/o/no - and/or/not) pot causar resultats inesperats.",
"reset_children": "Restableix les herències i els fills o dependències",
"reset_children_help": "Sobreescriure tots els fills amb valors de camps heretats. Els camps heretats dels fills seran establerts a Camps Heretats llevat que s'hagi determinat uns Camps Heretats dels Fills.",
"reset_food_inheritance": "Restablir les herències/dependències",
"reset_food_inheritance_info": "Restablir tots els valors dels camps dels aliments heretats i els seus parents.",
"substitute_help": "Els substituts es tenen en compte quan es busquen receptes que es poden fer amb ingredients disponibles.",
"substitute_siblings_help": "Tots els aliments que comparteixen un pare amb aquest aliment es consideren substituts.",
"substitute_children_help": "Tots els aliments que són fills daquest menjar es consideren substituts.",
"substitute_siblings": "Germans substituts",
"substitute_children": "Fills substituts",
"SubstituteOnHand": "Tenen un substitut disponible.",
"ChildInheritFields": "Camps Heretats dels Fills",
"ChildInheritFields_help": "Els fills heretaran aquests camps per defecte.",
"InheritFields_help": "Els valors daquests camps sheretaran del pare (excepció: les categories de compra buides no shereten)",
"show_ingredients_table": "Mostra una taula dels ingredients al costat del text del pas",
"show_ingredient_overview": "Mostra una llista de tots els ingredients a l'inici de la recepta.",
"Ingredient Overview": "Visió general dels ingredients",
"last_viewed": "Vist per última vegada",
"created_on": "Creat el",
"updatedon": "Actualitzat El",
"Imported_From": "Importat de",
"advanced_search_settings": "Paràmetres de cerca avançada",
"nothing_planned_today": "No tens res planificat per avui!",
"no_pinned_recipes": "No tens cap recepta fixada!",
"Planned": "Planificat",
"Pinned": "Fixat",
"Imported": "Importat",
"Quick actions": "Accions Ràpides",
"Ratings": "Avaluació",
"Internal": "Intern",
"Units": "Unitats",
"Manage_Emails": "Administrar correus",
"Change_Password": "Canviar contrasenya",
"Social_Authentication": "Identificació amb Xarxes Socials",
"Random Recipes": "Receptes Aleatòries",
"parameter_count": "Paràmetre {count}",
"select_keyword": "Seleccionar paraula clau",
"add_keyword": "Afegir Paraula Clau",
"select_file": "Seleccionar Arxiu",
"select_recipe": "Seleccionar Recepta",
"select_unit": "Seleccionar Unitat",
"select_food": "Seleccionar Aliment",
"remove_selection": "Desseleccionar",
"empty_list": "La llista és buida.",
"Select": "Seleccionar",
"Supermarkets": "Supermercats",
"User": "Usuari",
"Username": "Nom d'Usuari",
"First_name": "Nom",
"Last_name": "Cognoms",
"Keyword": "Paraula clau",
"Advanced": "Avançat",
"Page": "Pàgina",
"Single": "Únic/a",
"Multiple": "Múltiple",
"Reset": "Restablir",
"Disabled": "Desactivat",
"Disable": "Desactivar",
"Enable": "Activat",
"Options": "Opcions",
"Create Food": "Crear aliment/ingredient",
"create_food_desc": "Crear un aliment i vincular-lo a aquesta recepta.",
"additional_options": "Opcions addicionals",
"Importer_Help": "Més informació i ajuda amb aquest importador:",
"Documentation": "Documentació",
"Select_App_To_Import": "Seleccioneu una aplicació des de la qual importar",
"Import_Supported": "Importació suportada",
"Export_Supported": "Exportació suportada",
"Import_Not_Yet_Supported": "Importació encara no suportada",
"Export_Not_Yet_Supported": "Exportació encara no suportada",
"Import_Result_Info": "{imported} de {total} receptes s'han importat",
"Recipes_In_Import": "Receptes al fitxer d'importació",
"Toggle": "Alternar",
"total": "total",
"Import_Error": "S'ha produït un error durant la importació. Si us plau, amplia els detalls a la part inferior de la pàgina per veure'l.",
"Warning_Delete_Supermarket_Category": "Si suprimiu una categoria de supermercat, també se suprimiran totes les relacions alimentàries. N'estàs segur?",
"New_Supermarket": "Crear nou supermercat",
"New_Supermarket_Category": "Crear nova categoria de supermercat",
"Are_You_Sure": "N'estàs segur?",
"Valid Until": "Vàlid fins",
"Split_All_Steps": "Dividir totes les files en passos separats.",
"Combine_All_Steps": "Combinar tots els passos en un sol camp.",
"Plural": "Plural",
"plural_short": "Plural",
"g": "gram [g] (mètric, pes)",
"kg": "Kilogram [kg] (mètric, pes)",
"ounce": "unça [oz] (pes)",
"pound": "lliura (pes)",
"ml": "mil·lilitre [ml] (mètrica, volum)",
"l": "litre [l] (mètric, volum)",
"fluid_ounce": "unça líquida [fl oz] (US, volum)",
"pint": "pinta [pt] (EUA, volum)",
"quart": "quart de galó [qt] (US, volum)",
"gallon": "galó [gal] (US, volum)",
"tbsp": "cullerada sopera [tbsp] (US, volum)",
"tsp": "culleradeta [tsp] (US, volum)",
"imperial_fluid_ounce": "unça líquida imperial [imp fl oz] (Regne Unit, volum)",
"imperial_pint": "Pinta imperial [imp pt] (Regne Unit, volum)",
"imperial_quart": "quart de galó imperial [imp qt] (Regne Unit, volum)",
"imperial_gallon": "galó imperial [imp gal] (Regne Unit, volum)",
"imperial_tbsp": "cullerada sopera imperial [imp tbsp] (Regne Unit, volum)",
"imperial_tsp": "culleradeta imperial [imp tsp] (Regne Unit, volum)",
"Choose_Category": "Escull Categoria",
"Back": "Enrere",
"Use_Plural_Unit_Always": "Utilitzar sempre el plural per a les unitats",
"Use_Plural_Unit_Simple": "Utilitzar la forma plural per les unitats de forma dinàmica",
"Use_Plural_Food_Always": "Fer servir sempre la forma plural pels aliments",
"Use_Plural_Food_Simple": "Utilitzar la forma plural per als aliments de manera dinàmica",
"plural_usage_info": "Utilitzar la forma plural per a les unitats i els aliments d'aquest grup.",
"Create Recipe": "Crear una recepta",
"Import Recipe": "Importar Recepta",
"Never_Unit": "No posar unitats mai",
"Transpose_Words": "Transposar paraules",
"Name_Replace": "Substituir el Nom",
"Food_Replace": "Aliment equivalent",
"Unit_Replace": "Substituir unitat",
"DefaultPage": "Pàgina per defecte",
"us_cup": "tassa [cup] (US, Volume)"
}

View File

@@ -534,5 +534,39 @@
"Transpose_Words": "Omstil ord",
"Name_Replace": "Erstat navn",
"Food_Replace": "Erstat ingrediens",
"Unit_Replace": "Erstat enhed"
"Unit_Replace": "Erstat enhed",
"Properties_Food_Unit": "Egenskaber Ingrediens Enhed",
"err_importing_recipe": "Der opstod en fejl under importeringen af opskriften!",
"Properties_Food_Amount": "Egenskaber Ingrediens Mængde",
"FDC_Search": "FDC søgning",
"Calculator": "Lommeregner",
"Undo": "Fortryd",
"NoMoreUndo": "Ingen ændringer at fortryde.",
"Input": "Input",
"Delete_All": "Slet alle",
"CustomNavLogoHelp": "Upload et billede til brug som navigationsbarrelogo.",
"ShowRecentlyCompleted": "Vis nyligt gennemførte emner",
"ShoppingBackgroundSyncWarning": "Dårligt netværk, afventer synkronisering ...",
"CustomTheme": "Personaliseret tema",
"CustomThemeHelp": "Overskriv det valgte temas stil ved at uploade en personlig CSS-fil.",
"property_type_fdc_hint": "Kun egenskabstyper med et FDC ID kan automatisk trække data fra FDC databasen",
"Property_Editor": "Egenskabsredaktør",
"us_cup": "cup (US, volumen)",
"Show_Logo_Help": "Vis Tandoor eller område-logo i navigationsbarre.",
"Nav_Text_Mode": "Navigation textmodus",
"Nav_Text_Mode_Help": "Opfører sig forskelligt for hvert tema.",
"Shopping_input_placeholder": "Fx kartoffel/100 kartofler/100g kartofler",
"CustomImageHelp": "Upload et billede for at vise dets plade i område-oversigten.",
"CustomLogoHelp": "Upload kvadratiske billeder i forskellige størrelser for at ændre logoet i browser-faneblad og installeret web-app.",
"CustomLogos": "Personlige logoer",
"Updated": "Opdateret",
"Unchanged": "Uændret",
"Error": "Fejl",
"Logo": "Logo",
"Show_Logo": "Vis logo",
"Space_Cosmetic_Settings": "Visse kosmetiske indstillinger kan ændres af område-administratorer og vil overskrive klient-indstillinger for pågældende område.",
"Enable": "Aktiver",
"created_by": "Skabt af",
"Created": "Skabt",
"DefaultPage": "Startside"
}

View File

@@ -95,7 +95,7 @@
"Categories": "categorias",
"Category": "Categoría",
"Selected": "Selecionado",
"min": "Mínimo",
"min": "Minutos",
"Servings": "Raciones",
"Waiting": "Esperando",
"Preparation": "Preparación",

View File

@@ -9,14 +9,14 @@
"success_updating_resource": "Resurssin päivitys onnistui!",
"success_deleting_resource": "Resurssin poistaminen onnistui!",
"file_upload_disabled": "Tiedoston lähetys ei ole käytössä tilassasi.",
"step_time_minutes": "Askelaika minuutteina",
"step_time_minutes": "Vaiheaika minuutteina",
"confirm_delete": "Haluatko varmasti poistaa tämän {object}?",
"import_running": "Tuonti käynnissä, odota!",
"import_running": "Tuonti käynnissä, ole hyvä ja odota!",
"all_fields_optional": "Kaikki kentät ovat valinnaisia ja voidaan jättää tyhjiksi.",
"convert_internal": "Muunna sisäiseksi reseptiksi",
"show_only_internal": "Näytä vain sisäiset reseptit",
"show_split_screen": "Jaettu näkymä",
"Log_Recipe_Cooking": "Kirjaa Reseptin Kokkaus",
"Log_Recipe_Cooking": "Kirjaa Reseptin valmistus",
"External_Recipe_Image": "Ulkoinen reseptin kuva",
"Add_to_Shopping": "Lisää ostoksiin",
"Add_to_Plan": "Lisää suunnitelmaan",
@@ -84,7 +84,7 @@
"Success": "Onnistui",
"Failure": "Epäonnistui",
"Ingredients": "Ainesosat",
"Supermarket": "Supermarket",
"Supermarket": "Kauppa",
"Categories": "Luokat",
"Category": "Luokka",
"Selected": "Valittu",
@@ -100,7 +100,7 @@
"Image": "Kuva",
"Delete": "Poista",
"Open": "Avaa",
"Ok": "Avaa",
"Ok": "Ok",
"Save": "Tallenna",
"Step": "Vaihe",
"Search": "Haku",
@@ -127,10 +127,10 @@
"Root": "Root",
"Ignore_Shopping": "Ohita Ostokset",
"Shopping_Category": "Ostosluokka",
"Edit_Food": "Muokkaa ruokaa",
"Move_Food": "Siirrä ruoka",
"New_Food": "Uusi ruoka",
"Hide_Food": "Piilota ruoka",
"Edit_Food": "Muokkaa Ruokaa",
"Move_Food": "Siirrä Ruoka",
"New_Food": "Uusi Ruoka",
"Hide_Food": "Piilota Ruoka",
"Food_Alias": "Ruoan nimimerkki",
"Unit_Alias": "Yksikköalias",
"Keyword_Alias": "Avainsana-alias",
@@ -149,7 +149,7 @@
"Type": "Tyyppi",
"Description": "Kuvaus",
"Recipe": "Resepti",
"tree_root": "Root of Tree",
"tree_root": "Puun juuri",
"Icon": "Kuvake",
"Unit": "Yksikkö",
"No_Results": "Ei Tuloksia",
@@ -167,7 +167,7 @@
"Key_Ctrl": "Ctrl",
"Key_Shift": "Shift",
"Time": "Aika",
"Text": "Teksi",
"Text": "Teksti",
"Shopping_list": "Ostoslista",
"Create_Meal_Plan_Entry": "Luo ateriasuunnitelma merkintä",
"Edit_Meal_Plan_Entry": "Muokkaa ateriasuunnitelma merkintää",
@@ -213,11 +213,311 @@
"success_merging_resource": "Resurssin yhdistäminen onnistui!",
"Search Settings": "Hakuasetukset",
"Shopping_Categories": "Ostoskategoriat",
"Plural": "",
"plural_short": "",
"Use_Plural_Unit_Always": "",
"Plural": "Monikko",
"plural_short": "monikko",
"Use_Plural_Unit_Always": "Käytä monikkomuotoa aina yksiköissä",
"Use_Plural_Unit_Simple": "",
"Use_Plural_Food_Always": "",
"Use_Plural_Food_Simple": "",
"plural_usage_info": ""
"plural_usage_info": "",
"FDC_ID": "FDC -tunnus",
"Account": "Tili",
"OfflineAlert": "Olet offline-tilassa, ostoslista ei välttämättä synkronoidu.",
"default_delay": "Oletus viivetunnit",
"Imported": "Tuotu",
"parameter_count": "Parametri {count}",
"add_keyword": "Lisää Avainsana",
"select_recipe": "Valitse Resepti",
"Disabled": "Ei käytössä",
"download_pdf": "Lataa PDF",
"API": "API",
"Instruction_Replace": "Vaihda Ohje",
"Description_Replace": "Vaihda Kuvaus",
"show_sql": "Näytä SQL",
"show_books": "Näytä Kirjat",
"Name_Replace": "Korvaa Nimi",
"Auto_Sort_Help": "Siirrä kaikki ainekset parhaiten sopivaan vaiheeseen.",
"reusable_help_text": "Pitäisikö kutsulinkin olla useamman kuin yhden käyttäjän käytettävissä.",
"Private_Recipe_Help": "Resepti näytetään vain sinulle ja ihmisille, joiden kanssa se jaetaan.",
"Theme": "Teema",
"Language": "Kieli",
"show_sortby": "Näytä lajitteluperusteella",
"date_created": "Luontipäivä",
"Day": "Päivä",
"simple_mode": "Yksinkertainen tila",
"shared_with": "Jaettu kanssa",
"desc": "Laskeva",
"Export_Not_Yet_Supported": "Vientiä ei vielä tueta",
"New_Supermarket": "Luo uusi kauppa",
"Ingredient Overview": "Ainesosien yleiskatsaus",
"recipe_property_info": "Voit myös lisätä elintarvikkeisiin ominaisuuksia laskeaksesi ne automaattisesti reseptisi perusteella !",
"Invites": "Kutsut",
"Datatype": "Tietotyyppi",
"Undo": "Kumoa",
"NoMoreUndo": "Ei peruttavia muutoksia.",
"StartDate": "Aloituspäivä",
"Ratings": "Luokitukset",
"Conversion": "Muuntaminen",
"Default_Unit": "Oletus Yksikkö",
"Undefined": "Määrittelemätön",
"related_recipes": "Samankaltaisia Reseptejä",
"Supermarkets": "Kaupat",
"Documentation": "Dokumentaatio",
"Create Food": "Luo Ruoka",
"total": "yhteensä",
"Unit_Replace": "Vaihda Yksikkö",
"Second": "Sekunti",
"select_unit": "Valitse Yksikkö",
"Units": "Yksikköä",
"Users": "Käyttäjät",
"Import_Supported": "Tuonti tuettu",
"Export_Supported": "Vienti tuettu",
"Food_Replace": "Korvaa Ruoka",
"Change_Password": "Vaihda Salasana",
"Auto_Sort": "Automaattinen Lajittelu",
"Social_Authentication": "Sosiaalinen Todennus",
"Page": "Sivu",
"RemoveFoodFromShopping": "Poista {food} ostoslistalta",
"err_importing_recipe": "Reseptin tuomisessa tapahtui virhe!",
"err_deleting_protected_resource": "Poistettava kohde on käytössä, eikä sitä voida poistaa.",
"per_serving": "per annos",
"Amount": "Määrä",
"Private_Recipe": "Yksityinen Resepti",
"Learn_More": "Lisätietoja",
"base_amount": "Perus määrä",
"Original_Text": "Alkuperäinen Teksti",
"copy_to_clipboard": "Kopioi Leikepöydälle",
"Ingredient Editor": "Ainesosien muokkaus",
"select_keyword": "Valitse Avainsana",
"CategoryInstruction": "Vedä luokkia muuttaaksesi luokkien järjestystä, jotka näkyvät ostoslistassa.",
"open_data_help_text": "Tandoori Open Data -projekti tarjoaa yhteisön toimittamaa dataa Tandoorille. Tämä kenttä täytetään automaattisesti tuonnin yhteydessä ja sallii päivitykset tulevaisuudessa.",
"Input": "Syöte",
"Manage_Emails": "Hallinnoi sähköposteja",
"NoCategory": "Luokkaa ei ole valittu.",
"food_inherit_info": "Kentät elintarvikkeista , jotka pitäisi periä oletuksena .",
"err_move_self": "Kohdetta ei voi siirtää itselleen",
"Pinned": "Kiinnitetty",
"Properties": "Ominaisuudet",
"show_filters": "Näytä Suodattimet",
"plan_share_desc": "Uudet ateriasuunnitelmat jaetaan automaattisesti valituille käyttäjille.",
"show_keywords": "Näytä Avainsanat",
"Update_Existing_Data": "Päivitä olemassa olevat tiedot",
"Single": "Yksittäinen",
"Days": "Päivää",
"import_duplicates": "Päällekkäisyyksien estämiseksi reseptit, joilla on sama nimi kuin olemassa olevat, ohitetaan. Valitse tämä ruutu tuodaksesi kaiken.",
"created_by": "Luonut",
"show_ingredient_overview": "Näytä luettelo kaikista ainesosista reseptin alussa.",
"ShoppingBackgroundSyncWarning": "Huono verkkoyhteys, odotetaan synkronointia ...",
"Select": "Valitse",
"Username": "Käyttäjänimi",
"Hours": "Tuntia",
"Seconds": "Sekuntia",
"nothing": "Ei mitään tekemistä",
"Quick actions": "Nopeat toimet",
"updatedon": "Päivitetty",
"shopping_share": "Jaa Ostoslista",
"Comments_setting": "Näytä Kommentit",
"created_on": "Luotu",
"IngredientInShopping": "Tämä ainesosa on ostoslistalla.",
"warning_space_delete": "Voit poistaa tilan sisältäen kaikki reseptit, kauppalistat, ruokasuunnitelmat ja muut luodut asiat. Tätä toimintoa ei voi peruuttaa! Oletko varma, että haluat poistaa tilan?",
"New_Supermarket_Category": "Luo uusi kauppa kategoria",
"download_csv": "Lataa CSV",
"Property": "Ominaisuus",
"l": "litra [l] (metrinen, tilavuus)",
"nothing_planned_today": "Tälle päivälle ei ole suunniteltu mitään!",
"SuccessClipboard": "Ostoslista kopioitu leikepöydälle",
"Delete_All": "Poista kaikki",
"reset_food_inheritance_info": "Palauta kaikki ruoat oletusarvoisiin perittyihin kenttiin ja niiden pääarvoihin.",
"Foods": "Ruuat",
"mealplan_autoinclude_related": "Lisää Samankaltaisia Reseptejä",
"Use_Metric": "Käytä metrisiä yksiköitä",
"Data_Import_Info": "Paranna tilaasi tuomalla yhteisön kuratoitu luettelo ruoista, yksiköistä ja muusta parantaaksesi reseptikokoelmaasi .",
"FDC_ID_help": "FDC tietokanta tunnus",
"property_type_fdc_hint": "Vain ominaisuustyypit , joilla on FDC-tunnus, voivat automaattisesti noutaa tietoja FDC-tietokannasta",
"EndDate": "Lopetuspäivä",
"Shopping_input_placeholder": "esimerkiksi Peruna/100 Perunaa/100 g perunoita",
"Property_Editor": "Ominaisuuden Muokkaus",
"Decimals": "Desimaalit",
"and_down": "& Alas",
"Warning": "Varoitus",
"enable_expert": "Ota Asiantuntija-tila käyttöön",
"expert_mode": "Asintuntija-tila",
"SupermarketName": "Kaupan Nimi",
"advanced": "Edistynyt",
"AddToShopping": "Lisää ostoslistalle",
"Added_on": "Lisätty",
"show_foods": "Näytä Ruuat",
"Added_by": "Lisännyt",
"remove_selection": "Poista valinta",
"User": "Käyttäjä",
"First_name": "Etunimi",
"Last_name": "Sukunimi",
"Keyword": "Avainsana",
"Internal": "Sisäinen",
"Error": "Virhe",
"last_cooked": "Viimeksi Tehty",
"times_cooked": "Kertaa Tehty",
"Updated": "Päivitetty",
"explain": "Selitä",
"show_rating": "Näytä Arvostelu",
"Imported_From": "Tuotu",
"App": "Applikaatio",
"Disable": "Poista käytöstä",
"Enable": "Ota käyttöön",
"Options": "Vaihtoehdot",
"create_food_desc": "Luo ruoka ja linkitä se tähän reseptiin.",
"Advanced": "Edistynyt",
"Reset": "Nollaa",
"New_Entry": "Uusi Merkintä",
"additional_options": "Lisäasetukset",
"DeleteShoppingConfirm": "Oletko varma, että haluat poistaa kaikki {food} ostoslistalta?",
"AddFoodToShopping": "Lisää {food} ostoslistaan",
"Add_Servings_to_Shopping": "Lisää {servings} Annoksia Ostoksiin",
"one_url_per_line": "Yksi URL -osoite riviä kohden",
"in_shopping": "Ostoslistalla",
"Hour": "Tunti",
"err_merge_self": "Kohdetta ei voi yhdistää itseensä",
"CategoryName": "Kategorian Nimi",
"Cosmetic": "Ulkoasu",
"Welcome": "Tervetuloa",
"Random Recipes": "Satunnainen Resepti",
"paste_json": "Liitä JSON tai HTML -lähde tähän, reseptin lataamiseksi.",
"Click_To_Edit": "Muokkaa napsauttamalla",
"search_no_recipes": "Reseptejä ei löytynyt!",
"no_pinned_recipes": "Sinulla ei ole kiinnitettyjä reseptejä!",
"last_viewed": "Viimeksi Katsottu",
"Planned": "Suunniteltu",
"advanced_search_settings": "Haun lisäasetukset",
"select_file": "Valitse Tiedosto",
"select_food": "Valitse Ruoka",
"empty_list": "Lista on tyhjä.",
"Multiple": "Useampi",
"NotInShopping": "{food} ei ole ostoslistalla.",
"Are_You_Sure": "Oletko varma?",
"Message": "Viesti",
"g": "gramma [g] (metrinen, paino)",
"Valid Until": "Voimassa Asti",
"Logo": "Logo",
"Split_All_Steps": "Jaa kaikki rivit erillisiin vaiheisiin.",
"Show_Logo": "Näytä Logo",
"CustomLogos": "Mukautetut Logot",
"ml": "millimetri [ml] (metrinen, tilavuus)",
"Back": "Takaisin",
"Choose_Category": "Valitse Kategoria",
"Calculator": "Laskin",
"converted_amount": "Muunnettu Määrä",
"base_unit": "Perusyksikkö",
"FDC_Search": "FDC Haku",
"converted_unit": "Muunnettu Yksikkö",
"Copy Link": "Kopioi Linkki",
"Copy Token": "Kopioi Token",
"date_viewed": "Viimeksi Katsottu",
"DefaultPage": "Oletussivu",
"Import_Not_Yet_Supported": "Tuontia ei vielä tueta",
"kg": "kilogramma [kg] (metrinen, paino)",
"Import Recipe": "Tuo Resepti",
"Use_Fractions_Help": "Muunna desimaalit automaattisesti murtoluvuiksi reseptiä katsoessa.",
"MoveCategory": "Siirrä paikkaan: ",
"ShowUncategorizedFood": "Näytä määrittelemätön",
"IgnoreThis": "Älä koskaan lisää {food} automaattisesti ostoksiin.",
"mark_complete": "Merkitse Valmiiksi",
"CountMore": "...+{count} enemmän",
"ShowRecentlyCompleted": "Näytä äskettäin valmistuneet kohteet",
"ShowDelayed": "Näytä viivästyneet kohteet",
"filter_to_supermarket": "Suodata Kauppaan",
"Open_Data_Slug": "Avaa Data Slug",
"Open_Data_Import": "Avaa Tietojen tuonti",
"Properties_Food_Amount": "Ominaisuudet Ruuan Määrä",
"Properties_Food_Unit": "Ominaisuudet Ruuan Yksikkö",
"OrderInformation": "Kohteet on järjestetty pienimmästä suurimpaan määrinä.",
"mealplan_autoadd_shopping_desc": "Lisää ateriasuunnitelman ainesosat automaattisesti ostoslistalle.",
"Inherit": "Periä",
"DelayFor": "Viivytä {hours} tuntia",
"shopping_auto_sync_desc": "Arvon 0 asettaminen poistaa automaattisen synkronoinnin käytöstä . Kun tarkastelet ostoslistaa, luettelo päivitetään joka sekunti jonkun muun mahdollisesti tekemien muutosten synkronoimiseksi. Hyödyllinen ostaessasi useiden ihmisten kanssa, mutta käyttää mobiilidataa.",
"Alignment": "Tasaus",
"Use_Fractions": "Käytä murtolukuja",
"mealplan_autoadd_shopping": "Lisää Ateriasuunnitelma automaattisesti",
"Unpin": "Poista Kiinnitys",
"Protected": "Suojattu",
"FoodNotOnHand": "Sinulla ei ole {food} saatavilla.",
"InheritFields": "Peri kenttien arvot",
"FoodInherit": "Ruoan perinnölliset kentät",
"GroupBy": "Ryhmittely peruste",
"Create_New_Shopping_Category": "Lisää uusi ostoskategoria",
"SupermarketCategoriesOnly": "Vain Kaupan kategoriat",
"InheritWarning": "{food} on asetettu perittäväksi, muutokset ei välttämättä säily.",
"mealplan_autoexclude_onhand": "Sulje pois saatavilla oleva Ruoka",
"shopping_share_desc": "Käyttäjät näkevät kaikki tuotteet, jotka lisäät ostoslistallesi. Heidän on lisättävä sinut nähdäksesi kohteet heidän ostoslistoissa.",
"default_delay_desc": "Oletus viive tunteina ostoslistaan viemiseen.",
"Select_App_To_Import": "Valitse sovellus, josta haluat tuoda",
"Importer_Help": "Lisätietoja ja apua tästä Tuonnista:",
"IgnoredFood": "{food} on asetettu ohittamaan ostokset.",
"Completed": "Valmis",
"shopping_auto_sync": "Automaattinen synkronointi",
"mealplan_autoexclude_onhand_desc": "Kun lisäät ateriasuunnitelman ostoslistalle (manuaalisesti tai automaattisesti), sulje pois tällä hetkellä saatavilla olevat ainesosat .",
"filter_to_supermarket_desc": "Oletusarvoisesti suodata ostoslista niin, että se sisältää vain valitun kaupan kategoriat.",
"DelayUntil": "Viive asti",
"PinnedConfirmation": "{recipe} on kiinnitetty.",
"mealplan_autoinclude_related_desc": "Kun lisäät ateriasuunnitelman ostoslistalle (manuaalisesti tai automaattisesti), sisällytä kaikki siihen liittyvät reseptit.",
"Pin": "Kiinnitä",
"UnpinnedConfirmation": "{recipe} on poistettu kiinnityksestä.",
"FoodOnHand": "Sinulla on {food} saatavilla.",
"OnHand": "Tällä hetkellä saatavilla",
"CustomImageHelp": "Lataa kuva näytettäväksi tilan yleiskatsauksessa.",
"CustomLogoHelp": "Lataa erikokoisia neliön muotoisia kuvia, jotka muuttuvat logoksi selaimen välilehdellä ja asennetussa verkkosovelluksessa.",
"CustomTheme": "Mukautettu Teema",
"CustomThemeHelp": "Ohita valitun teeman tyylit lataamalla mukautettu CSS-tiedosto.",
"CustomNavLogoHelp": "Lataa kuva käytettäväksi navigointipalkin logona.",
"Number of Objects": "Objektien määrä",
"Recipes_In_Import": "Reseptit tuonti tiedostossasi",
"shopping_recent_days": "Viimä päivinä",
"shopping_add_onhand_desc": "Merkitse ruoka \"Saatavilla\", kun se on valittu ostoslistalta.",
"shopping_add_onhand": "Auto Saatavilla",
"shopping_recent_days_desc": "Päiviä viimeisimmästä ostoslista merkinnästä.",
"view_recipe": "Näytä Resepti",
"asc": "Nouseva",
"sort_by": "Lajitteluperuste",
"Custom Filter": "Mukautettu Suodatin",
"copy_to_new": "Kopioi Uuteen Reseptiin",
"today_recipes": "Tämän päivän Reseptit",
"sql_debug": "SQL Virhe Paikannus",
"remember_search": "Muista Haku",
"fields": "Kentät",
"recipe_filter": "Resepti Suodatin",
"recipe_name": "Reseptin Nimi",
"remember_hours": "Tunteja muistettavana",
"tree_select": "Käytä puu valintaa",
"OnHand_help": "Ruoka on varastossa, eikä sitä lisätä automaattisesti ostoslistalle. Saatavilla -tila jaetaan ostosten käyttäjien kanssa.",
"ingredient_list": "Ainesosaluettelo",
"ignore_shopping_help": "Älä koskaan lisää ostoslistalle ruokaa (esim. vesi)",
"shopping_category_help": "Kauppoja voi tilata ja suodattaa ostoskategorioiden mukaan käytävien asettelun mukaan.",
"food_recipe_help": "Reseptin linkittäminen tähän sisällyttää linkitetyn reseptin kaikkiin muihin tätä ruokaa käyttäviin resepteihin",
"show_units": "Näytä Yksiköt",
"show_step_ingredients": "Näytä Vaiheen Ainesosat",
"hide_step_ingredients": "Piilota Vaiheen Ainesosat",
"Created": "Luotu",
"Unchanged": "Muuttumaton",
"paste_ingredients": "Liitä ainekset",
"paste_ingredients_placeholder": "Liitä ainesosaluettelo tähän...",
"make_now": "Tee Nyt",
"csv_delim_label": "CSV Erotin",
"save_filter": "Tallenna suodatin",
"filter_name": "Suodattimen nimi",
"left_handed_help": "Optimoin käyttöliittymän käytettäväksi vasemmalle kädelle.",
"make_now_count": "Enintään puuttuvat ainesosat",
"not": "ei ole",
"left_handed": "Vasenkätinen tila",
"filter": "Suodatin",
"copy_markdown_table": "Kopioi merkintätaulukkona",
"csv_prefix_label": "Luettelon etuliite",
"csv_delim_help": "Erotin käytettäväksi CSV-viennissä.",
"csv_prefix_help": "Etuliite, joka lisätään kopioitaessa luetteloa leikepöydälle.",
"review_shopping": "Tarkista ostosmerkinnät ennen tallentamista",
"Bookmarklet": "Kirjamerkki",
"QuickEntry": "Nopea lisäys",
"show_step_ingredients_setting_help": "Lisää ainesosa-taulukko resepti vaiheiden viereen . Voimassa luomis hetkellä. Voidaan ohittaa reseptin muokkaus näkymässä .",
"search_rank": "Haku Sijoitus",
"book_filter_help": "Sisällytä reseptisuodattimen reseptit manuaalisesti määritettyjen reseptien lisäksi.",
"Website": "Verkkosivusto",
"show_step_ingredients_setting": "Näytä ainekset resepti vaiheiden vieressä"
}

572
vue/src/locales/hr.json Normal file
View File

@@ -0,0 +1,572 @@
{
"warning_feature_beta": "Ova značajka trenutno je u BETA (testnom) stanju. Očekujte bugove i moguće promjene koje će pokvariti značajku u budućnosti (mogućigubitak podataka koji se odnose na značajke) kada koristite ovu značajku.",
"err_fetching_resource": "Došlo je do pogreške prilikom dohvaćanja resursa!",
"err_creating_resource": "Došlo je do pogreške prilikom izrade resursa!",
"err_updating_resource": "Došlo je do pogreške prilikom ažuriranja resursa!",
"err_deleting_resource": "Došlo je do pogreške prilikom brisanja resursa!",
"err_deleting_protected_resource": "Objekt koji pokušavate izbrisati još uvijek se koristi i ne može se izbrisati.",
"err_moving_resource": "Došlo je do pogreške pri premještanju resursa!",
"err_merging_resource": "Došlo je do pogreške prilikom spajanja resursa!",
"err_importing_recipe": "Došlo je do pogreške prilikom uvoza recepta!",
"success_fetching_resource": "Resurs je uspješno dohvaćen!",
"success_creating_resource": "Resurs je uspješno kreiran!",
"success_updating_resource": "Resurs je uspješno ažuriran!",
"success_deleting_resource": "Resurs je uspješno obrisan!",
"success_moving_resource": "Resurs je uspješno premješten!",
"success_merging_resource": "Resurs je uspješno spojen!",
"file_upload_disabled": "Prijenos datoteka nije omogućen za vaš prostor.",
"recipe_property_info": "Možete dodavati i svojstva namirnici kako biste ih automatski izračunali na temelju Vašeg recepta!",
"warning_space_delete": "Možete izbrisati svoj prostor uključujući sve recepte, popise za kupovinu, planove obroka i sve ostalo što ste stvorili. Ovo se ne može poništiti! Jeste li sigurni da to želite učiniti?",
"food_inherit_info": "Polja na namirnici koja bi trebala biti naslijeđena prema zadanim postavkama.",
"step_time_minutes": "Vrijeme koraka u minutama",
"confirm_delete": "Jeste li sigurni da želite izbrisati ovaj {objekt}?",
"import_running": "Uvoz je u tijeku, molimo pričekajte!",
"all_fields_optional": "Sva polja su opcionalna i mogu se ostaviti prazna.",
"convert_internal": "Pretvori u interni recept",
"show_only_internal": "Prikaži samo interne recepte",
"show_split_screen": "Podijeljeni prikaz",
"Log_Recipe_Cooking": "Dnevnik recepata kuhanja",
"External_Recipe_Image": "Slika vanjskog recepta",
"Add_to_Shopping": "Dodaj u Kupnju",
"Add_to_Plan": "Dodaj u Plan",
"Step_start_time": "Vrijeme početka koraka",
"Sort_by_new": "Poredaj po novom",
"Table_of_Contents": "Sadržaj",
"Recipes_per_page": "Recepata po stranici",
"Show_as_header": "Prikaži kao zaglavlje",
"Hide_as_header": "Sakrij kao zaglavlje",
"Add_nutrition_recipe": "Dodajte hranjive sastojke u recept",
"Remove_nutrition_recipe": "Izbrišite hranjive sastojke iz recepta",
"Copy_template_reference": "Kopiraj referencu predloška",
"per_serving": "po porcijama",
"Save_and_View": "Spremi i pogledaj",
"Manage_Books": "Upravljaj knjigama",
"Meal_Plan": "Plan obroka",
"Select_Book": "Odaberite Knjigu",
"Select_File": "Odaberite datoteku",
"Recipe_Image": "Slika recepta",
"Import_finished": "Uvoz završen",
"View_Recipes": "Pogledajte recepte",
"Log_Cooking": "Zapis kuhanja",
"New_Recipe": "Novi Recept",
"Url_Import": "URL uvoz",
"Reset_Search": "Poništi pretragu",
"Recently_Viewed": "Nedavno pogledano",
"Load_More": "Učitaj više",
"New_Keyword": "Nova ključna riječ",
"Delete_Keyword": "Obriši ključnu riječ",
"Edit_Keyword": "Uredi ključnu riječ",
"Edit_Recipe": "Uredi Recept",
"Move_Keyword": "Premjesti ključnu riječ",
"Merge_Keyword": "Spoji ključnu riječ",
"Hide_Keywords": "Sakrij ključnu riječ",
"Hide_Recipes": "Sakrij Recepte",
"Move_Up": "Premjesti gore",
"Move_Down": "Premjesti dolje",
"Step_Name": "Naziv koraka",
"Step_Type": "Vrsta koraka",
"Make_Header": "Napravi zaglavlje",
"Make_Ingredient": "Napravi sastojak",
"Amount": "Količina",
"Enable_Amount": "Omogući količinu",
"Disable_Amount": "Onemogući količinu",
"Ingredient Editor": "Uređivač sastojaka",
"Description_Replace": "Zamijeni opis",
"Instruction_Replace": "Zamijeni uputu",
"Auto_Sort": "Automatsko sortiranje",
"Auto_Sort_Help": "Pomaknite sve sastojke na najprikladniji korak.",
"Private_Recipe": "Privatni Recept",
"Private_Recipe_Help": "Recept se prikazuje samo vama i osobama s kojima se dijeli.",
"reusable_help_text": "Treba li veza s pozivnicom biti upotrebljiva za više od jednog korisnika.",
"open_data_help_text": "Tandoor Open Data projekt pruža podatke koje je zajednica doprinijela Tandooru. Ovo se polje automatski popunjava prilikom uvoza i dopušta ažuriranja u budućnosti.",
"Open_Data_Slug": "Open Data Slug",
"Open_Data_Import": "Otvorite uvoz podataka",
"Properties_Food_Amount": "Svojstva Količina namirnice",
"Properties_Food_Unit": "Svojstva Jedinica namirnice",
"Calculator": "Kalkulator",
"FDC_ID": "FDC ID",
"FDC_Search": "FDC Pretraga",
"FDC_ID_help": "FDC ID baze podataka",
"property_type_fdc_hint": "Samo tipovi svojstva s FDC ID-om mogu automatski povući podatke iz FDC baze podataka",
"Data_Import_Info": "Unaprijedite svoj prostor uvozom popisa namirnica, jedinica i još mnogo toga koje je pripremila zajednica kako biste poboljšali svoju kolekciju recepata.",
"Update_Existing_Data": "Ažurirajte postojeće podatke",
"Use_Metric": "Koristite metričke jedinice",
"Learn_More": "Saznajte više",
"converted_unit": "Pretvorena jedinica",
"converted_amount": "Pretvorena količina",
"base_unit": "Osnovna jedinica",
"base_amount": "Osnovna Količina",
"Datatype": "Tip podataka",
"Input": "Unos",
"Undo": "Poništi",
"NoMoreUndo": "Nema promjena koje se mogu poništiti.",
"Number of Objects": "Broj objekata",
"Add_Step": "Dodaj korak",
"Keywords": "Ključne riječi",
"Books": "Knjige",
"Proteins": "Proteini",
"Fats": "Masti",
"Carbohydrates": "Ugljikohidrati",
"Calories": "Kalorije",
"Energy": "Energija",
"Nutrition": "Nutritivna vrijednost",
"Date": "Datum",
"StartDate": "Početni datum",
"EndDate": "Završni datum",
"Share": "Podijeli",
"Automation": "Automatizacija",
"Parameter": "Parametar",
"Export": "Izvoz",
"Copy": "Kopiraj",
"Rating": "Ocjena",
"Close": "Zatvori",
"Cancel": "Otkaži",
"Link": "Poveznica",
"Add": "Dodaj",
"New": "Novi",
"Note": "Bilješka",
"Alignment": "Poravnanje",
"Success": "Uspješno",
"Failure": "Neuspješno",
"Protected": "Zaštićeno",
"Ingredients": "Sastojci",
"Supermarket": "Supermarket",
"Categories": "Kategorije",
"Category": "Kategorija",
"Selected": "Odabrano",
"min": "min",
"Servings": "Porcije",
"Waiting": "Čekanje",
"Preparation": "Priprema",
"External": "Vanjski",
"Size": "Veličina",
"Files": "Datoteke",
"File": "Datoteka",
"Edit": "Uredi",
"Image": "Slika",
"Delete": "Obriši",
"Delete_All": "Obriši sve",
"Open": "Otvori",
"Ok": "Ok",
"Save": "Spremi",
"Step": "Korak",
"Search": "Pretraga",
"Import": "Uvoz",
"Print": "Ispis",
"Settings": "Postavke",
"or": "ili",
"and": "i",
"Information": "Informacije",
"Download": "Preuzimanje",
"Create": "Stvori",
"Search Settings": "Postavke pretrage",
"View": "Pogled",
"Recipes": "Recepti",
"Welcome": "Dobrodošli",
"Move": "Premjesti",
"Merge": "Spoji",
"Parent": "Roditelj",
"Copy Link": "Kopiraj vezu",
"Copy Token": "Kopiraj token",
"delete_confirmation": "Jeste li sigurni da želite izbrisati {source}?",
"move_confirmation": "Premjesti <i>{child}</i> u roditelja <i>{parent}</i>",
"merge_confirmation": "Zamijenite <i>{source}</i> s <i>{target}</i>",
"create_rule": "i stvoriti automatizaciju",
"move_selection": "Odaberite nadređenu {type} na koju želite premjestiti {source}.",
"merge_selection": "Zamijeni sva pojavljivanja {source} s odabranom {type}.",
"Root": "Korijen",
"Ignore_Shopping": "Ignoriraj Kupovinu",
"Shopping_Category": "Kategorija Kupovine",
"Shopping_Categories": "Kategorije Kupovine",
"Shopping_input_placeholder": "npr. Krumpir/100 Krumpira/100 g Krumpira",
"Edit_Food": "Uredi Namirnicu",
"Move_Food": "Premjesti namirnicu",
"New_Food": "Nova namirnica",
"Hide_Food": "Sakrij namirnicu",
"Food_Alias": "Nadimci namirnice",
"Unit_Alias": "Nadimci jadinice",
"Keyword_Alias": "Nadimci ključne riječi",
"Delete_Food": "Obriši namirnicu",
"No_ID": "ID nije pronađen, ne može se izbrisati.",
"Meal_Plan_Days": "Budući planovi obroka",
"merge_title": "Spoji {type}",
"move_title": "Premjesti {type}",
"Food": "Namirnica",
"Property": "Svojstvo",
"Property_Editor": "Urednik svojstva",
"Conversion": "Konverzija",
"Original_Text": "Izvorni tekst",
"Recipe_Book": "Knjiga recepata",
"del_confirmation_tree": "Jeste li sigurni da želite izbrisati {source} i svu njegovu djecu?",
"delete_title": "Obriši {type}",
"create_title": "Novi {type}",
"edit_title": "Uredi {type}",
"Name": "Naziv",
"Properties": "Svojstva",
"Type": "Vrsta",
"Description": "Opis",
"Recipe": "Recept",
"tree_root": "Korijen stabla",
"Icon": "Ikona",
"Unit": "Jedinica",
"Decimals": "Decimale",
"Default_Unit": "Zadana jedinica",
"No_Results": "Nema rezultata",
"New_Unit": "Nova jedinica",
"Create_New_Shopping Category": "Kreiraj novu kategoriju za kupovinu",
"Create_New_Food": "Dodaj novu namirnicu",
"Create_New_Keyword": "Dodaj novu ključnu riječ",
"Create_New_Unit": "Dodaj novu jedinicu",
"Create_New_Meal_Type": "Dodaj novu vrstu obroka",
"Create_New_Shopping_Category": "Dodaj novu kategoriju za kupovinu",
"and_up": "& gore",
"and_down": "& dolje",
"Instructions": "Upute",
"Unrated": "Bez ocjene",
"Automate": "Automatiziraj",
"Empty": "Prazno",
"Key_Ctrl": "Ctrl",
"Key_Shift": "Shift",
"Time": "Vrijeme",
"Text": "Tekst",
"Shopping_list": "Popis za kupovinu",
"Added_by": "Dodao",
"Added_on": "Dodano",
"AddToShopping": "Dodaj na popis za kupovinu",
"IngredientInShopping": "Ovaj se sastojak nalazi na vašem popisu za kupovinu.",
"NotInShopping": "{food} nije na vašem popisu za kupovinu.",
"OnHand": "Trenutno pri ruci",
"FoodOnHand": "Imate {food} pri ruci.",
"FoodNotOnHand": "Nemate {food} pri ruci.",
"Undefined": "Nedefinirano",
"Create_Meal_Plan_Entry": "Kreirajte unos plana obroka",
"Edit_Meal_Plan_Entry": "Uredi unos plana obroka",
"Title": "Naslov",
"Week": "Tjedan",
"Month": "Mjesec",
"Year": "Godina",
"created_by": "Kreirao",
"Planner": "Planer",
"Planner_Settings": "Postavke Planera",
"Period": "Razdoblje",
"Plan_Period_To_Show": "Prikaži tjedne, mjesece ili godine",
"Periods": "Periodi",
"Plan_Show_How_Many_Periods": "Koliko razdoblja prikazati",
"Starting_Day": "Početni dan u tjednu",
"Meal_Types": "Tipovi obroka",
"Meal_Type": "Tip obroka",
"New_Entry": "Novi unos",
"Clone": "Kloniraj",
"Drag_Here_To_Delete": "Povuci ovdje za brisanje",
"Meal_Type_Required": "Potreban je tip obroka",
"Title_or_Recipe_Required": "Potreban je odabir naslova ili recepta",
"Color": "Boja",
"New_Meal_Type": "Novi tip obroka",
"Use_Fractions": "Koristi razlomke",
"Use_Fractions_Help": "Automatski pretvori decimale u razlomke prilikom pregleda recepta.",
"AddFoodToShopping": "Dodaj {food} na svoj popis za kupovinu",
"RemoveFoodFromShopping": "Ukloni {food} sa svog popisa za kupovinu",
"DeleteShoppingConfirm": "Jesi li siguran da želiš ukloniti svu {food} s popisa za kupnju?",
"IgnoredFood": "{food} je postavljeno da zanemari kupovinu.",
"Add_Servings_to_Shopping": "Dodaj {servings} obroka u Kupovinu",
"Week_Numbers": "Brojevi tjedana",
"Show_Week_Numbers": "Prikaži brojeve tjedana?",
"Export_As_ICal": "Izvoz tekućeg razdoblja u iCal format",
"Export_To_ICal": "Izvoz .ics",
"Cannot_Add_Notes_To_Shopping": "Bilješke se ne mogu dodati na popis za kupovinu",
"Added_To_Shopping_List": "Dodano na popis za kupovinu",
"Shopping_List_Empty": "Popis za kupovinu trenutno je prazan, artikle možeš dodati putem kontekstnog izbornika unosa plana obroka (desni klik na karticu ili lijevi klik na ikonu izbornika)",
"Next_Period": "Slijedeće razdoblje",
"Previous_Period": "Prethodno razdoblje",
"Current_Period": "Trenutno razdoblje",
"Next_Day": "Sljedeći dan",
"Previous_Day": "Prethodni dan",
"Inherit": "Naslijedi",
"InheritFields": "Naslijedi vrijednosti polja",
"FoodInherit": "Nasljedna polja namirnice",
"ShowUncategorizedFood": "Prikaži Nedefinirano",
"GroupBy": "Grupiraj po",
"Language": "Jezik",
"Theme": "Tema",
"CustomTheme": "Prilagođena tema",
"CustomThemeHelp": "Nadjačaj stilove odabrane teme učitavanjem prilagođene CSS datoteke.",
"CustomImageHelp": "Učitaj sliku za prikaz u pregledu prostora.",
"CustomNavLogoHelp": "Učitaj sliku koju ćeš koristiti kao logotip navigacijske trake.",
"CustomLogoHelp": "Učitaj kvadratne slike u različitim veličinama da bi ih promijenio u logotip na kartici preglednika i instaliranoj web-aplikaciji.",
"CustomLogos": "Prilagođeni logotipi",
"SupermarketCategoriesOnly": "Samo kategorije supermarketa",
"MoveCategory": "Premjesti u: ",
"CountMore": "...+ još {count}",
"IgnoreThis": "Nikada nemoj automatski dodavati {food} u kupovinu",
"DelayFor": "Odgodi {hours} sati",
"Warning": "Upozorenje",
"NoCategory": "Nije odabrana kategorija.",
"InheritWarning": "{food} je postavljeno na nasljeđivanje, promjene se možda neće održati.",
"ShowDelayed": "Prikaži odgođene stavke",
"ShowRecentlyCompleted": "Prikaži nedavno dovršene stavke",
"Completed": "Završeno",
"OfflineAlert": "Nisi na mreži, popis za kupnju se možda neće sinkronizirati.",
"ShoppingBackgroundSyncWarning": "Loša mreža, čeka se sinkronizacija...",
"shopping_share": "Podijeli popis za kupovinu",
"shopping_auto_sync": "Automatska sinkronizacija",
"one_url_per_line": "Jedan URL po retku",
"mealplan_autoadd_shopping": "Automatsko dodavanje plana obroka",
"mealplan_autoexclude_onhand": "Isključite namirnice \"Pri ruci\"",
"mealplan_autoinclude_related": "Dodajte srodne recepte",
"default_delay": "Zadani sati odgode",
"plan_share_desc": "Novi unosi plana obroka automatski će se dijeliti s odabranim korisnicima.",
"shopping_share_desc": "Korisnici će vidjeti sve artikle koje dodate na svoj popis za kupnju. Moraju vas dodati da biste vidjeli stavke na njihovom popisu.",
"shopping_auto_sync_desc": "Postavljanje na 0 onemogućit će automatsku sinkronizaciju. Kada gledate popis za kupnju, popis se ažurira svakih postavljenih sekundi kako bi se sinkronizirale promjene koje je netko drugi možda napravio. Korisno kada kupujete s više ljudi, ali će koristiti mobilne podatke.",
"mealplan_autoadd_shopping_desc": "Automatski dodajte sastojke plana obroka na popis za kupnju.",
"mealplan_autoexclude_onhand_desc": "Kada dodajete plan obroka na popis za kupnju (ručno ili automatski), isključite sastojke koji su trenutno pri ruci.",
"mealplan_autoinclude_related_desc": "Kada dodajete plan obroka na popis za kupovinu (ručno ili automatski), uključite sve povezane recepte.",
"default_delay_desc": "Zadani broj sati za odgodu unosa na popis za kupovinu.",
"filter_to_supermarket": "Filtrirajte do supermarketa",
"Coming_Soon": "Dolazi uskoro",
"Auto_Planner": "Automatski planer",
"New_Cookbook": "Nova kuharica",
"Hide_Keyword": "Sakrij ključne riječi",
"Hour": "Sat",
"Hours": "Sati",
"Day": "Dan",
"Days": "Dana",
"Second": "Sekunda",
"Seconds": "Sekundi",
"Clear": "Očisti",
"Users": "Korisnici",
"Invites": "Pozivnice",
"err_move_self": "Nije moguće premjestiti stavku u samu sebe",
"nothing": "Ništa za napraviti",
"err_merge_self": "Stavka se ne može spojiti sama sa sobom",
"show_sql": "Prikaži SQL",
"filter_to_supermarket_desc": "Prema zadanim postavkama filtriraj popis za kupovinu tako da uključuje samo kategorije za odabrani supermarket.",
"CategoryName": "Naziv kategorije",
"SupermarketName": "Naziv Supermarketa",
"CategoryInstruction": "Povuci kategorije kako bi promijenio redoslijed kategorijea narudžbi koje se pojavljuju na popisu za kupnju.",
"OrderInformation": "Objekti su poredani od malog prema velikom broju.",
"shopping_recent_days_desc": "Dani nedavnih unosa na popis za kupnju za prikaz.",
"shopping_recent_days": "Nedavni dani",
"download_pdf": "Preuzmi PDF",
"download_csv": "Preuzmi CSV",
"csv_delim_help": "Razdjelnik koji se koristi za CSV izvoze.",
"csv_delim_label": "CSV Razdjelnik",
"SuccessClipboard": "Popis za kupnju kopiran je u međuspremnik",
"copy_to_clipboard": "Kopiraj u međuspremnik",
"csv_prefix_help": "Prefiks koji se dodaje prilikom kopiranja popisa u međuspremnik.",
"csv_prefix_label": "Prefiks popisa",
"copy_markdown_table": "Kopiraj kao tablicu označavanja",
"in_shopping": "Na popisu za kupovinu",
"DelayUntil": "Odgodi do",
"Pin": "Prikvači",
"Unpin": "Otkvači",
"PinnedConfirmation": "{recept} je prikvačen.",
"UnpinnedConfirmation": "{recept} je otkvačen.",
"mark_complete": "Označi kao dovršeno",
"QuickEntry": "Brzi unos",
"shopping_add_onhand_desc": "Označite namirnice \"pri ruci\" kada je označena s popisa za kupovinu.",
"shopping_add_onhand": "Auto \"pri ruci\"",
"related_recipes": "Povezani recepti",
"today_recipes": "Današnji recepti",
"sql_debug": "SQL otklanjanje pogrešaka",
"remember_search": "Zapamti Pretraživanje",
"remember_hours": "Sati za pamćenje",
"tree_select": "Koristite Odabir stabla",
"OnHand_help": "Namirnica je u zalihama i neće se automatski dodavati na popis za kupovinu. Status Pri ruci dijeli se s korisnicima koji kupuju.",
"ignore_shopping_help": "Nikada nemojte dodavati namirnicu na popis za kupovinu (npr. vodu)",
"shopping_category_help": "Supermarkete je moguće posložiti i filtrirati prema Kategoriji kupnje prema rasporedu prolaza.",
"food_recipe_help": "Povezivanje recepta ovdje će uključiti povezani recept u bilo koji drugi recept koji koristi ovu namirnicu",
"Foods": "Namirnice",
"Account": "Korisnički račun",
"Cosmetic": "Izgled",
"API": "API",
"enable_expert": "Omogući Stručni način rada",
"expert_mode": "Stručni način rada",
"simple_mode": "Jednostavan način rada",
"advanced": "Napredno",
"fields": "Polja",
"show_keywords": "Prikaži ključne riječi",
"show_foods": "Prikaži namirnice",
"show_books": "Prikaži Knjige",
"show_rating": "Prikaži Ocjene",
"show_units": "Prikaži jedinice",
"show_filters": "Prikaži filtere",
"not": "ne",
"save_filter": "Spremi Filtar",
"filter_name": "Naziv Filtra",
"left_handed": "Način rada s lijevom rukom",
"left_handed_help": "Optimizirat će korisničko sučelje za korištenje lijevom rukom.",
"show_step_ingredients_setting": "Prikaži sastojke uz korake recepta",
"show_step_ingredients_setting_help": "Dodajte tablicu sa sastojcima pokraj koraka recepta. Primjenjuje se u trenutku stvaranja. Može se nadjačati u prikazu za uređivanje recepta.",
"show_step_ingredients": "Prikaži sastojke Koraka",
"hide_step_ingredients": "Sakrij sastojke Koraka",
"Custom Filter": "Prilagođeni filtar",
"shared_with": "Podijeljeno sa",
"sort_by": "Poredaj po",
"asc": "Uzlazno",
"desc": "Silazno",
"date_viewed": "Zadnje pregledano",
"last_cooked": "Zadnje kuhano",
"times_cooked": "Puta kuhano",
"date_created": "Datum kreiranja",
"show_sortby": "Prikaži Poredaj po",
"search_rank": "Rang pretraživanja",
"make_now": "Napravi sada",
"Created": "Stvoreno",
"Updated": "Ažurirano",
"Unchanged": "Nepromijenjeno",
"Error": "Greška",
"make_now_count": "Nedostaje najviše sastojaka",
"recipe_filter": "Filtar recepta",
"book_filter_help": "Uključite recepte iz filtra recepata uz one ručno dodijeljene.",
"review_shopping": "Pregledajte unose za kupovinu prije spremanja",
"view_recipe": "Pogledajte recept",
"copy_to_new": "Kopiraj u novi recept",
"recipe_name": "Naziv recepta",
"paste_ingredients_placeholder": "Ovdje zalijepite popis sastojaka...",
"paste_ingredients": "Zalijepi sastojke",
"ingredient_list": "Popis sastojaka",
"explain": "Objasni",
"filter": "Filtar",
"Website": "Web stranica",
"App": "Aplikacija",
"Message": "Poruka",
"Bookmarklet": "Knjižna oznaka",
"Sticky_Nav": "Ljepljiva navigacija",
"Sticky_Nav_Help": "Uvijek prikaži navigacijski izbornik na vrhu zaslona.",
"Logo": "Logotip",
"Show_Logo": "Prikaži logotip",
"Show_Logo_Help": "Prikaži Tandoor ili mjesto za logotip u navigacijskoj traci.",
"Nav_Color": "Boja navigacije",
"Nav_Text_Mode": "Tekstualni način navigacije",
"Nav_Text_Mode_Help": "Ponaša se drugačije za svaku temu.",
"Nav_Color_Help": "Promjeni boje navigacije.",
"Space_Cosmetic_Settings": "Neke kozmetičke postavke mogu promijeniti administratori prostora i one će poništiti postavke klijenta za taj prostor.",
"Use_Kj": "Koristi kJ umjesto kcal",
"Comments_setting": "Prikaži komentare",
"click_image_import": "Kliknite sliku koju želite uvesti za ovaj recept",
"no_more_images_found": "Na web stranici nisu pronađene dodatne slike.",
"import_duplicates": "Kako bi spriječili duplikate, recepti s istim nazivom kao i postojeći zanemaruju se. Označite ovaj okvir za uvoz svega.",
"paste_json": "Ovdje zalijepite json ili html izvor za učitavanje recepta.",
"Click_To_Edit": "Klikni za uređivanje",
"search_no_recipes": "Nisam mogao pronaći nijedan recept!",
"search_import_help_text": "Uvezi recept s vanjske web stranice ili aplikacije.",
"search_create_help_text": "Stvorite novi recept izravno u Tandooru.",
"warning_duplicate_filter": "Upozorenje: zbog tehničkih ograničenja korištenje više filtara iste kombinacije (i/ili/ne) moglo bi dovesti do neočekivanih rezultata.",
"reset_children": "Poništi nasljeđivanje djeteta",
"reset_children_help": "Prebriši sve potomke vrijednostima iz naslijeđenih polja. Naslijeđena polja djece bit će postavljena na Naslijediti polja osim ako nije postavljeno Naslijeđena polja djece.",
"reset_food_inheritance": "Poništi nasljeđivanje",
"reset_food_inheritance_info": "Ponovno postavi sve namirnice na zadana naslijeđena polja i njihove nadređene vrijednosti.",
"substitute_help": "Zamjene se uzimaju u obzir pri traženju recepata koji se mogu napraviti s dostupnim sastojcima.",
"substitute_siblings_help": "Sve namirnice koje dijele roditeljsku namirnicu smatraju se zamjenama.",
"substitute_children_help": "Sve namirnice koje su potomci ove hrane smatraju se zamjenama.",
"substitute_siblings": "Istovrijedne zamjene",
"substitute_children": "Zamjenska djeca",
"SubstituteOnHand": "Imate zamjenu pri ruci.",
"ChildInheritFields": "Djeca nasljeđuju polja",
"ChildInheritFields_help": "Djeca će prema zadanim postavkama naslijediti ova polja.",
"InheritFields_help": "Vrijednosti ovih polja bit će naslijeđene od nadređenog (Iznimka: prazne kategorije kupnje se ne nasljeđuju)",
"show_ingredients_table": "Prikaži tablicu sastojaka pored teksta koraka",
"show_ingredient_overview": "Prikaži popis svih sastojaka na početku recepta.",
"Ingredient Overview": "Pregled sastojaka",
"last_viewed": "Zadnje pregledano",
"created_on": "Kreirano",
"updatedon": "Ažurirano dana",
"Imported_From": "Uvezeno iz",
"advanced_search_settings": "Postavke naprednog pretraživanja",
"nothing_planned_today": "Nemate ništa planirano za danas!",
"no_pinned_recipes": "Nemaš prikvačenih recepata!",
"Planned": "Planirano",
"Pinned": "Prikvačeno",
"Imported": "Uvezeno",
"Quick actions": "Brze akcije",
"Ratings": "Ocjene",
"Internal": "Interni",
"Units": "Jedinice",
"Manage_Emails": "Upravljanje e-poštom",
"Change_Password": "Promjena lozinke",
"Social_Authentication": "Autentifikacija putem društvenih mreža",
"Random Recipes": "Nasumični Recepti",
"parameter_count": "Parametar {count}",
"select_keyword": "Odaberite ključnu riječ",
"add_keyword": "Dodaj ključnu riječ",
"select_file": "Odaberi datoteku",
"select_recipe": "Odaberi Recept",
"select_unit": "Odaberi jedinicu",
"select_food": "Odaberi namirnicu",
"remove_selection": "Poništi odabir",
"empty_list": "Popis je prazan.",
"Select": "Odaberi",
"Supermarkets": "Supermarketi",
"User": "Korisnik",
"Username": "Korisničko ime",
"First_name": "Ime",
"Last_name": "Prezime",
"Keyword": "Ključna riječ",
"Advanced": "Napredno",
"Page": "Stranica",
"DefaultPage": "Zadana stranica",
"Single": "Jedna",
"Multiple": "Više",
"Reset": "Ponovo postavi",
"Disabled": "Onemogućeno",
"Disable": "Onemogući",
"Enable": "Omogući",
"Options": "Mogućnosti",
"Create Food": "Kreiraj namirnicu",
"create_food_desc": "Kreiraj namirnicu i povežite je s ovim receptom.",
"additional_options": "Dodatne mogućnosti",
"Importer_Help": "Više informacija i pomoć o ovom uvozniku:",
"Documentation": "Dokumentacija",
"Select_App_To_Import": "Odaberite aplikaciju iz koje želite uvesti",
"Import_Supported": "Uvoz podržan",
"Export_Supported": "Izvoz podržan",
"Import_Not_Yet_Supported": "Uvoz još nije podržan",
"Export_Not_Yet_Supported": "Izvoz još nije podržan",
"Import_Result_Info": "Uvezeno je {imported} od {total} recepata",
"Recipes_In_Import": "Recepti u vašoj datoteci za uvoz",
"Toggle": "Prebaci",
"total": "ukupno",
"Import_Error": "Došlo je do pogreške tijekom uvoza. Molimo proširite pojedinosti na dnu stranice kako bi vidjeli grešku.",
"Warning_Delete_Supermarket_Category": "Brisanje kategorije supermarketa također će izbrisati sve odnose na namirnice. Jeste li sigurni?",
"New_Supermarket": "Stvorite novi supermarket",
"New_Supermarket_Category": "Stvorite novu kategoriju supermarketa",
"Are_You_Sure": "Jesi li siguran?",
"Valid Until": "Vrijedi do",
"Split_All_Steps": "Podijeli sve retke u zasebne korake.",
"Combine_All_Steps": "Kombinir sve korake u jedno polje.",
"Plural": "Množina",
"plural_short": "množina",
"g": "gram [g] (metrički, težina)",
"kg": "kilogram [kg] (metrički, težina)",
"ounce": "unca [oz] (težina)",
"pound": "funta (težina)",
"ml": "mililitar [ml] (metrički, volumen)",
"l": "litra [l] (metrički, volumen)",
"fluid_ounce": "tekuća unca [fl oz] (SAD, volumen)",
"us_cup": "šalica (SAD, volumen)",
"pint": "pinta [pt] (SAD, volumen)",
"quart": "kvart [qt] (SAD, volumen)",
"gallon": "galon [gal] (SAD, volumen)",
"tbsp": "žlica [žlica] (SAD, volumen)",
"tsp": "žličica [žličica] (SAD, volumen)",
"imperial_fluid_ounce": "imperijalna tekuća unca [imp fl oz] (UK, volumen)",
"imperial_pint": "carska pinta [imp pt] (UK, volumen)",
"imperial_quart": "imperijalni kvart [imp qt] (UK, volumen)",
"imperial_gallon": "imperijalni gal [imp gal] (UK, volumen)",
"imperial_tbsp": "imperijalna žlica [imp tbsp] (UK, volumen)",
"imperial_tsp": "imperijalna čajna žličica [imp tsp] (UK, volumen)",
"Choose_Category": "Odaberi kategoriju",
"Back": "Nazad",
"Use_Plural_Unit_Always": "Uvijek koristi oblik množine za jedinicu",
"Use_Plural_Unit_Simple": "Uvijek koristi dinamički oblik množine za jedinicu",
"Use_Plural_Food_Always": "Uvijek koristi oblik množine za namirnice",
"Use_Plural_Food_Simple": "Dinamički koristi oblik množine za namirnicu",
"plural_usage_info": "Koristite oblik množine za jedinice i namirnice unutar ovog prostora.",
"Create Recipe": "Kreiraj recept",
"Import Recipe": "Uvezi recept",
"Never_Unit": "Nikad Jedinica",
"Transpose_Words": "Transponiraj riječi",
"Name_Replace": "Zamjena imena",
"Food_Replace": "Zamjena namirnica",
"Unit_Replace": "Zamjena jedinice"
}

View File

@@ -2,12 +2,12 @@
"err_fetching_resource": "Si è verificato un errore durante il recupero di una risorsa!",
"err_creating_resource": "Si è verificato un errore durante la creazione di una risorsa!",
"err_updating_resource": "Si è verificato un errore durante l'aggiornamento di una risorsa!",
"err_deleting_resource": "Si è verificato un errore durante la cancellazione di una risorsa!",
"err_deleting_resource": "Si è verificato un errore durante l'eliminazione di una risorsa!",
"success_fetching_resource": "Risorsa recuperata con successo!",
"success_creating_resource": "Risorsa creata con successo!",
"success_updating_resource": "Risorsa aggiornata con successo!",
"success_deleting_resource": "Risorsa eliminata con successo!",
"import_running": "Importazione in corso, attendere prego!",
"import_running": "Importazione in corso, attendere!",
"all_fields_optional": "Tutti i campi sono opzionali e possono essere lasciati vuoti.",
"convert_internal": "Converti come ricetta interna",
"show_only_internal": "Mostra solo ricette interne",
@@ -15,29 +15,29 @@
"Log_Recipe_Cooking": "Aggiungi a ricette cucinate",
"External_Recipe_Image": "Immagine ricetta esterna",
"Add_to_Shopping": "Aggiunti agli acquisti",
"Add_to_Plan": "Aggiungi a Piano",
"Step_start_time": "Ora di inizio dello Step",
"Add_to_Plan": "Aggiungi a piano",
"Step_start_time": "Ora di inizio dello step",
"Sort_by_new": "Prima i nuovi",
"Recipes_per_page": "Ricette per pagina",
"Manage_Books": "Gestisci Libri",
"Manage_Books": "Gestisci libri",
"Meal_Plan": "Piano alimentare",
"Select_Book": "Seleziona Libro",
"Select_Book": "Seleziona libro",
"Recipe_Image": "Immagine ricetta",
"Import_finished": "Importazione completata",
"View_Recipes": "Mostra ricette",
"Log_Cooking": "Registro ricette cucinate",
"New_Recipe": "Nuova Ricetta",
"New_Recipe": "Nuova ricetta",
"Url_Import": "Importa da URL",
"Reset_Search": "Ripristina Ricerca",
"Reset_Search": "Ripristina ricerca",
"Recently_Viewed": "Visualizzato di recente",
"Load_More": "Carica di più",
"Load_More": "Carica altro",
"New_Keyword": "Nuova parola chiave",
"Delete_Keyword": "Elimina parola chiave",
"Edit_Keyword": "Modifica parola chiave",
"Move_Keyword": "Sposta parola chiave",
"Merge_Keyword": "Unisci parola chiave",
"Hide_Keywords": "Nascondi parola chiave",
"Hide_Recipes": "Nascondi Ricette",
"Hide_Recipes": "Nascondi ricette",
"Keywords": "Parole chiave",
"Books": "Libri",
"Proteins": "Proteine",
@@ -53,7 +53,7 @@
"Rating": "Valutazione",
"Close": "Chiudi",
"Cancel": "Annulla",
"Link": "Link",
"Link": "Collegamento",
"Add": "Aggiungi",
"New": "Nuovo",
"Success": "Riuscito",
@@ -96,15 +96,15 @@
"move_confirmation": "Sposta <i>{child}</i> al primario <i>{parent}</i>",
"merge_confirmation": "Sostituisci <i>{source}</i> con <i>{target}</i>",
"move_selection": "Scegli un primario {type} dove spostare {source}.",
"merge_selection": "Sostituisci tutte le voci di {source} con il {type} selezionato.",
"merge_selection": "Sostituisci tutte le occorrenze di {source} con {type} selezionato.",
"Root": "Radice",
"Ignore_Shopping": "Ignora spesa",
"delete_confirmation": "Sei sicuro di voler eliminare {source}?",
"Description": "Descrizione",
"Icon": "Icona",
"Unit": "Unità di misura",
"Unit": "Unità",
"No_ID": "ID non trovato, non è possibile eliminare.",
"Recipe_Book": "Libro di Ricette",
"Recipe_Book": "Libro di ricette",
"create_title": "Nuovo {type}",
"edit_title": "Modifica {type}",
"Name": "Nome",
@@ -122,10 +122,10 @@
"merge_title": "Unisci {type}",
"Key_Shift": "Maiusc",
"del_confirmation_tree": "Sei sicuro di voler eliminare {source} e tutti gli elementi dipendenti?",
"Disable_Amount": "Disabilita Quantità",
"Disable_Amount": "Disabilita quantità",
"Key_Ctrl": "Ctrl",
"No_Results": "Nessun risultato",
"Create_New_Shopping Category": "Crea nuova categoria della spesa",
"Create_New_Shopping Category": "Crea nuova categoria di spesa",
"Create_New_Keyword": "Aggiungi nuova parola chiave",
"and_up": "& Su",
"step_time_minutes": "Tempo dello step in minuti",
@@ -133,23 +133,23 @@
"Show_as_header": "Mostra come intestazione",
"Hide_as_header": "Nascondi come intestazione",
"Copy_template_reference": "Copia riferimento template",
"Save_and_View": "Salva & Mostra",
"Save_and_View": "Salva e mostra",
"Text": "Testo",
"Edit_Recipe": "Modifica Ricetta",
"Move_Up": "Sposta Sopra",
"Move_Down": "Sposta Sotto",
"Step_Name": "Nome dello Step",
"Step_Type": "Tipo di Step",
"Enable_Amount": "Abilita Quantità",
"Add_Step": "Aggiungi Step",
"Edit_Recipe": "Modifica ricetta",
"Move_Up": "Sposta sopra",
"Move_Down": "Sposta sotto",
"Step_Name": "Nome dello step",
"Step_Type": "Tipo di step",
"Enable_Amount": "Abilita quantità",
"Add_Step": "Aggiungi step",
"Note": "Nota",
"Create_New_Food": "Aggiungi nuovo alimento",
"Make_Header": "Crea Intestazione",
"Make_Ingredient": "Crea Ingrediente",
"Make_Header": "Crea intestazione",
"Make_Ingredient": "Crea ingrediente",
"Create_New_Unit": "Aggiungi nuova unità",
"Instructions": "Istruzioni",
"Time": "Tempo",
"Shopping_Category": "Categoria Spesa",
"Shopping_Category": "Categoria di spesa",
"Meal_Plan_Days": "Piani alimentari futuri",
"tree_root": "Radice dell'albero",
"Automation": "Automazione",
@@ -158,11 +158,11 @@
"Automate": "Automatizza",
"create_rule": "e crea automazione",
"Empty": "Vuoto",
"Food_Alias": "Alias Alimento",
"Unit_Alias": "Alias Unità",
"Keyword_Alias": "Alias Parola Chiave",
"Food_Alias": "Alias alimento",
"Unit_Alias": "Alias unità",
"Keyword_Alias": "Alias parola chiave",
"Table_of_Contents": "Indice dei contenuti",
"warning_feature_beta": "Questa funzione è attualmente in BETA (non è completa). Potrebbero verificarsi delle anomalie e modifiche che in futuro potrebbero bloccare la funzionalità stessa o rimuove i dati correlati ad essa.",
"warning_feature_beta": "Questa funzione è attualmente in BETA (fase di test). Potrebbero verificarsi delle anomalie e modifiche che in futuro potrebbero bloccare la funzionalità stessa o rimuove i dati correlati ad essa.",
"Shopping_list": "Lista della spesa",
"Title": "Titolo",
"Create_New_Meal_Type": "Aggiungi nuovo tipo di pasto",
@@ -188,7 +188,7 @@
"New_Meal_Type": "Nuovo tipo di pasto",
"Select_File": "Seleziona file",
"Image": "Immagine",
"Export_As_ICal": "Esporta il periodo attuale in formato .iCal",
"Export_As_ICal": "Esporta il periodo attuale in formato iCal",
"Week_Numbers": "Numeri della settimana",
"Show_Week_Numbers": "Mostra numeri della settimana?",
"file_upload_disabled": "Il caricamento dei file non è abilitato in questa istanza.",
@@ -202,12 +202,12 @@
"Previous_Day": "Giorno precedente",
"Add_nutrition_recipe": "Aggiungi nutrienti alla ricetta",
"Remove_nutrition_recipe": "Elimina nutrienti dalla ricetta",
"Coming_Soon": "In-Arrivo",
"Coming_Soon": "In arrivo",
"Auto_Planner": "Pianificazione automatica",
"New_Cookbook": "Nuovo libro di ricette",
"Hide_Keyword": "Nascondi parole chiave",
"Clear": "Pulisci",
"Shopping_List_Empty": "La tua lista della spesa è vuota, puoi aggiungere elementi dal menù contestuale di una voce nel piano alimentare (clicca con il tasto destro sulla scheda o clicca con il tasto sinistro sull'icona del menù)",
"Shopping_List_Empty": "La tua lista della spesa è vuota, puoi aggiungere elementi dal menù contestuale di una voce nel piano alimentare (fai clic con il tasto destro sulla scheda o fai clic con il tasto sinistro sull'icona del menù)",
"success_moving_resource": "Risorsa spostata con successo!",
"Shopping_Categories": "Categorie di spesa",
"IngredientInShopping": "Questo ingrediente è nella tua lista della spesa.",
@@ -236,7 +236,7 @@
"Completed": "Completato",
"shopping_share": "Condividi lista della spesa",
"shopping_auto_sync": "Sincronizzazione automatica",
"err_move_self": "Non è possibile muovere un elemento in sé stesso",
"err_move_self": "Non è possibile spostare un elemento in sé stesso",
"nothing": "Nulla da fare",
"show_sql": "Mostra SQL",
"Search Settings": "Impostazioni di ricerca",
@@ -256,8 +256,8 @@
"Use_Fractions_Help": "Converti automaticamente i decimali in frazioni quando apri una ricetta.",
"Language": "Lingua",
"Theme": "Tema",
"SupermarketCategoriesOnly": "Solo categorie supermercati",
"CountMore": "...più +{count}",
"SupermarketCategoriesOnly": "Solo categorie di supermercati",
"CountMore": "...+{count} in più",
"IgnoreThis": "Non aggiungere mai {food} alla spesa",
"InheritWarning": "{food} è impostato per ereditare, i cambiamenti potrebbero non essere applicati.",
"mealplan_autoadd_shopping": "Aggiungi automaticamente al piano alimentare",
@@ -277,7 +277,7 @@
"Copy Token": "Copia token",
"mealplan_autoinclude_related": "Aggiungi ricette correlate",
"default_delay": "Ore di ritardo predefinite",
"shopping_share_desc": "Gli utenti vedranno tutti gli elementi che aggiungi alla tua lista della spesa Per poter vedere gli elementi della loro lista, loro dovranno aggiungerti.",
"shopping_share_desc": "Gli utenti vedranno tutti gli elementi che aggiungi alla tua lista della spesa. Per poter vedere gli elementi della loro lista, loro dovranno aggiungerti.",
"mealplan_autoexclude_onhand_desc": "Quando aggiungi un piano alimentare alla lista della spesa (manualmente o automaticamente), escludi gli ingredienti che sono già disponibili.",
"default_delay_desc": "Il numero predefinito di ore per ritardare l'inserimento di una lista della spesa.",
"filter_to_supermarket": "Filtra per supermercato",
@@ -322,20 +322,20 @@
"Custom Filter": "Filtro personalizzato",
"shared_with": "Condiviso con",
"sort_by": "Ordina per",
"Ingredient Overview": "Panoramica Ingredienti",
"Ingredient Overview": "Panoramica ingredienti",
"show_units": "Mostra unità di misura",
"select_unit": "Seleziona unità di misura",
"Ingredient Editor": "Editor Ingredienti",
"Ingredient Editor": "Editor degli ingredienti",
"Private_Recipe": "Ricetta privata",
"Private_Recipe_Help": "La ricetta viene mostrata solo a te e a chi l'hai condivisa.",
"Protected": "Protetto",
"Copy Link": "Copia link",
"Copy Link": "Copia collegamento",
"Create_New_Shopping_Category": "Aggiungi nuova categoria di spesa",
"and_down": "& Giù",
"OnHand": "Attualmente disponibili",
"New_Entry": "Nuova voce",
"Use_Fractions": "Usa frazioni",
"FoodInherit": "Campi ereditabili dagli Alimenti",
"FoodInherit": "Campi ereditabili dagli alimenti",
"one_url_per_line": "Un indirizzo per riga",
"mealplan_autoexclude_onhand": "Escludi alimenti disponibili",
"mealplan_autoadd_shopping_desc": "Aggiungi automaticamente gli ingredienti del piano alimentare alla lista della spesa.",
@@ -353,10 +353,10 @@
"Use_Plural_Food_Always": "Usa sempre il plurale per gli alimenti",
"Use_Plural_Food_Simple": "Usa dinamicamente il plurale per gli alimenti",
"plural_usage_info": "Usa il plurale per le unità di misura e gli alimenti messi qui.",
"reusable_help_text": "Il link di invito dovrebbe essere usabile per più di un utente.",
"reusable_help_text": "Il collegamento di invito dovrebbe essere usabile per più di un utente.",
"empty_list": "La lista è vuota.",
"no_pinned_recipes": "Non hai ricette fissate!",
"recipe_name": "Nome Ricetta",
"recipe_name": "Nome ricetta",
"advanced_search_settings": "Impostazioni avanzate di ricerca",
"search_no_recipes": "Non sono state trovate ricette!",
"SubstituteOnHand": "Hai un sostituto disponibile.",
@@ -371,7 +371,7 @@
"add_keyword": "Aggiungi parola chiave",
"Export_Not_Yet_Supported": "Esportazione non ancora supportata",
"Import_Result_Info": "{imported} di {total} ricette sono state importate",
"Recipes_In_Import": "Rocette nel tuo file di importazione",
"Recipes_In_Import": "Ricette nel tuo file di importazione",
"Toggle": "Attiva/Disattiva",
"Import_Not_Yet_Supported": "Importazione non ancora supportata",
"Are_You_Sure": "Sei sicuro?",
@@ -382,11 +382,11 @@
"Select_App_To_Import": "Seleziona una App da cui importare",
"Import_Supported": "Importazione supportata",
"paste_ingredients": "Incolla ingredienti",
"shopping_auto_sync_desc": "La sincronizzazione automatica verrà disabilitata se impostato a 0. Quando si visualizza una lista della spesa, la lista viene aggiornata ogni tot secondi impostati per sincronizzare le modifiche che qualcun altro potrebbe aver fatto. Utile per gli acquisti condivisi con più persone, ma potrebbe utilizzare un po' di dati mobili.",
"shopping_auto_sync_desc": "La sincronizzazione automatica sarà disabilitata se impostato a 0. Quando si visualizza una lista della spesa, la lista viene aggiornata ogni tot secondi impostati per sincronizzare le modifiche che qualcun altro potrebbe aver fatto. Utile per gli acquisti condivisi con più persone, ma potrebbe utilizzare un po' di dati mobili.",
"CategoryInstruction": "Trascina le categorie per cambiare l'ordine in cui appaiono nella lista della spesa.",
"show_sortby": "Mostra Ordina per",
"Page": "Pagina",
"Auto_Sort": "Ordinamento Automatico",
"Auto_Sort": "Ordinamento automatico",
"date_created": "Data di creazione",
"times_cooked": "Cucinato N volte",
"recipe_filter": "Filtro ricette",
@@ -403,10 +403,10 @@
"Nav_Color_Help": "Cambia il colore di navigazione.",
"Use_Kj": "Usa kJ invece di kcal",
"Comments_setting": "Mostra commenti",
"click_image_import": "Clicca sull'immagine che vuoi importare per questa ricetta",
"click_image_import": "Fai clic sull'immagine che vuoi importare per questa ricetta",
"no_more_images_found": "Non sono state trovate altre immagini sul sito web.",
"Click_To_Edit": "Clicca per modificare",
"search_import_help_text": "Importa una ricetta da un sito web o da una applicazione.",
"Click_To_Edit": "Fai clic per modificare",
"search_import_help_text": "Importa una ricetta da un sito web o da un'applicazione.",
"Bookmarklet": "Segnalibro",
"paste_json": "Incolla qui il codice sorgente html o json per caricare la ricetta.",
"Imported_From": "Importato da",
@@ -414,7 +414,7 @@
"Imported": "Importato",
"Quick actions": "Azioni rapide",
"Internal": "Interno",
"ingredient_list": "Lista Ingredienti",
"ingredient_list": "Lista ingredienti",
"show_ingredient_overview": "Mostra la lista degli ingredienti all'inizio della ricetta.",
"Change_Password": "Cambia password",
"Social_Authentication": "Autenticazione social",
@@ -443,7 +443,7 @@
"Split_All_Steps": "Divide tutte le righe in step separati.",
"Combine_All_Steps": "Combina tutti gli step in un singolo campo.",
"Select": "Seleziona",
"OnHand_help": "Gli alimenti sono nell'inventario e non verranno automaticamente aggiunti alla lista della spesa. Lo stato di disponibilità è condiviso con gli utenti di spesa.",
"OnHand_help": "Gli alimenti sono nell'inventario e non saranno automaticamente aggiunti alla lista della spesa. Lo stato di disponibilità è condiviso con gli utenti di spesa.",
"Unpin": "Non fissare",
"PinnedConfirmation": "{recipe} è stata fissata.",
"UnpinnedConfirmation": "{recipe} non è più fissata.",
@@ -467,11 +467,108 @@
"make_now": "Fai ora",
"Amount": "Quantità",
"show_step_ingredients_setting": "Mostra gli ingredienti vicino ai passaggi della ricetta",
"substitute_siblings_help": "Tutti gli alimenti che condividono un genitore di questo alimento sono considerati sostituti",
"reset_children": "Reimposta l'eredità degli eredi",
"substitute_siblings": "Sostituire prodotti eredi",
"ChildInheritFields": "Gli eredi ereditano i valori",
"substitute_siblings_help": "Tutti gli alimenti che condividono un genitore di questo alimento sono considerati sostituti.",
"reset_children": "Ripristina l'eredità degli eredi",
"substitute_siblings": "Sostituisci relativi",
"ChildInheritFields": "Figli ereditano i campi",
"recipe_property_info": "Puoi anche aggiungere proprietà ai cibi per calcolarli automaticamente in base alla tua ricetta!",
"err_importing_recipe": "Si è verificato un errore durante l'importazione della ricetta!",
"per_serving": "per porzioni"
"per_serving": "per porzioni",
"open_data_help_text": "Il progetto Tandoor Open Data presenta i dati forniti dalla comunità per Tandoor. Questo campo viene riempito automaticamente al momento dell'importazione e consente aggiornamenti in futuro.",
"Open_Data_Import": "Importazione Open Data",
"imperial_fluid_ounce": "oncia liquida imperiale [imp fl oz] (UK, volume)",
"imperial_pint": "pinta imperiale [imp pt] (UK, volume)",
"imperial_gallon": "gallone imperiale [imp gal] (UK, volume)",
"imperial_tbsp": "cucchiaio da tavola imperiale [imp tbsp] (UK, volume)",
"Create Recipe": "Crea ricetta",
"Properties": "Proprietà",
"Created": "Creata",
"imperial_quart": "quarto imperiale [imp qt] (UK, volume)",
"us_cup": "tazza (US, volume)",
"Data_Import_Info": "Arricchisci la tua istanza importando un elenco di alimenti, unità e altro ancora, curato dalla comunità, per migliorare la tua raccolta di ricette.",
"CustomLogoHelp": "Carica immagini quadrate di diverse dimensioni da trasformare in logo nella scheda del browser e nell'applicazione web installata.",
"show_step_ingredients_setting_help": "Aggiungi la tabella degli ingredienti accanto ai passaggi della ricetta. Si applica al momento della creazione. Può essere sovrascritto nella vista di modifica della ricetta.",
"Show_Logo_Help": "Mostra il logo di Tandoor o dell'istanza nella barra di navigazione.",
"Space_Cosmetic_Settings": "Alcune impostazioni cosmetiche possono essere modificate dagli amministratori dell'istanza e sovrascriveranno le impostazioni client per quell'istanza.",
"reset_food_inheritance": "Ripristina ereditarietà",
"Update_Existing_Data": "Aggiorna i dati esistenti",
"converted_amount": "Quantità convertita",
"ounce": "oncia [oz] (peso)",
"fluid_ounce": "oncia liquida [fl oz] (US, volume)",
"gallon": "gallone [gal] (US, volume)",
"Use_Metric": "Usa unità metriche",
"Undo": "Annulla",
"NoMoreUndo": "Nessuna modifica da annullare.",
"show_step_ingredients": "Mostra ingredienti dello step",
"hide_step_ingredients": "Nascondi gli ingredienti dello step",
"Logo": "Logo",
"Show_Logo": "Mostra logo",
"substitute_help": "Quando si cercano ricette che possono essere realizzate con ingredienti a disposizione, si prendono in considerazione anche i sostituti.",
"pound": "libbra (peso)",
"ml": "millilitro [ml] (metrico, volume)",
"kg": "chilogrammo [kg] (metrico, peso)",
"g": "grammo [g] (metrico, peso)",
"Back": "Indietro",
"Properties_Food_Amount": "Proprietà Quantità alimento",
"Properties_Food_Unit": "Proprietà Unità alimento",
"total": "totale",
"Welcome": "Benvenuto",
"CustomTheme": "Tema personalizzato",
"CustomThemeHelp": "Sostituisci gli stili del tema selezionato caricando un file CSS personalizzato.",
"CustomImageHelp": "Carica un'immagine da mostrare nella panoramica dell'istanza.",
"Shopping_input_placeholder": "ad es. patata/100 patate/100 g patate",
"Property": "Proprietà",
"Property_Editor": "Editor delle proprietà",
"Conversion": "Conversione",
"created_by": "Creato da",
"CustomNavLogoHelp": "Carica un'immagine da utilizzare come logo della barra di navigazione.",
"CustomLogos": "Loghi personalizzati",
"ShowRecentlyCompleted": "Mostra gli elementi completati di recente",
"ShoppingBackgroundSyncWarning": "Rete scadente, in attesa di sincronizzazione...",
"OrderInformation": "Gli oggetti sono ordinati dal numero più piccolo al più grande.",
"Updated": "Aggiornata",
"Unchanged": "Non modificata",
"Error": "Errore",
"Nav_Text_Mode_Help": "Si comporta in modo diverso per ogni tema.",
"Number of Objects": "Numero di oggetti",
"StartDate": "Data d'inizio",
"EndDate": "Data di fine",
"Datatype": "Tipo di dato",
"substitute_children_help": "Tutti gli alimenti derivati da questo alimento sono considerati sostituti.",
"Enable": "Abilita",
"Transpose_Words": "Trasponi parole",
"imperial_tsp": "cucchiaio da tè imperiale [imp tsp] (UK, volume)",
"Choose_Category": "Scegli categoria",
"Import Recipe": "Importa ricetta",
"Food_Replace": "Sostituisci alimento",
"Name_Replace": "Sostituisci nome",
"Unit_Replace": "Sostituisci unità",
"Alignment": "Allineamento",
"Learn_More": "Scopri altro",
"converted_unit": "Unità convertita",
"base_unit": "Unità base",
"base_amount": "Quantità base",
"Calculator": "Calcolatore",
"Delete_All": "Elimina tutti",
"DefaultPage": "Pagina predefinita",
"tsp": "cucchiaio da tè [tsp] (US, volume)",
"l": "litro [l] (metrico, volume)",
"pint": "pinta [pt] (US, volume)",
"quart": "quarto [qt] (US, volume)",
"tbsp": "cucchiaio da tavola [tbsp] (US, volume)",
"reset_children_help": "Sovrascrivi tutti i figli con valori da campi ereditati. I campi ereditati dei figli saranno impostati su Eredita i campi a meno che Figli ereditano i campi non sia impostato.",
"reset_food_inheritance_info": "Ripristina tutti gli alimenti ai campi ereditati predefiniti e ai rispettivi valori padre.",
"substitute_children": "Sostituisci figli",
"Input": "Immissione",
"show_ingredients_table": "Visualizza una tabella degli ingredienti accanto al testo dello step",
"Open_Data_Slug": "Open Data Slug",
"make_now_count": "Per lo più ingredienti mancanti",
"Nav_Text_Mode": "Modalità di navigazione testo",
"FDC_ID": "FDC ID",
"FDC_ID_help": "ID database FDC",
"ChildInheritFields_help": "In modo predefinito, i figli erediteranno questi campi.",
"InheritFields_help": "I valori di questi campi saranno ereditati dal genitore (eccezione: le categorie di acquisto vuote non vengono ereditate)",
"Never_Unit": "Mai unità",
"FDC_Search": "Ricerca FDC",
"property_type_fdc_hint": "Solo le proprietà con un ID FDC possono essere aggiornate automaticamente dal database FDC"
}

572
vue/src/locales/lv.json Normal file
View File

@@ -0,0 +1,572 @@
{
"warning_feature_beta": "Šī funkcionalitāte šobrīd ir BETA (testēšanā). To izmantojot ir iespējamas kļūdas gan šobrīd, gan nākotnē (iespējams ar funkcionalitāti saistīto datu zudums).",
"err_fetching_resource": "Ir notikusi kļūda datu saņemšanas laikā!",
"err_creating_resource": "Ir notikusi kļūda izveidojot resursu!",
"err_updating_resource": "Ir notikusi kļūda mainot resursu!",
"err_deleting_resource": "Ir notikusi kļūda dzēšot resursu!",
"err_deleting_protected_resource": "Objekts, kuru Jūs mēģinat dzēst, vēlarvien tiek izmantots un to nevar izdzēst.",
"err_moving_resource": "Notika kļūda pārvietojot resursu!",
"err_merging_resource": "Notika kļūda apvienojot resursu!",
"err_importing_recipe": "Notika kļūda importējot recepti!",
"success_fetching_resource": "Resurss veiksmīgi saņemts!",
"success_creating_resource": "Resurss veiksmīgi izveidots!",
"success_updating_resource": "Resurss veiksmīgi labots!",
"success_deleting_resource": "Resurss veiksmīgi izdzēsts!",
"success_moving_resource": "Resurss veiksmīgi pārvietots!",
"success_merging_resource": "Resurss veiksmīgi apvienots!",
"file_upload_disabled": "Failu ielāde šajā vietnē nav iespējota.",
"recipe_property_info": "",
"warning_space_delete": "",
"food_inherit_info": "",
"step_time_minutes": "",
"confirm_delete": "",
"import_running": "",
"all_fields_optional": "",
"convert_internal": "",
"show_only_internal": "",
"show_split_screen": "",
"Log_Recipe_Cooking": "",
"External_Recipe_Image": "",
"Add_to_Shopping": "",
"Add_to_Plan": "",
"Step_start_time": "",
"Sort_by_new": "",
"Table_of_Contents": "",
"Recipes_per_page": "",
"Show_as_header": "",
"Hide_as_header": "",
"Add_nutrition_recipe": "",
"Remove_nutrition_recipe": "",
"Copy_template_reference": "",
"per_serving": "",
"Save_and_View": "",
"Manage_Books": "",
"Meal_Plan": "",
"Select_Book": "",
"Select_File": "",
"Recipe_Image": "",
"Import_finished": "",
"View_Recipes": "",
"Log_Cooking": "",
"New_Recipe": "",
"Url_Import": "",
"Reset_Search": "",
"Recently_Viewed": "",
"Load_More": "",
"New_Keyword": "",
"Delete_Keyword": "",
"Edit_Keyword": "",
"Edit_Recipe": "",
"Move_Keyword": "",
"Merge_Keyword": "",
"Hide_Keywords": "",
"Hide_Recipes": "",
"Move_Up": "",
"Move_Down": "",
"Step_Name": "",
"Step_Type": "",
"Make_Header": "",
"Make_Ingredient": "",
"Amount": "",
"Enable_Amount": "",
"Disable_Amount": "",
"Ingredient Editor": "",
"Description_Replace": "",
"Instruction_Replace": "",
"Auto_Sort": "",
"Auto_Sort_Help": "",
"Private_Recipe": "",
"Private_Recipe_Help": "",
"reusable_help_text": "",
"open_data_help_text": "",
"Open_Data_Slug": "",
"Open_Data_Import": "",
"Properties_Food_Amount": "",
"Properties_Food_Unit": "",
"Calculator": "",
"FDC_ID": "",
"FDC_Search": "",
"FDC_ID_help": "",
"property_type_fdc_hint": "",
"Data_Import_Info": "",
"Update_Existing_Data": "",
"Use_Metric": "",
"Learn_More": "",
"converted_unit": "",
"converted_amount": "",
"base_unit": "",
"base_amount": "",
"Datatype": "",
"Input": "",
"Undo": "",
"NoMoreUndo": "",
"Number of Objects": "",
"Add_Step": "",
"Keywords": "",
"Books": "",
"Proteins": "",
"Fats": "",
"Carbohydrates": "",
"Calories": "",
"Energy": "",
"Nutrition": "",
"Date": "",
"StartDate": "",
"EndDate": "",
"Share": "",
"Automation": "",
"Parameter": "",
"Export": "",
"Copy": "",
"Rating": "",
"Close": "",
"Cancel": "",
"Link": "",
"Add": "",
"New": "",
"Note": "",
"Alignment": "",
"Success": "",
"Failure": "",
"Protected": "",
"Ingredients": "",
"Supermarket": "",
"Categories": "",
"Category": "",
"Selected": "",
"min": "",
"Servings": "",
"Waiting": "",
"Preparation": "",
"External": "",
"Size": "",
"Files": "",
"File": "",
"Edit": "",
"Image": "",
"Delete": "",
"Delete_All": "",
"Open": "",
"Ok": "",
"Save": "",
"Step": "",
"Search": "",
"Import": "",
"Print": "",
"Settings": "",
"or": "",
"and": "",
"Information": "",
"Download": "",
"Create": "",
"Search Settings": "",
"View": "",
"Recipes": "",
"Welcome": "",
"Move": "",
"Merge": "",
"Parent": "",
"Copy Link": "",
"Copy Token": "",
"delete_confirmation": "",
"move_confirmation": "",
"merge_confirmation": "",
"create_rule": "",
"move_selection": "",
"merge_selection": "",
"Root": "",
"Ignore_Shopping": "",
"Shopping_Category": "",
"Shopping_Categories": "",
"Shopping_input_placeholder": "",
"Edit_Food": "",
"Move_Food": "",
"New_Food": "",
"Hide_Food": "",
"Food_Alias": "",
"Unit_Alias": "",
"Keyword_Alias": "",
"Delete_Food": "",
"No_ID": "",
"Meal_Plan_Days": "",
"merge_title": "",
"move_title": "",
"Food": "",
"Property": "",
"Property_Editor": "",
"Conversion": "",
"Original_Text": "",
"Recipe_Book": "",
"del_confirmation_tree": "",
"delete_title": "",
"create_title": "",
"edit_title": "",
"Name": "",
"Properties": "",
"Type": "",
"Description": "",
"Recipe": "",
"tree_root": "",
"Icon": "",
"Unit": "",
"Decimals": "",
"Default_Unit": "",
"No_Results": "",
"New_Unit": "",
"Create_New_Shopping Category": "",
"Create_New_Food": "",
"Create_New_Keyword": "",
"Create_New_Unit": "",
"Create_New_Meal_Type": "",
"Create_New_Shopping_Category": "",
"and_up": "",
"and_down": "",
"Instructions": "",
"Unrated": "",
"Automate": "",
"Empty": "",
"Key_Ctrl": "",
"Key_Shift": "",
"Time": "",
"Text": "",
"Shopping_list": "",
"Added_by": "",
"Added_on": "",
"AddToShopping": "",
"IngredientInShopping": "",
"NotInShopping": "",
"OnHand": "",
"FoodOnHand": "",
"FoodNotOnHand": "",
"Undefined": "",
"Create_Meal_Plan_Entry": "",
"Edit_Meal_Plan_Entry": "",
"Title": "",
"Week": "",
"Month": "",
"Year": "",
"created_by": "",
"Planner": "",
"Planner_Settings": "",
"Period": "",
"Plan_Period_To_Show": "",
"Periods": "",
"Plan_Show_How_Many_Periods": "",
"Starting_Day": "",
"Meal_Types": "",
"Meal_Type": "",
"New_Entry": "",
"Clone": "",
"Drag_Here_To_Delete": "",
"Meal_Type_Required": "",
"Title_or_Recipe_Required": "",
"Color": "",
"New_Meal_Type": "",
"Use_Fractions": "",
"Use_Fractions_Help": "",
"AddFoodToShopping": "",
"RemoveFoodFromShopping": "",
"DeleteShoppingConfirm": "",
"IgnoredFood": "",
"Add_Servings_to_Shopping": "",
"Week_Numbers": "",
"Show_Week_Numbers": "",
"Export_As_ICal": "",
"Export_To_ICal": "",
"Cannot_Add_Notes_To_Shopping": "",
"Added_To_Shopping_List": "",
"Shopping_List_Empty": "",
"Next_Period": "",
"Previous_Period": "",
"Current_Period": "",
"Next_Day": "",
"Previous_Day": "",
"Inherit": "",
"InheritFields": "",
"FoodInherit": "",
"ShowUncategorizedFood": "",
"GroupBy": "",
"Language": "",
"Theme": "",
"CustomTheme": "",
"CustomThemeHelp": "",
"CustomImageHelp": "",
"CustomNavLogoHelp": "",
"CustomLogoHelp": "",
"CustomLogos": "",
"SupermarketCategoriesOnly": "",
"MoveCategory": "",
"CountMore": "",
"IgnoreThis": "",
"DelayFor": "",
"Warning": "",
"NoCategory": "",
"InheritWarning": "",
"ShowDelayed": "",
"ShowRecentlyCompleted": "",
"Completed": "",
"OfflineAlert": "",
"ShoppingBackgroundSyncWarning": "",
"shopping_share": "",
"shopping_auto_sync": "",
"one_url_per_line": "",
"mealplan_autoadd_shopping": "",
"mealplan_autoexclude_onhand": "",
"mealplan_autoinclude_related": "",
"default_delay": "",
"plan_share_desc": "",
"shopping_share_desc": "",
"shopping_auto_sync_desc": "",
"mealplan_autoadd_shopping_desc": "",
"mealplan_autoexclude_onhand_desc": "",
"mealplan_autoinclude_related_desc": "",
"default_delay_desc": "",
"filter_to_supermarket": "",
"Coming_Soon": "",
"Auto_Planner": "",
"New_Cookbook": "",
"Hide_Keyword": "",
"Hour": "",
"Hours": "",
"Day": "",
"Days": "",
"Second": "",
"Seconds": "",
"Clear": "",
"Users": "",
"Invites": "",
"err_move_self": "",
"nothing": "",
"err_merge_self": "",
"show_sql": "",
"filter_to_supermarket_desc": "",
"CategoryName": "",
"SupermarketName": "",
"CategoryInstruction": "",
"OrderInformation": "",
"shopping_recent_days_desc": "",
"shopping_recent_days": "",
"download_pdf": "",
"download_csv": "",
"csv_delim_help": "",
"csv_delim_label": "",
"SuccessClipboard": "",
"copy_to_clipboard": "",
"csv_prefix_help": "",
"csv_prefix_label": "",
"copy_markdown_table": "",
"in_shopping": "",
"DelayUntil": "",
"Pin": "",
"Unpin": "",
"PinnedConfirmation": "",
"UnpinnedConfirmation": "",
"mark_complete": "",
"QuickEntry": "",
"shopping_add_onhand_desc": "",
"shopping_add_onhand": "",
"related_recipes": "",
"today_recipes": "",
"sql_debug": "",
"remember_search": "",
"remember_hours": "",
"tree_select": "",
"OnHand_help": "",
"ignore_shopping_help": "",
"shopping_category_help": "",
"food_recipe_help": "",
"Foods": "",
"Account": "",
"Cosmetic": "",
"API": "",
"enable_expert": "",
"expert_mode": "",
"simple_mode": "",
"advanced": "",
"fields": "",
"show_keywords": "",
"show_foods": "",
"show_books": "",
"show_rating": "",
"show_units": "",
"show_filters": "",
"not": "",
"save_filter": "",
"filter_name": "",
"left_handed": "",
"left_handed_help": "",
"show_step_ingredients_setting": "",
"show_step_ingredients_setting_help": "",
"show_step_ingredients": "",
"hide_step_ingredients": "",
"Custom Filter": "",
"shared_with": "",
"sort_by": "",
"asc": "",
"desc": "",
"date_viewed": "",
"last_cooked": "",
"times_cooked": "",
"date_created": "",
"show_sortby": "",
"search_rank": "",
"make_now": "",
"Created": "",
"Updated": "",
"Unchanged": "",
"Error": "",
"make_now_count": "",
"recipe_filter": "",
"book_filter_help": "",
"review_shopping": "",
"view_recipe": "",
"copy_to_new": "",
"recipe_name": "",
"paste_ingredients_placeholder": "",
"paste_ingredients": "",
"ingredient_list": "",
"explain": "",
"filter": "",
"Website": "",
"App": "",
"Message": "",
"Bookmarklet": "",
"Sticky_Nav": "",
"Sticky_Nav_Help": "",
"Logo": "",
"Show_Logo": "",
"Show_Logo_Help": "",
"Nav_Color": "",
"Nav_Text_Mode": "",
"Nav_Text_Mode_Help": "",
"Nav_Color_Help": "",
"Space_Cosmetic_Settings": "",
"Use_Kj": "",
"Comments_setting": "",
"click_image_import": "",
"no_more_images_found": "",
"import_duplicates": "",
"paste_json": "",
"Click_To_Edit": "",
"search_no_recipes": "",
"search_import_help_text": "",
"search_create_help_text": "",
"warning_duplicate_filter": "",
"reset_children": "",
"reset_children_help": "",
"reset_food_inheritance": "",
"reset_food_inheritance_info": "",
"substitute_help": "",
"substitute_siblings_help": "",
"substitute_children_help": "",
"substitute_siblings": "",
"substitute_children": "",
"SubstituteOnHand": "",
"ChildInheritFields": "",
"ChildInheritFields_help": "",
"InheritFields_help": "",
"show_ingredients_table": "",
"show_ingredient_overview": "",
"Ingredient Overview": "",
"last_viewed": "",
"created_on": "",
"updatedon": "",
"Imported_From": "",
"advanced_search_settings": "",
"nothing_planned_today": "",
"no_pinned_recipes": "",
"Planned": "",
"Pinned": "",
"Imported": "",
"Quick actions": "",
"Ratings": "",
"Internal": "",
"Units": "",
"Manage_Emails": "",
"Change_Password": "",
"Social_Authentication": "",
"Random Recipes": "",
"parameter_count": "",
"select_keyword": "",
"add_keyword": "",
"select_file": "",
"select_recipe": "",
"select_unit": "",
"select_food": "",
"remove_selection": "",
"empty_list": "",
"Select": "",
"Supermarkets": "",
"User": "",
"Username": "",
"First_name": "",
"Last_name": "",
"Keyword": "",
"Advanced": "",
"Page": "",
"DefaultPage": "",
"Single": "",
"Multiple": "",
"Reset": "",
"Disabled": "",
"Disable": "",
"Enable": "",
"Options": "",
"Create Food": "",
"create_food_desc": "",
"additional_options": "",
"Importer_Help": "",
"Documentation": "",
"Select_App_To_Import": "",
"Import_Supported": "",
"Export_Supported": "",
"Import_Not_Yet_Supported": "",
"Export_Not_Yet_Supported": "",
"Import_Result_Info": "",
"Recipes_In_Import": "",
"Toggle": "",
"total": "",
"Import_Error": "",
"Warning_Delete_Supermarket_Category": "",
"New_Supermarket": "",
"New_Supermarket_Category": "",
"Are_You_Sure": "",
"Valid Until": "",
"Split_All_Steps": "",
"Combine_All_Steps": "",
"Plural": "",
"plural_short": "",
"g": "",
"kg": "",
"ounce": "",
"pound": "",
"ml": "",
"l": "",
"fluid_ounce": "",
"us_cup": "",
"pint": "",
"quart": "",
"gallon": "",
"tbsp": "",
"tsp": "",
"imperial_fluid_ounce": "",
"imperial_pint": "",
"imperial_quart": "",
"imperial_gallon": "",
"imperial_tbsp": "",
"imperial_tsp": "",
"Choose_Category": "",
"Back": "",
"Use_Plural_Unit_Always": "",
"Use_Plural_Unit_Simple": "",
"Use_Plural_Food_Always": "",
"Use_Plural_Food_Simple": "",
"plural_usage_info": "",
"Create Recipe": "",
"Import Recipe": "",
"Never_Unit": "",
"Transpose_Words": "",
"Name_Replace": "",
"Food_Replace": "",
"Unit_Replace": ""
}

View File

@@ -1,5 +1,5 @@
{
"warning_feature_beta": "Denne funksjonen er foreløpig i BETA-versjon (testing). Regn med feil og at det i fremtidige oppdateringer kan komme endringer som gjør funksjonen ubrukelig.",
"warning_feature_beta": "Denne funksjonen er foreløpig i BETA-versjon (testing). Regn med feil og at det i fremtidige oppdateringer kan komme endringer som gjør funksjonen ubrukelig, som i verste fall kan føre til korrupt data.",
"err_fetching_resource": "Feil ved henting av ressurs!",
"err_creating_resource": "Feil ved oppretting av ressurs!",
"err_updating_resource": "Feil ved oppdatering av ressurs!",
@@ -67,7 +67,7 @@
"Amount": "Mengde",
"Enable_Amount": "Aktiver mengde",
"Disable_Amount": "Deaktiver mengde",
"Ingredient Editor": "Ingrediens Behandler",
"Ingredient Editor": "Ingrediensredigerer",
"Description_Replace": "Erstatt beskrivelse",
"Instruction_Replace": "Erstatt instruksjoner",
"Auto_Sort": "Sorter Automatisk",
@@ -83,7 +83,7 @@
"Carbohydrates": "Karbohydrater",
"Calories": "Kalorier",
"Energy": "Energi",
"Nutrition": "Næring",
"Nutrition": "Næringsinnhold",
"Date": "Dato",
"Share": "Del",
"Automation": "Automatiser",
@@ -230,7 +230,7 @@
"AddFoodToShopping": "Legg til {food] i handlelisten din",
"RemoveFoodFromShopping": "Fjern {food} fra handelisten din",
"DeleteShoppingConfirm": "Er du sikker på at du fjerne alle {food} fra handlelisten?",
"IgnoredFood": "",
"IgnoredFood": "{mat} er satt til å ignoreres i handel.",
"Add_Servings_to_Shopping": "Legg til {servings} serveringer i handlelisten",
"Week_Numbers": "Ukenummer",
"Show_Week_Numbers": "Vis ukenummer?",
@@ -238,7 +238,7 @@
"Export_To_ICal": "Eksporter .ics",
"Cannot_Add_Notes_To_Shopping": "Notater kan ikke legges til i handlelisten",
"Added_To_Shopping_List": "Lagt til i handlelisten",
"Shopping_List_Empty": "",
"Shopping_List_Empty": "Din handleliste er tom. Du kan legge til varer via menyen for måltidsplan (høyreklikk på kortet, eller venstreklikk i menyikonet)",
"Next_Period": "Neste periode",
"Previous_Period": "Forrige periode",
"Current_Period": "Gjeldende periode",
@@ -258,8 +258,8 @@
"DelayFor": "Utsett i {hours} timer",
"Warning": "Advarsel",
"NoCategory": "Ingen kategori valgt.",
"InheritWarning": "",
"ShowDelayed": "Vis Utsatte Gjenstander",
"InheritWarning": "{matvare} er satt til å arve. Endringer kan bli slettet.",
"ShowDelayed": "Vis utsatte elementer",
"Completed": "Fullført",
"OfflineAlert": "Du er ikke koblet til internett. Det kan hende handlelisten ikke synkroniserer.",
"shopping_share": "Del handlelisten",
@@ -271,9 +271,9 @@
"default_delay": "Standard Timer å Utsette",
"plan_share_desc": "Nye måltidsplaner vil automatisk bli delt med valgte brukere.",
"shopping_share_desc": "Brukere vil se alle gjenstander du har lagt til i handlelisten. Brukerne må legge deg til for at du kan se deres gjenstander på handlelisten.",
"shopping_auto_sync_desc": "",
"mealplan_autoadd_shopping_desc": "",
"mealplan_autoexclude_onhand_desc": "",
"shopping_auto_sync_desc": "Sette til 0 slår autosynkronisering av. Når handleliste vises vil endringer gjort av andre synkroniseres i gitt sekundfrekvens. Dette er nyttig når du handler med andre, men bruker mobildata.",
"mealplan_autoadd_shopping_desc": "Automatisk legg til ingredienser for måltidsplan i handlelisten.",
"mealplan_autoexclude_onhand_desc": "Når måltidsplan legges til i handlelisten (manuellt eller automatisk), ekskluder ingredienser som finnes fra før.",
"mealplan_autoinclude_related_desc": "",
"default_delay_desc": "",
"filter_to_supermarket": "",
@@ -339,7 +339,7 @@
"advanced": "Avansert",
"fields": "Felt",
"show_keywords": "Vis Nøkkelord",
"show_foods": "Vis Mat",
"show_foods": "Vis mat",
"show_books": "Vis bøker",
"show_rating": "Vis vurdering",
"show_units": "Vis enheter",
@@ -482,7 +482,7 @@
"open_data_help_text": "Tandoor Open Data prosjektet gir fra fellesskapet til Tandoor. Dette feltet fylles ut automatisk når det importeres og tillater oppdateringer i fremtiden.",
"Open_Data_Slug": "Åpne data Slug",
"Open_Data_Import": "Åpne Data Import",
"recipe_property_info": "Du kan også legge til egenskaper til mat for å kalkulere dem automatisk basert på oppskriften!",
"recipe_property_info": "Du kan også legge til nœringsinnhold for å automatisk få sammendrag for dine oppskrifter!",
"Update_Existing_Data": "Oppdater eksisterende data",
"Use_Metric": "Bruk metriske enheter",
"Learn_More": "Lær mer",
@@ -497,5 +497,27 @@
"Properties": "Egenskaper",
"Alignment": "Justering",
"Welcome": "Velkommen",
"err_importing_recipe": "Det oppsto en feil ved import av oppskriften!"
"err_importing_recipe": "Det oppsto en feil ved import av oppskriften!",
"StartDate": "Startdato",
"EndDate": "Sluttdato",
"FDC_ID_help": "FDC database-ID",
"ShoppingBackgroundSyncWarning": "Dårlig nettverkstilkobling, venter på synkronisering...",
"Properties_Food_Unit": "Egenskap mat enhet",
"Data_Import_Info": "Utvid ditt \"Space\" ved å importere en felleskapsberiket liste over mat, enheter og mer for å berike din oppskriftskolleksjon.",
"Undo": "Angre",
"NoMoreUndo": "Ingen endringer å angre.",
"Input": "Inndata",
"Delete_All": "Slett alle",
"Properties_Food_Amount": "Egenskap mat antall",
"CustomThemeHelp": "Overskriv det valgte tema ved å laste opp en egendefinert CSS-fil.",
"CustomImageHelp": "Last opp et bilde for å vise \"space\"-oversikten.",
"CustomNavLogoHelp": "Last opp logo til navigasjonsområde.",
"CustomLogos": "Egendefinerte logoer",
"CustomTheme": "Egendefinert tema",
"Shopping_input_placeholder": "feks. potet/100 poteter/100g poteter",
"created_by": "Laget av",
"CustomLogoHelp": "Last opp kvadratiske bilder i forskjellige størrelser for å endre logo i nettleser og installert app.",
"property_type_fdc_hint": "Kun egenskapestyper med en FDC-ID kan automatisk hente data fra FDC-database",
"Calculator": "Kalkulator",
"ShowRecentlyCompleted": "Vis nylig fullførte objekter"
}

View File

@@ -418,7 +418,7 @@
"warning_space_delete": "Możesz usunąć swoją przestrzeń, w tym wszystkie przepisy, listy zakupów, plany posiłków i wszystko, co utworzyłeś. Tego nie da się cofnąć! Czy na pewno chcesz to zrobić?",
"Copy Link": "Skopiuj link",
"Users": "Użytkownicy",
"Invites": "Zaprasza",
"Invites": "Zaproszenia",
"food_inherit_info": "Pola w pożywieniu, które powinny być domyślnie dziedziczone.",
"Copy Token": "Kopiuj Token",
"Message": "Wiadomość",
@@ -569,5 +569,6 @@
"Unchanged": "Niezmienione",
"Error": "Błąd",
"DefaultPage": "Strona domyślna",
"Shopping_input_placeholder": "np. Ziemniak/100 ziemniaków/100 g ziemniaków"
"Shopping_input_placeholder": "np. Ziemniak/100 ziemniaków/100 g ziemniaków",
"us_cup": "filiżanka (USA, objętość)"
}

View File

@@ -411,5 +411,45 @@
"Copy Link": "Copiar Ligação",
"Theme": "Tema",
"one_url_per_line": "Um URL por linha",
"Original_Text": "Texto original"
"Original_Text": "Texto original",
"err_importing_recipe": "Ocorreu um erro ao importar a receita!",
"recipe_property_info": "Você também pode adicionar propriedades aos alimentos para calculá-los automaticamente de acordo com sua receita!",
"open_data_help_text": "O projeto Tandoor Open Data fornece dados contribuídos pela comunidade. Este campo é preenchido automaticamente ao importá-lo e permite atualizações no futuro.",
"per_serving": "por porção",
"property_type_fdc_hint": "Somente tipos de propriedade com um ID FDC podem puxar dados da base de dados FDC automaticamente",
"Data_Import_Info": "Melhore seu Espaço importando uma lista curada de comidas, unidades e mais para melhorar sua coleção de receitas.",
"converted_amount": "Quantidade convertida",
"Properties": "Propriedades",
"created_by": "Criado por",
"FDC_ID": "ID FDC",
"FDC_ID_help": "ID database FDC",
"Input": "Input",
"Undo": "Desfazer",
"NoMoreUndo": "Nenhuma alteração para ser desfeita.",
"StartDate": "Data de início",
"EndDate": "Data fim",
"Welcome": "Bem-vindo",
"Open_Data_Slug": "Slug do Open Data",
"Open_Data_Import": "Importação do Open Data",
"Properties_Food_Amount": "Proriedades Quantidade de Comida",
"Properties_Food_Unit": "Propriedades Unidade de Comida",
"Shopping_input_placeholder": "Ex: Batata/100 Batatas/100 g Batatas",
"Property": "Propriedade",
"Property_Editor": "Propriedade Editor",
"Conversion": "Conversão",
"FDC_Search": "Pesquisa FDC",
"Update_Existing_Data": "Atualizar dados existentes",
"Use_Metric": "Usar sistema Métrico",
"converted_unit": "Unidade convertida",
"Learn_More": "Aprenda mais",
"Calculator": "Calculadora",
"base_unit": "Unidade base",
"base_amount": "Quantidade base",
"Datatype": "Tipo de dados",
"Number of Objects": "Número de objetos",
"Alignment": "Alinhamento",
"Delete_All": "Apagar todos",
"CustomImageHelp": "Fazer upload de uma image para mostrar na visão geral do espaço.",
"CustomTheme": "Tema customizado",
"CustomThemeHelp": "Substituir os estilos do tema selecionado com o upload de um arquivo CSS customizado."
}

View File

@@ -1,5 +1,5 @@
{
"warning_feature_beta": "Este recurso está atualmente em um estado BETA (teste). Por favor, espere bugs e possíveis mudanças no futuro (possivelmente perdendo dados relacionados a esta funcionalidade) ao usar este recurso.",
"warning_feature_beta": "Este recurso está atualmente em fase de teste (BETA). Por favor, espere bugs e possíveis mudanças no futuro ao usar este recurso (possivelmente perdendo dados relacionados a esta funcionalidade).",
"err_fetching_resource": "Ocorreu um erro ao buscar um recurso!",
"err_creating_resource": "Ocorreu um erro ao criar um recurso!",
"err_updating_resource": "Ocorreu um erro ao atualizar um recurso!",
@@ -249,22 +249,22 @@
"mealplan_autoadd_shopping_desc": "Automaticamente inclui ingredientes do plano de refeição para a lista de compras.",
"mealplan_autoexclude_onhand_desc": "Ao adicionar um plano de refeições à lista de compras (manualmente ou automaticamente), exclua os ingredientes que já estão disponíveis.",
"mealplan_autoinclude_related_desc": "Ao adicionar um plano de refeições à lista de compras (manualmente ou automaticamente), inclua todas as receitas relacionadas.",
"default_delay_desc": "",
"default_delay_desc": "Número padrão de horas para atrasar um item da lista de compras.",
"filter_to_supermarket": "Filtro para Supermercado",
"Coming_Soon": "Em breve",
"Auto_Planner": "Planejamento Automático",
"New_Cookbook": "Novo livro de receitas",
"Hide_Keyword": "Oculta palavras-chave",
"Clear": "",
"Clear": "Limpar",
"err_move_self": "Não é possível mover o item para ele mesmo",
"nothing": "Nada para fazer",
"err_merge_self": "Não é possível mesclar um item com ele mesmo",
"show_sql": "Mostrar SQL",
"filter_to_supermarket_desc": "",
"filter_to_supermarket_desc": "Por padrão, filtre a lista de compras para incluir apenas categorias do supermercado selecionado.",
"CategoryName": "Nome da Categoria",
"SupermarketName": "Nome do Supermercado",
"CategoryInstruction": "",
"shopping_recent_days_desc": "",
"CategoryInstruction": "Arraste as categorias para alterar a ordem em que as categorias de pedidos aparecem na lista de compras.",
"shopping_recent_days_desc": "Dias de exibição das entradas recentes da lista de compras.",
"shopping_recent_days": "Dias Recentes",
"create_shopping_new": "",
"download_pdf": "Download PDF",
@@ -273,26 +273,26 @@
"csv_delim_label": "Delimitador CSV",
"SuccessClipboard": "Lista de compras copiada para área de transferência",
"copy_to_clipboard": "Copiar para Área de Transferência",
"csv_prefix_help": "",
"csv_prefix_help": "Prefixo a ser adicionado ao copiar a lista para a área de transferência.",
"csv_prefix_label": "Lista de Prefixos",
"copy_markdown_table": "",
"copy_markdown_table": "Copiar como tabela Markdown",
"in_shopping": "Na Lista de Compras",
"DelayUntil": "Atrasar Até",
"Pin": "Pin",
"mark_complete": "Marcar como Finalizado",
"QuickEntry": "",
"shopping_add_onhand_desc": "",
"shopping_add_onhand": "",
"QuickEntry": "Entrada rápida",
"shopping_add_onhand_desc": "Marque a comida como 'Disponível' quando desmarcada da lista de compras.",
"shopping_add_onhand": "Automaticamente disponível",
"related_recipes": "Receitas Relacionadas",
"today_recipes": "Receitas de Hoje",
"sql_debug": "SQL Debug",
"remember_search": "Lembrar Pesquisa",
"remember_hours": "Horas para Lembrar",
"tree_select": "Usar Árvore de Seleção",
"OnHand_help": "",
"ignore_shopping_help": "",
"shopping_category_help": "",
"food_recipe_help": "",
"OnHand_help": "Os alimentos estão em estoque e não serão adicionados automaticamente a uma lista de compras. O status disponível é compartilhado com utilizadores de compras.",
"ignore_shopping_help": "Nunca adicione alimentos à lista de compras (por exemplo, água)",
"shopping_category_help": "Os supermercados podem ser ordenados e filtrados por Categoria de Compras de acordo com a disposição dos corredores.",
"food_recipe_help": "Vincular uma receita aqui incluirá a receita vinculada em qualquer outra receita que use este alimento",
"Foods": "Alimentos",
"enable_expert": "Habilitar Modo Expert",
"expert_mode": "Modo Expert",
@@ -317,14 +317,14 @@
"desc": "Descendente",
"date_viewed": "Último Visualizado",
"last_cooked": "Último Cozido",
"times_cooked": "",
"date_created": "",
"times_cooked": "Quantidade de vezes feita",
"date_created": "Data Criada",
"show_sortby": "Mostrar Ordena Por",
"search_rank": "Rank de Pesquisa",
"make_now": "Fazer Agora",
"recipe_filter": "Filtro de Receita",
"book_filter_help": "",
"review_shopping": "",
"book_filter_help": "Inclui receitas do filtro da receita, além daquelas atribuídas manualmente.",
"review_shopping": "Revise os itens da lista de compras antes de salvar",
"view_recipe": "Visualizar receita",
"copy_to_new": "Copiar para Nova Receita",
"recipe_name": "Nome da Receita",
@@ -353,7 +353,7 @@
"updatedon": "Atualizado Em",
"advanced_search_settings": "Configuração de Pesquisa Avançada",
"nothing_planned_today": "Você não tem nada planejado para hoje!",
"no_pinned_recipes": "",
"no_pinned_recipes": "Você não tem receitas fixadas!",
"Planned": "Planejado",
"Pinned": "Marcado",
"Quick actions": "Ações rápidas",
@@ -393,7 +393,7 @@
"Use_Plural_Unit_Simple": "Dinamicamente usar forma plural para unidade",
"Use_Plural_Food_Always": "Sempre usar forma plural para alimento",
"Use_Plural_Food_Simple": "Dinamicamente usar forma plural para alimento",
"plural_usage_info": "",
"plural_usage_info": "Use o plural para unidades e alimentos dentro deste espaço.",
"Amount": "Quantidade",
"Description_Replace": "Substituir Descrição",
"Decimals": "Decimais",
@@ -527,5 +527,47 @@
"Properties_Food_Amount": "Quantidade de Alimento das Propriedades",
"Properties_Food_Unit": "Unidade de Alimento das Propriedades",
"Shopping_input_placeholder": "ex. Batata/100 Batatas/100 g Batatas",
"FDC_Search": "Busca FDC"
"FDC_Search": "Busca FDC",
"Unpin": "Desfixar",
"us_cup": "xícara (EUA, volume)",
"Error": "Erro",
"Bookmarklet": "Marcador",
"Sticky_Nav": "Navegação fixa",
"Show_Logo_Help": "Mostre o logotipo do Tandoor ou do espaço na barra de navegação.",
"Nav_Text_Mode_Help": "Comporta-se de maneira diferente para cada tema.",
"Space_Cosmetic_Settings": "Algumas configurações cosméticas podem ser alteradas pelos administradores do espaço e substituirão as configurações do cliente para esse espaço.",
"Import_Error": "Ocorreu um erro durante a importação. Expanda os detalhes na parte inferior da página para visualizá-los.",
"Unchanged": "Sem alterações",
"show_step_ingredients_setting_help": "Adicione a tabela de ingredientes ao lado das etapas da receita. Aplica-se no momento da criação. Pode ser substituído na visualização de edição de receita.",
"Toggle": "Alternar",
"Split_All_Steps": "Divida todas as linhas em etapas separadas.",
"gallon": "galão [gal] (EUA, volume)",
"tsp": "colher de chá [tsp] (EUA, volume)",
"imperial_fluid_ounce": "onça fluida imperial [imp fl oz] (Reino Unido, volume)",
"imperial_pint": "pinta imperial [imp pt] (Reino Unido, volume)",
"imperial_quart": "quarto de galão imperial [imp qt] (Reino Unido, volume)",
"imperial_tsp": "colher de chá imperial [imp tsp] (Reino Unido, volume)",
"imperial_tbsp": "colher de sopa imperial [imp tbsp] (Reino Unido, volume)",
"OrderInformation": "Os objetos são ordenados de números pequenos a grandes.",
"PinnedConfirmation": "{recipe} foi fixada.",
"UnpinnedConfirmation": "{recipe} foi desafixada.",
"Created": "Criado",
"Updated": "Atualizado",
"Logo": "Logotipo",
"Show_Logo": "Mostrar logotipo",
"Social_Authentication": "Autenticação social",
"Enable": "Ativar",
"Warning_Delete_Supermarket_Category": "Excluir uma categoria de supermercado também excluirá todas as relações com alimentos. Tem certeza?",
"ounce": "onça [oz] (peso)",
"pound": "libra (peso)",
"fluid_ounce": "onça fluida [fl oz] (EUA, volume)",
"Transpose_Words": "Transpor palavras",
"Never_Unit": "Unidade nunca",
"DefaultPage": "Página padrão",
"pint": "pint [pt] (EUA, volume)",
"quart": "quarto de galão [qt] (EUA, volume)",
"tbsp": "colher de sopa [colher de sopa] (EUA, volume)",
"imperial_gallon": "Galão imperial [imp gal] (Reino Unido, volume)",
"Nav_Text_Mode": "Modo de Navegação em Texto",
"make_now_count": "Máximo de ingredientes em falta"
}

View File

@@ -363,5 +363,126 @@
"recipe_property_info": "Вы также можете добавить свойства к продуктам, чтобы автоматически рассчитывать их на основе вашего рецепта!",
"open_data_help_text": "Проект Tandoor Open Data предоставляет предоставленные сообществом данные для Tandoor. Это поле заполняется автоматически при импорте и допускает обновления в будущем.",
"Open_Data_Import": "Открыть импорт данных",
"property_type_fdc_hint": "Только типы свойств с FDC ID могут автоматически получать данные из базы данных FDC"
"property_type_fdc_hint": "Только типы свойств с FDC ID могут автоматически получать данные из базы данных FDC",
"Pin": "Закрепить",
"Import Recipe": "Импортировать рецепт",
"Create Recipe": "Создать рецепт",
"Manage_Emails": "Управление электронной почтой",
"Change_Password": "Изменить пароль",
"API": "API",
"Disable": "Отключить",
"Enable": "Включить",
"Disabled": "Отключено",
"Foods": "Продукты",
"Nav_Color": "Цвет навигации",
"Ingredient Overview": "Обзор ингредиентов",
"Export_Not_Yet_Supported": "Экспорт пока не поддерживается",
"Last_name": "Фамилия",
"Default_Unit": "Единица измерения по умолчанию",
"Decimals": "Десятки",
"Hours": "Часы",
"Day": "День",
"Days": "Дни",
"Hour": "Час",
"download_csv": "Скачать CSV",
"Cosmetic": "Косметические",
"Account": "Аккаунт",
"Import_Supported": "Импорт поддерживается",
"g": "грамм [г] (метрическая единица, вес)",
"sql_debug": "Отладка SQL",
"Import_Result_Info": "{imported} из {total} рецептов были импортированы",
"total": "всего",
"Copy Token": "Копировать токен",
"SupermarketName": "Название супермаркета",
"Plural": "Множественное",
"plural_short": "множественное",
"in_shopping": "В списке покупок",
"App": "Приложение",
"Message": "Сообщение",
"Export_Supported": "Экспорт поддерживается",
"Import_Not_Yet_Supported": "Импорт пока не поддерживается",
"filter_to_supermarket_desc": "По умолчанию список покупок фильтруется таким образом, чтобы в него включались только категории для выбранного супермаркета.",
"Toggle": "Переключить",
"OrderInformation": "Объекты упорядочены от меньшего к большему.",
"Website": "Веб-сайт",
"Welcome": "Добро пожаловать",
"SuccessClipboard": "Список покупок скопирован в буфер обмена",
"First_name": "Имя",
"Create Food": "Создать продукт",
"UnpinnedConfirmation": "{recipe} откреплен.",
"show_ingredient_overview": "Отобразить список всех ингредиентов в начале рецепта.",
"Username": "Имя пользователя",
"Undo": "Отменить",
"NoMoreUndo": "Нет изменений, которые можно было бы отменить.",
"Delete_All": "Удалить всё",
"Input": "Ввод",
"Copy Link": "Копировать ссылку",
"Shopping_input_placeholder": "Например: Картофель/100 Картофелин/100 г Картофеля",
"created_by": "Создано",
"Use_Fractions": "Использовать дроби",
"Language": "Язык",
"Theme": "Тема",
"ShowRecentlyCompleted": "Показать недавно завершенные элементы",
"ShoppingBackgroundSyncWarning": "Плохая сеть, ожидание синхронизации...",
"Seconds": "Секунды",
"Users": "Пользователи",
"Invites": "Приглашения",
"CategoryName": "Название категории",
"CategoryInstruction": "Перетаскивайте категории, чтобы изменить порядок отображения категорий в списке покупок.",
"shopping_recent_days": "Недавние дни",
"download_pdf": "Скачать PDF",
"csv_delim_help": "Разделитель, используемый для экспорта в формате CSV.",
"csv_delim_label": "Разделитель CSV",
"copy_to_clipboard": "Копировать в буфер обмена",
"copy_markdown_table": "Копировать как таблицу Markdown",
"Unpin": "Открепить",
"PinnedConfirmation": "{recipe} закреплен.",
"QuickEntry": "Быстрый вход",
"today_recipes": "Сегодняшние рецепты",
"Created": "Создано",
"Updated": "Обновлено",
"Error": "Ошибка",
"filter": "Фильтр",
"Logo": "Логотип",
"Show_Logo": "Показать логотип",
"Comments_setting": "Показать комментарии",
"Click_To_Edit": "Нажмите, чтобы изменить",
"search_no_recipes": "Не удалось найти ни одного рецепта!",
"search_import_help_text": "Импортировать рецепт с внешнего веб-сайта или приложения.",
"search_create_help_text": "Создать новый рецепт непосредственно в Tandoor.",
"New_Supermarket_Category": "Создать новую категорию супермаркетов",
"Datatype": "Тип данных",
"kg": "килограмм [кг] (метрическая единица, вес)",
"ounce": "унция [oz] (вес)",
"pound": "фунт (вес)",
"Original_Text": "Исходный текст",
"Properties": "Свойства",
"Property": "Свойство",
"StartDate": "Дата начала",
"EndDate": "Дата окончания",
"Second": "Секунда",
"DefaultPage": "Начальная страница",
"ml": "миллилитр [мл] (метрическая единица, объём)",
"l": "литр [л] (метрическая единица, объем)",
"Choose_Category": "Выбрать категорию",
"Back": "Назад",
"Use_Plural_Unit_Always": "Всегда используйте форму множественного числа для обозначения единицы измерения",
"CustomImageHelp": "Загрузите изображение, которое будет отображаться в обзоре пространства.",
"CustomNavLogoHelp": "Загрузите изображение, которое будет использоваться в качестве логотипа панели навигации.",
"CustomLogos": "Пользовательские логотипы",
"plan_share_desc": "Выбранным пользователям будет автоматически предоставлен доступ к новым записям в Плане Питания.",
"CustomTheme": "Пользовательская тема",
"CustomThemeHelp": "Измените стили выбранной темы, загрузив собственный CSS-файл.",
"Learn_More": "Узнать больше",
"OnHand_help": "Еда находится в инвентаре и не будет автоматически добавлена в список покупок. Статус «Под рукой» передается пользователям, совершающим покупки.",
"csv_prefix_help": "Префикс для добавления при копировании списка в буфер обмена.",
"csv_prefix_label": "Префикс списка",
"mark_complete": "Пометить выполненным",
"ignore_shopping_help": "Никогда не добавляйте продукты в список покупок (например, воду)",
"shopping_add_onhand_desc": "Пометьте продукты «Под рукой», если они вычеркнуты из списка покупок.",
"Number of Objects": "Количество (шт.)",
"CustomLogoHelp": "Загрузите изображения разных размеров в форме квадрата, чтобы изменить логотип на вкладке браузера и в установленном веб-приложении.",
"Update_Existing_Data": "Обновить данные",
"Use_Metric": "Использовать метрическую систему",
"Property_Editor": "Редактировать свойство"
}

View File

@@ -16,7 +16,7 @@
"convert_internal": "Pretvori v interni recept",
"show_only_internal": "Prikaži samo interne recepte",
"show_split_screen": "Deljen pogled",
"Log_Recipe_Cooking": "Logiraj recept za kuhanje",
"Log_Recipe_Cooking": "Beleži kuharski recept",
"External_Recipe_Image": "Zunanja slika recepta",
"Add_to_Shopping": "Dodaj v nakupovalni listek",
"Add_to_Plan": "Dodaj v načrt",
@@ -84,7 +84,7 @@
"Success": "Uspešno",
"Failure": "Napaka",
"Ingredients": "Sestavine",
"Supermarket": "Supermarket",
"Supermarket": "Trgovina",
"Categories": "Kategorije",
"Category": "Kategorija",
"Selected": "Izbrano",
@@ -100,7 +100,7 @@
"Image": "Slika",
"Delete": "Izbriši",
"Open": "Odpri",
"Ok": "Odpri",
"Ok": "V redu",
"Save": "Shrani",
"Step": "Korak",
"Search": "Iskanje",
@@ -123,8 +123,8 @@
"merge_confirmation": "Zamenjaj <i>{source}</i> z/s <i>{target}</i>",
"create_rule": "in ustvari avtomatizacijo",
"move_selection": "Izberi starša {type} za premik v {source}.",
"merge_selection": "Zamenjaj vse dogodge {source} z izbranim {type}.",
"Root": "",
"merge_selection": "Zamenjaj vse dogodke {source} z izbranim {type}.",
"Root": "Koren",
"Ignore_Shopping": "Prezri nakup",
"Shopping_Category": "Kategorija nakupa",
"Edit_Food": "Uredi hrano",
@@ -149,7 +149,7 @@
"Type": "Tip",
"Description": "Opis",
"Recipe": "Recept",
"tree_root": "",
"tree_root": "Koren drevesa",
"Icon": "Ikona",
"Unit": "Enota",
"No_Results": "Ni rezultatov",
@@ -203,7 +203,7 @@
"Next_Day": "Naslednji Dan",
"Previous_Day": "Prejšnji Dan",
"Coming_Soon": "Kmalu",
"Auto_Planner": "Avto-planer",
"Auto_Planner": "Samodejni planer",
"New_Cookbook": "Nova kuharska knjiga",
"Hide_Keyword": "Skrij ključne besede",
"Clear": "Počisti",
@@ -215,7 +215,7 @@
"RemoveFoodFromShopping": "Odstrani {food} iz nakupovalnega listka",
"SupermarketCategoriesOnly": "Prikaži samo trgovinske kategorije",
"DelayFor": "Zamakni za {hours} ur",
"OfflineAlert": "Si v offline načinu, nakupovalni listek se mogoče ne bo sinhroniziral.",
"OfflineAlert": "Si v načinu brez povezave, nakupovalni listek se mogoče ne bo sinhroniziral.",
"shopping_share_desc": "Uporabniki bodo videli vse elemente, ki si jih dodal v nakupovalni listek. Morajo te dodati, da vidiš njihove elemente na listku.",
"shopping_auto_sync_desc": "Nastavitev na 0 bo onemogoča avtomatsko sinhronizacijo. Pri ogledu nakupovalnega seznama se seznam posodablja vsakih nekaj sekund za sinhronizacijo sprememb, ki jih je morda naredil nekdo drug. Uporabno pri nakupovanju z več ljudmi, vendar bo uporabljalo mobilne podatke.",
"filter_to_supermarket_desc": "Privzeto, razvrsti nakupovalni listek, da vključi samo označene trgovine.",
@@ -225,7 +225,7 @@
"success_moving_resource": "Premikanje vira je bilo uspešno!",
"success_merging_resource": "Združevanje vira je bilo uspešno!",
"Added_by": "Dodano s strani",
"AddToShopping": "Dodaj nakupovlanemu listku",
"AddToShopping": "Dodaj nakupovalnemu listku",
"NotInShopping": "{food} ni v tvojem nakupovalnem listku.",
"OnHand": "Trenutno imam v roki",
"FoodOnHand": "Imaš {food} v roki.",
@@ -244,11 +244,11 @@
"Warning": "Opozorilo",
"NoCategory": "Nobena kategorija ni izbrana.",
"InheritWarning": "{food} je nastavljena na dedovanje, spremembe morda ne bodo trajale.",
"ShowDelayed": "Prikaži zamaknjene elemente",
"ShowDelayed": "Pokaži odložene elemente",
"Completed": "Končano",
"shopping_share": "Deli nakupovalni listek",
"shopping_auto_sync": "Avtomatska sinhronizacija",
"mealplan_autoadd_shopping": "Avtomatsko dodaj obrok v načrt",
"shopping_auto_sync": "Samodejna sinhronizacija",
"mealplan_autoadd_shopping": "Samodejno dodaj obrok v načrt",
"mealplan_autoexclude_onhand": "Izključi hrano v roki",
"mealplan_autoinclude_related": "Dodaj povezane recepte",
"default_delay": "Privzete ure za zamik",
@@ -275,7 +275,7 @@
"copy_markdown_table": "Kopiraj kot Markdown tabela",
"in_shopping": "V nakupovalnem listku",
"DelayUntil": "Zamakni do",
"shopping_add_onhand": "Avtomatsko v roki",
"shopping_add_onhand": "Samodejno v roki",
"related_recipes": "Povezani recepti",
"today_recipes": "Današnji recepti",
"mark_complete": "Označi končano",
@@ -285,13 +285,13 @@
"remember_search": "Zapomni si iskanje",
"remember_hours": "Ure, ki si jih zapomni",
"tree_select": "Uporabi drevesno označbo",
"Plural": "",
"plural_short": "",
"Use_Plural_Unit_Always": "",
"Use_Plural_Unit_Simple": "",
"Use_Plural_Food_Always": "",
"Use_Plural_Food_Simple": "",
"plural_usage_info": "",
"Plural": "Množina",
"plural_short": "množina",
"Use_Plural_Unit_Always": "Za enoto vedno uporabite množinsko obliko",
"Use_Plural_Unit_Simple": "Uporabite množinsko obliko za dinamično enoto",
"Use_Plural_Food_Always": "Za hrano vedno uporabljajte množinsko obliko",
"Use_Plural_Food_Simple": "Uporabite množinsko obliko za dinamično hrano",
"plural_usage_info": "Uporabite množinsko obliko za enote in hrano v tem prostoru.",
"err_deleting_protected_resource": "Predmet, ki ga želite izbrisati, je še vedno v uporabi in ga ni mogoče izbrisati.",
"Private_Recipe": "Zasebni Recept",
"Private_Recipe_Help": "Recept je prikazan samo vam in osebam, s katerimi ga delite.",
@@ -316,5 +316,259 @@
"converted_amount": "Pretvorjena Količina",
"base_unit": "Osnovna Enota",
"base_amount": "Osnovna Količina",
"Amount": "Količina"
"Amount": "Količina",
"err_importing_recipe": "Pri uvozu recepta je prišlo do napake!",
"Properties_Food_Amount": "Lastnosti Količina hrane",
"Properties_Food_Unit": "Lastnosti Hrana Enota",
"Calculator": "Kalkulator",
"FDC_ID": "FDC ID",
"show_rating": "Prikaži oceno",
"New_Entry": "Nov vnos",
"ignore_shopping_help": "Na nakupovalni seznam nikoli ne dodajajte hrane (npr. vode)",
"CustomTheme": "Tema po meri",
"CustomLogoHelp": "Naložite kvadratne slike v različnih velikostih, da jih spremenite v logotip v zavihku brskalnika in nameščeni spletni aplikaciji.",
"OnHand_help": "Hrana je v zalogi in ne bo samodejno dodana na nakupovalni seznam. Stanje na roki se deli z nakupovalnimi uporabniki.",
"CustomThemeHelp": "Preglasite sloge izbrane teme z nalaganjem datoteke CSS po meri.",
"ShoppingBackgroundSyncWarning": "Slabo omrežje, čakanje na sinhronizacijo ...",
"Unpin": "Odpni",
"PinnedConfirmation": "{recept} je bil pripet.",
"show_step_ingredients_setting_help": "Dodajte tabelo s sestavinami poleg korakov recepta. Velja v času ustvarjanja. Lahko se preglasi v pogledu za urejanje recepta.",
"Copy Token": "Kopiraj žeton",
"simple_mode": "Preprost način",
"show_books": "Prikaži knjige",
"sort_by": "Razvrsti po",
"date_viewed": "Nazadnje ogledano",
"StartDate": "Začetni datum",
"EndDate": "Končni datum",
"advanced": "Napredno",
"Decimals": "Decimalke",
"default_delay_desc": "Privzeto število ur za zakasnitev vnosa na nakupovalni seznam.",
"enable_expert": "Omogoči strokovni način",
"expert_mode": "Strokovni način",
"fields": "Polja",
"API": "API",
"show_keywords": "Prikaži ključne besede",
"show_foods": "Prikaži živila",
"show_units": "Prikaži enote",
"show_filters": "Prikaži filtre",
"date_created": "Datum ustvarjanja",
"filter_to_supermarket": "Razvrsti po trgovini",
"Users": "Uporabniki",
"Copy Link": "Kopiraj povezavo",
"Create_New_Shopping_Category": "Dodajte novo nakupovalno kategorijo",
"and_down": "& dol",
"Property": "Lastnost",
"Conversion": "Pogovor",
"Original_Text": "Izvirni tekst",
"created_by": "Ustvaril",
"Properties": "Lastnosti",
"Default_Unit": "Privzeta enota",
"Added_on": "Dodano",
"Day": "Dan",
"Days": "Dnevi",
"Second": "Sekunda",
"Seconds": "Sekunde",
"IgnoredFood": "{food} je nastavljen da prezre nakup.",
"Invites": "Povabila",
"UnpinnedConfirmation": "{recept} je bil odpet.",
"shopping_add_onhand_desc": "Označite hrano 'Pri roki', ko je označena na nakupovalnem seznamu.",
"Input": "Vnos",
"Undo": "Razveljavi",
"Property_Editor": "Urejevalnik lastnosti",
"not": "ne",
"save_filter": "Shrani filter",
"filter_name": "Ime filtra",
"show_step_ingredients_setting": "Prikažite sestavine poleg korakov recepta",
"show_step_ingredients": "Prikaži sestavine po korakih",
"Account": "Račun",
"food_recipe_help": "Če tukaj povežete recept, boste povezani recept vključili v vse druge recepte, ki uporabljajo to živilo",
"Foods": "Živila",
"Shopping_input_placeholder": "na primer: krompir/100 kromiprjev/100 g krompirja",
"Use_Fractions": "Uporabi ulomke",
"Use_Fractions_Help": "Samodejno pretvori decimalke v ulomke, ko si ogledujete recept.",
"Add_Servings_to_Shopping": "Dodaj {servings} obrokov v Nakupovanje",
"Language": "Jezik",
"Theme": "Tema",
"ShowRecentlyCompleted": "Prikaži nedavno dokončane elemente",
"one_url_per_line": "En URL na vrstico",
"plan_share_desc": "Novi vnosi v načrt obrokov bodo samodejno deljeni z izbranimi uporabniki.",
"Hour": "Ura",
"Hours": "Ure",
"OrderInformation": "Predmeti so razvrščeni od majhnega do velikega števila.",
"shopping_category_help": "Supermarkete je mogoče naročiti in filtrirati po nakupovalni kategoriji glede na razporeditev hodnikov.",
"Cosmetic": "Videz",
"hide_step_ingredients": "Skrij sestavine po korakih",
"Custom Filter": "Filter po meri",
"shared_with": "Deljeno s/z",
"asc": "Naraščajoče",
"desc": "Padajoče",
"last_cooked": "Nazadnje skuhano",
"times_cooked": "Število kuhanj",
"FDC_Search": "FDC iskanje",
"property_type_fdc_hint": "Samo lastniške vrste z ID-jem FDC lahko samodejno črpajo podatke iz baze podatkov FDC",
"Alignment": "Poravnava",
"Protected": "Zaščiteno",
"FDC_ID_help": "FDC ID v bazi",
"Datatype": "Vrsta podatkov",
"Number of Objects": "Število predmetov",
"CustomImageHelp": "Naložite sliko za prikaz v pregledu prostora.",
"CustomNavLogoHelp": "Naložite sliko, ki jo želite uporabiti kot logotip navigacijske vrstice.",
"CustomLogos": "Logotipi po meri",
"NoMoreUndo": "Ni sprememb, ki bi jih bilo mogoče razveljaviti.",
"Delete_All": "Izbriši vse",
"Welcome": "Dobrodošli",
"last_viewed": "Nazadnje ogledano",
"Pinned": "Pripeto",
"Username": "Uporabniško ime",
"Page": "Stran",
"Last_name": "Priimek",
"Random Recipes": "Naključni recepti",
"Multiple": "Več",
"select_food": "Izberi živilo",
"Advanced": "Napredno",
"Import_Result_Info": "Uvoženih je bilo {imported} od {total} receptov",
"Import_Error": "Med uvozom je prišlo do napake. Za ogled razširite podrobnosti na dnu strani.",
"Nav_Color_Help": "Spremenite barvo navigacije.",
"search_no_recipes": "Ni bilo mogoče najti nobenega recepta!",
"search_import_help_text": "Uvozite recept z zunanjega spletnega mesta ali aplikacije.",
"Export_Not_Yet_Supported": "Izvoz še ni podprt",
"Create Food": "Ustvari živilo",
"book_filter_help": "Vključi recepte iz filtra receptov poleg ročno dodeljenih.",
"substitute_siblings_help": "Vsa živila, ki imajo istega starša kot ta živila, se štejejo za nadomestke.",
"paste_ingredients_placeholder": "Tukaj prilepite seznam sestavin...",
"empty_list": "Seznam je prazen.",
"Importer_Help": "Več informacij in pomoč o tem uvozniku:",
"us_cup": "skodelica (US, volumen)",
"Sticky_Nav_Help": "Vedno prikaži navigacijski meni na vrhu zaslona.",
"Space_Cosmetic_Settings": "Nekatere kozmetične nastavitve lahko spremenijo skrbniki prostora in bodo preglasile nastavitve odjemalca za ta prostor.",
"reset_children_help": "Prepiši vse podrejene z vrednostmi iz podedovanih polj. Podedovana polja otrok bodo nastavljena na Podeduj polja, razen če je nastavljena možnost Podedovana polja.",
"parameter_count": "Parameter {count}",
"Reset": "Ponastavi",
"Recipes_In_Import": "Recepti v vaši uvozni datoteki",
"Split_All_Steps": "Vse vrstice razdelite na ločene korake.",
"Combine_All_Steps": "Združite vse korake v eno polje.",
"l": "liter [l] (metrično, volumen)",
"ml": "mililiter [ml] (metrično, volumen)",
"gallon": "galona [gal] (US, volumen)",
"quart": "četrtina [qt] (US, volumen)",
"imperial_pint": "imperialnih pol litra [imp pt] (UK, volumen)",
"Choose_Category": "Izberi kategorijo",
"Create Recipe": "Ustvari recept",
"Food_Replace": "Zamenjava živila",
"recipe_filter": "Filter receptov",
"select_keyword": "Izberite ključno besedo",
"reset_food_inheritance": "Ponastavi dedovanje",
"search_create_help_text": "Ustvarite nov recept neposredno v Tandoorju.",
"Manage_Emails": "Upravljanje e-poštnih sporočil",
"Disabled": "Onemogočeno",
"Disable": "Onemogoči",
"substitute_siblings": "Nadomestni sorodniki",
"Message": "Sporočilo",
"click_image_import": "Kliknite sliko, ki jo želite uvoziti za ta recept",
"show_ingredient_overview": "Prikažite seznam vseh sestavin na začetku recepta.",
"import_duplicates": "Da bi preprečili dvojnike, so recepti z enakim imenom kot obstoječi recepti prezrti. Potrdite to polje, če želite uvoziti vse.",
"paste_json": "Tukaj prilepite vir json ali html, da naložite recept.",
"Click_To_Edit": "Kliknite za urejanje",
"no_more_images_found": "Na spletnem mestu ni dodatnih slik.",
"substitute_children_help": "Vsa živila, ki so podrejena tej hrani, se štejejo za nadomestke.",
"SubstituteOnHand": "Pri roki imate nadomestek.",
"ChildInheritFields": "Otroci podedujejo polja",
"ChildInheritFields_help": "Otroci bodo privzeto podedovali ta polja.",
"create_food_desc": "Ustvarite živilo in jo povežite s tem receptom.",
"additional_options": "Dodatne možnosti",
"Toggle": "Preklopi",
"total": "skupaj",
"make_now_count": "Vsaj manjkajoče sestavine",
"Change_Password": "Spremeni geslo",
"Social_Authentication": "Socialna avtentikacija",
"add_keyword": "Dodaj ključno besedo",
"select_unit": "Izberi enoto",
"remove_selection": "Prekliči izbiro",
"Supermarkets": "Trgovine",
"User": "Uporabnik",
"First_name": "Ime",
"ounce": "unča [oz] (teža)",
"imperial_quart": "imperialna četrtina [imp qt] (UK, volumen)",
"imperial_fluid_ounce": "imperialna tekoča unča [imp fl oz] (UK, volumen)",
"Import Recipe": "Uvozi recept",
"Never_Unit": "Enota nikoli",
"reset_children": "Ponastavi podrejeno dedovanje",
"copy_to_new": "Kopiraj v nov recept",
"reset_food_inheritance_info": "Ponastavite vsa živila na privzeta podedovana polja in njihove nadrejene vrednosti.",
"show_sortby": "Pokaži Razvrsti po",
"search_rank": "Položaj iskanja",
"make_now": "Naredi zdaj",
"Created": "Ustvarjeno",
"Updated": "Posodobljeno",
"Unchanged": "Nespremenjeno",
"Error": "Napaka",
"review_shopping": "Pred shranjevanjem preglejte nakupovalne vnose",
"view_recipe": "Oglejte si recept",
"recipe_name": "Ime recepta",
"paste_ingredients": "Prilepi sestavine",
"ingredient_list": "Seznam sestavin",
"explain": "Pojasnilo",
"filter": "Filter",
"Website": "Spletna stran",
"App": "Aplikacija",
"Bookmarklet": "Zaznamek",
"Sticky_Nav": "Fiksna navigacija",
"Logo": "Logotip",
"Show_Logo": "Prikaži logotip",
"Show_Logo_Help": "Prikaži logotip Tandoor ali vesolje v navigacijski vrstici.",
"Nav_Color": "Barva navigacije",
"Nav_Text_Mode": "Navigacijski besedilni način",
"Nav_Text_Mode_Help": "Za vsako temo se obnaša drugače.",
"Use_Kj": "Uporabite kJ namesto kcal",
"Comments_setting": "Prikaži komentarje",
"warning_duplicate_filter": "Opozorilo: Zaradi tehničnih omejitev lahko uporaba več filtrov iste kombinacije (in/ali/ne) prinese nepričakovane rezultate.",
"InheritFields_help": "Vrednosti teh polj bodo podedovane od nadrejenega (Izjema: prazne nakupovalne kategorije niso podedovane)",
"show_ingredients_table": "Prikažite tabelo sestavin poleg besedila koraka",
"Ingredient Overview": "Pregled sestavin",
"created_on": "Ustvarjeno",
"updatedon": "Posodobljeno",
"Imported_From": "Uvoženo od",
"advanced_search_settings": "Nastavitve naprednega iskanja",
"nothing_planned_today": "Za danes nimate nič v načrtu!",
"no_pinned_recipes": "Nimate pripetih receptov!",
"Planned": "Načrtovano",
"Imported": "Uvoženo",
"Quick actions": "Hitra dejanja",
"Ratings": "Ocene",
"Internal": "Notranji",
"Units": "Enote",
"select_file": "Izberi datoteko",
"select_recipe": "Izberi recept",
"Select": "Izberi",
"Keyword": "Ključna beseda",
"Single": "Ena",
"substitute_help": "Nadomestki se upoštevajo pri iskanju receptov, ki jih je mogoče pripraviti s priročnimi sestavinami.",
"substitute_children": "Nadomestni otroci",
"DefaultPage": "Privzeta stran",
"Enable": "Omogoči",
"Options": "Možnosti",
"Documentation": "Dokumentacija",
"Select_App_To_Import": "Izberite aplikacijo, iz katere želite uvoziti",
"Import_Supported": "Uvoz podprt",
"Export_Supported": "Izvoz podprt",
"Import_Not_Yet_Supported": "Uvoz še ni podprt",
"imperial_tsp": "imperialna čajna žlica [imp tsp] (UK, volumen)",
"Back": "Nazaj",
"Transpose_Words": "Prenesite besede",
"Unit_Replace": "Zamenjava enote",
"Warning_Delete_Supermarket_Category": "Z brisanjem kategorije trgovine boste izbrisali tudi vse povezave z živili. Ste prepričani?",
"New_Supermarket": "Ustvari novo trgovino",
"New_Supermarket_Category": "Ustvari novo kategorijo trgovin",
"Are_You_Sure": "Ste prepričani?",
"Valid Until": "Velja do",
"g": "gram [g] (metrično, teža)",
"kg": "kilogram [g] (metrično, teža)",
"pound": "funt (teža)",
"fluid_ounce": "tekoča unča [fl oz] (US, volumen)",
"pint": "pol litra [pt] (US, volumen)",
"tbsp": "jedilna žlica [tbsp] (US, volumen)",
"tsp": "čajna žlica [tsp] (US, volumen)",
"imperial_gallon": "imperialna galona [imp gal] (UK, volumen)",
"imperial_tbsp": "imperialna jedilna žlica [imp tbsp] (UK, volumen)",
"Name_Replace": "Zamenjaj ime"
}

View File

@@ -1,5 +1,5 @@
{
"warning_feature_beta": "Bu özellik şu anda BETA (test) durumundadır. Lütfen bu özelliği kullanırken hatalara ve muhtemelen gelecekte değişikliklere (muhtemelen özellikle ilgili verilerin kaybolmasına) hazırlıklı olun.",
"warning_feature_beta": "Bu özellik şu anda BETA (test) aşamasındadır. Lütfen bu özelliği kullanırken gelecekte hatalar ve muhtemelen kırıcı değişiklikler (muhtemelen özellikle ilgili verileri kaybetme) bekleyin",
"err_fetching_resource": "Kaynak alınırken bir hata oluştu!",
"err_creating_resource": "Kaynak oluşturulurken bir hata oluştu!",
"err_updating_resource": "Kaynak güncellenirken bir hata oluştu!",
@@ -567,5 +567,6 @@
"imperial_tbsp": "imperial tablespoon [imp tbsp] (Birleşik Krallık, hacim)",
"imperial_tsp": "imperial teaspoon [imp tsp] (Birleşik Krallık, hacim)",
"Back": "Geri",
"Use_Plural_Unit_Simple": "Birim için dinamik olarak çoğul biçimi kullanın"
"Use_Plural_Unit_Simple": "Birim için dinamik olarak çoğul biçimi kullanın",
"us_cup": "bardak (ABD, hacim)"
}

View File

@@ -1,5 +1,5 @@
{
"warning_feature_beta": "Ця функція зараз в БЕТІ (тестується). Будь ласка, очікуйте помилок і можливих порушень і майбутньому (можлива втрата даних), коли користуєтесь цією функцією.",
"warning_feature_beta": "Наразі ця функціональність знаходиться в стані BETA (тестування). Будь ласка, будьте готові до помилок і можливих змін у майбутньому (можливо, втрата даних, пов'язаних з функціональністю) під час використання.",
"err_fetching_resource": "Виникла помилка при отриманні ресурсу!",
"err_creating_resource": "Виникла помилка при створенні ресурсу!",
"err_updating_resource": "Виникла помилка при оновленні ресурсу!",
@@ -20,20 +20,20 @@
"all_fields_optional": "Всі поля опціональні і можна залишити їх пустими.",
"convert_internal": "Конвертувати у внутрішній рецепт",
"show_only_internal": "Показати тільки внутрішні рецепти",
"show_split_screen": "",
"Log_Recipe_Cooking": "",
"show_split_screen": "Розділений перегляд",
"Log_Recipe_Cooking": "Журнал приготування",
"External_Recipe_Image": "Зображення Зовнішнього Рецепту",
"Add_to_Shopping": "Додати до Покупок",
"Add_to_Plan": "Додати до Плану",
"Step_start_time": "Час початку кроку",
"Sort_by_new": "",
"Sort_by_new": "Сортувати за новими",
"Table_of_Contents": "Зміст",
"Recipes_per_page": "Кількість Рецептів на Сторінку",
"Show_as_header": "",
"Hide_as_header": "",
"Show_as_header": "Показати як заголовок",
"Hide_as_header": "Приховати як заголовок",
"Add_nutrition_recipe": "Додати харчову цінність до рецепту",
"Remove_nutrition_recipe": "Видалити харчову цінність з рецепта",
"Copy_template_reference": "",
"Copy_template_reference": "Скопіювати поссилання на шаблон",
"Save_and_View": "Зберегти і Подивитися",
"Manage_Books": "Управління Книжкою",
"Meal_Plan": "План Харчування",
@@ -42,7 +42,7 @@
"Recipe_Image": "Зображення Рецепту",
"Import_finished": "Імпорт закінчено",
"View_Recipes": "Подивитися Рецепт",
"Log_Cooking": "",
"Log_Cooking": "Занотувати приготування",
"New_Recipe": "Новий Рецепт",
"Url_Import": "Імпорт за посиланням",
"Reset_Search": "Скинути Пошук",
@@ -60,14 +60,14 @@
"Move_Down": "Перемістити вниз",
"Step_Name": "Ім'я Кроку",
"Step_Type": "Тип Кроку",
"Make_Header": "",
"Make_Ingredient": "",
"Make_Header": "Створити Заголовок",
"Make_Ingredient": "Створити Інгрідієнт",
"Enable_Amount": "Включити Кількість",
"Disable_Amount": "Виключити Кількість",
"Ingredient Editor": "Редактор Інгредієнтів",
"Add_Step": "Додати Крок",
"Keywords": "Ключові слова",
"Books": "Книжки",
"Books": "Книги",
"Proteins": "Білки",
"Fats": "Жири",
"Carbohydrates": "Вуглеводи",
@@ -120,7 +120,7 @@
"Download": "Скачати",
"Create": "Створити",
"Search Settings": "Налаштування Пошуку",
"View": "",
"View": "Перегляд",
"Recipes": "Рецепти",
"Move": "Перемістити",
"Merge": "Об'єднати",
@@ -129,8 +129,8 @@
"move_confirmation": "Перемістити <i>{child}</i> до батька <i>{parent}</i>",
"merge_confirmation": "Замінити <i>{source}</i> на <i>{target}</i>",
"create_rule": "і створити автоматизацію",
"move_selection": "",
"merge_selection": "",
"move_selection": "Вказати {type} в який перемістити {source}",
"merge_selection": "Замінити всі згадування {source} згадуваннями {type}.",
"Root": "Корінь",
"Ignore_Shopping": "Ігнорувати Покупки",
"Shopping_Category": "Категорія Покупок",
@@ -139,9 +139,9 @@
"Move_Food": "Перемістити Їжу",
"New_Food": "Нова Їжа",
"Hide_Food": "Сховати Їжу",
"Food_Alias": "",
"Unit_Alias": "",
"Keyword_Alias": "",
"Food_Alias": "Найменування Їжі",
"Unit_Alias": "Найменування Одиниць",
"Keyword_Alias": "Найменування Ключових Слів",
"Delete_Food": "Видалити Їжу",
"No_ID": "ID не знайдено, неможливо видалити.",
"Meal_Plan_Days": "Майбутній план харчування",
@@ -237,9 +237,9 @@
"CountMore": "...+{count} більше",
"IgnoreThis": "Ніколи {food} автоматично не додавати до покупок",
"DelayFor": "Затримка на {hours} годин",
"Warning": "Увага",
"Warning": "Застереження",
"NoCategory": "Жодна категорія не вибрана.",
"InheritWarning": "",
"InheritWarning": "{food} налаштовано на успадкування, зміни можуть не зберегтися.",
"ShowDelayed": "Показати Відкладені Предмети",
"Completed": "Виконано",
"OfflineAlert": "Ви офлайн, список покупок може не синхронізуватися.",
@@ -437,5 +437,49 @@
"Use_Fractions_Help": "Автоматично конвертувати десятки в дроби, коли дивитесь рецепт.",
"Copy Link": "Скопіювати Посилання",
"Original_Text": "Оригінальний текст",
"Default_Unit": "Одиниця замовчуванням"
"Default_Unit": "Одиниця замовчуванням",
"recipe_property_info": "Ви також можете додати властивості до продуктів, щоб розрахувати їх автоматично на основі вашого рецепту!",
"per_serving": "на порцію",
"err_importing_recipe": "Виникла помилка при імпортуванні рецепту!",
"food_inherit_info": "Поля їжі, які повинні успадковуватися за змовчуванням.",
"Property_Editor": "Редактор Властивостей",
"FDC_ID": "FDC ID",
"base_amount": "Базова Кількість",
"Properties": "Властивості",
"Alignment": "Вирівнювання",
"Shopping_input_placeholder": "напр. Картопля/100 Картопли/100гр. Картоплі",
"CustomTheme": "Власна Тема",
"Property": "Властивість",
"Conversion": "Конвертування",
"CustomThemeHelp": "Переписати стили вибраної теми завантаживши власний CSS файл.",
"CustomLogoHelp": "Завантажте квадратні зображення різних розмірів, щоб змінити логотип у вкладці браузера та встановленому веб-додатку.",
"CustomImageHelp": "Завантажте зображення що буде показуватись у огляді простору.",
"Input": "Ввід",
"Undo": "Скасувати",
"NoMoreUndo": "Відсутні зміни для скасування.",
"StartDate": "Початкова дата",
"EndDate": "Кінцева Дата",
"created_by": "Створено",
"CustomNavLogoHelp": "Завантажте зображення що буде використовуватись як логотип у навігаційній панелі.",
"FDC_Search": "Пошук FDC",
"converted_unit": "Конвертована Одиниця",
"converted_amount": "Конвертована Кількість",
"base_unit": "Базова Одиниця",
"Datatype": "Тип данних",
"Number of Objects": "Кількість Об'єктів",
"FDC_ID_help": "Ідентифікатор Бази FDC",
"open_data_help_text": "Проект Tandoor Open Data надає дані для Tandoor, надані спільнотою. Це поле заповнюється автоматично при імпорті даних і дозволяє оновлювати їх у майбутньому.",
"Open_Data_Slug": "Open Data Slug",
"Open_Data_Import": "Відкрити Імпорт Данних",
"Properties_Food_Amount": "Властивості Кількості Їжі",
"Properties_Food_Unit": "Властивості Їжі",
"CustomLogos": "Власні Логотипи",
"Calculator": "Калькулятор",
"property_type_fdc_hint": "Тільки типи властивостей з ідентифікатором FDC можуть автоматично отримувати дані з бази даних FDC",
"Data_Import_Info": "Покращуйте свій Простір, імпортуючи курований спільнотою список продуктів, одиниць виміру тощо, щоб вдосконалити свою колекцію рецептів.",
"Update_Existing_Data": "Оновити Існуючі Данні",
"Use_Metric": "Використовувати метричну систему",
"Learn_More": "Дізнатися Більше",
"Delete_All": "Видалити усе",
"Welcome": "Вітаємо"
}

View File

@@ -23,68 +23,68 @@
"Select_Book": "選擇書籍",
"Recipe_Image": "食譜圖片",
"Import_finished": "匯入完成",
"View_Recipes": "",
"Log_Cooking": "",
"New_Recipe": "",
"Url_Import": "",
"Reset_Search": "",
"Recently_Viewed": "",
"Load_More": "",
"Keywords": "",
"Books": "",
"Proteins": "",
"Fats": "",
"Carbohydrates": "",
"Calories": "",
"Energy": "",
"Nutrition": "",
"Date": "",
"Share": "",
"Export": "",
"Copy": "",
"Rating": "",
"Close": "",
"Link": "",
"Add": "",
"New": "",
"Success": "",
"Failure": "",
"Ingredients": "",
"Supermarket": "",
"Categories": "",
"Category": "",
"Selected": "",
"min": "",
"Servings": "",
"Waiting": "",
"Preparation": "",
"External": "",
"Size": "",
"Files": "",
"File": "",
"Edit": "",
"Cancel": "",
"Delete": "",
"Open": "",
"Ok": "",
"Save": "",
"Step": "",
"Search": "",
"Import": "",
"Print": "",
"Settings": "",
"or": "",
"and": "",
"Information": "",
"Download": "",
"Create": "",
"Plural": "",
"plural_short": "",
"Use_Plural_Unit_Always": "",
"Use_Plural_Unit_Simple": "",
"Use_Plural_Food_Always": "",
"Use_Plural_Food_Simple": "",
"plural_usage_info": "",
"View_Recipes": "查看食譜",
"Log_Cooking": "記錄烹飪",
"New_Recipe": "新食譜",
"Url_Import": "網址匯入",
"Reset_Search": "重置搜尋",
"Recently_Viewed": "最近瀏覽",
"Load_More": "載入更多",
"Keywords": "關鍵字",
"Books": "書籍",
"Proteins": "蛋白質",
"Fats": "脂肪",
"Carbohydrates": "碳水化合物",
"Calories": "卡路里",
"Energy": "能量",
"Nutrition": "營養",
"Date": "日期",
"Share": "分享",
"Export": "匯出",
"Copy": "複製",
"Rating": "評分",
"Close": "關閉",
"Link": "連結",
"Add": "新增",
"New": "新的",
"Success": "成功",
"Failure": "失敗",
"Ingredients": "食材",
"Supermarket": "超市",
"Categories": "分類",
"Category": "類別",
"Selected": "已選擇",
"min": "分鐘",
"Servings": "份量",
"Waiting": "等待",
"Preparation": "準備",
"External": "外部",
"Size": "大小",
"Files": "檔案",
"File": "檔案",
"Edit": "編輯",
"Cancel": "取消",
"Delete": "刪除",
"Open": "打開",
"Ok": "確定",
"Save": "儲存",
"Step": "步驟",
"Search": "搜尋",
"Import": "匯入",
"Print": "列印",
"Settings": "設定",
"or": "",
"and": "",
"Information": "資訊",
"Download": "下載",
"Create": "建立",
"Plural": "複數",
"plural_short": "複數簡寫",
"Use_Plural_Unit_Always": "總是使用複數單位",
"Use_Plural_Unit_Simple": "簡單使用複數單位",
"Use_Plural_Food_Always": "總是使用複數食物",
"Use_Plural_Food_Simple": "簡單使用複數食物",
"plural_usage_info": "在此空間內使用複數形式表示單位和食物。",
"Table_of_Contents": "目錄",
"Select_File": "選擇檔案",
"file_upload_disabled": "您的空間未啟用檔案上傳功能。",
@@ -107,5 +107,466 @@
"Hide_as_header": "隱藏為標題",
"err_importing_recipe": "匯入食譜時發生錯誤!",
"recipe_property_info": "您也可以為食材添加屬性,以便根據您的食譜自動計算它們!",
"Show_as_header": "顯示為標題"
"Show_as_header": "顯示為標題",
"Key_Ctrl": "Ctrl 鍵",
"Recipe": "食譜",
"Icon": "圖標",
"Image": "圖片",
"Import_Result_Info": "匯入結果信息",
"Unit": "單位",
"Merge": "合併",
"Hide_Recipes": "隱藏食譜",
"Recipes": "食譜",
"Move": "移動",
"search_create_help_text": "直接在 Tandoor 中創建新食譜。",
"ShowDelayed": "顯示延遲",
"and_up": "及以上",
"mealplan_autoadd_shopping_desc": "自動將膳食計劃食材添加到購物清單中。",
"Shopping_list": "購物清單",
"Meal_Type": "餐類型",
"Foods": "食物",
"left_handed_help": "將使用左手模式優化界面顯示。",
"Pin": "釘住",
"us_cup": "美制杯",
"Create Recipe": "創建食譜",
"Import Recipe": "匯入食譜",
"Create_New_Food": "創建新食物",
"Week_Numbers": "週數",
"Coming_Soon": "即將推出",
"Auto_Planner": "自動計劃",
"copy_to_clipboard": "複製到剪貼板",
"Merge_Keyword": "合併關鍵字",
"converted_unit": "轉換單位",
"converted_amount": "轉換數量",
"Bookmarklet": "書籤小工具",
"ignore_shopping_help": "忽略購物幫助",
"Meal_Plan_Days": "餐計劃天數",
"del_confirmation_tree": "你確定要刪除 {source} 及其所有子項嗎?",
"Empty": "空",
"Make_Header": "設為標題",
"review_shopping": "審查購物",
"shopping_category_help": "超市可以按購物分類進行篩選使其與商店的內部佈局相匹配。",
"plan_share_desc": "新的膳食計劃條目將自動與選定的用戶共享。",
"food_recipe_help": "食物食譜幫助",
"show_step_ingredients_setting_help": "在食譜步驟旁邊添加成分表。在創建時應用。可以在編輯配方視圖中覆蓋。",
"show_step_ingredients": "顯示步驟食材",
"hide_step_ingredients": "隱藏步驟食材",
"sort_by": "排序依據",
"search_rank": "搜索排名",
"make_now": "立即製作",
"New_Keyword": "新關鍵字",
"Delete_Keyword": "刪除關鍵字",
"Open_Data_Import": "開放數據匯入",
"Properties_Food_Unit": "食物單位屬性",
"property_type_fdc_hint": "屬性類型 FDC 提示",
"Data_Import_Info": "通過導入社區精選的食物、單位等列表來增強您的空間,以提升您的食譜收藏。",
"Update_Existing_Data": "更新現有數據",
"Use_Metric": "使用公制",
"Learn_More": "了解更多",
"base_unit": "基礎單位",
"Shopping_Category": "購物分類",
"Unit_Alias": "單位別名",
"Keyword_Alias": "關鍵字別名",
"Delete_Food": "刪除食物",
"No_ID": "未找到標識,不能刪除。",
"merge_title": "合併標題",
"move_title": "移動標題",
"Property": "屬性",
"Property_Editor": "屬性編輯器",
"Conversion": "轉換",
"Original_Text": "原始文本",
"FoodNotOnHand": "你還沒有 {food}。",
"Recipe_Book": "食譜書",
"delete_title": "刪除標題",
"create_title": "創建標題",
"Properties": "屬性",
"Type": "類型",
"Create_New_Unit": "創建新單位",
"Create_New_Meal_Type": "創建新餐類型",
"and_down": "及以下",
"Automate": "自動化",
"Time": "時間",
"Text": "文本",
"OnHand": "手頭有",
"FoodOnHand": "你手上有 {food}。",
"Undefined": "未定義",
"Create_Meal_Plan_Entry": "創建餐計劃條目",
"Title": "標題",
"Color": "顏色",
"New_Meal_Type": "新餐類型",
"IgnoredFood": "已忽略購買 {food}。",
"Show_Week_Numbers": "顯示周數?",
"Export_To_ICal": "匯出到 iCal",
"Cannot_Add_Notes_To_Shopping": "無法添加備註到購物",
"Added_To_Shopping_List": "已添加到購物清單",
"Shopping_List_Empty": "購物清單空",
"Next_Period": "下一期間",
"Previous_Period": "上一期間",
"InheritFields": "繼承字段",
"FoodInherit": "食物繼承",
"ShowUncategorizedFood": "顯示未分類食物",
"GroupBy": "分組依據",
"Language": "語言",
"Theme": "主題",
"SupermarketCategoriesOnly": "僅超市分類",
"MoveCategory": "移動分類 ",
"IgnoreThis": "忽略這個",
"DelayFor": "延遲",
"Warning": "警告",
"NoCategory": "未選擇分類。",
"InheritWarning": "{food} 設置為繼承, 更改可能無法保存。",
"ShowRecentlyCompleted": "顯示最近完成",
"Completed": "已完成",
"ShoppingBackgroundSyncWarning": "網絡狀況不佳,正在等待進行同步……",
"shopping_auto_sync": "購物自動同步",
"one_url_per_line": "每行一個網址",
"mealplan_autoadd_shopping": "餐計劃自動添加購物",
"mealplan_autoexclude_onhand": "餐計劃自動排除手頭有的",
"mealplan_autoinclude_related": "餐計劃自動包含相關",
"default_delay": "默認延遲",
"shopping_share_desc": "用戶將看到您添加到購物清單中的所有商品。他們必須添加你才能看到他們清單上的內容。",
"shopping_auto_sync_desc": "設置為0將禁用自動同步。當查看購物列表時該列表每隔一秒更新一次以同步其他人可能做出的更改。在多人購物時很有用但會使用移動數據。",
"mealplan_autoinclude_related_desc": "將膳食計劃(手動或自動)添加到購物清單時,包括所有相關食譜。",
"default_delay_desc": "延遲購物清單條目的默認小時數。",
"filter_to_supermarket": "篩選到超市",
"New_Cookbook": "新食譜書",
"Hide_Keyword": "隱藏關鍵字",
"Hour": "小時",
"Hours": "小時",
"Second": "秒",
"Seconds": "秒",
"Clear": "清除",
"Users": "用戶",
"Invites": "邀請",
"err_move_self": "錯誤移動自己",
"nothing": "無",
"filter_to_supermarket_desc": "默認情況下,過濾購物清單只包括所選超市的類別。",
"SupermarketName": "超市名稱",
"CategoryInstruction": "拖動類別可更改出現在購物清單中的訂單類別。",
"OrderInformation": "對象按照從小到大的順序排列。",
"shopping_recent_days_desc": "顯示最近幾天的購物清單列表。",
"shopping_recent_days": "購物最近天數",
"download_pdf": "下載 PDF",
"csv_delim_help": "用於 CSV 導出的分隔符。",
"SuccessClipboard": "成功複製到剪貼板",
"csv_prefix_help": "將清單複製到剪貼板時要添加的前綴。",
"csv_prefix_label": "CSV 前綴標籤",
"copy_markdown_table": "複製 Markdown 表格",
"in_shopping": "在購物中",
"DelayUntil": "延遲到",
"Unpin": "取消釘住",
"PinnedConfirmation": "{recipe} 已固定。",
"UnpinnedConfirmation": "{recipe} 已取消固定。",
"QuickEntry": "快速輸入",
"shopping_add_onhand_desc": "在核對購物清單時,將食物標記為“入手”。",
"shopping_add_onhand": "購物添加手頭有的",
"related_recipes": "相關食譜",
"today_recipes": "今天的食譜",
"sql_debug": "SQL 調試",
"remember_search": "記住搜索",
"remember_hours": "記住小時",
"OnHand_help": "食物在庫存中時,不會自動添加到購物清單中。 並且現有狀態會與購物用戶共享。",
"Account": "賬戶",
"Cosmetic": "外觀",
"API": "API",
"enable_expert": "啟用專家模式",
"simple_mode": "簡單模式",
"advanced": "高級",
"show_keywords": "顯示關鍵字",
"show_units": "顯示單位",
"show_filters": "顯示篩選器",
"filter_name": "篩選器名稱",
"left_handed": "左撇子",
"show_step_ingredients_setting": "顯示步驟食材設置",
"Custom Filter": "自定義篩選器",
"shared_with": "共享給",
"show_sortby": "顯示排序依據",
"Created": "創建",
"Updated": "更新",
"Unchanged": "未更改",
"Error": "錯誤",
"view_recipe": "查看食譜",
"copy_to_new": "複製到新",
"recipe_name": "食譜名稱",
"paste_ingredients_placeholder": "在此處粘貼食材表...",
"explain": "解釋",
"Website": "網站",
"Sticky_Nav": "固定導航",
"Show_Logo": "顯示標誌",
"Show_Logo_Help": "在導航欄中顯示 Tandoor 或空間徽標。",
"Nav_Text_Mode": "導航文本模式",
"Nav_Text_Mode_Help": "每個主題的行為都不同。",
"Space_Cosmetic_Settings": "空間管理員可以更改某些裝飾設置,並將覆蓋該空間的客戶端設置。",
"paste_json": "在此處粘貼 json 或 html 源代碼以加載食譜。",
"Click_To_Edit": "點擊編輯",
"search_no_recipes": "找不到任何食譜!",
"substitute_children_help": "所有與這種食物相同子級的食物都被視作替代品。",
"show_ingredients_table": "顯示食材表",
"Internal": "內部",
"Units": "單位",
"Manage_Emails": "管理電子郵件",
"Change_Password": "更改密碼",
"Supermarkets": "超市",
"Reset": "重置",
"Are_You_Sure": "你確定嗎?",
"Valid Until": "有效期至",
"Split_All_Steps": "將所有行拆分為單獨的步驟。",
"Combine_All_Steps": "將所有步驟合併到一個字段中。",
"imperial_tsp": "英制茶匙",
"not": "不是",
"save_filter": "保存篩選器",
"substitute_help": "搜索可以用現有食材製作的食譜時,會考慮替代品。",
"ChildInheritFields": "子項繼承字段",
"ChildInheritFields_help": "默認情況下,子項將繼承這些字段。",
"created_on": "創建於",
"updatedon": "更新於",
"Imported_From": "匯入自",
"advanced_search_settings": "高級搜索設置",
"nothing_planned_today": "你今天沒有任何計劃!",
"select_keyword": "選擇關鍵字",
"Advanced": "高級",
"Options": "選項",
"Create Food": "創建食物",
"Parameter": "參數",
"Export_Supported": "支持匯出",
"Toggle": "切換",
"asc": "升序",
"times_cooked": "烹飪次數",
"Import_Error": "導入時發生錯誤。 請跳轉至頁面底部的詳細信息進行查看。",
"Protected": "受保護",
"Ingredient Editor": "食材編輯器",
"move_selection": "選擇要將 {source} 移動到的父級 {type}。",
"merge_selection": "將所有出現的 {source} 替換為 {type}。",
"Copy Link": "複製連結",
"Added_by": "添加者",
"Added_on": "添加於",
"AddToShopping": "添加到購物",
"IngredientInShopping": "此食材已在購物清單中。",
"NotInShopping": "購物清單中沒有 {food}。",
"show_sql": "顯示 SQL",
"App": "應用程式",
"Message": "消息",
"book_filter_help": "除手動選擇的食譜外,還包括篩選中的食譜。",
"ingredient_list": "食材清單",
"New_Entry": "新條目",
"Drag_Here_To_Delete": "拖到這裡刪除",
"Add_Servings_to_Shopping": "添加份量到購物",
"Export_As_ICal": "匯出為 iCal",
"Inherit": "繼承",
"Nav_Color": "導航顏色",
"CategoryName": "分類名稱",
"substitute_siblings_help": "所有與這種食物相同父級的食物都被視作替代品。",
"mark_complete": "標記完成",
"Search Settings": "搜尋設定",
"Nav_Color_Help": "改變導航欄顏色。",
"date_created": "創建日期",
"Auto_Sort": "自動排序",
"Auto_Sort_Help": "將所有食材移動到最恰當的步驟。",
"reusable_help_text": "邀請鏈接是否可用於多個用戶。",
"csv_delim_label": "CSV 分隔符標籤",
"Ignore_Shopping": "忽略購物",
"edit_title": "編輯標題",
"Name": "名稱",
"Clone": "克隆",
"shopping_share": "購物分享",
"Day": "天",
"desc": "降序",
"date_viewed": "查看日期",
"last_cooked": "最後烹飪",
"Description_Replace": "描述替換",
"Instruction_Replace": "指示替換",
"create_rule": "創建規則",
"Decimals": "小數",
"DeleteShoppingConfirm": "確定要移除購物清單中所有 {food} 嗎?",
"Current_Period": "當前期間",
"Next_Day": "下一天",
"Previous_Day": "前一天",
"recipe_filter": "食譜篩選器",
"Week": "週",
"OfflineAlert": "您處於離線狀態,購物清單可能無法同步。",
"Planner": "計劃者",
"Meal_Types": "餐類型",
"err_merge_self": "錯誤合併自己",
"show_foods": "顯示食物",
"show_books": "顯示書籍",
"show_rating": "顯示評分",
"Sticky_Nav_Help": "始終在屏幕頂部顯示導航菜單。",
"Logo": "標誌",
"Private_Recipe": "私人食譜",
"Private_Recipe_Help": "食譜只有你和共享的人會顯示。",
"Period": "期間",
"Use_Kj": "使用千焦",
"Title_or_Recipe_Required": "需要標題或食譜",
"Comments_setting": "評論設置",
"click_image_import": "點擊圖片匯入",
"select_unit": "選擇單位",
"select_food": "選擇食物",
"import_duplicates": "為防止食譜與現有食譜同名,將被忽略。 選中此框以導入所有內容。",
"Use_Fractions": "使用分數",
"search_import_help_text": "從外部網站或應用程序導入食譜。",
"expert_mode": "專家模式",
"Create_New_Shopping_Category": "創建新購物分類",
"Use_Fractions_Help": "查看食譜時自動將小數轉換為分數。",
"warning_duplicate_filter": "警告:由於技術限制,使用相同組合(和/或/不)的多個篩選器可能會產生意想不到的結果。",
"reset_children": "重置子項",
"Username": "用戶名",
"Step_Name": "步驟名稱",
"Move_Down": "下移",
"Step_Type": "步驟類型",
"Make_Ingredient": "設為食材",
"reset_children_help": "用繼承字段中的值覆蓋所有子項。 繼承的子字段將設置為繼承,除非它們已設置為繼承。",
"no_more_images_found": "沒有在網站上找到其他圖片。",
"download_csv": "下載 CSV",
"reset_food_inheritance_info": "將所有食物重置為默認繼承字段及其父值。",
"substitute_siblings": "替代兄弟項",
"substitute_children": "替代子項",
"SubstituteOnHand": "你手頭有一個替代品。",
"InheritFields_help": "繼承字段幫助",
"Note": "備註",
"Alignment": "對齊",
"merge_confirmation": "將 <i>{source}</i> 替換為 <i>{target}</i>",
"Shopping_Categories": "購物分類",
"Food_Alias": "食物別名",
"Food": "食物",
"Warning_Delete_Supermarket_Category": "刪除超市類別也會刪除與食品的所有關係。 你確定嗎?",
"New_Supermarket": "新超市",
"open_data_help_text": "Tandoor開放數據項目為Tandoor提供社區貢獻的數據。該字段在導入時會自動填充並可以之後更新。",
"Open_Data_Slug": "開放數據標籤",
"Amount": "數量",
"make_now_count": "立即製作次數",
"paste_ingredients": "粘貼食材",
"Pinned": "釘住",
"Imported": "匯入",
"Quick actions": "快速操作",
"tsp": "茶匙",
"imperial_fluid_ounce": "英制液盎司",
"imperial_pint": "英制品脫",
"imperial_quart": "英制夸脫",
"imperial_gallon": "英制加侖",
"imperial_tbsp": "英制湯匙",
"Transpose_Words": "轉置單詞",
"Name_Replace": "名稱替換",
"Food_Replace": "食物替換",
"Never_Unit": "從不使用單位",
"Unit_Replace": "單位替換",
"StartDate": "開始日期",
"EndDate": "結束日期",
"Parent": "父項",
"View": "查看",
"Welcome": "歡迎",
"Copy Token": "複製令牌",
"last_viewed": "最後查看",
"Select": "選擇",
"Input": "輸入",
"Undo": "撤銷",
"NoMoreUndo": "沒有可撤消的更改。",
"Delete_All": "刪除全部",
"delete_confirmation": "你確定要刪除 {source} 嗎?",
"move_confirmation": "移動 <i>{child}</i> 到 <i>{parent}</i>",
"Root": "根目錄",
"Move_Food": "移動食物",
"New_Food": "新食物",
"Edit_Meal_Plan_Entry": "編輯餐計劃條目",
"Month": "月",
"Year": "年",
"created_by": "創建者",
"Planner_Settings": "計劃者設定",
"Plan_Period_To_Show": "顯示計劃期間",
"Periods": "期間",
"Plan_Show_How_Many_Periods": "顯示多少期間",
"Starting_Day": "開始日",
"Meal_Type_Required": "需要餐類型",
"AddFoodToShopping": "添加食物到購物",
"RemoveFoodFromShopping": "從購物中移除食物",
"Days": "天",
"g": "克",
"kg": "千克",
"ounce": "盎司",
"pound": "磅",
"ml": "毫升",
"Shopping_input_placeholder": "購物輸入佔位符",
"Hide_Food": "隱藏食物",
"tree_root": "樹根",
"Default_Unit": "默認單位",
"New_Unit": "新單位",
"Create_New_Shopping Category": "創建新購物分類",
"Create_New_Keyword": "創建新關鍵字",
"Instructions": "指示",
"Unrated": "未評分",
"Key_Shift": "Shift 鍵",
"mealplan_autoexclude_onhand_desc": "將膳食計劃添加到購物清單時(手動或自動),排除當前手頭上的食材。",
"reset_food_inheritance": "重置食物繼承",
"show_ingredient_overview": "在開始時顯示食譜中所有食材的列表。",
"Ingredient Overview": "食材概覽",
"no_pinned_recipes": "你沒有固定的食譜!",
"Planned": "計劃",
"Ratings": "評分",
"Social_Authentication": "社交認證",
"Random Recipes": "隨機食譜",
"parameter_count": "參數計數",
"add_keyword": "添加關鍵字",
"select_file": "選擇文件",
"select_recipe": "選擇食譜",
"remove_selection": "移除選擇",
"empty_list": "列表為空。",
"User": "用戶",
"First_name": "名字",
"Last_name": "姓氏",
"Keyword": "關鍵字",
"Page": "頁面",
"Single": "單一",
"Multiple": "多個",
"New_Supermarket_Category": "新超市分類",
"FDC_Search": "FDC 搜尋",
"Edit_Food": "編輯食物",
"filter": "篩選",
"FDC_ID": "FDC ID",
"FDC_ID_help": "FDC ID 幫助",
"base_amount": "基礎數量",
"Edit_Keyword": "編輯關鍵字",
"Edit_Recipe": "編輯食譜",
"Move_Keyword": "移動關鍵字",
"Hide_Keywords": "隱藏關鍵字",
"Move_Up": "上移",
"Enable_Amount": "啟用數量",
"Disable_Amount": "禁用數量",
"Properties_Food_Amount": "食物數量屬性",
"l": "升",
"fluid_ounce": "液盎司",
"pint": "品脫",
"quart": "夸脫",
"gallon": "加侖",
"tbsp": "湯匙",
"Choose_Category": "選擇分類",
"Back": "返回",
"Import_Supported": "支持匯入",
"DefaultPage": "默認頁面",
"Disabled": "禁用",
"Disable": "禁用",
"Enable": "啟用",
"create_food_desc": "創建食物並將其鏈接到此食譜。",
"additional_options": "附加選項",
"Importer_Help": "有關此進口商的更多信息和幫助:",
"Documentation": "文檔",
"Select_App_To_Import": "選擇應用程式匯入",
"Import_Not_Yet_Supported": "匯入尚不支持",
"Export_Not_Yet_Supported": "匯出尚不支持",
"Recipes_In_Import": "匯入中的食譜",
"total": "總計",
"tree_select": "樹選擇",
"CustomTheme": "自定義主題",
"CustomThemeHelp": "通過上傳自定義 CSS 文件覆蓋所選主題的樣式。",
"CustomImageHelp": "上傳圖片以在空間概覽中顯示。",
"CustomNavLogoHelp": "上傳圖像以用作導航欄徽標。",
"CustomLogoHelp": "上傳不同尺寸的方形圖像以更改為瀏覽器選項卡和安裝的網絡應用程序中的徽標。",
"CustomLogos": "自定義標誌",
"CountMore": "計數更多",
"Description": "描述",
"Calculator": "計算器",
"Datatype": "數據類型",
"Number of Objects": "對象數量",
"Add_Step": "添加步驟",
"Automation": "自動化",
"No_Results": "無結果",
"fields": "字段"
}

View File

@@ -22,4 +22,5 @@ export const INTEGRATIONS = [
{id: 'REZKONV', name: "Rezkonv", import: true, export: false, help_url: 'https://docs.tandoor.dev/features/import_export/#rezkonv'},
{id: 'SAFRON', name: "Safron", import: true, export: true, help_url: 'https://docs.tandoor.dev/features/import_export/#safron'},
{id: 'REZEPTSUITEDE', name: "Rezeptsuite.de", import: true, export: false, help_url: 'https://docs.tandoor.dev/features/import_export/#rezeptsuitede'},
{id: 'GOURMET', name: "Gourmet", import: true, export: false, help_url: 'https://docs.tandoor.dev/features/import_export/#gourmet'},
]

View File

@@ -156,6 +156,15 @@
"@babel/highlight" "^7.22.13"
chalk "^2.4.2"
"@babel/code-frame@^7.26.2":
version "7.26.2"
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85"
integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==
dependencies:
"@babel/helper-validator-identifier" "^7.25.9"
js-tokens "^4.0.0"
picocolors "^1.0.0"
"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9":
version "7.22.9"
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.9.tgz#71cdb00a1ce3a329ce4cbec3a44f9fef35669730"
@@ -385,6 +394,11 @@
resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f"
integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==
"@babel/helper-string-parser@^7.25.9":
version "7.25.9"
resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c"
integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==
"@babel/helper-validator-identifier@^7.22.15", "@babel/helper-validator-identifier@^7.22.5":
version "7.22.15"
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.15.tgz#601fa28e4cc06786c18912dca138cec73b882044"
@@ -395,6 +409,11 @@
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0"
integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==
"@babel/helper-validator-identifier@^7.25.9":
version "7.25.9"
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7"
integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==
"@babel/helper-validator-option@^7.22.15":
version "7.22.15"
resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz#694c30dfa1d09a6534cdfcafbe56789d36aba040"
@@ -410,13 +429,12 @@
"@babel/types" "^7.22.17"
"@babel/helpers@^7.22.15":
version "7.22.15"
resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.15.tgz#f09c3df31e86e3ea0b7ff7556d85cdebd47ea6f1"
integrity sha512-7pAjK0aSdxOwR+CcYAqgWOGy5dcfvzsTIfFTb2odQqW47MDfv14UaJDY6eng8ylM2EaeKXdxaSWESbkmaQHTmw==
version "7.26.10"
resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.26.10.tgz#6baea3cd62ec2d0c1068778d63cb1314f6637384"
integrity sha512-UPYc3SauzZ3JGgj87GgZ89JVdC5dj0AoetR5Bw6wj4niittNyFh6+eOGonYvJ1ao6B8lEa3Q3klS7ADZ53bc5g==
dependencies:
"@babel/template" "^7.22.15"
"@babel/traverse" "^7.22.15"
"@babel/types" "^7.22.15"
"@babel/template" "^7.26.9"
"@babel/types" "^7.26.10"
"@babel/highlight@^7.22.13":
version "7.22.13"
@@ -437,6 +455,13 @@
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719"
integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==
"@babel/parser@^7.26.9":
version "7.26.10"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.10.tgz#e9bdb82f14b97df6569b0b038edd436839c57749"
integrity sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA==
dependencies:
"@babel/types" "^7.26.10"
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.15":
version "7.22.15"
resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.15.tgz#02dc8a03f613ed5fdc29fb2f728397c78146c962"
@@ -1199,9 +1224,9 @@
integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==
"@babel/runtime@^7.11.2", "@babel/runtime@^7.12.13", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.4":
version "7.22.15"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.15.tgz#38f46494ccf6cf020bd4eed7124b425e83e523b8"
integrity sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA==
version "7.26.10"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.26.10.tgz#a07b4d8fa27af131a633d7b3524db803eb4764c2"
integrity sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw==
dependencies:
regenerator-runtime "^0.14.0"
@@ -1214,7 +1239,16 @@
"@babel/parser" "^7.22.15"
"@babel/types" "^7.22.15"
"@babel/traverse@^7.22.15", "@babel/traverse@^7.22.17", "@babel/traverse@^7.22.5", "@babel/traverse@^7.7.0":
"@babel/template@^7.26.9":
version "7.26.9"
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.26.9.tgz#4577ad3ddf43d194528cff4e1fa6b232fa609bb2"
integrity sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==
dependencies:
"@babel/code-frame" "^7.26.2"
"@babel/parser" "^7.26.9"
"@babel/types" "^7.26.9"
"@babel/traverse@^7.22.17", "@babel/traverse@^7.22.5", "@babel/traverse@^7.7.0":
version "7.23.2"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.2.tgz#329c7a06735e144a506bdb2cad0268b7f46f4ad8"
integrity sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==
@@ -1248,6 +1282,14 @@
"@babel/helper-validator-identifier" "^7.22.20"
to-fast-properties "^2.0.0"
"@babel/types@^7.26.10", "@babel/types@^7.26.9":
version "7.26.10"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.10.tgz#396382f6335bd4feb65741eacfc808218f859259"
integrity sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ==
dependencies:
"@babel/helper-string-parser" "^7.25.9"
"@babel/helper-validator-identifier" "^7.25.9"
"@codemirror/autocomplete@^6.0.0", "@codemirror/autocomplete@^6.13.0", "@codemirror/autocomplete@^6.7.1":
version "6.13.0"
resolved "https://registry.yarnpkg.com/@codemirror/autocomplete/-/autocomplete-6.13.0.tgz#fa7df3b2809863df0da4556f72ac4263ea4d7adb"
@@ -3405,12 +3447,12 @@ available-typed-arrays@^1.0.5:
resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7"
integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==
axios@^1.6.7:
version "1.6.7"
resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.7.tgz#7b48c2e27c96f9c68a2f8f31e2ab19f59b06b0a7"
integrity sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==
axios@^1.8.2:
version "1.8.2"
resolved "https://registry.yarnpkg.com/axios/-/axios-1.8.2.tgz#fabe06e241dfe83071d4edfbcaa7b1c3a40f7979"
integrity sha512-ls4GYBm5aig9vWx8AWDSGLpnpDQRtWAfrjU+EuytuODrFBkqesN2RkOQCBzrA1RQNHw1SmRMSDDDSwzNAYQ6Rg==
dependencies:
follow-redirects "^1.15.4"
follow-redirects "^1.15.6"
form-data "^4.0.0"
proxy-from-env "^1.1.0"
@@ -5185,9 +5227,9 @@ electron-to-chromium@^1.4.477:
integrity sha512-VTq6vjk3kCfG2qdzQRd/i9dIyVVm0dbtZIgFzrLgfB73mXDQT2HPKVRc1EoZcAVUv9XhXAu08DWqJuababdGGg==
elliptic@^6.5.3, elliptic@^6.5.4:
version "6.5.4"
resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb"
integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==
version "6.6.0"
resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.6.0.tgz#5919ec723286c1edf28685aa89261d4761afa210"
integrity sha512-dpwoQcLc/2WLQvJvLRHKZ+f9FgOdjnq11rurqwekGQygGPsYSK29OMMD2WalatiqQ+XGFDglTNixpPfI+lpaAA==
dependencies:
bn.js "^4.11.9"
brorand "^1.1.0"
@@ -5979,10 +6021,10 @@ flush-write-stream@^1.0.0:
inherits "^2.0.3"
readable-stream "^2.3.6"
follow-redirects@^1.0.0, follow-redirects@^1.15.4:
version "1.15.6"
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b"
integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==
follow-redirects@^1.0.0, follow-redirects@^1.15.6:
version "1.15.9"
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1"
integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==
for-each@^0.3.3:
version "0.3.3"
@@ -6644,9 +6686,9 @@ http-parser-js@>=0.5.1:
integrity sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==
http-proxy-middleware@^2.0.3:
version "2.0.6"
resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz#e1a4dd6979572c7ab5a4e4b55095d1f32a74963f"
integrity sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==
version "2.0.9"
resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz#e9e63d68afaa4eee3d147f39149ab84c0c2815ef"
integrity sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==
dependencies:
"@types/http-proxy" "^1.17.8"
http-proxy "^1.18.1"
@@ -9154,10 +9196,10 @@ pretty-error@^4.0.0:
lodash "^4.17.20"
renderkid "^3.0.0"
prismjs@^1.23.0, prismjs@^1.29.0:
version "1.29.0"
resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.29.0.tgz#f113555a8fa9b57c35e637bba27509dcf802dd12"
integrity sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==
prismjs@^1.23.0, prismjs@^1.30.0:
version "1.30.0"
resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.30.0.tgz#d9709969d9d4e16403f6f348c63553b19f0975a9"
integrity sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==
private@^0.1.8, private@~0.1.5:
version "0.1.8"