Compare commits

..

107 Commits

Author SHA1 Message Date
vabene1111
a0c8b39f0c Merge branch 'develop' 2025-02-01 08:08:55 +01: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
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
47 changed files with 4650 additions and 761 deletions

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

@@ -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

14
boot.sh
View File

@@ -29,6 +29,18 @@ 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
echo "Waiting for database to be ready..."
@@ -83,4 +95,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
@@ -139,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}), }
@@ -161,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",
@@ -315,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()
@@ -345,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 = {
@@ -360,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']
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

@@ -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

@@ -94,7 +94,8 @@ class Paprika(Integration):
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

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

@@ -12,7 +12,7 @@ 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-11-01 06:58+0000\n"
"PO-Revision-Date: 2024-12-09 00:58+0000\n"
"Last-Translator: Vincenzo Reale <smart2128vr@gmail.com>\n"
"Language-Team: Italian <http://translate.tandoor.dev/projects/tandoor/"
"recipes-backend/it/>\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 5.6.2\n"
"X-Generator: Weblate 5.8.4\n"
#: .\cookbook\forms.py:45
msgid ""
@@ -520,7 +520,7 @@ msgstr "Web"
#: .\cookbook\models.py:1411 .\cookbook\templates\search_info.html:47
msgid "Raw"
msgstr "Raw"
msgstr "Crudo"
#: .\cookbook\models.py:1467
msgid "Food Alias"
@@ -1440,8 +1440,9 @@ msgid ""
"\"noreferrer noopener\" target=\"_blank\">this one.</a>"
msgstr ""
"Le tabelle in markdown sono difficili da creare a mano. Si raccomanda "
"l'utilizzo di un editor di come <a href=\"https://www.tablesgenerator.com/"
"markdown_tables\" rel=\"noreferrer noopener\" target=\"_blank\">questo.</a>"
"l'utilizzo di un editor di tabelle come <a href=\"https://www.tablesgenerator"
".com/markdown_tables\" rel=\"noreferrer noopener\" target=\"_blank\""
">questo.</a>"
#: .\cookbook\templates\markdown_info.html:155
#: .\cookbook\templates\markdown_info.html:157
@@ -2203,8 +2204,8 @@ msgstr ""
" Le migrazioni non andate a buon fine probabilmente causeranno il "
"malfunzionamento di parti importanti dell'applicazione.\n"
" Se una migrazione non riesce, assicurati di avere la versione "
"più recente e, in tal caso, pubblica il registro della migrazione e la "
"panoramica di seguito in una segnalazione di problema su GitHub.\n"
"più recente e, in tal caso, pubblica il registro della migrazione e il "
"riepilogo che segue in una segnalazione di problema su GitHub.\n"
" "
#: .\cookbook\templates\system.html:182
@@ -2765,7 +2766,7 @@ msgid ""
"but not recommended as some features only work with postgres databases."
msgstr ""
"Questa applicazione non è in esecuzione con un database Postgres. Va bene, "
"ma non è consigliato perché alcune funzionalità sono disponibili solo con un "
"ma non è consigliato perché alcune funzionalità sono disponibili solo con "
"database Postgres."
#: .\cookbook\views\views.py:360

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

@@ -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

@@ -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-10-09 01:54+0000\n"
"Last-Translator: Guilherme Roda <glealroda@gmail.com>\n"
"PO-Revision-Date: 2025-01-29 13:44+0000\n"
"Last-Translator: Vinicius José Fritzen <www.vini84200@hotmail.com>\n"
"Language-Team: Portuguese (Brazil) <http://translate.tandoor.dev/projects/"
"tandoor/recipes-backend/pt_BR/>\n"
"Language: pt_BR\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 ""
@@ -88,14 +88,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 sua instância do 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"
@@ -142,6 +144,9 @@ msgid ""
"Determines how fuzzy a search is if it uses trigram similarity matching (e."
"g. low values mean more typos are ignored)."
msgstr ""
"Determina o quão 'difusa' uma pesquisa é se esta utilizando uma "
"correspondência de semelhança de trigrama (valores mais baixos significam "
"que mais erros são ignorados)."
#: .\cookbook\forms.py:340
msgid ""
@@ -168,28 +173,38 @@ msgstr ""
"diminuir a qualidade de pesquisa dependendo do idioma em uso"
#: .\cookbook\forms.py:343
#, fuzzy
msgid ""
"Fields to search for partial matches. (e.g. searching for 'Pie' will return "
"'pie' and 'piece' and 'soapie')"
msgstr ""
"Campos que devem ser procurados por correspondências parciais (por exemplo, "
"procurar por \"Pie\" retornará \"pie\", \"piece\" e \"soapie\")"
#: .\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 que devem ser buscados para correspondências de prefixo. (por "
"exemplo, buscar 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 que devem usar busca 'difusa' (fuzzy). (por exemplo, procurando por "
"'recita' vai encontrar 'receita'). Nota: essa opção conflitará com os "
"métodos de pesquisa 'web' e 'raw'."
#: .\cookbook\forms.py:346
msgid ""
"Fields to full text search. Note: 'web', 'phrase', and 'raw' search methods "
"only function with fulltext fields."
msgstr ""
"Campos para fazer busca do texto completo. Nota: 'os métodos de pesquisa "
"'web', 'frase' e 'raw' funcionam somente com campos de texto completo."
#: .\cookbook\forms.py:350
msgid "Search Method"
@@ -197,15 +212,15 @@ msgstr "Método de Pesquisa"
#: .\cookbook\forms.py:350
msgid "Fuzzy Lookups"
msgstr ""
msgstr "Buscas 'Difusas' (fuzzy)"
#: .\cookbook\forms.py:350
msgid "Ignore Accent"
msgstr ""
msgstr "Ignorar Acentos"
#: .\cookbook\forms.py:350
msgid "Partial Match"
msgstr ""
msgstr "Correspondência parcial"
#: .\cookbook\forms.py:350
msgid "Starts With"
@@ -224,6 +239,8 @@ msgid ""
"In order to prevent spam, the requested email was not send. Please wait a "
"few minutes and try again."
msgstr ""
"Para prevenir spam, o email requisitado não pode ser 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
@@ -249,44 +266,43 @@ msgstr "Sem permissões para acessar esta página!"
#: .\cookbook\helper\permission_helper.py:252
msgid "You cannot interact with this object as it is not owned by you!"
msgstr ""
"Você não pode interagir com esse objeto, pois ele não é sua propriedade!"
#: .\cookbook\helper\permission_helper.py:402
msgid "You have reached the maximum number of recipes for your space."
msgstr ""
msgstr "Você alcançou o número limite de receitas para o seu Espaço."
#: .\cookbook\helper\permission_helper.py:414
msgid "You have more users than allowed in your space."
msgstr ""
msgstr "Você tem mais usuários que o permitido em seu Espaço."
#: .\cookbook\helper\recipe_url_import.py:310
#, fuzzy
#| msgid "Use fractions"
msgid "reverse rotation"
msgstr "Usar frações"
msgstr "rotação reversa"
#: .\cookbook\helper\recipe_url_import.py:311
msgid "careful rotation"
msgstr ""
msgstr "rotação cuidadosa"
#: .\cookbook\helper\recipe_url_import.py:312
msgid "knead"
msgstr ""
msgstr "amassar"
#: .\cookbook\helper\recipe_url_import.py:313
msgid "thicken"
msgstr ""
msgstr "engrossar"
#: .\cookbook\helper\recipe_url_import.py:314
msgid "warm up"
msgstr ""
msgstr "pré aquecer"
#: .\cookbook\helper\recipe_url_import.py:315
msgid "ferment"
msgstr ""
msgstr "fermentar"
#: .\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"
@@ -295,32 +311,36 @@ msgstr "Você precisa informar um tamanho de porção"
#: .\cookbook\helper\template_helper.py:95
#: .\cookbook\helper\template_helper.py:97
msgid "Could not parse template code."
msgstr ""
msgstr "Não foi possível analisar o código do modelo."
#: .\cookbook\integration\copymethat.py:44
#: .\cookbook\integration\melarecipes.py:37
msgid "Favorite"
msgstr ""
msgstr "Favorito"
#: .\cookbook\integration\copymethat.py:50
msgid "I made this"
msgstr ""
msgstr "Eu fiz isso"
#: .\cookbook\integration\integration.py:209
msgid ""
"Importer expected a .zip file. Did you choose the correct importer type for "
"your data ?"
msgstr ""
"O importador esperava um arquivo .zip. Você escolheu o tipo de importador "
"correto para os seus dados?"
#: .\cookbook\integration\integration.py:212
msgid ""
"An unexpected error occurred during the import. Please make sure you have "
"uploaded a valid file."
msgstr ""
"Um erro inesperado aconteceu durante a importação. Por favor, verifique se "
"enviou um arquivo válido."
#: .\cookbook\integration\integration.py:217
msgid "The following recipes were ignored because they already existed:"
msgstr ""
msgstr "A seguintes receitas foram ignoradas, pois já existem:"
#: .\cookbook\integration\integration.py:221
#, python-format
@@ -328,10 +348,8 @@ msgid "Imported %s recipes."
msgstr "%s receitas importadas."
#: .\cookbook\integration\openeats.py:28
#, fuzzy
#| msgid "Recipes"
msgid "Recipe source:"
msgstr "Receitas"
msgstr "Fonte da receita:"
#: .\cookbook\integration\paprika.py:49
msgid "Notes"
@@ -347,10 +365,8 @@ msgstr "Fonte"
#: .\cookbook\integration\recettetek.py:54
#: .\cookbook\integration\recipekeeper.py:70
#, fuzzy
#| msgid "Import Log"
msgid "Imported from"
msgstr "Importar Log"
msgstr "Importado de"
#: .\cookbook\integration\saffron.py:23
msgid "Servings"
@@ -374,23 +390,26 @@ msgstr "Seção"
#: .\cookbook\management\commands\fix_duplicate_properties.py:15
msgid "Fixes foods with "
msgstr ""
msgstr "Corrige comidas com "
#: .\cookbook\management\commands\rebuildindex.py:14
#, fuzzy
msgid "Rebuilds full text search index on Recipe"
msgstr ""
msgstr "Reconstrói o índice de busca de texto completo da Receita"
#: .\cookbook\management\commands\rebuildindex.py:18
msgid "Only Postgresql databases use full text search, no index to rebuild"
msgstr ""
"Apenas bancos de dados Postgresql utilizam busca por texto completo, não há "
"índice para reconstruir"
#: .\cookbook\management\commands\rebuildindex.py:29
msgid "Recipe index rebuild complete."
msgstr ""
msgstr "Reconstrução de índice de receita concluído."
#: .\cookbook\management\commands\rebuildindex.py:31
msgid "Recipe index rebuild failed."
msgstr ""
msgstr "Reconstrução de índice de Receita falhou."
#: .\cookbook\migrations\0047_auto_20200602_1133.py:14
msgid "Breakfast"
@@ -410,35 +429,37 @@ msgstr "Outro"
#: .\cookbook\migrations\0190_auto_20230525_1506.py:17
msgid "Fat"
msgstr ""
msgstr "Gordura"
#: .\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 "Carboidratos"
#: .\cookbook\migrations\0190_auto_20230525_1506.py:19
msgid "Proteins"
msgstr ""
msgstr "Proteínas"
#: .\cookbook\migrations\0190_auto_20230525_1506.py:20
msgid "Calories"
msgstr ""
msgstr "Calorias"
#: .\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 ""
"Limite máximo de armazenamento de arquivos em MB. 0 para ilimitado, 1 para "
"impedir o envio de arquivos."
#: .\cookbook\models.py:454 .\cookbook\templates\search.html:7
#: .\cookbook\templates\settings.html:18
@@ -462,27 +483,23 @@ msgstr "Compras"
#: .\cookbook\models.py:752
msgid " is part of a recipe step and cannot be deleted"
msgstr ""
msgstr " é parte de uma etapa de uma receita, e não pode ser excluído"
#: .\cookbook\models.py:918
#, fuzzy
#| msgid "Automations"
msgid "Nutrition"
msgstr "Automações"
msgstr "Informações nutricionais"
#: .\cookbook\models.py:918
#, fuzzy
#| msgid "Merge"
msgid "Allergen"
msgstr "Mesclar"
msgstr "Alérgenos"
#: .\cookbook\models.py:919
msgid "Price"
msgstr ""
msgstr "Preço"
#: .\cookbook\models.py:919
msgid "Goal"
msgstr ""
msgstr "Meta"
#: .\cookbook\models.py:1408 .\cookbook\templates\search_info.html:28
msgid "Simple"
@@ -513,42 +530,32 @@ msgid "Keyword Alias"
msgstr "Apelido da Palavra-chave"
#: .\cookbook\models.py:1470
#, fuzzy
#| msgid "Description"
msgid "Description Replace"
msgstr "Descrição"
msgstr "Substituir Descrição"
#: .\cookbook\models.py:1471
#, fuzzy
#| msgid "Instructions"
msgid "Instruction Replace"
msgstr "Instruções"
msgstr "Substituir Instruções"
#: .\cookbook\models.py:1472
#, fuzzy
#| msgid "Select Unit"
msgid "Never Unit"
msgstr "Selecionar Unidade"
msgstr "Nunca usar como unidade"
#: .\cookbook\models.py:1473
msgid "Transpose Words"
msgstr ""
msgstr "Transpor palavras"
#: .\cookbook\models.py:1474
#, fuzzy
#| msgid "Food Alias"
msgid "Food Replace"
msgstr "Apelido do Alimento"
msgstr "Substituir comida"
#: .\cookbook\models.py:1475
#, fuzzy
#| msgid "Unit Alias"
msgid "Unit Replace"
msgstr "Apelido da Unidade"
msgstr "Substituir unidade"
#: .\cookbook\models.py:1476
msgid "Name Replace"
msgstr ""
msgstr "Substituir nome"
#: .\cookbook\models.py:1503 .\cookbook\views\delete.py:40
#: .\cookbook\views\edit.py:210 .\cookbook\views\new.py:39
@@ -556,10 +563,8 @@ msgid "Recipe"
msgstr "Receita"
#: .\cookbook\models.py:1504
#, fuzzy
#| msgid "Foods"
msgid "Food"
msgstr "Alimentos"
msgstr "Comida"
#: .\cookbook\models.py:1505 .\cookbook\templates\base.html:149
msgid "Keyword"
@@ -567,15 +572,15 @@ msgstr "Palavra-chave"
#: .\cookbook\serializer.py:222
msgid "File uploads are not enabled for this Space."
msgstr ""
msgstr "Envio de arquivos não são permitidos nesse Espaço."
#: .\cookbook\serializer.py:233
msgid "You have reached your file upload limit."
msgstr ""
msgstr "Você alcançou o limite do envio de arquivos."
#: .\cookbook\serializer.py:328
msgid "Cannot modify Space owner permission."
msgstr ""
msgstr "Não é possível modificar as permissões do dono do Espaço."
#: .\cookbook\serializer.py:1270
msgid "Hello"
@@ -587,39 +592,45 @@ msgstr "Você foi convidado por "
#: .\cookbook\serializer.py:1272
msgid " to join their Tandoor Recipes space "
msgstr ""
msgstr " para se juntar ao Espaço "
#: .\cookbook\serializer.py:1274
msgid "Click the following link to activate your account: "
msgstr ""
msgstr "Clique no seguinte link para ativar a sua conta: "
#: .\cookbook\serializer.py:1276
msgid ""
"If the link does not work use the following code to manually join the space: "
msgstr ""
"Se o link não funcionar use o seguinte código para manualmente entrar no "
"Espaço: "
#: .\cookbook\serializer.py:1278
msgid "The invitation is valid until "
msgstr ""
msgstr "O convite é válido até "
#: .\cookbook\serializer.py:1280
msgid ""
"Tandoor Recipes is an Open Source recipe manager. Check it out on GitHub "
msgstr ""
"Tandoor Recipes é um gerenciador de receitas de código aberto. Visite-nos no "
"GitHub "
#: .\cookbook\serializer.py:1283
msgid "Tandoor Recipes Invite"
msgstr ""
msgstr "Convite para Tandoor Recipes"
#: .\cookbook\serializer.py:1426
msgid "Existing shopping list to update"
msgstr ""
msgstr "Lista de compras pré-existente que será atualizada"
#: .\cookbook\serializer.py:1428
msgid ""
"List of ingredient IDs from the recipe to add, if not provided all "
"ingredients will be added."
msgstr ""
"Lista de IDs de ingredientes da receita para adicionar, se não for "
"preenchido todos os ingredientes serão adicionados."
#: .\cookbook\serializer.py:1430
msgid ""
@@ -628,11 +639,11 @@ msgstr ""
#: .\cookbook\serializer.py:1439
msgid "Amount of food to add to the shopping list"
msgstr ""
msgstr "Quantidade da comida para adicionar na lista de compras"
#: .\cookbook\serializer.py:1441
msgid "ID of unit to use for the shopping list"
msgstr ""
msgstr "ID de uma unidade para usar na lista de compras"
#: .\cookbook\serializer.py:1443
msgid "When set to true will delete all food from active shopping lists."

File diff suppressed because it is too large Load Diff

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

@@ -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', ]

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>
@@ -175,7 +175,7 @@
{#{% 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">
@@ -202,7 +202,7 @@
</tr>
{% endfor %}
</table>
{% endif %}
<h4 class="mt-3">Debug</h4>
<textarea class="form-control" rows="20">
Gunicorn Media: {{ gunicorn_media }}

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

@@ -112,35 +112,38 @@ class LoggingMixin(object):
super(LoggingMixin, self).initial(request, *args, **kwargs)
if settings.REDIS_HOST:
d = date.today().isoformat()
space = request.space
endpoint = request.resolver_match.url_name
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'],
)
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()
pipe = r.pipeline()
# Global and daily tallies for all URLs.
pipe.incr('api:request-count')
pipe.incr(f'api:request-count:{d}')
# 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 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)
# 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()
pipe.execute()
except:
pass
class StandardFilterMixin(ViewSetMixin):
@@ -1452,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='
@@ -1473,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):
@@ -1508,6 +1519,7 @@ 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)

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

