mirror of
https://github.com/TandoorRecipes/recipes.git
synced 2025-12-28 04:33:14 -05:00
Compare commits
64 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
698aa5a753 | ||
|
|
6444680e06 | ||
|
|
c604369e86 | ||
|
|
79abb8bf8f | ||
|
|
fd4236672e | ||
|
|
00148a2993 | ||
|
|
359fcb24cf | ||
|
|
f5d7919f72 | ||
|
|
86c4278553 | ||
|
|
2a5c0bb740 | ||
|
|
432dfa9e86 | ||
|
|
f61a8371f4 | ||
|
|
0bcdf5e0a3 | ||
|
|
169f799a23 | ||
|
|
942d1130a1 | ||
|
|
64cc20aed2 | ||
|
|
3a6731ec8d | ||
|
|
e6f11a17b9 | ||
|
|
cc1cd610e7 | ||
|
|
6a3b5ee844 | ||
|
|
49b119571e | ||
|
|
e024e3deb0 | ||
|
|
7ccedb559d | ||
|
|
103daf000d | ||
|
|
70df456307 | ||
|
|
375174ee41 | ||
|
|
f19beba014 | ||
|
|
865756e4b2 | ||
|
|
41f834db08 | ||
|
|
2c94753a5a | ||
|
|
0e05c77fa7 | ||
|
|
793c152b26 | ||
|
|
9df75f551c | ||
|
|
da49280ef2 | ||
|
|
e6087d5129 | ||
|
|
4f9bff20c8 | ||
|
|
683f1ac10a | ||
|
|
e844d2995a | ||
|
|
c0af3d19cd | ||
|
|
78d20e8340 | ||
|
|
6a90caee04 | ||
|
|
98c95a94bc | ||
|
|
d4dc4a30b8 | ||
|
|
70d2dc089c | ||
|
|
8698ad3054 | ||
|
|
6188f175ae | ||
|
|
189fab2401 | ||
|
|
a3adba1941 | ||
|
|
cea41af1b8 | ||
|
|
a325070f7f | ||
|
|
d782c54c2c | ||
|
|
58917fbc4d | ||
|
|
8b0547aeb9 | ||
|
|
9efc101161 | ||
|
|
691e8a940b | ||
|
|
bee7623eaf | ||
|
|
430697879f | ||
|
|
749974654a | ||
|
|
f31a661aaf | ||
|
|
70ea3acb05 | ||
|
|
81547563c6 | ||
|
|
c107f2f497 | ||
|
|
5fea2131cd | ||
|
|
d671df30a3 |
2
.gitignore
vendored
2
.gitignore
vendored
@@ -84,3 +84,5 @@ vue3/.vite
|
||||
# Configs
|
||||
vetur.config.js
|
||||
venv/
|
||||
.idea/easy-i18n.xml
|
||||
cookbook/static/vue3
|
||||
@@ -35,6 +35,12 @@ RUN apk add --no-cache --virtual .build-deps gcc musl-dev postgresql-dev zlib-de
|
||||
#Copy project and execute it.
|
||||
COPY . ./
|
||||
|
||||
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
14
boot.sh
@@ -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
|
||||
|
||||
@@ -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,
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
2503
cookbook/locale/hr/LC_MESSAGES/django.po
Normal file
2503
cookbook/locale/hr/LC_MESSAGES/django.po
Normal file
File diff suppressed because it is too large
Load Diff
@@ -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
|
||||
|
||||
@@ -8,17 +8,17 @@ msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"PO-Revision-Date: 2023-05-01 07:55+0000\n"
|
||||
"Last-Translator: axeron2036 <admin@axeron2036.ru>\n"
|
||||
"PO-Revision-Date: 2024-11-12 17:58+0000\n"
|
||||
"Last-Translator: Владислав <vlad@kelonmyosa.ru>\n"
|
||||
"Language-Team: Russian <http://translate.tandoor.dev/projects/tandoor/"
|
||||
"recipes-backend/ru/>\n"
|
||||
"Language: ru\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
||||
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||
"X-Generator: Weblate 4.15\n"
|
||||
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
|
||||
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||
"X-Generator: Weblate 5.6.2\n"
|
||||
|
||||
#: .\cookbook\forms.py:45
|
||||
msgid ""
|
||||
@@ -454,17 +454,17 @@ msgstr ""
|
||||
#: .\cookbook\models.py:455 .\cookbook\templates\base.html:114
|
||||
#: .\cookbook\templates\meal_plan.html:7
|
||||
msgid "Meal-Plan"
|
||||
msgstr ""
|
||||
msgstr "План питания"
|
||||
|
||||
#: .\cookbook\models.py:456 .\cookbook\templates\base.html:122
|
||||
#: .\cookbook\views\views.py:459
|
||||
msgid "Books"
|
||||
msgstr "Книги"
|
||||
msgstr "Книги рецептов"
|
||||
|
||||
#: .\cookbook\models.py:457 .\cookbook\templates\base.html:118
|
||||
#: .\cookbook\views\views.py:460
|
||||
msgid "Shopping"
|
||||
msgstr ""
|
||||
msgstr "Покупки"
|
||||
|
||||
#: .\cookbook\models.py:752
|
||||
msgid " is part of a recipe step and cannot be deleted"
|
||||
@@ -929,7 +929,7 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\templates\base.html:110 .\cookbook\templates\index.html:87
|
||||
msgid "Recipes"
|
||||
msgstr ""
|
||||
msgstr "Рецепты"
|
||||
|
||||
#: .\cookbook\templates\base.html:161 .\cookbook\views\lists.py:120
|
||||
msgid "Foods"
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -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: 2024-11-22 07:58+0000\n"
|
||||
"Last-Translator: Oleh Hudyma <oleg.hudymaa@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.6.2\n"
|
||||
|
||||
#: .\cookbook\forms.py:45
|
||||
msgid ""
|
||||
@@ -36,47 +36,51 @@ 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 ""
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
{% extends "base.html" %}
|
||||
{% load crispy_forms_filters %}
|
||||
{% load crispy_forms_filters %}
|
||||
{% load i18n %}
|
||||
|
||||
{% block title %}{% trans 'Register' %}{% endblock %}
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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 }}
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -346,42 +346,45 @@ 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
|
||||
r = redis.StrictRedis(
|
||||
host=settings.REDIS_HOST,
|
||||
port=settings.REDIS_PORT,
|
||||
password='',
|
||||
username='',
|
||||
db=settings.REDIS_DATABASES['STATS'],
|
||||
)
|
||||
if settings.REDIS_HOST:
|
||||
r = redis.StrictRedis(
|
||||
host=settings.REDIS_HOST,
|
||||
port=settings.REDIS_PORT,
|
||||
password='',
|
||||
username='',
|
||||
db=settings.REDIS_DATABASES['STATS'],
|
||||
)
|
||||
|
||||
api_stats = [['Endpoint', 'Total']]
|
||||
api_space_stats = [['User', 'Total']]
|
||||
total_stats = ['All', int(r.get('api:request-count'))]
|
||||
api_stats = [['Endpoint', 'Total']]
|
||||
api_space_stats = [['User', 'Total']]
|
||||
total_stats = ['All', int(r.get('api:request-count'))]
|
||||
|
||||
for i in range(0, 6):
|
||||
d = (date.today() - timedelta(days=i)).isoformat()
|
||||
api_stats[0].append(d)
|
||||
api_space_stats[0].append(d)
|
||||
total_stats.append(int(r.get(f'api:request-count:{d}')) if r.get(f'api:request-count:{d}') else 0)
|
||||
|
||||
api_stats.append(total_stats)
|
||||
|
||||
for x in r.zrange('api:endpoint-request-count', 0, -1, withscores=True, desc=True):
|
||||
endpoint = x[0].decode('utf-8')
|
||||
endpoint_stats = [endpoint, x[1]]
|
||||
for i in range(0, 6):
|
||||
d = (date.today() - timedelta(days=i)).isoformat()
|
||||
endpoint_stats.append(r.zscore(f'api:endpoint-request-count:{d}', endpoint))
|
||||
api_stats.append(endpoint_stats)
|
||||
api_stats[0].append(d)
|
||||
api_space_stats[0].append(d)
|
||||
total_stats.append(int(r.get(f'api:request-count:{d}')) if r.get(f'api:request-count:{d}') else 0)
|
||||
|
||||
for x in r.zrange('api:space-request-count', 0, 20, withscores=True, desc=True):
|
||||
s = x[0].decode('utf-8')
|
||||
space_stats = [Space.objects.get(pk=s).name, x[1]]
|
||||
for i in range(0, 6):
|
||||
d = (date.today() - timedelta(days=i)).isoformat()
|
||||
space_stats.append(r.zscore(f'api:space-request-count:{d}', s))
|
||||
api_space_stats.append(space_stats)
|
||||
api_stats.append(total_stats)
|
||||
|
||||
for x in r.zrange('api:endpoint-request-count', 0, -1, withscores=True, desc=True):
|
||||
endpoint = x[0].decode('utf-8')
|
||||
endpoint_stats = [endpoint, x[1]]
|
||||
for i in range(0, 6):
|
||||
d = (date.today() - timedelta(days=i)).isoformat()
|
||||
endpoint_stats.append(r.zscore(f'api:endpoint-request-count:{d}', endpoint))
|
||||
api_stats.append(endpoint_stats)
|
||||
|
||||
for x in r.zrange('api:space-request-count', 0, 20, withscores=True, desc=True):
|
||||
s = x[0].decode('utf-8')
|
||||
space_stats = [Space.objects.get(pk=s).name, x[1]]
|
||||
for i in range(0, 6):
|
||||
d = (date.today() - timedelta(days=i)).isoformat()
|
||||
space_stats.append(r.zscore(f'api:space-request-count:{d}', s))
|
||||
api_space_stats.append(space_stats)
|
||||
|
||||
return render(
|
||||
request, 'system.html', {
|
||||
|
||||
@@ -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:
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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 = {
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
Django==4.2.16
|
||||
cryptography===43.0.1
|
||||
Django==4.2.17
|
||||
cryptography===44.0.0
|
||||
django-annoying==0.10.6
|
||||
django-cleanup==8.0.0
|
||||
django-crispy-forms==2.3
|
||||
crispy-bootstrap4==2024.1
|
||||
crispy-bootstrap4==2024.10
|
||||
django-tables2==2.7.0
|
||||
djangorestframework==3.15.2
|
||||
drf-writable-nested==0.7.0
|
||||
@@ -20,13 +20,13 @@ requests==2.32.3
|
||||
six==1.16.0
|
||||
webdavclient3==3.14.6
|
||||
whitenoise==6.7.0
|
||||
icalendar==5.0.11
|
||||
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
|
||||
@@ -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.5.1
|
||||
aiohttp==3.10.11
|
||||
inflection==0.5.1
|
||||
redis==5.2.0
|
||||
|
||||
# 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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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 ? '..' : ''))
|
||||
}
|
||||
|
||||
|
||||
@@ -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
572
vue/src/locales/hr.json
Normal 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"
|
||||
}
|
||||
@@ -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.",
|
||||
|
||||
@@ -363,5 +363,115 @@
|
||||
"recipe_property_info": "Вы также можете добавить свойства к продуктам, чтобы автоматически рассчитывать их на основе вашего рецепта!",
|
||||
"open_data_help_text": "Проект Tandoor Open Data предоставляет предоставленные сообществом данные для Tandoor. Это поле заполняется автоматически при импорте и допускает обновления в будущем.",
|
||||
"Open_Data_Import": "Открыть импорт данных",
|
||||
"property_type_fdc_hint": "Только типы свойств с FDC ID могут автоматически получать данные из базы данных FDC"
|
||||
"property_type_fdc_hint": "Только типы свойств с FDC ID могут автоматически получать данные из базы данных FDC",
|
||||
"Pin": "Закрепить",
|
||||
"Import Recipe": "Импортировать рецепт",
|
||||
"Create Recipe": "Создать рецепт",
|
||||
"Manage_Emails": "Управление электронной почтой",
|
||||
"Change_Password": "Изменить пароль",
|
||||
"API": "API",
|
||||
"Disable": "Отключить",
|
||||
"Enable": "Включить",
|
||||
"Disabled": "Отключено",
|
||||
"Foods": "Продукты",
|
||||
"Nav_Color": "Цвет навигации",
|
||||
"Ingredient Overview": "Обзор ингредиентов",
|
||||
"Export_Not_Yet_Supported": "Экспорт пока не поддерживается",
|
||||
"Last_name": "Фамилия",
|
||||
"Default_Unit": "Единица измерения по умолчанию",
|
||||
"Decimals": "Десятки",
|
||||
"Hours": "Часы",
|
||||
"Day": "День",
|
||||
"Days": "Дни",
|
||||
"Hour": "Час",
|
||||
"download_csv": "Скачать CSV",
|
||||
"Cosmetic": "Косметические",
|
||||
"Account": "Аккаунт",
|
||||
"Import_Supported": "Импорт поддерживается",
|
||||
"g": "грамм [г] (метрическая единица, вес)",
|
||||
"sql_debug": "Отладка SQL",
|
||||
"Import_Result_Info": "{imported} из {total} рецептов были импортированы",
|
||||
"total": "всего",
|
||||
"Copy Token": "Копировать токен",
|
||||
"SupermarketName": "Название супермаркета",
|
||||
"Plural": "Множественное",
|
||||
"plural_short": "множественное",
|
||||
"in_shopping": "В списке покупок",
|
||||
"App": "Приложение",
|
||||
"Message": "Сообщение",
|
||||
"Export_Supported": "Экспорт поддерживается",
|
||||
"Import_Not_Yet_Supported": "Импорт пока не поддерживается",
|
||||
"filter_to_supermarket_desc": "По умолчанию список покупок фильтруется таким образом, чтобы в него включались только категории для выбранного супермаркета.",
|
||||
"Toggle": "Переключить",
|
||||
"OrderInformation": "Объекты упорядочены от меньшего к большему.",
|
||||
"Website": "Веб-сайт",
|
||||
"Welcome": "Добро пожаловать",
|
||||
"SuccessClipboard": "Список покупок скопирован в буфер обмена",
|
||||
"First_name": "Имя",
|
||||
"Create Food": "Создать продукт",
|
||||
"UnpinnedConfirmation": "{recipe} откреплен.",
|
||||
"show_ingredient_overview": "Отобразить список всех ингредиентов в начале рецепта.",
|
||||
"Username": "Имя пользователя",
|
||||
"Undo": "Отменить",
|
||||
"NoMoreUndo": "Нет изменений, которые можно было бы отменить.",
|
||||
"Delete_All": "Удалить всё",
|
||||
"Input": "Ввод",
|
||||
"Copy Link": "Копировать ссылку",
|
||||
"Shopping_input_placeholder": "Например: Картофель/100 Картофелин/100 г Картофеля",
|
||||
"created_by": "Создано",
|
||||
"Use_Fractions": "Использовать дроби",
|
||||
"Language": "Язык",
|
||||
"Theme": "Тема",
|
||||
"ShowRecentlyCompleted": "Показать недавно завершенные элементы",
|
||||
"ShoppingBackgroundSyncWarning": "Плохая сеть, ожидание синхронизации...",
|
||||
"Seconds": "Секунды",
|
||||
"Users": "Пользователи",
|
||||
"Invites": "Приглашения",
|
||||
"CategoryName": "Название категории",
|
||||
"CategoryInstruction": "Перетаскивайте категории, чтобы изменить порядок отображения категорий в списке покупок.",
|
||||
"shopping_recent_days": "Недавние дни",
|
||||
"download_pdf": "Скачать PDF",
|
||||
"csv_delim_help": "Разделитель, используемый для экспорта в формате CSV.",
|
||||
"csv_delim_label": "Разделитель CSV",
|
||||
"copy_to_clipboard": "Копировать в буфер обмена",
|
||||
"copy_markdown_table": "Копировать как таблицу Markdown",
|
||||
"Unpin": "Открепить",
|
||||
"PinnedConfirmation": "{recipe} закреплен.",
|
||||
"QuickEntry": "Быстрый вход",
|
||||
"today_recipes": "Сегодняшние рецепты",
|
||||
"Created": "Создано",
|
||||
"Updated": "Обновлено",
|
||||
"Error": "Ошибка",
|
||||
"filter": "Фильтр",
|
||||
"Logo": "Логотип",
|
||||
"Show_Logo": "Показать логотип",
|
||||
"Comments_setting": "Показать комментарии",
|
||||
"Click_To_Edit": "Нажмите, чтобы изменить",
|
||||
"search_no_recipes": "Не удалось найти ни одного рецепта!",
|
||||
"search_import_help_text": "Импортировать рецепт с внешнего веб-сайта или приложения.",
|
||||
"search_create_help_text": "Создать новый рецепт непосредственно в Tandoor.",
|
||||
"New_Supermarket_Category": "Создать новую категорию супермаркетов",
|
||||
"Datatype": "Тип данных",
|
||||
"kg": "килограмм [кг] (метрическая единица, вес)",
|
||||
"ounce": "унция [oz] (вес)",
|
||||
"pound": "фунт (вес)",
|
||||
"Original_Text": "Исходный текст",
|
||||
"Properties": "Свойства",
|
||||
"Property": "Свойство",
|
||||
"StartDate": "Дата начала",
|
||||
"EndDate": "Дата окончания",
|
||||
"Second": "Секунда",
|
||||
"DefaultPage": "Начальная страница",
|
||||
"ml": "миллилитр [мл] (метрическая единица, объём)",
|
||||
"l": "литр [л] (метрическая единица, объем)",
|
||||
"Choose_Category": "Выбрать категорию",
|
||||
"Back": "Назад",
|
||||
"Use_Plural_Unit_Always": "Всегда используйте форму множественного числа для обозначения единицы измерения",
|
||||
"CustomImageHelp": "Загрузите изображение, которое будет отображаться в обзоре пространства.",
|
||||
"CustomNavLogoHelp": "Загрузите изображение, которое будет использоваться в качестве логотипа панели навигации.",
|
||||
"CustomLogos": "Пользовательские логотипы",
|
||||
"plan_share_desc": "Выбранным пользователям будет автоматически предоставлен доступ к новым записям в Плане Питания.",
|
||||
"CustomTheme": "Пользовательская тема",
|
||||
"CustomThemeHelp": "Измените стили выбранной темы, загрузив собственный CSS-файл.",
|
||||
"Learn_More": "Узнать больше"
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user