@@ -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

@@ -346,6 +346,8 @@ 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(

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

@@ -75,24 +75,23 @@ 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
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
`
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
`
## Mealie
@@ -113,8 +112,7 @@ In order to import your Chowdown recipes simply create a `.zip` file from those
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/

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

@@ -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)
```
@@ -561,7 +577,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 +602,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 +649,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

@@ -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

@@ -66,7 +66,6 @@ LOGGING = {
},
}
# allow djangos wsgi server to server mediafiles
GUNICORN_MEDIA = bool(int(os.getenv('GUNICORN_MEDIA', False)))
@@ -247,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',
@@ -294,7 +293,6 @@ if LDAP_AUTH:
"handlers": ["console"]
}
AUTHENTICATION_BACKENDS += [
'django.contrib.auth.backends.ModelBackend',
'allauth.account.auth_backends.AuthenticationBackend',
@@ -564,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,10 +1,10 @@
Django==4.2.16
cryptography===43.0.1
Django==4.2.18
cryptography===44.0.0
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
django-oauth-toolkit==2.4.0
@@ -19,18 +19,18 @@ python-dotenv==1.0.0
requests==2.32.3
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.5
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
recipe-scrapers==15.4.0
django-scopes==2.0.0
django-treebeard==4.7
django-cors-headers==4.6.0
@@ -41,16 +41,16 @@ 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.12.0
aiohttp==3.10.11
inflection==0.5.1
redis==5.2.0
redis==5.2.1
# Development
pytest==8.0.0
pytest-django==4.8.0
pytest-django==4.9.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

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

@@ -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"
}

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

@@ -149,7 +149,7 @@
"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",
@@ -382,7 +382,7 @@
"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",
@@ -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.",

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,9 @@
"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"
}

View File

@@ -249,21 +249,21 @@
"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": "",
"CategoryInstruction": "Arraste as categorias para alterar a ordem em que as categorias de pedidos aparecem na lista de compras.",
"shopping_recent_days_desc": "",
"shopping_recent_days": "Dias Recentes",
"create_shopping_new": "",
@@ -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",
@@ -318,13 +318,13 @@
"date_viewed": "Último Visualizado",
"last_cooked": "Último Cozido",
"times_cooked": "",
"date_created": "",
"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,45 @@
"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": "Unpin",
"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)"
}

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.",
@@ -320,5 +320,255 @@
"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"
"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

@@ -20,7 +20,7 @@
"all_fields_optional": "Всі поля опціональні і можна залишити їх пустими.",
"convert_internal": "Конвертувати у внутрішній рецепт",
"show_only_internal": "Показати тільки внутрішні рецепти",
"show_split_screen": "",
"show_split_screen": "Розділений перегляд",
"Log_Recipe_Cooking": "",
"External_Recipe_Image": "Зображення Зовнішнього Рецепту",
"Add_to_Shopping": "Додати до Покупок",
@@ -437,5 +437,8 @@
"Use_Fractions_Help": "Автоматично конвертувати десятки в дроби, коли дивитесь рецепт.",
"Copy Link": "Скопіювати Посилання",
"Original_Text": "Оригінальний текст",
"Default_Unit": "Одиниця замовчуванням"
"Default_Unit": "Одиниця замовчуванням",
"recipe_property_info": "Ви також можете додати властивості до продуктів, щоб розрахувати їх автоматично на основі вашого рецепту!",
"per_serving": "на порцію",
"err_importing_recipe": "Виникла помилка при імпортуванні рецепту!"
}