mirror of
https://github.com/TandoorRecipes/recipes.git
synced 2025-12-25 11:19:39 -05:00
Compare commits
31 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
378938812c | ||
|
|
60b494abeb | ||
|
|
34be1dc1d7 | ||
|
|
d89a4620f0 | ||
|
|
dea83b5720 | ||
|
|
d9ebe3e0fb | ||
|
|
135dde247f | ||
|
|
eb7a667202 | ||
|
|
b3cc9967f5 | ||
|
|
7276cea3d5 | ||
|
|
c0c996622e | ||
|
|
5556555bca | ||
|
|
55a84494c9 | ||
|
|
74d778dcb8 | ||
|
|
156d68f1b8 | ||
|
|
cb59a6340d | ||
|
|
5eb013cc2f | ||
|
|
dafb26b500 | ||
|
|
d9416a42dc | ||
|
|
ad88eff9e3 | ||
|
|
4d4f623adf | ||
|
|
ac9c9cd4e3 | ||
|
|
580eeef6b7 | ||
|
|
f25f5a26cf | ||
|
|
972d43c2a2 | ||
|
|
2a7475c435 | ||
|
|
71b41efe6c | ||
|
|
33a7fee1cc | ||
|
|
fa7fb644ea | ||
|
|
13b996171a | ||
|
|
77bb3870bf |
@@ -1,4 +1,4 @@
|
||||
name: publish beta image docker
|
||||
name: publish beta raspi image docker
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
|
||||
@@ -45,10 +45,3 @@ jobs:
|
||||
tag: ${{ steps.get_version.outputs.VERSION }}-raspi
|
||||
dockerUser: ${{ secrets.DOCKER_USERNAME }}
|
||||
dockerPassword: ${{ secrets.DOCKER_PASSWORD }}
|
||||
# Send discord notification
|
||||
- name: Discord notification
|
||||
env:
|
||||
DISCORD_WEBHOOK: ${{ secrets.DISCORD_RELEASE_WEBHOOK }}
|
||||
uses: Ilshidur/action-discord@0.3.2
|
||||
with:
|
||||
args: '🚀 Version {{ EVENT_PAYLOAD.release.tag_name }} of tandoor has been released 🥳 Check it out https://github.com/vabene1111/recipes/releases/tag/{{ EVENT_PAYLOAD.release.tag_name }}'
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
FROM python:3.9-alpine3.15
|
||||
|
||||
#Install all dependencies.
|
||||
RUN apk add --no-cache postgresql-libs postgresql-client gettext zlib libjpeg libwebp libxml2-dev libxslt-dev py-cryptography openldap
|
||||
RUN apk add --no-cache postgresql-libs postgresql-client gettext zlib libjpeg libwebp libxml2-dev libxslt-dev py-cryptography openldap gcompat
|
||||
|
||||
#Print all logs without buffering it.
|
||||
ENV PYTHONUNBUFFERED 1
|
||||
@@ -15,19 +15,16 @@ RUN mkdir /opt/recipes
|
||||
WORKDIR /opt/recipes
|
||||
|
||||
COPY requirements.txt ./
|
||||
|
||||
RUN \
|
||||
if [ `apk --print-arch` = "armv7" ]; then \
|
||||
printf "[global]\nextra-index-url=https://www.piwheels.org/simple\n" > /etc/pip.conf ; \
|
||||
fi
|
||||
|
||||
RUN apk add --no-cache --virtual .build-deps gcc musl-dev postgresql-dev zlib-dev jpeg-dev libwebp-dev openssl-dev libffi-dev cargo openldap-dev python3-dev && \
|
||||
RUN apk add --no-cache --virtual .build-deps gcc musl-dev zlib-dev jpeg-dev libwebp-dev python3-dev && \
|
||||
echo -n "INPUT ( libldap.so )" > /usr/lib/libldap_r.so && \
|
||||
python -m venv venv && \
|
||||
/opt/recipes/venv/bin/python -m pip install --upgrade pip && \
|
||||
venv/bin/pip install wheel==0.37.1 && \
|
||||
venv/bin/pip install setuptools_rust==1.1.2 && \
|
||||
venv/bin/pip install -r requirements.txt --no-cache-dir &&\
|
||||
venv/bin/pip install -r requirements.txt --no-cache-dir --no-binary=Pillow && \
|
||||
apk --purge del .build-deps
|
||||
|
||||
#Copy project and execute it.
|
||||
|
||||
@@ -9,6 +9,8 @@ from recipe_scrapers._utils import get_host_name, normalize_string
|
||||
|
||||
from cookbook.helper import recipe_url_import as helper
|
||||
from cookbook.helper.scrapers.scrapers import text_scraper
|
||||
from recipe_scrapers import scrape_me
|
||||
from recipe_scrapers._exceptions import NoSchemaFoundInWildMode
|
||||
|
||||
|
||||
def get_recipe_from_source(text, url, request):
|
||||
@@ -63,34 +65,41 @@ def get_recipe_from_source(text, url, request):
|
||||
html_data = []
|
||||
images = []
|
||||
text = unquote(text)
|
||||
scrape = None
|
||||
|
||||
try:
|
||||
parse_list.append(remove_graph(json.loads(text)))
|
||||
if not url and 'url' in parse_list[0]:
|
||||
url = parse_list[0]['url']
|
||||
scrape = text_scraper("<script type='application/ld+json'>" + text + "</script>", url=url)
|
||||
if url:
|
||||
try:
|
||||
scrape = scrape_me(url_path=url, wild_mode=True)
|
||||
except(NoSchemaFoundInWildMode):
|
||||
pass
|
||||
if not scrape:
|
||||
try:
|
||||
parse_list.append(remove_graph(json.loads(text)))
|
||||
if not url and 'url' in parse_list[0]:
|
||||
url = parse_list[0]['url']
|
||||
scrape = text_scraper("<script type='application/ld+json'>" + text + "</script>", url=url)
|
||||
|
||||
except JSONDecodeError:
|
||||
soup = BeautifulSoup(text, "html.parser")
|
||||
html_data = get_from_html(soup)
|
||||
images += get_images_from_source(soup, url)
|
||||
for el in soup.find_all('script', type='application/ld+json'):
|
||||
el = remove_graph(el)
|
||||
if not url and 'url' in el:
|
||||
url = el['url']
|
||||
if type(el) == list:
|
||||
for le in el:
|
||||
parse_list.append(le)
|
||||
elif type(el) == dict:
|
||||
parse_list.append(el)
|
||||
for el in soup.find_all(type='application/json'):
|
||||
el = remove_graph(el)
|
||||
if type(el) == list:
|
||||
for le in el:
|
||||
parse_list.append(le)
|
||||
elif type(el) == dict:
|
||||
parse_list.append(el)
|
||||
scrape = text_scraper(text, url=url)
|
||||
except JSONDecodeError:
|
||||
soup = BeautifulSoup(text, "html.parser")
|
||||
html_data = get_from_html(soup)
|
||||
images += get_images_from_source(soup, url)
|
||||
for el in soup.find_all('script', type='application/ld+json'):
|
||||
el = remove_graph(el)
|
||||
if not url and 'url' in el:
|
||||
url = el['url']
|
||||
if type(el) == list:
|
||||
for le in el:
|
||||
parse_list.append(le)
|
||||
elif type(el) == dict:
|
||||
parse_list.append(el)
|
||||
for el in soup.find_all(type='application/json'):
|
||||
el = remove_graph(el)
|
||||
if type(el) == list:
|
||||
for le in el:
|
||||
parse_list.append(le)
|
||||
elif type(el) == dict:
|
||||
parse_list.append(el)
|
||||
scrape = text_scraper(text, url=url)
|
||||
|
||||
recipe_json = helper.get_from_scraper(scrape, request)
|
||||
|
||||
|
||||
@@ -114,7 +114,14 @@ def get_from_scraper(scrape, request):
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
if source_url := scrape.url:
|
||||
try:
|
||||
source_url = scrape.canonical_url()
|
||||
except Exception:
|
||||
try:
|
||||
source_url = scrape.url
|
||||
except Exception:
|
||||
pass
|
||||
if source_url:
|
||||
recipe_json['source_url'] = source_url
|
||||
try:
|
||||
keywords.append(source_url.replace('http://', '').replace('https://', '').split('/')[0])
|
||||
@@ -129,9 +136,11 @@ def get_from_scraper(scrape, request):
|
||||
ingredient_parser = IngredientParser(request, True)
|
||||
|
||||
recipe_json['steps'] = []
|
||||
|
||||
for i in parse_instructions(scrape.instructions()):
|
||||
recipe_json['steps'].append({'instruction': i, 'ingredients': [], })
|
||||
try:
|
||||
for i in parse_instructions(scrape.instructions()):
|
||||
recipe_json['steps'].append({'instruction': i, 'ingredients': [], })
|
||||
except Exception:
|
||||
pass
|
||||
if len(recipe_json['steps']) == 0:
|
||||
recipe_json['steps'].append({'instruction': '', 'ingredients': [], })
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
from bs4 import BeautifulSoup
|
||||
from json import JSONDecodeError
|
||||
from recipe_scrapers import SCRAPERS, get_host_name
|
||||
from recipe_scrapers import SCRAPERS
|
||||
from recipe_scrapers._factory import SchemaScraperFactory
|
||||
from recipe_scrapers._schemaorg import SchemaOrg
|
||||
|
||||
@@ -15,13 +15,7 @@ SCRAPERS.update(CUSTOM_SCRAPERS)
|
||||
|
||||
|
||||
def text_scraper(text, url=None):
|
||||
domain = None
|
||||
if url:
|
||||
domain = get_host_name(url)
|
||||
if domain in SCRAPERS:
|
||||
scraper_class = SCRAPERS[domain]
|
||||
else:
|
||||
scraper_class = SchemaScraperFactory.SchemaScraper
|
||||
scraper_class = SchemaScraperFactory.SchemaScraper
|
||||
|
||||
class TextScraper(scraper_class):
|
||||
def __init__(
|
||||
|
||||
@@ -28,17 +28,17 @@ class Cookmate(Integration):
|
||||
name=recipe_xml.find('title').text.strip(),
|
||||
created_by=self.request.user, internal=True, space=self.request.space)
|
||||
|
||||
if recipe_xml.find('preptime') is not None:
|
||||
if recipe_xml.find('preptime') is not None and recipe_xml.find('preptime').text is not None:
|
||||
recipe.working_time = parse_time(recipe_xml.find('preptime').text.strip())
|
||||
|
||||
if recipe_xml.find('cooktime') is not None:
|
||||
if recipe_xml.find('cooktime') is not None and recipe_xml.find('cooktime').text is not None:
|
||||
recipe.waiting_time = parse_time(recipe_xml.find('cooktime').text.strip())
|
||||
|
||||
if recipe_xml.find('quantity') is not None:
|
||||
if recipe_xml.find('quantity') is not None and recipe_xml.find('quantity').text is not None:
|
||||
recipe.servings = parse_servings(recipe_xml.find('quantity').text.strip())
|
||||
recipe.servings_text = parse_servings_text(recipe_xml.find('quantity').text.strip())
|
||||
|
||||
if recipe_xml.find('url') is not None:
|
||||
if recipe_xml.find('url') is not None and recipe_xml.find('url').text is not None:
|
||||
recipe.source_url = recipe_xml.find('url').text.strip()
|
||||
|
||||
if recipe_xml.find('description') is not None: # description is a list of <li>'s with text
|
||||
|
||||
@@ -27,7 +27,7 @@ class Paprika(Integration):
|
||||
recipe.description = '' if len(recipe_json['description'].strip()) > 500 else recipe_json['description'].strip()
|
||||
|
||||
try:
|
||||
if 'servings' in recipe_json['servings']:
|
||||
if 'servings' in recipe_json:
|
||||
recipe.servings = parse_servings(recipe_json['servings'])
|
||||
recipe.servings_text = parse_servings_text(recipe_json['servings'])
|
||||
|
||||
|
||||
@@ -78,7 +78,11 @@ class Plantoeat(Integration):
|
||||
current_recipe = ''
|
||||
|
||||
for fl in file.readlines():
|
||||
line = fl.decode("windows-1250")
|
||||
try:
|
||||
line = fl.decode("utf-8")
|
||||
except UnicodeDecodeError:
|
||||
line = fl.decode("windows-1250")
|
||||
|
||||
if line.startswith('--------------'):
|
||||
if current_recipe != '':
|
||||
recipe_list.append(current_recipe)
|
||||
|
||||
BIN
cookbook/locale/bg/LC_MESSAGES/django.mo
Normal file
BIN
cookbook/locale/bg/LC_MESSAGES/django.mo
Normal file
Binary file not shown.
3018
cookbook/locale/bg/LC_MESSAGES/django.po
Normal file
3018
cookbook/locale/bg/LC_MESSAGES/django.po
Normal file
File diff suppressed because it is too large
Load Diff
BIN
cookbook/locale/da/LC_MESSAGES/django.mo
Normal file
BIN
cookbook/locale/da/LC_MESSAGES/django.mo
Normal file
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -13,10 +13,10 @@ msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2022-04-29 18:42+0200\n"
|
||||
"PO-Revision-Date: 2022-04-05 10:31+0000\n"
|
||||
"PO-Revision-Date: 2022-05-10 15:32+0000\n"
|
||||
"Last-Translator: Jesse <jesse.kamps@pm.me>\n"
|
||||
"Language-Team: Dutch <http://translate.tandoor.dev/projects/tandoor/recipes-"
|
||||
"backend/nl/>\n"
|
||||
"Language-Team: Dutch <http://translate.tandoor.dev/projects/tandoor/"
|
||||
"recipes-backend/nl/>\n"
|
||||
"Language: nl\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -84,7 +84,7 @@ msgstr "Opmerkingen"
|
||||
|
||||
#: .\cookbook\forms.py:69
|
||||
msgid "Left-handed mode"
|
||||
msgstr ""
|
||||
msgstr "Linkshandigen modus"
|
||||
|
||||
#: .\cookbook\forms.py:73
|
||||
msgid ""
|
||||
@@ -161,7 +161,7 @@ msgstr "Sluit ingrediënten die op voorraad zijn uit."
|
||||
|
||||
#: .\cookbook\forms.py:93
|
||||
msgid "Will optimize the UI for use with your left hand."
|
||||
msgstr ""
|
||||
msgstr "Optimaliseert de gebruikersinterface voor gebruik met je linkerhand."
|
||||
|
||||
#: .\cookbook\forms.py:110
|
||||
msgid ""
|
||||
@@ -547,7 +547,7 @@ msgstr "Sjablooncode kon niet verwerkt worden."
|
||||
#: .\cookbook\integration\copymethat.py:42
|
||||
#: .\cookbook\integration\melarecipes.py:37
|
||||
msgid "Favorite"
|
||||
msgstr ""
|
||||
msgstr "Favoriet"
|
||||
|
||||
#: .\cookbook\integration\copymethat.py:71
|
||||
#: .\cookbook\integration\recettetek.py:53
|
||||
@@ -722,10 +722,8 @@ msgid "Recipe"
|
||||
msgstr "Recept"
|
||||
|
||||
#: .\cookbook\models.py:1163
|
||||
#, fuzzy
|
||||
#| msgid "Foods"
|
||||
msgid "Food"
|
||||
msgstr "Ingrediënten"
|
||||
msgstr "Ingrediënt"
|
||||
|
||||
#: .\cookbook\models.py:1164 .\cookbook\templates\base.html:138
|
||||
msgid "Keyword"
|
||||
@@ -1138,10 +1136,8 @@ msgstr "Geschiedenis"
|
||||
#: .\cookbook\templates\base.html:252
|
||||
#: .\cookbook\templates\ingredient_editor.html:7
|
||||
#: .\cookbook\templates\ingredient_editor.html:13
|
||||
#, fuzzy
|
||||
#| msgid "Ingredients"
|
||||
msgid "Ingredient Editor"
|
||||
msgstr "Ingrediënten"
|
||||
msgstr "Ingrediënteneditor"
|
||||
|
||||
#: .\cookbook\templates\base.html:264
|
||||
#: .\cookbook\templates\export_response.html:7
|
||||
@@ -1198,11 +1194,11 @@ msgstr "Uitloggen"
|
||||
|
||||
#: .\cookbook\templates\base.html:342
|
||||
msgid "You are using the free version of Tandor"
|
||||
msgstr ""
|
||||
msgstr "Je gebruikt de gratis versie van Tandoor"
|
||||
|
||||
#: .\cookbook\templates\base.html:342
|
||||
msgid "Upgrade Now"
|
||||
msgstr ""
|
||||
msgstr "Upgrade nu"
|
||||
|
||||
#: .\cookbook\templates\batch\edit.html:6
|
||||
msgid "Batch edit Category"
|
||||
@@ -1731,7 +1727,7 @@ msgstr ""
|
||||
#: .\cookbook\templates\openid\login.html:27
|
||||
#: .\cookbook\templates\socialaccount\authentication_error.html:27
|
||||
msgid "Back"
|
||||
msgstr ""
|
||||
msgstr "Terug"
|
||||
|
||||
#: .\cookbook\templates\recipe_view.html:26
|
||||
msgid "by"
|
||||
@@ -2180,17 +2176,15 @@ msgstr "Maak Superuser acount"
|
||||
|
||||
#: .\cookbook\templates\socialaccount\authentication_error.html:7
|
||||
#: .\cookbook\templates\socialaccount\authentication_error.html:23
|
||||
#, fuzzy
|
||||
#| msgid "Social Login"
|
||||
msgid "Social Network Login Failure"
|
||||
msgstr "Socials login"
|
||||
msgstr "Inloggen op sociaal netwerk mislukt"
|
||||
|
||||
#: .\cookbook\templates\socialaccount\authentication_error.html:25
|
||||
#, fuzzy
|
||||
#| msgid "An error occurred attempting to move "
|
||||
msgid ""
|
||||
"An error occurred while attempting to login via your social network account."
|
||||
msgstr "Er is een error opgetreden bij het verplaatsen "
|
||||
msgstr ""
|
||||
"Er is een fout opgetreden tijdens het inloggen via je sociale netwerk "
|
||||
"account."
|
||||
|
||||
#: .\cookbook\templates\socialaccount\connections.html:4
|
||||
#: .\cookbook\templates\socialaccount\connections.html:15
|
||||
@@ -2542,33 +2536,39 @@ msgstr ""
|
||||
"op volledige tekst ondersteund."
|
||||
|
||||
#: .\cookbook\views\api.py:671
|
||||
#, fuzzy
|
||||
#| msgid "ID of keyword a recipe should have. For multiple repeat parameter."
|
||||
msgid ""
|
||||
"ID of keyword a recipe should have. For multiple repeat parameter. "
|
||||
"Equivalent to keywords_or"
|
||||
msgstr ""
|
||||
"ID van etiket dat een recept moet hebben. Herhaal parameter voor meerdere."
|
||||
"ID van etiket dat een recept moet hebben. Herhaal parameter voor meerdere. "
|
||||
"Gelijkwaardig aan keywords_or"
|
||||
|
||||
#: .\cookbook\views\api.py:674
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with any of the keywords"
|
||||
msgstr ""
|
||||
"Etiket ID, herhaal voor meerdere. Geeft recepten met elk geselecteerd etiket "
|
||||
"weer"
|
||||
|
||||
#: .\cookbook\views\api.py:677
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with all of the keywords."
|
||||
msgstr ""
|
||||
"Etiket ID, herhaal voor meerdere. Geeft recepten met alle geselecteerde "
|
||||
"etiketten weer."
|
||||
|
||||
#: .\cookbook\views\api.py:680
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with any of the keywords."
|
||||
msgstr ""
|
||||
"Etiket ID, herhaal voor meerdere. Sluit recepten met één van de etiketten "
|
||||
"uit."
|
||||
|
||||
#: .\cookbook\views\api.py:683
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with all of the keywords."
|
||||
msgstr ""
|
||||
"Etiket ID, herhaal voor meerdere. Sluit recepten met alle etiketten uit."
|
||||
|
||||
#: .\cookbook\views\api.py:685
|
||||
msgid "ID of food a recipe should have. For multiple repeat parameter."
|
||||
@@ -2579,18 +2579,25 @@ msgstr ""
|
||||
#: .\cookbook\views\api.py:688
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with any of the foods"
|
||||
msgstr ""
|
||||
"Ingrediënt ID, herhaal voor meerdere. Geeft recepten met elk ingrediënt weer"
|
||||
|
||||
#: .\cookbook\views\api.py:690
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with all of the foods."
|
||||
msgstr ""
|
||||
"Ingrediënt ID, herhaal voor meerdere. Geef recepten met alle ingrediënten "
|
||||
"weer."
|
||||
|
||||
#: .\cookbook\views\api.py:692
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with any of the foods."
|
||||
msgstr ""
|
||||
"Ingrediënt ID, herhaal voor meerdere. sluit recepten met één van de "
|
||||
"ingrediënten uit."
|
||||
|
||||
#: .\cookbook\views\api.py:694
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with all of the foods."
|
||||
msgstr ""
|
||||
"Ingrediënt ID, herhaal voor meerdere. Sluit recepten met alle ingrediënten "
|
||||
"uit."
|
||||
|
||||
#: .\cookbook\views\api.py:695
|
||||
msgid "ID of unit a recipe should have."
|
||||
@@ -2600,7 +2607,7 @@ msgstr "ID van eenheid dat een recept moet hebben."
|
||||
msgid ""
|
||||
"Rating a recipe should have or greater. [0 - 5] Negative value filters "
|
||||
"rating less than."
|
||||
msgstr ""
|
||||
msgstr "Een waardering van een recept gaat van 0 tot 5."
|
||||
|
||||
#: .\cookbook\views\api.py:698
|
||||
msgid "ID of book a recipe should be in. For multiple repeat parameter."
|
||||
@@ -2609,19 +2616,20 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:700
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with any of the books"
|
||||
msgstr ""
|
||||
msgstr "Boek ID, herhaal voor meerdere. Geeft recepten uit alle boeken weer"
|
||||
|
||||
#: .\cookbook\views\api.py:702
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with all of the books."
|
||||
msgstr ""
|
||||
msgstr "Boek IDs, herhaal voor meerdere. Geeft recepten weer uit alle boeken."
|
||||
|
||||
#: .\cookbook\views\api.py:704
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with any of the books."
|
||||
msgstr ""
|
||||
"Boek IDs, herhaal voor meerdere. Sluit recepten uit elk van de boeken uit."
|
||||
|
||||
#: .\cookbook\views\api.py:706
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with all of the books."
|
||||
msgstr ""
|
||||
msgstr "Boek IDs, herhaal voor meerdere. Sluit recepten uit alle boeken uit."
|
||||
|
||||
#: .\cookbook\views\api.py:708
|
||||
msgid "If only internal recipes should be returned. [true/<b>false</b>]"
|
||||
@@ -2642,37 +2650,46 @@ msgid ""
|
||||
"Filter recipes cooked X times or more. Negative values returns cooked less "
|
||||
"than X times"
|
||||
msgstr ""
|
||||
"Filter recepten X maal of meer bereid. Negatieve waarden geven minder dan X "
|
||||
"keer bereide recepten weer"
|
||||
|
||||
#: .\cookbook\views\api.py:716
|
||||
msgid ""
|
||||
"Filter recipes last cooked on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
"Filter recepten op laatst bereid op of na JJJJ-MM-DD. Voorafgaand - filters "
|
||||
"op of voor datum."
|
||||
|
||||
#: .\cookbook\views\api.py:718
|
||||
msgid ""
|
||||
"Filter recipes created on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
"Filter recepten aangemaakt op of na JJJJ-MM-DD. Voorafgaand - filters op of "
|
||||
"voor datum."
|
||||
|
||||
#: .\cookbook\views\api.py:720
|
||||
msgid ""
|
||||
"Filter recipes updated on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
"Filter recepten op geüpdatet op of na JJJJ-MM-DD. Voorafgaand - filters op "
|
||||
"of voor datum."
|
||||
|
||||
#: .\cookbook\views\api.py:722
|
||||
msgid ""
|
||||
"Filter recipes lasts viewed on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
"Filter recepten op laatst bekeken op of na JJJJ-MM-DD. Voorafgaand - filters "
|
||||
"op of voor datum."
|
||||
|
||||
#: .\cookbook\views\api.py:724
|
||||
#, fuzzy
|
||||
#| msgid "If only internal recipes should be returned. [true/<b>false</b>]"
|
||||
msgid "Filter recipes that can be made with OnHand food. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
"Wanneer alleen interne recepten gevonden moeten worden. [waar/<b>onwaar</b>]"
|
||||
"Filter recepten die bereid kunnen worden met ingrediënten die op voorraad "
|
||||
"zijn. [waar/<b>onwaar</b>]"
|
||||
|
||||
#: .\cookbook\views\api.py:880
|
||||
msgid ""
|
||||
@@ -2718,7 +2735,7 @@ msgstr "Verbinding geweigerd."
|
||||
|
||||
#: .\cookbook\views\api.py:1200
|
||||
msgid "Bad URL Schema."
|
||||
msgstr ""
|
||||
msgstr "Verkeerd URL schema."
|
||||
|
||||
#: .\cookbook\views\api.py:1206
|
||||
msgid "No usable data could be found."
|
||||
@@ -2812,10 +2829,8 @@ msgid "Shopping Categories"
|
||||
msgstr "Boodschappencategorieën"
|
||||
|
||||
#: .\cookbook\views\lists.py:187
|
||||
#, fuzzy
|
||||
#| msgid "Filter"
|
||||
msgid "Custom Filters"
|
||||
msgstr "Filtreren"
|
||||
msgstr "Aangepaste filters"
|
||||
|
||||
#: .\cookbook\views\lists.py:224
|
||||
msgid "Steps"
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -77,7 +77,7 @@
|
||||
{% if not request.user.is_authenticated or request.user.userpreference.theme == request.user.userpreference.TANDOOR %}
|
||||
<a class="navbar-brand p-0 me-2 justify-content-center" href="{% base_path request 'base' %}"
|
||||
aria-label="Tandoor">
|
||||
<img class="brand-icon" src="{% static 'assets/brand_logo.svg' %}" alt="Logo">
|
||||
<img class="brand-icon" src="{% static 'assets/brand_logo.png' %}" alt="Logo">
|
||||
</a>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
@@ -15,6 +15,7 @@ from cookbook.helper.mdx_attributes import MarkdownFormatExtension
|
||||
from cookbook.helper.mdx_urlize import UrlizeExtension
|
||||
from cookbook.models import Space, get_model_name
|
||||
from recipes import settings
|
||||
from recipes.settings import STATIC_URL
|
||||
|
||||
register = template.Library()
|
||||
|
||||
@@ -157,7 +158,7 @@ def base_path(request, path_type):
|
||||
elif path_type == 'script':
|
||||
return request.META.get('HTTP_X_SCRIPT_NAME', '')
|
||||
elif path_type == 'static_base':
|
||||
return static('vue/manifest.json').replace('vue/manifest.json', '')
|
||||
return STATIC_URL
|
||||
|
||||
|
||||
@register.simple_tag
|
||||
|
||||
@@ -343,6 +343,11 @@ ProxyPassReverse / http://localhost:8080/ # replace port
|
||||
!!!info
|
||||
Always wait at least 2-3 minutes after the very first start, since migrations will take some time!
|
||||
|
||||
!!!warning
|
||||
If you want to use Tandoor on a Raspberry Pi running a 32-bit operating system you will need to use the following
|
||||
docker image tags: `latest-raspi`, `beta-raspi` and the versioned `<x.y.z>-raspi`
|
||||
We strongly recommend using the new 64-bit Raspian image as the 32-bit version is not tested.
|
||||
|
||||
If you're having issues with installing Tandoor on your Raspberry Pi or similar device,
|
||||
follow these instructions:
|
||||
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -366,8 +366,10 @@ USE_TZ = True
|
||||
|
||||
LANGUAGES = [
|
||||
('hy', _('Armenian ')),
|
||||
('bg', _('Bulgarian')),
|
||||
('ca', _('Catalan')),
|
||||
('cs', _('Czech')),
|
||||
('da', _('Danish')),
|
||||
('nl', _('Dutch')),
|
||||
('en', _('English')),
|
||||
('fr', _('French')),
|
||||
|
||||
@@ -29,7 +29,7 @@ Jinja2==3.1.1
|
||||
django-webpack-loader==1.4.1
|
||||
django-js-reverse==0.9.1
|
||||
django-allauth==0.50.0
|
||||
recipe-scrapers==13.32.0
|
||||
recipe-scrapers==13.32.1
|
||||
django-scopes==1.2.0
|
||||
pytest==7.1.1
|
||||
pytest-django==4.5.2
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
}}!
|
||||
</b-badge>
|
||||
<b-badge variant="primary" v-else class="float-right">
|
||||
{{ $t('Import_running') }}
|
||||
{{ $t('import_running') }}
|
||||
<b-spinner small class="d-inline-block"></b-spinner>
|
||||
</b-badge>
|
||||
</h4>
|
||||
|
||||
@@ -54,14 +54,20 @@
|
||||
<div class="col-12 col-md-3 calender-options">
|
||||
<h5>{{ $t("Planner_Settings") }}</h5>
|
||||
<b-form>
|
||||
<b-form-group id="UomInput" :label="$t('Period')" :description="$t('Plan_Period_To_Show')" label-for="UomInput">
|
||||
<b-form-select id="UomInput" v-model="settings.displayPeriodUom" :options="options.displayPeriodUom"></b-form-select>
|
||||
<b-form-group id="UomInput" :label="$t('Period')" :description="$t('Plan_Period_To_Show')"
|
||||
label-for="UomInput">
|
||||
<b-form-select id="UomInput" v-model="settings.displayPeriodUom"
|
||||
:options="options.displayPeriodUom"></b-form-select>
|
||||
</b-form-group>
|
||||
<b-form-group id="PeriodInput" :label="$t('Periods')" :description="$t('Plan_Show_How_Many_Periods')" label-for="PeriodInput">
|
||||
<b-form-select id="PeriodInput" v-model="settings.displayPeriodCount" :options="options.displayPeriodCount"></b-form-select>
|
||||
<b-form-group id="PeriodInput" :label="$t('Periods')"
|
||||
:description="$t('Plan_Show_How_Many_Periods')" label-for="PeriodInput">
|
||||
<b-form-select id="PeriodInput" v-model="settings.displayPeriodCount"
|
||||
:options="options.displayPeriodCount"></b-form-select>
|
||||
</b-form-group>
|
||||
<b-form-group id="DaysInput" :label="$t('Starting_Day')" :description="$t('Starting_Day')" label-for="DaysInput">
|
||||
<b-form-select id="DaysInput" v-model="settings.startingDayOfWeek" :options="dayNames"></b-form-select>
|
||||
<b-form-group id="DaysInput" :label="$t('Starting_Day')" :description="$t('Starting_Day')"
|
||||
label-for="DaysInput">
|
||||
<b-form-select id="DaysInput" v-model="settings.startingDayOfWeek"
|
||||
:options="dayNames"></b-form-select>
|
||||
</b-form-group>
|
||||
<b-form-group id="WeekNumInput" :label="$t('Week_Numbers')">
|
||||
<b-form-checkbox v-model="settings.displayWeekNumbers" name="week_num">
|
||||
@@ -73,19 +79,25 @@
|
||||
<div class="col-12 col-md-9 col-lg-6">
|
||||
<h5>{{ $t("Meal_Types") }}</h5>
|
||||
<div>
|
||||
<draggable :list="meal_types" group="meal_types" :empty-insert-threshold="10" @sort="sortMealTypes()" ghost-class="ghost">
|
||||
<b-card no-body class="mt-1 list-group-item p-2" style="cursor: move" v-for="(meal_type, index) in meal_types" v-hover :key="meal_type.id">
|
||||
<draggable :list="meal_types" group="meal_types" :empty-insert-threshold="10"
|
||||
@sort="sortMealTypes()" ghost-class="ghost">
|
||||
<b-card no-body class="mt-1 list-group-item p-2" style="cursor: move"
|
||||
v-for="(meal_type, index) in meal_types" v-hover :key="meal_type.id">
|
||||
<b-card-header class="p-2 border-0">
|
||||
<div class="row">
|
||||
<div class="col-2">
|
||||
<button type="button" class="btn btn-lg shadow-none"><i class="fas fa-arrows-alt-v"></i></button>
|
||||
<button type="button" class="btn btn-lg shadow-none"><i
|
||||
class="fas fa-arrows-alt-v"></i></button>
|
||||
</div>
|
||||
<div class="col-10">
|
||||
<h5 class="mt-1 mb-1">
|
||||
{{ meal_type.icon }} {{ meal_type.name
|
||||
{{ meal_type.icon }} {{
|
||||
meal_type.name
|
||||
}}<span class="float-right text-primary" style="cursor: pointer"
|
||||
><i class="fa" v-bind:class="{ 'fa-pen': !meal_type.editing, 'fa-save': meal_type.editing }" @click="editOrSaveMealType(index)" aria-hidden="true"></i
|
||||
></span>
|
||||
><i class="fa"
|
||||
v-bind:class="{ 'fa-pen': !meal_type.editing, 'fa-save': meal_type.editing }"
|
||||
@click="editOrSaveMealType(index)" aria-hidden="true"></i
|
||||
></span>
|
||||
</h5>
|
||||
</div>
|
||||
</div>
|
||||
@@ -93,19 +105,27 @@
|
||||
<b-card-body class="p-4" v-if="meal_type.editing">
|
||||
<div class="form-group">
|
||||
<label>{{ $t("Name") }}</label>
|
||||
<input class="form-control" :placeholder="$t('Name')" v-model="meal_type.name" />
|
||||
<input class="form-control" :placeholder="$t('Name')"
|
||||
v-model="meal_type.name"/>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<emoji-input :field="'icon'" :label="$t('Icon')" :value="meal_type.icon"></emoji-input>
|
||||
<emoji-input :field="'icon'" :label="$t('Icon')"
|
||||
:value="meal_type.icon"></emoji-input>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>{{ $t("Color") }}</label>
|
||||
<input class="form-control" type="color" name="Name" :value="meal_type.color" @change="meal_type.color = $event.target.value" />
|
||||
<input class="form-control" type="color" name="Name"
|
||||
:value="meal_type.color"
|
||||
@change="meal_type.color = $event.target.value"/>
|
||||
</div>
|
||||
<b-form-checkbox id="checkbox-1" v-model="meal_type.default" name="default_checkbox" class="mb-2">
|
||||
<b-form-checkbox id="checkbox-1" v-model="meal_type.default"
|
||||
name="default_checkbox" class="mb-2">
|
||||
{{ $t("Default") }}
|
||||
</b-form-checkbox>
|
||||
<button class="btn btn-danger" @click="deleteMealType(index)">{{ $t("Delete") }}</button>
|
||||
<button class="btn btn-danger" @click="deleteMealType(index)">{{
|
||||
$t("Delete")
|
||||
}}
|
||||
</button>
|
||||
<button class="btn btn-primary float-right" @click="editOrSaveMealType(index)">
|
||||
{{ $t("Save") }}
|
||||
</button>
|
||||
@@ -129,7 +149,9 @@
|
||||
openEntryEdit(contextData.originalItem.entry)
|
||||
"
|
||||
>
|
||||
<a class="dropdown-item p-2" href="javascript:void(0)"><i class="fas fa-pen"></i> {{ $t("Edit") }}</a>
|
||||
<a class="dropdown-item p-2" href="javascript:void(0)"><i class="fas fa-pen"></i> {{
|
||||
$t("Edit")
|
||||
}}</a>
|
||||
</ContextMenuItem>
|
||||
<ContextMenuItem
|
||||
v-if="contextData && contextData.originalItem && contextData.originalItem.entry.recipe != null"
|
||||
@@ -138,7 +160,8 @@
|
||||
openRecipe(contextData.originalItem.entry.recipe)
|
||||
"
|
||||
>
|
||||
<a class="dropdown-item p-2" href="javascript:void(0)"><i class="fas fa-pizza-slice"></i> {{ $t("Recipe") }}</a>
|
||||
<a class="dropdown-item p-2" href="javascript:void(0)"><i class="fas fa-pizza-slice"></i>
|
||||
{{ $t("Recipe") }}</a>
|
||||
</ContextMenuItem>
|
||||
<ContextMenuItem
|
||||
@click="
|
||||
@@ -146,7 +169,8 @@
|
||||
moveEntryLeft(contextData)
|
||||
"
|
||||
>
|
||||
<a class="dropdown-item p-2" href="javascript:void(0)"><i class="fas fa-arrow-left"></i> {{ $t("Move") }}</a>
|
||||
<a class="dropdown-item p-2" href="javascript:void(0)"><i class="fas fa-arrow-left"></i>
|
||||
{{ $t("Move") }}</a>
|
||||
</ContextMenuItem>
|
||||
<ContextMenuItem
|
||||
@click="
|
||||
@@ -154,7 +178,8 @@
|
||||
moveEntryRight(contextData)
|
||||
"
|
||||
>
|
||||
<a class="dropdown-item p-2" href="javascript:void(0)"><i class="fas fa-arrow-right"></i> {{ $t("Move") }}</a>
|
||||
<a class="dropdown-item p-2" href="javascript:void(0)"><i class="fas fa-arrow-right"></i>
|
||||
{{ $t("Move") }}</a>
|
||||
</ContextMenuItem>
|
||||
<ContextMenuItem
|
||||
@click="
|
||||
@@ -164,21 +189,14 @@
|
||||
>
|
||||
<a class="dropdown-item p-2" href="javascript:void(0)"><i class="fas fa-copy"></i> {{ $t("Clone") }}</a>
|
||||
</ContextMenuItem>
|
||||
<ContextMenuItem
|
||||
@click="
|
||||
$refs.menu.close()
|
||||
addToShopping(contextData)
|
||||
"
|
||||
>
|
||||
<a class="dropdown-item p-2" href="javascript:void(0)"><i class="fas fa-shopping-cart"></i> {{ $t("Add_to_Shopping") }}</a>
|
||||
</ContextMenuItem>
|
||||
<ContextMenuItem
|
||||
@click="
|
||||
$refs.menu.close()
|
||||
deleteEntry(contextData)
|
||||
"
|
||||
>
|
||||
<a class="dropdown-item p-2 text-danger" href="javascript:void(0)"><i class="fas fa-trash"></i> {{ $t("Delete") }}</a>
|
||||
<a class="dropdown-item p-2 text-danger" href="javascript:void(0)"><i class="fas fa-trash"></i>
|
||||
{{ $t("Delete") }}</a>
|
||||
</ContextMenuItem>
|
||||
</template>
|
||||
</ContextMenu>
|
||||
@@ -190,68 +208,43 @@
|
||||
@delete-entry="deleteEntry"
|
||||
@reload-meal-types="refreshMealTypes"
|
||||
></meal-plan-edit-modal>
|
||||
<template>
|
||||
<div>
|
||||
<b-sidebar id="sidebar-shopping" :title="$t('Shopping_list')" backdrop right shadow="sm">
|
||||
<div class="row p-1 no-gutters">
|
||||
<div class="col-12 mt-1" v-if="shopping_list.length === 0">
|
||||
<p class="p-3">{{ $t("Shopping_List_Empty") }}</p>
|
||||
</div>
|
||||
<div class="col-12 mt-1" v-for="entry in shopping_list" v-bind:key="entry.id">
|
||||
<b-card :header="`${entry.meal_type.icon} ${entry.recipe_name}`" no-body>
|
||||
<template #footer>
|
||||
<small class="text-muted">{{ `${$t("Servings")}: ${entry.servings}` }}</small>
|
||||
</template>
|
||||
</b-card>
|
||||
</div>
|
||||
<div class="col-12 mt-1" v-if="shopping_list.length > 0">
|
||||
<b-button-group>
|
||||
<b-button variant="success" @click="saveShoppingList"
|
||||
><i class="fas fa-external-link-alt"></i>
|
||||
{{ $t("Open") }}
|
||||
</b-button>
|
||||
<b-button variant="danger" @click="shopping_list = []"
|
||||
><i class="fa fa-trash"></i>
|
||||
{{ $t("Clear") }}
|
||||
</b-button>
|
||||
</b-button-group>
|
||||
</div>
|
||||
</div>
|
||||
</b-sidebar>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<transition name="slide-fade">
|
||||
<div class="row fixed-bottom p-2 b-1 border-top text-center" style="background: rgba(255, 255, 255, 0.6)" v-if="current_tab === 0">
|
||||
<div class="row fixed-bottom p-2 b-1 border-top text-center" style="background: rgba(255, 255, 255, 0.6)"
|
||||
v-if="current_tab === 0">
|
||||
<div class="col-md-3 col-6">
|
||||
<button class="btn btn-block btn-success shadow-none" @click="createEntryClick(new Date())"><i class="fas fa-calendar-plus"></i> {{ $t("Create") }}</button>
|
||||
</div>
|
||||
<div class="col-md-3 col-6">
|
||||
<button class="btn btn-block btn-primary shadow-none" v-b-toggle.sidebar-shopping><i class="fas fa-shopping-cart"></i> {{ $t("Shopping_list") }}</button>
|
||||
<button class="btn btn-block btn-success shadow-none" @click="createEntryClick(new Date())"><i
|
||||
class="fas fa-calendar-plus"></i> {{ $t("Create") }}
|
||||
</button>
|
||||
</div>
|
||||
<div class="col-md-3 col-6">
|
||||
<a class="btn btn-block btn-primary shadow-none" :href="iCalUrl"
|
||||
><i class="fas fa-download"></i>
|
||||
><i class="fas fa-download"></i>
|
||||
{{ $t("Export_To_ICal") }}
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-md-3 col-6">
|
||||
<button class="btn btn-block btn-primary shadow-none disabled" v-b-tooltip.focus.top :title="$t('Coming_Soon')">
|
||||
<button class="btn btn-block btn-primary shadow-none disabled" v-b-tooltip.focus.top
|
||||
:title="$t('Coming_Soon')">
|
||||
{{ $t("Auto_Planner") }}
|
||||
</button>
|
||||
</div>
|
||||
<div class="col-12 d-flex justify-content-center mt-2 d-block d-md-none">
|
||||
<b-button-toolbar key-nav aria-label="Toolbar with button groups">
|
||||
<b-button-group class="mx-1">
|
||||
<b-button v-html="'<<'" @click="setShowDate($refs.header.headerProps.previousPeriod)"></b-button>
|
||||
<b-button v-html="'<'" @click="setStartingDay(-1)"></b-button>
|
||||
<b-button v-html="'<<'" class="p-2 pr-3 pl-3"
|
||||
@click="setShowDate($refs.header.headerProps.previousPeriod)"></b-button>
|
||||
<b-button v-html="'<'" @click="setStartingDay(-1)" class="p-2 pr-3 pl-3"></b-button>
|
||||
</b-button-group>
|
||||
<b-button-group class="mx-1">
|
||||
<b-button @click="setShowDate($refs.header.headerProps.currentPeriod)"><i class="fas fa-home"></i></b-button>
|
||||
<b-button @click="setShowDate($refs.header.headerProps.currentPeriod)"><i
|
||||
class="fas fa-home"></i></b-button>
|
||||
<b-form-datepicker button-only button-variant="secondary"></b-form-datepicker>
|
||||
</b-button-group>
|
||||
<b-button-group class="mx-1">
|
||||
<b-button v-html="'>'" @click="setStartingDay(1)"></b-button>
|
||||
<b-button v-html="'>>'" @click="setShowDate($refs.header.headerProps.nextPeriod)"></b-button>
|
||||
<b-button v-html="'>'" @click="setStartingDay(1)" class="p-2 pr-3 pl-3"></b-button>
|
||||
<b-button v-html="'>>'" class="p-2 pr-3 pl-3"
|
||||
@click="setShowDate($refs.header.headerProps.nextPeriod)"></b-button>
|
||||
</b-button-group>
|
||||
</b-button-toolbar>
|
||||
</div>
|
||||
@@ -262,7 +255,7 @@
|
||||
|
||||
<script>
|
||||
import Vue from "vue"
|
||||
import { BootstrapVue } from "bootstrap-vue"
|
||||
import {BootstrapVue} from "bootstrap-vue"
|
||||
import "bootstrap-vue/dist/bootstrap-vue.css"
|
||||
|
||||
import ContextMenu from "@/components/ContextMenu/ContextMenu"
|
||||
@@ -276,11 +269,11 @@ import moment from "moment"
|
||||
import draggable from "vuedraggable"
|
||||
import VueCookies from "vue-cookies"
|
||||
|
||||
import { ApiMixin, StandardToasts, ResolveUrlMixin } from "@/utils/utils"
|
||||
import { CalendarView, CalendarMathMixin } from "vue-simple-calendar/src/components/bundle"
|
||||
import { ApiApiFactory } from "@/utils/openapi/api"
|
||||
import {ApiMixin, StandardToasts, ResolveUrlMixin} from "@/utils/utils"
|
||||
import {CalendarView, CalendarMathMixin} from "vue-simple-calendar/src/components/bundle"
|
||||
import {ApiApiFactory} from "@/utils/openapi/api"
|
||||
|
||||
const { makeToast } = require("@/utils/utils")
|
||||
const {makeToast} = require("@/utils/utils")
|
||||
|
||||
Vue.prototype.moment = moment
|
||||
Vue.use(BootstrapVue)
|
||||
@@ -318,12 +311,12 @@ export default {
|
||||
current_context_menu_item: null,
|
||||
options: {
|
||||
displayPeriodUom: [
|
||||
{ text: this.$t("Week"), value: "week" },
|
||||
{text: this.$t("Week"), value: "week"},
|
||||
{
|
||||
text: this.$t("Month"),
|
||||
value: "month",
|
||||
},
|
||||
{ text: this.$t("Year"), value: "year" },
|
||||
{text: this.$t("Year"), value: "year"},
|
||||
],
|
||||
displayPeriodCount: [1, 2, 3],
|
||||
entryEditing: {
|
||||
@@ -367,7 +360,7 @@ export default {
|
||||
dayNames: function () {
|
||||
let options = []
|
||||
this.getFormattedWeekdayNames(this.userLocale, "long", 0).forEach((day, index) => {
|
||||
options.push({ text: day, value: index })
|
||||
options.push({text: day, value: index})
|
||||
})
|
||||
return options
|
||||
},
|
||||
@@ -412,27 +405,6 @@ export default {
|
||||
openRecipe: function (recipe) {
|
||||
window.open(this.resolveDjangoUrl("view_recipe", recipe.id))
|
||||
},
|
||||
addToShopping(entry) {
|
||||
if (entry.originalItem.entry.recipe !== null) {
|
||||
this.shopping_list.push(entry.originalItem.entry)
|
||||
makeToast(this.$t("Success"), this.$t("Added_To_Shopping_List"), "success")
|
||||
} else {
|
||||
makeToast(this.$t("Failure"), this.$t("Cannot_Add_Notes_To_Shopping"), "danger")
|
||||
}
|
||||
},
|
||||
saveShoppingList() {
|
||||
let url = window.SHOPPING_URL
|
||||
let first = true
|
||||
for (let se of this.shopping_list) {
|
||||
if (first) {
|
||||
url += `?r=[${se.recipe.id},${se.servings}]`
|
||||
first = false
|
||||
} else {
|
||||
url += `&r=[${se.recipe.id},${se.servings}]`
|
||||
}
|
||||
}
|
||||
window.open(url)
|
||||
},
|
||||
setStartingDay(days) {
|
||||
if (this.settings.startingDayOfWeek + days < 0) {
|
||||
this.settings.startingDayOfWeek = 6
|
||||
@@ -446,12 +418,12 @@ export default {
|
||||
let apiClient = new ApiApiFactory()
|
||||
|
||||
apiClient
|
||||
.createMealType({ name: this.$t("Meal_Type") })
|
||||
.createMealType({name: this.$t("Meal_Type")})
|
||||
.then((e) => {
|
||||
this.periodChangedCallback(this.current_period)
|
||||
})
|
||||
.catch((err) => {
|
||||
StandardToasts.makeStandardToast(this,StandardToasts.FAIL_UPDATE, err)
|
||||
StandardToasts.makeStandardToast(this, StandardToasts.FAIL_UPDATE, err)
|
||||
})
|
||||
|
||||
this.refreshMealTypes()
|
||||
@@ -474,7 +446,7 @@ export default {
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
StandardToasts.makeStandardToast(this,StandardToasts.FAIL_UPDATE, err)
|
||||
StandardToasts.makeStandardToast(this, StandardToasts.FAIL_UPDATE, err)
|
||||
})
|
||||
})
|
||||
},
|
||||
@@ -488,10 +460,10 @@ export default {
|
||||
.updateMealType(this.meal_types[index].id, this.meal_types[index])
|
||||
.then((e) => {
|
||||
this.periodChangedCallback(this.current_period)
|
||||
StandardToasts.makeStandardToast(this,StandardToasts.SUCCESS_UPDATE)
|
||||
StandardToasts.makeStandardToast(this, StandardToasts.SUCCESS_UPDATE)
|
||||
})
|
||||
.catch((err) => {
|
||||
StandardToasts.makeStandardToast(this,StandardToasts.FAIL_UPDATE, err)
|
||||
StandardToasts.makeStandardToast(this, StandardToasts.FAIL_UPDATE, err)
|
||||
})
|
||||
} else {
|
||||
this.$set(this.meal_types[index], "editing", true)
|
||||
@@ -504,10 +476,10 @@ export default {
|
||||
.destroyMealType(this.meal_types[index].id)
|
||||
.then((e) => {
|
||||
this.periodChangedCallback(this.current_period)
|
||||
StandardToasts.makeStandardToast(this,StandardToasts.SUCCESS_DELETE)
|
||||
StandardToasts.makeStandardToast(this, StandardToasts.SUCCESS_DELETE)
|
||||
})
|
||||
.catch((err) => {
|
||||
StandardToasts.makeStandardToast(this,StandardToasts.FAIL_DELETE, err)
|
||||
StandardToasts.makeStandardToast(this, StandardToasts.FAIL_DELETE, err)
|
||||
})
|
||||
},
|
||||
updateEmoji: function (field, value) {
|
||||
@@ -583,7 +555,7 @@ export default {
|
||||
list.splice(index, 1)
|
||||
})
|
||||
.catch((err) => {
|
||||
StandardToasts.makeStandardToast(this,StandardToasts.FAIL_UPDATE, err)
|
||||
StandardToasts.makeStandardToast(this, StandardToasts.FAIL_UPDATE, err)
|
||||
})
|
||||
}
|
||||
})
|
||||
@@ -635,7 +607,7 @@ export default {
|
||||
let apiClient = new ApiApiFactory()
|
||||
|
||||
apiClient.updateMealPlan(entry.id, entry).catch((err) => {
|
||||
StandardToasts.makeStandardToast(this,StandardToasts.FAIL_UPDATE, err)
|
||||
StandardToasts.makeStandardToast(this, StandardToasts.FAIL_UPDATE, err)
|
||||
})
|
||||
},
|
||||
createEntry(entry) {
|
||||
@@ -646,7 +618,7 @@ export default {
|
||||
apiClient
|
||||
.createMealPlan(entry)
|
||||
.catch((err) => {
|
||||
StandardToasts.makeStandardToast(this,StandardToasts.FAIL_UPDATE, err)
|
||||
StandardToasts.makeStandardToast(this, StandardToasts.FAIL_UPDATE, err)
|
||||
})
|
||||
.then((entry_result) => {
|
||||
this.plan_entries.push(entry_result.data)
|
||||
@@ -694,7 +666,7 @@ export default {
|
||||
}
|
||||
|
||||
.calender-row {
|
||||
height: calc(100% - 240px);
|
||||
height: calc(100vh - 240px);
|
||||
}
|
||||
|
||||
.calender-parent {
|
||||
|
||||
@@ -370,7 +370,7 @@
|
||||
<div v-for="(ingredient, index) in step.ingredients"
|
||||
:key="ingredient.id">
|
||||
<hr class="d-md-none"/>
|
||||
<div class="text-center">
|
||||
<div class="text-center" v-if="ingredient.original_text !== null">
|
||||
<small class="text-muted"><i class="fas fa-globe"></i>
|
||||
{{ ingredient.original_text }}</small>
|
||||
</div>
|
||||
@@ -943,6 +943,7 @@ export default {
|
||||
order: 0,
|
||||
is_header: false,
|
||||
no_amount: false,
|
||||
original_text: null,
|
||||
})
|
||||
this.sortIngredients(step)
|
||||
this.$nextTick(() => document.getElementById(`amount_${this.recipe.steps.indexOf(step)}_${step.ingredients.length - 1}`).select())
|
||||
@@ -1029,11 +1030,11 @@ export default {
|
||||
.listUnits(query, 1, this.options_limit)
|
||||
.then((response) => {
|
||||
this.units = response.data.results
|
||||
|
||||
let unique_units = this.units.map(u => u.name)
|
||||
if (this.recipe !== undefined) {
|
||||
for (let s of this.recipe.steps) {
|
||||
for (let i of s.ingredients) {
|
||||
if (i.unit !== null && i.unit.id === undefined) {
|
||||
if (i.unit !== null && i.unit.id === undefined && !unique_units.includes(i.unit.name) ) {
|
||||
this.units.push(i.unit)
|
||||
}
|
||||
}
|
||||
@@ -1053,11 +1054,11 @@ export default {
|
||||
.listFoods(query, undefined, undefined, 1, this.options_limit)
|
||||
.then((response) => {
|
||||
this.foods = response.data.results
|
||||
|
||||
let unique_foods = this.foods.map(f => f.name)
|
||||
if (this.recipe !== undefined) {
|
||||
for (let s of this.recipe.steps) {
|
||||
for (let i of s.ingredients) {
|
||||
if (i.food !== null && i.food.id === undefined) {
|
||||
if (i.food !== null && i.food.id === undefined && !unique_foods.includes(i.food.name)) {
|
||||
this.foods.push(i.food)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -234,7 +234,7 @@
|
||||
</thead>
|
||||
<tr v-for="r in Recipes" :key="r.list_recipe">
|
||||
<td>{{ r.recipe_mealplan.name }}</td>
|
||||
<td>{{ r.recipe_mealplan.recipe_name }}</td>
|
||||
<td><a :href="resolveDjangoUrl('view_recipe', r.recipe_mealplan.recipe)">{{ r.recipe_mealplan.recipe_name }}</a></td>
|
||||
<td class="block-inline">
|
||||
<b-form-input min="1" type="number" :debounce="300"
|
||||
:value="r.recipe_mealplan.servings"
|
||||
@@ -648,7 +648,7 @@
|
||||
<div class="col-6">
|
||||
<a class="btn btn-block btn-success shadow-none" @click="entrymode = !entrymode; "
|
||||
><i class="fas fa-cart-plus"></i>
|
||||
{{ $t("New Entry") }}
|
||||
{{ $t("New_Entry") }}
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
@@ -781,7 +781,7 @@ import GenericMultiselect from "@/components/GenericMultiselect"
|
||||
import LookupInput from "@/components/Modals/LookupInput"
|
||||
import ShoppingModal from "@/components/Modals/ShoppingModal"
|
||||
|
||||
import {ApiMixin, getUserPreference, StandardToasts, makeToast} from "@/utils/utils"
|
||||
import {ApiMixin, getUserPreference, StandardToasts, makeToast, ResolveUrlMixin} from "@/utils/utils"
|
||||
import {ApiApiFactory} from "@/utils/openapi/api"
|
||||
|
||||
Vue.use(BootstrapVue)
|
||||
@@ -790,7 +790,7 @@ let SETTINGS_COOKIE_NAME = "shopping_settings"
|
||||
|
||||
export default {
|
||||
name: "ShoppingListView",
|
||||
mixins: [ApiMixin],
|
||||
mixins: [ApiMixin,ResolveUrlMixin],
|
||||
components: {
|
||||
ContextMenu,
|
||||
ContextMenuItem,
|
||||
@@ -1756,7 +1756,7 @@ export default {
|
||||
flex-grow: 1;
|
||||
overflow-y: scroll;
|
||||
overflow-x: hidden;
|
||||
height: calc(100% - 170px);
|
||||
height: calc(100vh - 170px);
|
||||
}
|
||||
|
||||
#id_base_container {
|
||||
@@ -1764,6 +1764,10 @@ export default {
|
||||
padding-left: 5px;
|
||||
}
|
||||
|
||||
input {
|
||||
font-size: 16px !important;
|
||||
}
|
||||
|
||||
@media (max-width: 991.9px) {
|
||||
#shoppinglist {
|
||||
max-width: none;
|
||||
|
||||
414
vue/src/locales/bg.json
Normal file
414
vue/src/locales/bg.json
Normal file
@@ -0,0 +1,414 @@
|
||||
{
|
||||
"warning_feature_beta": "Тази функция в момента е в състояние на БЕТА (тестване). Моля, очаквайте грешки и евентуално нарушаващи промени в бъдеще (евентуално загуба на данни, свързани с функции), когато използвате тази функция.",
|
||||
"err_fetching_resource": "Възникна грешка при извличането на ресурс!",
|
||||
"err_creating_resource": "Възникна грешка при създаването на ресурс!",
|
||||
"err_updating_resource": "Възникна грешка при актуализирането на ресурс!",
|
||||
"err_deleting_resource": "Възникна грешка при изтриването на ресурс!",
|
||||
"err_deleting_protected_resource": "Обектът, който се опитвате да изтриете, все още се използва и не може да бъде изтрит.",
|
||||
"err_moving_resource": "Възникна грешка при преместването на ресурс!",
|
||||
"err_merging_resource": "Възникна грешка при обединяването на ресурс!",
|
||||
"success_fetching_resource": "Ресурсът бе извлечен успешно!",
|
||||
"success_creating_resource": "Успешно създаден ресурс!",
|
||||
"success_updating_resource": "Успешно актуализиран ресурс!",
|
||||
"success_deleting_resource": "Успешно изтрит ресурс!",
|
||||
"success_moving_resource": "Успешно преместен ресурс!",
|
||||
"success_merging_resource": "Успешно обединен ресурс!",
|
||||
"file_upload_disabled": "Качването на файлове не е активирано за вашето пространство.",
|
||||
"step_time_minutes": "Време за стъпка в минути",
|
||||
"confirm_delete": "Наистина ли искате да изтриете този {object}?",
|
||||
"import_running": "Импортирането се изпълнява, моля, изчакайте!",
|
||||
"all_fields_optional": "Всички полета са незадължителни и могат да бъдат оставени празни.",
|
||||
"convert_internal": "Превърнете във вътрешна рецепта",
|
||||
"show_only_internal": "Показване само на вътрешни рецепти",
|
||||
"show_split_screen": "Разделен изглед",
|
||||
"Log_Recipe_Cooking": "Дневник на Рецепта за готвене",
|
||||
"External_Recipe_Image": "Външно изображение на рецептата",
|
||||
"Add_to_Shopping": "Добавяне към пазаруване",
|
||||
"Add_to_Plan": "Добавяне към плана",
|
||||
"Step_start_time": "Стъпка Начално време",
|
||||
"Sort_by_new": "Сортиране по ново",
|
||||
"Table_of_Contents": "Съдържание",
|
||||
"Recipes_per_page": "Рецепти на страница",
|
||||
"Show_as_header": "Показване като заглавка",
|
||||
"Hide_as_header": "Скриване като заглавка",
|
||||
"Add_nutrition_recipe": "Добавете хранителни стойности към рецептата",
|
||||
"Remove_nutrition_recipe": "Изтрийте хранителните стойности от рецептата",
|
||||
"Copy_template_reference": "Копирайте препратка към шаблона",
|
||||
"Save_and_View": "Запазете и прегледайте",
|
||||
"Manage_Books": "Управление на Книги",
|
||||
"Meal_Plan": "План на хранене",
|
||||
"Select_Book": "Изберете Книга",
|
||||
"Select_File": "Избери файл",
|
||||
"Recipe_Image": "Изображение на рецептата",
|
||||
"Import_finished": "Импортирането приключи",
|
||||
"View_Recipes": "Вижте рецепти",
|
||||
"Log_Cooking": "Дневник на Готвене",
|
||||
"New_Recipe": "Нова рецепта",
|
||||
"Url_Import": "Импортиране на URL адрес",
|
||||
"Reset_Search": "Нулиране на търсенето",
|
||||
"Recently_Viewed": "Наскоро разгледани",
|
||||
"Load_More": "Зареди още",
|
||||
"New_Keyword": "Нова ключова дума",
|
||||
"Delete_Keyword": "Изтриване на ключова дума",
|
||||
"Edit_Keyword": "Редактиране на ключова дума",
|
||||
"Edit_Recipe": "Редактиране на рецепта",
|
||||
"Move_Keyword": "Преместване на ключова дума",
|
||||
"Merge_Keyword": "Обединяване на ключова дума",
|
||||
"Hide_Keywords": "Скриване на ключова дума",
|
||||
"Hide_Recipes": "Скриване на рецепти",
|
||||
"Move_Up": "Премести нагоре",
|
||||
"Move_Down": "Премести надолу",
|
||||
"Step_Name": "Стъпка Име",
|
||||
"Step_Type": "Стъпка Тип",
|
||||
"Make_Header": "Направете заглавие",
|
||||
"Make_Ingredient": "Направете съставка",
|
||||
"Enable_Amount": "Активиране на сумата",
|
||||
"Disable_Amount": "Деактивиране на сумата",
|
||||
"Ingredient Editor": "Редактор на съставки",
|
||||
"Add_Step": "Добавяне Стъпка",
|
||||
"Keywords": "Ключови думи",
|
||||
"Books": "Книги",
|
||||
"Proteins": "Протеини (белтъчини)",
|
||||
"Fats": "Мазнини",
|
||||
"Carbohydrates": "Въглехидрати",
|
||||
"Calories": "Калории",
|
||||
"Energy": "Енергия",
|
||||
"Nutrition": "Хранителни стойности",
|
||||
"Date": "Дата",
|
||||
"Share": "Споделяне",
|
||||
"Automation": "Автоматизация",
|
||||
"Parameter": "Параметър",
|
||||
"Export": "Експортиране",
|
||||
"Copy": "Копиране",
|
||||
"Rating": "Рейтинг",
|
||||
"Close": "Затвори",
|
||||
"Cancel": "Откажи",
|
||||
"Link": "Връзка",
|
||||
"Add": "Добави",
|
||||
"New": "Нов",
|
||||
"Note": "Бележка",
|
||||
"Success": "Успешно",
|
||||
"Failure": "Неуспешно",
|
||||
"Protected": "Защитен",
|
||||
"Ingredients": "Съставки",
|
||||
"Supermarket": "Супермаркет",
|
||||
"Categories": "Категории",
|
||||
"Category": "Категория",
|
||||
"Selected": "Избрано",
|
||||
"min": "мин",
|
||||
"Servings": "Порции",
|
||||
"Waiting": "Очакване",
|
||||
"Preparation": "Подготовка",
|
||||
"External": "Външен",
|
||||
"Size": "Размер",
|
||||
"Files": "Файлове",
|
||||
"File": "Файл",
|
||||
"Edit": "Редактиране",
|
||||
"Image": "Изображение",
|
||||
"Delete": "Изтрий",
|
||||
"Open": "Отвори",
|
||||
"Ok": "Отвори",
|
||||
"Save": "Запази",
|
||||
"Step": "Стъпка",
|
||||
"Search": "Търсене",
|
||||
"Import": "Импортиране",
|
||||
"Print": "Печат",
|
||||
"Settings": "Настройки",
|
||||
"or": "или",
|
||||
"and": "и",
|
||||
"Information": "Информация",
|
||||
"Download": "Изтегляне",
|
||||
"Create": "Създаване",
|
||||
"Search Settings": "Настройки търсене",
|
||||
"View": "Изглед",
|
||||
"Recipes": "Рецепти",
|
||||
"Move": "Премести",
|
||||
"Merge": "Обединяване",
|
||||
"Parent": "Родител",
|
||||
"delete_confirmation": "Сигурни ли сте, че искате да изтриете {source}?",
|
||||
"move_confirmation": "Преместване на <i>{child}</i> към родител <i>{parent}</i>",
|
||||
"merge_confirmation": "Заменете <i>{source}</i> с <i>{target}</i>",
|
||||
"create_rule": "и създават автоматизация",
|
||||
"move_selection": "Изберете родител {type}, към който да преместите {source}.",
|
||||
"merge_selection": "Заменете всички срещания на {source} с избрания {type}.",
|
||||
"Root": "Корен",
|
||||
"Ignore_Shopping": "Игнорирайте пазаруването",
|
||||
"Shopping_Category": "Категория за пазаруване",
|
||||
"Shopping_Categories": "Категории за пазаруване",
|
||||
"Edit_Food": "Редактиране на храна",
|
||||
"Move_Food": "Преместете храната",
|
||||
"New_Food": "Нова храна",
|
||||
"Hide_Food": "Скриване на храна",
|
||||
"Food_Alias": "Псевдоним на храната",
|
||||
"Unit_Alias": "Псевдоним на единица",
|
||||
"Keyword_Alias": "Псевдоним на ключова дума",
|
||||
"Delete_Food": "Изтриване на храна",
|
||||
"No_ID": "Идентификатора не е намерен, не може да се изтрие.",
|
||||
"Meal_Plan_Days": "Бъдещи планове за хранене",
|
||||
"merge_title": "Обединяване на {type}",
|
||||
"move_title": "Преместване {type}",
|
||||
"Food": "Храна",
|
||||
"Recipe_Book": "Книга с рецепти",
|
||||
"del_confirmation_tree": "Сигурни ли сте, че искате да изтриете {source} и всички негови последователи?",
|
||||
"delete_title": "Изтриване на {type}",
|
||||
"create_title": "Нов {type}",
|
||||
"edit_title": "Редактиране на {type}",
|
||||
"Name": "Име",
|
||||
"Type": "Тип",
|
||||
"Description": "Описание",
|
||||
"Recipe": "Рецепта",
|
||||
"tree_root": "Корен на дървото",
|
||||
"Icon": "Икона",
|
||||
"Unit": "Единица",
|
||||
"No_Results": "Няма резултати",
|
||||
"New_Unit": "Нова единица",
|
||||
"Create_New_Shopping Category": "Създайте нова категория за пазаруване",
|
||||
"Create_New_Food": "Добавете нова храна",
|
||||
"Create_New_Keyword": "Добавяне на нова ключова дума",
|
||||
"Create_New_Unit": "Добавяне на нова единица",
|
||||
"Create_New_Meal_Type": "Добавете нов тип хранене",
|
||||
"and_up": "и нагоре",
|
||||
"and_down": "и надолу",
|
||||
"Instructions": "Инструкции",
|
||||
"Unrated": "Без оценка",
|
||||
"Automate": "Автоматизация",
|
||||
"Empty": "Празно",
|
||||
"Key_Ctrl": "Контрол",
|
||||
"Key_Shift": "Превключване",
|
||||
"Time": "Време",
|
||||
"Text": "Текст",
|
||||
"Shopping_list": "Списък за пазаруване",
|
||||
"Added_by": "Добавено от",
|
||||
"Added_on": "Добавено",
|
||||
"AddToShopping": "Добавяне към списъка за пазаруване",
|
||||
"IngredientInShopping": "Тази съставка е във вашия списък за пазаруване.",
|
||||
"NotInShopping": "{food} не е в списъка ви за пазаруване.",
|
||||
"OnHand": "В момента под ръка",
|
||||
"FoodOnHand": "Имате {храна} под ръка.",
|
||||
"FoodNotOnHand": "Нямате {храна} под ръка.",
|
||||
"Undefined": "Недефиниран",
|
||||
"Create_Meal_Plan_Entry": "Създайте запис за план за хранене",
|
||||
"Edit_Meal_Plan_Entry": "Редактиране на записа в плана за хранене",
|
||||
"Title": "Заглавие",
|
||||
"Week": "Седмица",
|
||||
"Month": "Месец",
|
||||
"Year": "Година",
|
||||
"Planner": "Планировчик",
|
||||
"Planner_Settings": "Настройки на планировчика",
|
||||
"Period": "Период",
|
||||
"Plan_Period_To_Show": "Покажете седмици, месеци или години",
|
||||
"Periods": "Периоди",
|
||||
"Plan_Show_How_Many_Periods": "Колко периода да се показват",
|
||||
"Starting_Day": "Начален ден от седмицата",
|
||||
"Meal_Types": "Видове хранене",
|
||||
"Meal_Type": "Вид хранене",
|
||||
"Clone": "Клониране",
|
||||
"Drag_Here_To_Delete": "Плъзнете тук, за да изтриете",
|
||||
"Meal_Type_Required": "Изисква се вид хранене",
|
||||
"Title_or_Recipe_Required": "Изисква се избор на заглавие или рецепта",
|
||||
"Color": "Цвят",
|
||||
"New_Meal_Type": "Нов вид хранене",
|
||||
"AddFoodToShopping": "Добавете {food} към списъка си за пазаруване",
|
||||
"RemoveFoodFromShopping": "Премахнете {food} от списъка си за пазаруване",
|
||||
"DeleteShoppingConfirm": "Сигурни ли сте, че искате да премахнете цялата {food} от списъка за пазаруване?",
|
||||
"IgnoredFood": "{food} е настроен да игнорира пазаруването.",
|
||||
"Add_Servings_to_Shopping": "Добавете {servings} порции към Пазаруване",
|
||||
"Week_Numbers": "Номера на седмиците",
|
||||
"Show_Week_Numbers": "Показване на номерата на седмиците?",
|
||||
"Export_As_ICal": "Експортирайте текущия период във формат iCal",
|
||||
"Export_To_ICal": "Експортиране на .ics",
|
||||
"Cannot_Add_Notes_To_Shopping": "Бележки не могат да се добавят към списъка за пазаруване",
|
||||
"Added_To_Shopping_List": "Добавено към списъка за пазаруване",
|
||||
"Shopping_List_Empty": "Вашият списък за пазаруване в момента е празен, можете да добавяте артикули чрез контекстното меню на запис на план за хранене (щракнете с десния бутон върху картата или щракнете с левия бутон върху иконата на менюто)",
|
||||
"Next_Period": "Следващ период",
|
||||
"Previous_Period": "Предишен период",
|
||||
"Current_Period": "Текущ период",
|
||||
"Next_Day": "Следващия ден",
|
||||
"Previous_Day": "Предишен ден",
|
||||
"Inherit": "Наследете",
|
||||
"InheritFields": "Наследяване на стойности на полета",
|
||||
"FoodInherit": "Хранителни наследствени полета",
|
||||
"ShowUncategorizedFood": "Покажи неопределено",
|
||||
"GroupBy": "Групирай по",
|
||||
"SupermarketCategoriesOnly": "Само категории супермаркети",
|
||||
"MoveCategory": "Премести към: ",
|
||||
"CountMore": "...+{count} още",
|
||||
"IgnoreThis": "Никога не добавяйте автоматично {food} към пазаруване",
|
||||
"DelayFor": "Закъснение за {hours} часа",
|
||||
"Warning": "Внимание",
|
||||
"NoCategory": "Няма избрана категория.",
|
||||
"InheritWarning": "{food} е настроен да наследява, промените може да не продължат.",
|
||||
"ShowDelayed": "Показване на забавени артикули",
|
||||
"Completed": "Завършено",
|
||||
"OfflineAlert": "Вие сте офлайн, списъкът за пазаруване може да не се синхронизира.",
|
||||
"shopping_share": "Споделете списък за пазаруване",
|
||||
"shopping_auto_sync": "Автоматично синхронизиране",
|
||||
"one_url_per_line": "Един URL на ред",
|
||||
"mealplan_autoadd_shopping": "Автоматично добавяне на план за хранене",
|
||||
"mealplan_autoexclude_onhand": "Изключете храната под ръка",
|
||||
"mealplan_autoinclude_related": "Добавете свързани рецепти",
|
||||
"default_delay": "Часове на забавяне по подразбиране",
|
||||
"shopping_share_desc": "Потребителите ще видят всички артикули, които добавите към списъка си за пазаруване. Те трябва да ви добавят, за да видят елементите в техния списък.",
|
||||
"shopping_auto_sync_desc": "Задаването на 0 ще деактивира автоматичното синхронизиране. Когато разглеждате списък за пазаруване, списъкът се актуализира на всеки зададени секунди, за да синхронизира промените, които някой друг може да е направил. Полезно при пазаруване с множество хора, но ще използва мобилни данни.",
|
||||
"mealplan_autoadd_shopping_desc": "Автоматично добавяне на съставки за план за хранене към списъка за пазаруване.",
|
||||
"mealplan_autoexclude_onhand_desc": "Когато добавяте план за хранене към списъка за пазаруване (ръчно или автоматично), изключете съставките, които в момента са под ръка.",
|
||||
"mealplan_autoinclude_related_desc": "Когато добавяте план за хранене към списъка за пазаруване (ръчно или автоматично), включете всички свързани рецепти.",
|
||||
"default_delay_desc": "Брой часове по подразбиране за забавяне на записа в списъка за пазаруване.",
|
||||
"filter_to_supermarket": "Филтрирайте до супермаркет",
|
||||
"Coming_Soon": "Очаквайте скоро",
|
||||
"Auto_Planner": "Автоматичен плановик",
|
||||
"New_Cookbook": "Нова готварска книга",
|
||||
"Hide_Keyword": "Скриване на ключови думи",
|
||||
"Clear": "Изчистване",
|
||||
"err_move_self": "Не може елемента да се премести към себе си",
|
||||
"nothing": "Няма нищо за правене",
|
||||
"err_merge_self": "Не може да се слее елемент със себе си",
|
||||
"show_sql": "Покажи SQL",
|
||||
"filter_to_supermarket_desc": "По подразбиране филтрирайте списъка за пазаруване, за да включва само категории за избран супермаркет.",
|
||||
"CategoryName": "Име на категория",
|
||||
"SupermarketName": "Име на супермаркет",
|
||||
"CategoryInstruction": "Плъзнете категориите, за да промените категориите за поръчки, които се появяват в списъка за пазаруване.",
|
||||
"shopping_recent_days_desc": "Дни на последните записи в списъка за пазаруване за показване.",
|
||||
"shopping_recent_days": "Последни дни",
|
||||
"download_pdf": "Изтегли PDF",
|
||||
"download_csv": "Изтегли CSV",
|
||||
"csv_delim_help": "Ограничител за използване за CSV експортиране.",
|
||||
"csv_delim_label": "CSV разделител",
|
||||
"SuccessClipboard": "Списъкът за пазаруване е копиран в клипборда",
|
||||
"copy_to_clipboard": "Копиране в клипборда",
|
||||
"csv_prefix_help": "Префикс за добавяне при копиране на списък в клипборда.",
|
||||
"csv_prefix_label": "Префикс за списък",
|
||||
"copy_markdown_table": "Копирайте като Markdown Таблица",
|
||||
"in_shopping": "В списъка за пазаруване",
|
||||
"DelayUntil": "Забавяне до",
|
||||
"Pin": "Закачи",
|
||||
"mark_complete": "Маркирането завършено",
|
||||
"QuickEntry": "Бързо влизане",
|
||||
"shopping_add_onhand_desc": "Маркирайте храната „На ръка“, когато сте отметнати от списъка за пазаруване.",
|
||||
"shopping_add_onhand": "Автоматично под ръка",
|
||||
"related_recipes": "Свързани рецепти",
|
||||
"today_recipes": "Днешните рецепти",
|
||||
"sql_debug": "Отстраняване на грешки в SQL",
|
||||
"remember_search": "Запомнете търсенето",
|
||||
"remember_hours": "Часове за запомняне",
|
||||
"tree_select": "Използвайте Избор на дърво",
|
||||
"OnHand_help": "Храната е в инвентара и няма да бъде добавена автоматично към списък за пазаруване. Състоянието на ръка се споделя с пазаруващите потребители.",
|
||||
"ignore_shopping_help": "Никога не добавяйте храна към списъка за пазаруване (например вода)",
|
||||
"shopping_category_help": "Супермаркетите могат да бъдат поръчани и филтрирани по категория за пазаруване според оформлението на пътеките.",
|
||||
"food_recipe_help": "Свързването на рецепта тук ще включва свързаната рецепта във всяка друга рецепта, която използва тази храна",
|
||||
"Foods": "Храни",
|
||||
"enable_expert": "Активирайте експертния режим",
|
||||
"expert_mode": "Експертен режим",
|
||||
"simple_mode": "Опростен режим",
|
||||
"advanced": "Разширено",
|
||||
"fields": "Полета",
|
||||
"show_keywords": "Показване на ключови думи",
|
||||
"show_foods": "Покажи храни",
|
||||
"show_books": "Покажи книги",
|
||||
"show_rating": "Покажи рейтинг",
|
||||
"show_units": "Показване на единици",
|
||||
"show_filters": "Показване на филтри",
|
||||
"not": "не",
|
||||
"save_filter": "Запазване на филтъра",
|
||||
"filter_name": "Име на филтъра",
|
||||
"left_handed": "Режим за лява ръка",
|
||||
"left_handed_help": "Ще оптимизира потребителския интерфейс за използване с лявата ви ръка.",
|
||||
"Custom Filter": "Персонализиран филтър",
|
||||
"shared_with": "Споделено с",
|
||||
"sort_by": "Сортиране по",
|
||||
"asc": "Възходящ",
|
||||
"desc": "Низходящо",
|
||||
"date_viewed": "Последно разгледан",
|
||||
"last_cooked": "Последно приготвени",
|
||||
"times_cooked": "Пъти сготвено",
|
||||
"date_created": "дата на създаване",
|
||||
"show_sortby": "Покажи Сортиране по",
|
||||
"search_rank": "Ранг на търсене",
|
||||
"make_now": "Направете сега",
|
||||
"recipe_filter": "Филтър за рецепти",
|
||||
"book_filter_help": "Включете рецепти от филтъра за рецепти в допълнение към ръчно зададените.",
|
||||
"review_shopping": "Прегледайте записите за пазаруване, преди да запазите",
|
||||
"view_recipe": "Вижте рецепта",
|
||||
"copy_to_new": "Копиране в нова рецепта",
|
||||
"recipe_name": "Име на рецептата",
|
||||
"paste_ingredients_placeholder": "Поставете списъка със съставки тук...",
|
||||
"paste_ingredients": "Постави съставки",
|
||||
"ingredient_list": "Списък на съставките",
|
||||
"explain": "Обяснение",
|
||||
"filter": "Филтрирайте",
|
||||
"Website": "уебсайт",
|
||||
"App": "Приложение",
|
||||
"Bookmarklet": "Книжен пазар",
|
||||
"click_image_import": "Щракнете върху изображението, което искате да импортирате за тази рецепта",
|
||||
"no_more_images_found": "Няма намерени допълнителни изображения на уебсайта.",
|
||||
"import_duplicates": "За да се предотврати дублирането, рецептите със същото име като съществуващите се игнорират. Поставете отметка в това квадратче, за да импортирате всичко.",
|
||||
"paste_json": "Поставете тук json или html източник, за да заредите рецептата.",
|
||||
"Click_To_Edit": "Кликнете, за да редактирате",
|
||||
"search_no_recipes": "Не можах да намеря никакви рецепти!",
|
||||
"search_import_help_text": "Импортирайте рецепта от външен уебсайт или приложение.",
|
||||
"search_create_help_text": "Създайте нова рецепта директно в Tandoor.",
|
||||
"warning_duplicate_filter": "Предупреждение: Поради технически ограничения наличието на множество филтри от една и съща комбинация (и/или/не) може да доведе до неочаквани резултати.",
|
||||
"reset_children": "Нулиране на наследяването от последователя",
|
||||
"reset_children_help": "Презаписване на всички последователи със стойности от наследени полета. Наследените полета на последователите ще бъдат зададени на наследяване на полета, освен ако последователите наследяват полета не е зададено.",
|
||||
"substitute_help": "Заместителите се вземат предвид при търсене на рецепти, които могат да бъдат направени с подръчни съставки.",
|
||||
"substitute_siblings_help": "Всички храни, които споделят родител на тази храна, се считат за заместители.",
|
||||
"substitute_children_help": "Всички храни, които са последователи на тази храна, се считат за заместители.",
|
||||
"substitute_siblings": "Заместители на сродни",
|
||||
"substitute_children": "Заместители на последователи",
|
||||
"SubstituteOnHand": "Имате заместител под ръка.",
|
||||
"ChildInheritFields": "Последователи наследяват полета",
|
||||
"ChildInheritFields_help": "Последователите ще наследят тези полета по подразбиране.",
|
||||
"InheritFields_help": "Стойностите на тези полета ще бъдат наследени от родител (Изключение: празни категории за пазаруване не се наследяват)",
|
||||
"last_viewed": "Последно разгледан",
|
||||
"created_on": "Създадено на",
|
||||
"updatedon": "Актуализирано на",
|
||||
"Imported_From": "Внесено от",
|
||||
"advanced_search_settings": "Разширени настройки за търсене",
|
||||
"nothing_planned_today": "Нямате нищо планирано за днес!",
|
||||
"no_pinned_recipes": "Нямате закачени рецепти!",
|
||||
"Planned": "Планирано",
|
||||
"Pinned": "Закачено",
|
||||
"Imported": "Импортирано",
|
||||
"Quick actions": "Бързи действия",
|
||||
"Ratings": "Рейтинги",
|
||||
"Internal": "Вътрешен",
|
||||
"Units": "Единици",
|
||||
"Random Recipes": "Случайни рецепти",
|
||||
"parameter_count": "Параметър {count}",
|
||||
"select_keyword": "Изберете Ключова дума",
|
||||
"add_keyword": "Добавяне на ключова дума",
|
||||
"select_file": "Избери файл",
|
||||
"select_recipe": "Изберете рецепта",
|
||||
"select_unit": "Изберете Единица",
|
||||
"select_food": "Изберете Храна",
|
||||
"remove_selection": "Премахнете избора",
|
||||
"empty_list": "Списъкът е празен.",
|
||||
"Select": "Изберете",
|
||||
"Supermarkets": "Супермаркети",
|
||||
"User": "потребител",
|
||||
"Keyword": "Ключова дума",
|
||||
"Advanced": "Разширено",
|
||||
"Page": "Страница",
|
||||
"Single": "Единичен",
|
||||
"Multiple": "Многократни",
|
||||
"Reset": "Нулиране",
|
||||
"Options": "Настроики",
|
||||
"Create Food": "Създайте храна",
|
||||
"create_food_desc": "Създайте храна и я свържете с тази рецепта.",
|
||||
"additional_options": "Допълнителни настройки",
|
||||
"Importer_Help": "Повече информация и помощ за този вносител:",
|
||||
"Documentation": "Документация",
|
||||
"Select_App_To_Import": "Моля, изберете приложение, от което да импортирате",
|
||||
"Import_Supported": "Поддържа се импортиране",
|
||||
"Export_Supported": "Поддържа се експорт",
|
||||
"Import_Not_Yet_Supported": "Импортирането все още не се поддържа",
|
||||
"Export_Not_Yet_Supported": "Експортирането все още не се поддържа",
|
||||
"Import_Result_Info": "Импортирани са {imported} от {total} рецепти",
|
||||
"Recipes_In_Import": "Рецепти във вашия файл за импортиране",
|
||||
"Toggle": "Превключете",
|
||||
"Import_Error": "Възникна грешка по време на импортирането ви. Моля, разгънете подробностите в долната част на страницата, за да ги видите.",
|
||||
"Warning_Delete_Supermarket_Category": "Изтриването на категория супермаркет ще изтрие и всички връзки с храни. Сигурен ли си?",
|
||||
"New_Supermarket": "Създайте нов супермаркет",
|
||||
"New_Supermarket_Category": "Създаване на нова категория супермаркет",
|
||||
"Are_You_Sure": "Сигурен ли си?"
|
||||
}
|
||||
@@ -1,414 +1,414 @@
|
||||
{
|
||||
"warning_feature_beta": "",
|
||||
"err_fetching_resource": "",
|
||||
"err_creating_resource": "",
|
||||
"err_updating_resource": "",
|
||||
"err_deleting_resource": "",
|
||||
"err_deleting_protected_resource": "",
|
||||
"err_moving_resource": "",
|
||||
"err_merging_resource": "",
|
||||
"success_fetching_resource": "",
|
||||
"success_creating_resource": "",
|
||||
"success_updating_resource": "",
|
||||
"success_deleting_resource": "",
|
||||
"success_moving_resource": "",
|
||||
"success_merging_resource": "",
|
||||
"file_upload_disabled": "",
|
||||
"step_time_minutes": "",
|
||||
"confirm_delete": "",
|
||||
"import_running": "",
|
||||
"all_fields_optional": "",
|
||||
"convert_internal": "",
|
||||
"show_only_internal": "",
|
||||
"show_split_screen": "",
|
||||
"Log_Recipe_Cooking": "",
|
||||
"External_Recipe_Image": "",
|
||||
"Add_to_Shopping": "",
|
||||
"Add_to_Plan": "",
|
||||
"Step_start_time": "",
|
||||
"Sort_by_new": "",
|
||||
"Table_of_Contents": "",
|
||||
"Recipes_per_page": "",
|
||||
"Show_as_header": "",
|
||||
"Hide_as_header": "",
|
||||
"Add_nutrition_recipe": "",
|
||||
"Remove_nutrition_recipe": "",
|
||||
"Copy_template_reference": "",
|
||||
"Save_and_View": "",
|
||||
"Manage_Books": "",
|
||||
"Meal_Plan": "",
|
||||
"Select_Book": "",
|
||||
"Select_File": "",
|
||||
"Recipe_Image": "",
|
||||
"Import_finished": "",
|
||||
"View_Recipes": "",
|
||||
"Log_Cooking": "",
|
||||
"New_Recipe": "",
|
||||
"Url_Import": "",
|
||||
"Reset_Search": "",
|
||||
"Recently_Viewed": "",
|
||||
"Load_More": "",
|
||||
"New_Keyword": "",
|
||||
"Delete_Keyword": "",
|
||||
"Edit_Keyword": "",
|
||||
"Edit_Recipe": "",
|
||||
"Move_Keyword": "",
|
||||
"Merge_Keyword": "",
|
||||
"Hide_Keywords": "",
|
||||
"Hide_Recipes": "",
|
||||
"Move_Up": "",
|
||||
"Move_Down": "",
|
||||
"Step_Name": "",
|
||||
"Step_Type": "",
|
||||
"Make_Header": "",
|
||||
"Make_Ingredient": "",
|
||||
"Enable_Amount": "",
|
||||
"Disable_Amount": "",
|
||||
"Ingredient Editor": "",
|
||||
"Add_Step": "",
|
||||
"Keywords": "",
|
||||
"Books": "",
|
||||
"Proteins": "",
|
||||
"Fats": "",
|
||||
"Carbohydrates": "",
|
||||
"Calories": "",
|
||||
"Energy": "",
|
||||
"Nutrition": "",
|
||||
"Date": "",
|
||||
"Share": "",
|
||||
"Automation": "",
|
||||
"Parameter": "",
|
||||
"Export": "",
|
||||
"Copy": "",
|
||||
"Rating": "",
|
||||
"Close": "",
|
||||
"Cancel": "",
|
||||
"Link": "",
|
||||
"Add": "",
|
||||
"New": "",
|
||||
"Note": "",
|
||||
"Success": "",
|
||||
"Failure": "",
|
||||
"Protected": "",
|
||||
"Ingredients": "",
|
||||
"Supermarket": "",
|
||||
"Categories": "",
|
||||
"Category": "",
|
||||
"Selected": "",
|
||||
"min": "",
|
||||
"Servings": "",
|
||||
"Waiting": "",
|
||||
"Preparation": "",
|
||||
"External": "",
|
||||
"Size": "",
|
||||
"Files": "",
|
||||
"File": "",
|
||||
"Edit": "",
|
||||
"Image": "",
|
||||
"Delete": "",
|
||||
"Open": "",
|
||||
"Ok": "",
|
||||
"Save": "",
|
||||
"Step": "",
|
||||
"Search": "",
|
||||
"Import": "",
|
||||
"Print": "",
|
||||
"Settings": "",
|
||||
"or": "",
|
||||
"and": "",
|
||||
"Information": "",
|
||||
"Download": "",
|
||||
"Create": "",
|
||||
"Search Settings": "",
|
||||
"View": "",
|
||||
"Recipes": "",
|
||||
"Move": "",
|
||||
"Merge": "",
|
||||
"Parent": "",
|
||||
"delete_confirmation": "",
|
||||
"move_confirmation": "",
|
||||
"merge_confirmation": "",
|
||||
"create_rule": "",
|
||||
"move_selection": "",
|
||||
"merge_selection": "",
|
||||
"Root": "",
|
||||
"Ignore_Shopping": "",
|
||||
"Shopping_Category": "",
|
||||
"Shopping_Categories": "",
|
||||
"Edit_Food": "",
|
||||
"Move_Food": "",
|
||||
"New_Food": "",
|
||||
"Hide_Food": "",
|
||||
"Food_Alias": "",
|
||||
"Unit_Alias": "",
|
||||
"Keyword_Alias": "",
|
||||
"Delete_Food": "",
|
||||
"No_ID": "",
|
||||
"Meal_Plan_Days": "",
|
||||
"merge_title": "",
|
||||
"move_title": "",
|
||||
"Food": "",
|
||||
"Recipe_Book": "",
|
||||
"del_confirmation_tree": "",
|
||||
"delete_title": "",
|
||||
"create_title": "",
|
||||
"edit_title": "",
|
||||
"Name": "",
|
||||
"Type": "",
|
||||
"Description": "",
|
||||
"Recipe": "",
|
||||
"tree_root": "",
|
||||
"Icon": "",
|
||||
"Unit": "",
|
||||
"No_Results": "",
|
||||
"New_Unit": "",
|
||||
"Create_New_Shopping Category": "",
|
||||
"Create_New_Food": "",
|
||||
"Create_New_Keyword": "",
|
||||
"Create_New_Unit": "",
|
||||
"Create_New_Meal_Type": "",
|
||||
"and_up": "",
|
||||
"and_down": "",
|
||||
"Instructions": "",
|
||||
"Unrated": "",
|
||||
"Automate": "",
|
||||
"Empty": "",
|
||||
"Key_Ctrl": "",
|
||||
"Key_Shift": "",
|
||||
"Time": "",
|
||||
"Text": "",
|
||||
"Shopping_list": "",
|
||||
"Added_by": "",
|
||||
"Added_on": "",
|
||||
"AddToShopping": "",
|
||||
"IngredientInShopping": "",
|
||||
"NotInShopping": "",
|
||||
"OnHand": "",
|
||||
"FoodOnHand": "",
|
||||
"FoodNotOnHand": "",
|
||||
"Undefined": "",
|
||||
"Create_Meal_Plan_Entry": "",
|
||||
"Edit_Meal_Plan_Entry": "",
|
||||
"Title": "",
|
||||
"Week": "",
|
||||
"Month": "",
|
||||
"Year": "",
|
||||
"Planner": "",
|
||||
"Planner_Settings": "",
|
||||
"Period": "",
|
||||
"Plan_Period_To_Show": "",
|
||||
"Periods": "",
|
||||
"Plan_Show_How_Many_Periods": "",
|
||||
"Starting_Day": "",
|
||||
"Meal_Types": "",
|
||||
"Meal_Type": "",
|
||||
"Clone": "",
|
||||
"Drag_Here_To_Delete": "",
|
||||
"Meal_Type_Required": "",
|
||||
"Title_or_Recipe_Required": "",
|
||||
"Color": "",
|
||||
"New_Meal_Type": "",
|
||||
"AddFoodToShopping": "",
|
||||
"RemoveFoodFromShopping": "",
|
||||
"DeleteShoppingConfirm": "",
|
||||
"IgnoredFood": "",
|
||||
"Add_Servings_to_Shopping": "",
|
||||
"Week_Numbers": "",
|
||||
"Show_Week_Numbers": "",
|
||||
"Export_As_ICal": "",
|
||||
"Export_To_ICal": "",
|
||||
"Cannot_Add_Notes_To_Shopping": "",
|
||||
"Added_To_Shopping_List": "",
|
||||
"Shopping_List_Empty": "",
|
||||
"Next_Period": "",
|
||||
"Previous_Period": "",
|
||||
"Current_Period": "",
|
||||
"Next_Day": "",
|
||||
"Previous_Day": "",
|
||||
"Inherit": "",
|
||||
"InheritFields": "",
|
||||
"FoodInherit": "",
|
||||
"ShowUncategorizedFood": "",
|
||||
"GroupBy": "",
|
||||
"SupermarketCategoriesOnly": "",
|
||||
"MoveCategory": "",
|
||||
"CountMore": "",
|
||||
"IgnoreThis": "",
|
||||
"DelayFor": "",
|
||||
"Warning": "",
|
||||
"NoCategory": "",
|
||||
"InheritWarning": "",
|
||||
"ShowDelayed": "",
|
||||
"Completed": "",
|
||||
"OfflineAlert": "",
|
||||
"shopping_share": "",
|
||||
"shopping_auto_sync": "",
|
||||
"one_url_per_line": "",
|
||||
"mealplan_autoadd_shopping": "",
|
||||
"mealplan_autoexclude_onhand": "",
|
||||
"mealplan_autoinclude_related": "",
|
||||
"default_delay": "",
|
||||
"shopping_share_desc": "",
|
||||
"shopping_auto_sync_desc": "",
|
||||
"mealplan_autoadd_shopping_desc": "",
|
||||
"mealplan_autoexclude_onhand_desc": "",
|
||||
"mealplan_autoinclude_related_desc": "",
|
||||
"default_delay_desc": "",
|
||||
"filter_to_supermarket": "",
|
||||
"Coming_Soon": "",
|
||||
"Auto_Planner": "",
|
||||
"New_Cookbook": "",
|
||||
"Hide_Keyword": "",
|
||||
"Clear": "",
|
||||
"err_move_self": "",
|
||||
"nothing": "",
|
||||
"err_merge_self": "",
|
||||
"show_sql": "",
|
||||
"filter_to_supermarket_desc": "",
|
||||
"CategoryName": "",
|
||||
"SupermarketName": "",
|
||||
"CategoryInstruction": "",
|
||||
"shopping_recent_days_desc": "",
|
||||
"shopping_recent_days": "",
|
||||
"download_pdf": "",
|
||||
"download_csv": "",
|
||||
"csv_delim_help": "",
|
||||
"csv_delim_label": "",
|
||||
"SuccessClipboard": "",
|
||||
"copy_to_clipboard": "",
|
||||
"csv_prefix_help": "",
|
||||
"csv_prefix_label": "",
|
||||
"copy_markdown_table": "",
|
||||
"in_shopping": "",
|
||||
"DelayUntil": "",
|
||||
"Pin": "",
|
||||
"mark_complete": "",
|
||||
"QuickEntry": "",
|
||||
"shopping_add_onhand_desc": "",
|
||||
"shopping_add_onhand": "",
|
||||
"related_recipes": "",
|
||||
"today_recipes": "",
|
||||
"sql_debug": "",
|
||||
"remember_search": "",
|
||||
"remember_hours": "",
|
||||
"tree_select": "",
|
||||
"OnHand_help": "",
|
||||
"ignore_shopping_help": "",
|
||||
"shopping_category_help": "",
|
||||
"food_recipe_help": "",
|
||||
"Foods": "",
|
||||
"enable_expert": "",
|
||||
"expert_mode": "",
|
||||
"simple_mode": "",
|
||||
"advanced": "",
|
||||
"fields": "",
|
||||
"show_keywords": "",
|
||||
"show_foods": "",
|
||||
"show_books": "",
|
||||
"show_rating": "",
|
||||
"show_units": "",
|
||||
"show_filters": "",
|
||||
"not": "",
|
||||
"save_filter": "",
|
||||
"filter_name": "",
|
||||
"left_handed": "",
|
||||
"left_handed_help": "",
|
||||
"Custom Filter": "",
|
||||
"shared_with": "",
|
||||
"sort_by": "",
|
||||
"asc": "",
|
||||
"desc": "",
|
||||
"date_viewed": "",
|
||||
"last_cooked": "",
|
||||
"times_cooked": "",
|
||||
"date_created": "",
|
||||
"show_sortby": "",
|
||||
"search_rank": "",
|
||||
"make_now": "",
|
||||
"recipe_filter": "",
|
||||
"book_filter_help": "",
|
||||
"review_shopping": "",
|
||||
"view_recipe": "",
|
||||
"copy_to_new": "",
|
||||
"recipe_name": "",
|
||||
"paste_ingredients_placeholder": "",
|
||||
"paste_ingredients": "",
|
||||
"ingredient_list": "",
|
||||
"explain": "",
|
||||
"filter": "",
|
||||
"Website": "",
|
||||
"App": "",
|
||||
"Bookmarklet": "",
|
||||
"click_image_import": "",
|
||||
"no_more_images_found": "",
|
||||
"import_duplicates": "",
|
||||
"paste_json": "",
|
||||
"Click_To_Edit": "",
|
||||
"search_no_recipes": "",
|
||||
"search_import_help_text": "",
|
||||
"search_create_help_text": "",
|
||||
"warning_duplicate_filter": "",
|
||||
"reset_children": "",
|
||||
"reset_children_help": "",
|
||||
"substitute_help": "",
|
||||
"substitute_siblings_help": "",
|
||||
"substitute_children_help": "",
|
||||
"substitute_siblings": "",
|
||||
"substitute_children": "",
|
||||
"SubstituteOnHand": "",
|
||||
"ChildInheritFields": "",
|
||||
"ChildInheritFields_help": "",
|
||||
"InheritFields_help": "",
|
||||
"last_viewed": "",
|
||||
"created_on": "",
|
||||
"updatedon": "",
|
||||
"Imported_From": "",
|
||||
"advanced_search_settings": "",
|
||||
"nothing_planned_today": "",
|
||||
"no_pinned_recipes": "",
|
||||
"Planned": "",
|
||||
"Pinned": "",
|
||||
"Imported": "",
|
||||
"Quick actions": "",
|
||||
"Ratings": "",
|
||||
"Internal": "",
|
||||
"Units": "",
|
||||
"Random Recipes": "",
|
||||
"parameter_count": "",
|
||||
"select_keyword": "",
|
||||
"add_keyword": "",
|
||||
"select_file": "",
|
||||
"select_recipe": "",
|
||||
"select_unit": "",
|
||||
"select_food": "",
|
||||
"remove_selection": "",
|
||||
"empty_list": "",
|
||||
"Select": "",
|
||||
"Supermarkets": "",
|
||||
"User": "",
|
||||
"Keyword": "",
|
||||
"Advanced": "",
|
||||
"Page": "",
|
||||
"Single": "",
|
||||
"Multiple": "",
|
||||
"Reset": "",
|
||||
"Options": "",
|
||||
"Create Food": "",
|
||||
"create_food_desc": "",
|
||||
"additional_options": "",
|
||||
"Importer_Help": "",
|
||||
"Documentation": "",
|
||||
"Select_App_To_Import": "",
|
||||
"Import_Supported": "",
|
||||
"Export_Supported": "",
|
||||
"Import_Not_Yet_Supported": "",
|
||||
"Export_Not_Yet_Supported": "",
|
||||
"Import_Result_Info": "",
|
||||
"Recipes_In_Import": "",
|
||||
"Toggle": "",
|
||||
"Import_Error": "",
|
||||
"Warning_Delete_Supermarket_Category": "",
|
||||
"New_Supermarket": "",
|
||||
"New_Supermarket_Category": "",
|
||||
"Are_You_Sure": ""
|
||||
"warning_feature_beta": "Denne funktion er i øjeblikket i BETA (test) stadie. Forvent fejl og fremtidige ændringer (hvor data kan mistes) ved brug af denne funktion.",
|
||||
"err_fetching_resource": "Der opstod en fejl under indlæsning af denne ressource!",
|
||||
"err_creating_resource": "Der opstod en fejl under oprettelsen af denne ressource!",
|
||||
"err_updating_resource": "Der opstod en fejl under opdateringen af denne ressource!",
|
||||
"err_deleting_resource": "Der opstod en fejl under sletningen af denne ressource!",
|
||||
"err_deleting_protected_resource": "Objektet du prøver at slette er stadig i brug, og kan ikke slettes.",
|
||||
"err_moving_resource": "Der opstod en fejl under flytningen af denne ressource!",
|
||||
"err_merging_resource": "Der opstod en fejl under sammenfletningen af denne ressource!",
|
||||
"success_fetching_resource": "Ressourcen blev hentet!",
|
||||
"success_creating_resource": "Ressourcen blev oprettet!",
|
||||
"success_updating_resource": "Ressourcen blev opdateret!",
|
||||
"success_deleting_resource": "Ressourcen blev slettet!",
|
||||
"success_moving_resource": "Ressourcen blev flyttet!",
|
||||
"success_merging_resource": "Ressourcen blev sammenflettet!",
|
||||
"file_upload_disabled": "Upload af filer er ikke slået til i dit rum.",
|
||||
"step_time_minutes": "Trin varighed (minutter)",
|
||||
"confirm_delete": "Er du sikker på at du slette dette {object}?",
|
||||
"import_running": "Importering er i gang, vent venligst!",
|
||||
"all_fields_optional": "Alle felter er valgfri og kan være tomme.",
|
||||
"convert_internal": "Konverter til intern opskrift",
|
||||
"show_only_internal": "Vis kun interne opskrifter",
|
||||
"show_split_screen": "Opdel skærmen",
|
||||
"Log_Recipe_Cooking": "Noter tilberedning af opskrift",
|
||||
"External_Recipe_Image": "Eksternt billede af opskrift",
|
||||
"Add_to_Shopping": "Tilføj til indkøbsliste",
|
||||
"Add_to_Plan": "Tilføj til madplan",
|
||||
"Step_start_time": "Trin starttid",
|
||||
"Sort_by_new": "Sorter efter nylige",
|
||||
"Table_of_Contents": "Indholdsfortegnelse",
|
||||
"Recipes_per_page": "Opskrifter pr. side",
|
||||
"Show_as_header": "Vis som rubrik",
|
||||
"Hide_as_header": "Skjul som rubrik",
|
||||
"Add_nutrition_recipe": "Tilføj næringsindhold til opskrift",
|
||||
"Remove_nutrition_recipe": "Fjern næringsindhold fra opskrift",
|
||||
"Copy_template_reference": "Kopier skabelonsreference",
|
||||
"Save_and_View": "Gem & Vis",
|
||||
"Manage_Books": "Administrer bøger",
|
||||
"Meal_Plan": "Madplan",
|
||||
"Select_Book": "Vælg bog",
|
||||
"Select_File": "Vælg fil",
|
||||
"Recipe_Image": "Opskriftsbillede",
|
||||
"Import_finished": "Importering fuldført",
|
||||
"View_Recipes": "Vis opskrifter",
|
||||
"Log_Cooking": "Noter tilberedning",
|
||||
"New_Recipe": "Ny opskrift",
|
||||
"Url_Import": "Importer fra link",
|
||||
"Reset_Search": "Nulstil søgning",
|
||||
"Recently_Viewed": "Vist for nylig",
|
||||
"Load_More": "Indlæs mere",
|
||||
"New_Keyword": "Nyt nøgleord",
|
||||
"Delete_Keyword": "Slet nøgleord",
|
||||
"Edit_Keyword": "Rediger nøgleord",
|
||||
"Edit_Recipe": "Rediger opskrift",
|
||||
"Move_Keyword": "Flyt nøgleord",
|
||||
"Merge_Keyword": "Sammenflet nøgleord",
|
||||
"Hide_Keywords": "Skjul nøgleord",
|
||||
"Hide_Recipes": "Skjul opskrifter",
|
||||
"Move_Up": "Flyt up",
|
||||
"Move_Down": "Flyt ned",
|
||||
"Step_Name": "Trin navn",
|
||||
"Step_Type": "Trin type",
|
||||
"Make_Header": "Opret rubrik",
|
||||
"Make_Ingredient": "Opret ingredient",
|
||||
"Enable_Amount": "Aktiver antal",
|
||||
"Disable_Amount": "Deaktiver antal",
|
||||
"Ingredient Editor": "Ingrediens redigeringsværktøj",
|
||||
"Add_Step": "Tilføj trin",
|
||||
"Keywords": "Nøgleord",
|
||||
"Books": "Bøger",
|
||||
"Proteins": "Proteiner",
|
||||
"Fats": "Fedtstoffer",
|
||||
"Carbohydrates": "Kulhydrater",
|
||||
"Calories": "Kalorier",
|
||||
"Energy": "Energi",
|
||||
"Nutrition": "Næring",
|
||||
"Date": "Dato",
|
||||
"Share": "Del",
|
||||
"Automation": "Automatisering",
|
||||
"Parameter": "Parameter",
|
||||
"Export": "Eksporter",
|
||||
"Copy": "Kopier",
|
||||
"Rating": "Bedømmelse",
|
||||
"Close": "Luk",
|
||||
"Cancel": "Annuller",
|
||||
"Link": "Link",
|
||||
"Add": "Tilføj",
|
||||
"New": "Ny",
|
||||
"Note": "Note",
|
||||
"Success": "Succes",
|
||||
"Failure": "Mislykkedes",
|
||||
"Protected": "Beskyttet",
|
||||
"Ingredients": "Ingredienser",
|
||||
"Supermarket": "Supermarked",
|
||||
"Categories": "Kategorier",
|
||||
"Category": "Kategori",
|
||||
"Selected": "Valgt",
|
||||
"min": "min",
|
||||
"Servings": "Serveringer",
|
||||
"Waiting": "Venter",
|
||||
"Preparation": "Forberedelse",
|
||||
"External": "Ekstern",
|
||||
"Size": "Størrelse",
|
||||
"Files": "Filer",
|
||||
"File": "Fil",
|
||||
"Edit": "Rediger",
|
||||
"Image": "Billede",
|
||||
"Delete": "Slet",
|
||||
"Open": "Åben",
|
||||
"Ok": "Åben",
|
||||
"Save": "Gem",
|
||||
"Step": "Trin",
|
||||
"Search": "Søg",
|
||||
"Import": "Importer",
|
||||
"Print": "Udskriv",
|
||||
"Settings": "Indstillinger",
|
||||
"or": "eller",
|
||||
"and": "og",
|
||||
"Information": "Information",
|
||||
"Download": "Download",
|
||||
"Create": "Opret",
|
||||
"Search Settings": "Søgningsindstillinger",
|
||||
"View": "Vis",
|
||||
"Recipes": "Opskrifter",
|
||||
"Move": "Flyt",
|
||||
"Merge": "Sammenflet",
|
||||
"Parent": "Forælder",
|
||||
"delete_confirmation": "Er du sikker på at du vil slette {source}?",
|
||||
"move_confirmation": "Flyt <i>{child}</i> til forælder <i>parent</i>",
|
||||
"merge_confirmation": "Erstat <i>{source}</i> med <i>{target}</i>",
|
||||
"create_rule": "og opret automation",
|
||||
"move_selection": "Vælg en forælder {type} som {source} skal flyttes til.",
|
||||
"merge_selection": "Erstat alle forekomster af {source} med det valgte {target}.",
|
||||
"Root": "Rod",
|
||||
"Ignore_Shopping": "Ignorer indkøb",
|
||||
"Shopping_Category": "Indkøbskategori",
|
||||
"Shopping_Categories": "Indkøbskategorier",
|
||||
"Edit_Food": "Rediger mad",
|
||||
"Move_Food": "Flyt mad",
|
||||
"New_Food": "Ny mad",
|
||||
"Hide_Food": "Skjul mad",
|
||||
"Food_Alias": "Alternativt navn til mad",
|
||||
"Unit_Alias": "Alternativt navn til enhed",
|
||||
"Keyword_Alias": "Alternativt navn til nøgleord",
|
||||
"Delete_Food": "Slet mad",
|
||||
"No_ID": "ID findes ikke, kan ikke slette.",
|
||||
"Meal_Plan_Days": "Fremtidige madplaner",
|
||||
"merge_title": "Sammenflet {type}",
|
||||
"move_title": "Flyt {type}",
|
||||
"Food": "Mad",
|
||||
"Recipe_Book": "Opskriftsbog",
|
||||
"del_confirmation_tree": "Er du sikker på at du vil slette {source} og alle dets børn?",
|
||||
"delete_title": "Slet {type}",
|
||||
"create_title": "Ny {type}",
|
||||
"edit_title": "Rediger {type}",
|
||||
"Name": "Navn",
|
||||
"Type": "Type",
|
||||
"Description": "Beskrivelse",
|
||||
"Recipe": "Opskrift",
|
||||
"tree_root": "Roden af træet",
|
||||
"Icon": "Ikon",
|
||||
"Unit": "Enhed",
|
||||
"No_Results": "Ingen resultater",
|
||||
"New_Unit": "Ny enhed",
|
||||
"Create_New_Shopping Category": "Opret ny indkøbskategori",
|
||||
"Create_New_Food": "Tilføj ny mad",
|
||||
"Create_New_Keyword": "Tilføj nyt nøgleord",
|
||||
"Create_New_Unit": "Tilføj ny enhed",
|
||||
"Create_New_Meal_Type": "Tilføj ny måltidstype",
|
||||
"and_up": "& Op",
|
||||
"and_down": "& Ned",
|
||||
"Instructions": "Instruktioner",
|
||||
"Unrated": "Ikke bedømt",
|
||||
"Automate": "Automatiser",
|
||||
"Empty": "Tom",
|
||||
"Key_Ctrl": "Ctrl",
|
||||
"Key_Shift": "Shift",
|
||||
"Time": "Tid",
|
||||
"Text": "Tekst",
|
||||
"Shopping_list": "Indkøbsliste",
|
||||
"Added_by": "Tilføjet af",
|
||||
"Added_on": "Tilføjet d.",
|
||||
"AddToShopping": "Tilføj til indkøbsliste",
|
||||
"IngredientInShopping": "Denne ingrediens er i din indkøbsliste.",
|
||||
"NotInShopping": "{food} er ikke i din indkøbsliste.",
|
||||
"OnHand": "Til rådighed",
|
||||
"FoodOnHand": "Du har {food} til rådighed.",
|
||||
"FoodNotOnHand": "Du har ikke {food} til rådighed.",
|
||||
"Undefined": "Ikke defineret",
|
||||
"Create_Meal_Plan_Entry": "Indsæt punkt i madplan",
|
||||
"Edit_Meal_Plan_Entry": "Rediger punkt i madplan",
|
||||
"Title": "Titel",
|
||||
"Week": "Uge",
|
||||
"Month": "Måned",
|
||||
"Year": "År",
|
||||
"Planner": "Planlægger",
|
||||
"Planner_Settings": "Planlægger indstillinger",
|
||||
"Period": "Periode",
|
||||
"Plan_Period_To_Show": "Vis uger, måneder eller år",
|
||||
"Periods": "Perioder",
|
||||
"Plan_Show_How_Many_Periods": "Hvor mange perioder skal vises",
|
||||
"Starting_Day": "Første dag på ugen",
|
||||
"Meal_Types": "Måltidstyper",
|
||||
"Meal_Type": "Måltidstype",
|
||||
"Clone": "Klon",
|
||||
"Drag_Here_To_Delete": "Træk herhen for at slette",
|
||||
"Meal_Type_Required": "Måltidstype påkrævet",
|
||||
"Title_or_Recipe_Required": "Titel eller valg af opskrift påkrævet",
|
||||
"Color": "Farve",
|
||||
"New_Meal_Type": "Ny måltidstype",
|
||||
"AddFoodToShopping": "Tilføj {food} til indkøbsliste",
|
||||
"RemoveFoodFromShopping": "Fjern {food} fra indkøbsliste",
|
||||
"DeleteShoppingConfirm": "Er du sikker på at du vil fjerne {food} fra indkøbsliste?",
|
||||
"IgnoredFood": "{food} er sat til at ignorere indkøb.",
|
||||
"Add_Servings_to_Shopping": "Tilføj {servings} serveringer til indkøb",
|
||||
"Week_Numbers": "Ugenumre",
|
||||
"Show_Week_Numbers": "Vis ugenumre?",
|
||||
"Export_As_ICal": "Eksporter nuværende periode til iCal format",
|
||||
"Export_To_ICal": "Eksporter .ics",
|
||||
"Cannot_Add_Notes_To_Shopping": "Noter kan ikke tilføjes til indkøbslisten",
|
||||
"Added_To_Shopping_List": "Tilføjet til indkøbslisten",
|
||||
"Shopping_List_Empty": "Din indkøbsliste er i øjeblikket tom, du kan tilføje varer via menuen for et madplanspunkt (højreklik på punktet eller venstreklik på menu ikonet)",
|
||||
"Next_Period": "Næste periode",
|
||||
"Previous_Period": "Forgående periode",
|
||||
"Current_Period": "Nuværende periode",
|
||||
"Next_Day": "Næste dag",
|
||||
"Previous_Day": "Forgående dag",
|
||||
"Inherit": "Nedarve",
|
||||
"InheritFields": "Nedarve feltværdier",
|
||||
"FoodInherit": "Nedarvelige mad felter",
|
||||
"ShowUncategorizedFood": "Vis ikke definerede",
|
||||
"GroupBy": "Grupper efter",
|
||||
"SupermarketCategoriesOnly": "Kun Supermarked kategorier",
|
||||
"MoveCategory": "Flyt til: ",
|
||||
"CountMore": "...+{count} flere",
|
||||
"IgnoreThis": "Aldrig tilføj {food} automatisk til indkøb",
|
||||
"DelayFor": "Udskyd i {hours} hours",
|
||||
"Warning": "Advarsel",
|
||||
"NoCategory": "Ingen kategori valgt.",
|
||||
"InheritWarning": "{food} er sat til at nedarve, ændringer bliver måske ikke gemt.",
|
||||
"ShowDelayed": "Vis udskudte elementer",
|
||||
"Completed": "Afsluttet",
|
||||
"OfflineAlert": "Du er offline, indkøbslisten er måske ikke synkroniseret.",
|
||||
"shopping_share": "Del indkøbsliste",
|
||||
"shopping_auto_sync": "Synkroniser automatisk",
|
||||
"one_url_per_line": "Et link pr. linje",
|
||||
"mealplan_autoadd_shopping": "Tilføj madplan automatisk",
|
||||
"mealplan_autoexclude_onhand": "Ekskluder tilgængeligt mad",
|
||||
"mealplan_autoinclude_related": "Tilføj relaterede opskrifter",
|
||||
"default_delay": "Standard udsættelse i timer",
|
||||
"shopping_share_desc": "Brugere vil se alle varer du tilføjer til din indkøbsliste. De skal tilføje dig for at se varer på deres liste.",
|
||||
"shopping_auto_sync_desc": "Hvis den sættes til 0, bliver automatisk synkronisering slået fra. Når en indkøbsliste vises bliver den opdateret efter den indstillede periode i sekunder, for at synkronisere eventuelle ændringer andre har foretaget. Brugbar når man køber ind sammen med andre, men det bruger mobildata.",
|
||||
"mealplan_autoadd_shopping_desc": "Tilføj madplansingredienser til indkøbsliste automatisk.",
|
||||
"mealplan_autoexclude_onhand_desc": "Når en madplan tilføjes til indkøbslisten (manuelt eller automatisk), ekskluder tilgængelige ingredienser.",
|
||||
"mealplan_autoinclude_related_desc": "Når en madplan tilføjes til indkøbslisten (manuelt eller automatisk), inkluder alle relaterede opskrifter.",
|
||||
"default_delay_desc": "Standard antal timer et punkt på indkøbslisten skal udskydes.",
|
||||
"filter_to_supermarket": "Filtrer til supermarked",
|
||||
"Coming_Soon": "Kommer snart",
|
||||
"Auto_Planner": "Autoplanlægger",
|
||||
"New_Cookbook": "Ny opskriftsbog",
|
||||
"Hide_Keyword": "Skjul nøgleord",
|
||||
"Clear": "Ryd",
|
||||
"err_move_self": "Kan ikke flytte element til sig selv",
|
||||
"nothing": "Intet at gøre",
|
||||
"err_merge_self": "Kan ikke sammenflette element med sig selv",
|
||||
"show_sql": "Vis SQL",
|
||||
"filter_to_supermarket_desc": "Filtrer som standard indkøbslisten til kun at inkludere kategorier fra valgte supermarkeder.",
|
||||
"CategoryName": "Kategorinavn",
|
||||
"SupermarketName": "Navn på supermarked",
|
||||
"CategoryInstruction": "Træk rundt på kategorier, for at ændre på rækkefølgen de opstår i på indkøbslisten.",
|
||||
"shopping_recent_days_desc": "Antal dage seneste varer fra indkøbslister skal vises.",
|
||||
"shopping_recent_days": "Seneste dage",
|
||||
"download_pdf": "Download PDF",
|
||||
"download_csv": "Download CSV",
|
||||
"csv_delim_help": "Tegn der skal afgrænse elementer i CSV eksporteringer.",
|
||||
"csv_delim_label": "CSV afgrænsningstegn",
|
||||
"SuccessClipboard": "Indkøbsliste kopieret til udklipsholder",
|
||||
"copy_to_clipboard": "Kopier til udklipsholder",
|
||||
"csv_prefix_help": "Præfiks som skal tilføjes når der kopieres til udklipsholder.",
|
||||
"csv_prefix_label": "Liste præfiks",
|
||||
"copy_markdown_table": "Kopier som Markdown tabel",
|
||||
"in_shopping": "I indkøbsliste",
|
||||
"DelayUntil": "Udskyd indtil",
|
||||
"Pin": "Fastgør",
|
||||
"mark_complete": "Marker som færdig",
|
||||
"QuickEntry": "Hurtigt indlæg",
|
||||
"shopping_add_onhand_desc": "Marker mad som 'Tilgængeligt' når det bliver krydset af på indkøbslisten.",
|
||||
"shopping_add_onhand": "Automatisk tilgængelig markering",
|
||||
"related_recipes": "Relaterede opskrifter",
|
||||
"today_recipes": "Opskrifter til i dag",
|
||||
"sql_debug": "SQL fejlsøgning",
|
||||
"remember_search": "Husk søgning",
|
||||
"remember_hours": "Timer at gemme i",
|
||||
"tree_select": "Benyt træ vælger",
|
||||
"OnHand_help": "Varen er \"på lager\" og vil ikke automatisk blive tilføjet til indkøbslister. Lagerstatus deles med indkøbsbrugere.",
|
||||
"ignore_shopping_help": "Aldrig tilføj vare til indkøbslisten (f.eks. vand)",
|
||||
"shopping_category_help": "Supermarkeder kan blive filtrerede efter indkøbskategori så det passer med indretningen i butikken.",
|
||||
"food_recipe_help": "Hvis du sammenkæder en opskrift her vil den sammenkædede opskrift blive inkluderet i alle andre opskrifter der bruger denne mad",
|
||||
"Foods": "Mad",
|
||||
"enable_expert": "Slå avanceret tilstand til",
|
||||
"expert_mode": "Avanceret tilstand",
|
||||
"simple_mode": "Simpel tilstand",
|
||||
"advanced": "Avanceret",
|
||||
"fields": "Felter",
|
||||
"show_keywords": "Vis nøgleord",
|
||||
"show_foods": "Vis mad",
|
||||
"show_books": "Vis bøger",
|
||||
"show_rating": "Vis bedømmelse",
|
||||
"show_units": "Vis enheder",
|
||||
"show_filters": "Vis filtre",
|
||||
"not": "ikke",
|
||||
"save_filter": "Gem filter",
|
||||
"filter_name": "Filtrer navn",
|
||||
"left_handed": "Venstrehåndstilstand",
|
||||
"left_handed_help": "Optimerer brugerfladen til benyttelse med din venstre hånd.",
|
||||
"Custom Filter": "Tilpasset filter",
|
||||
"shared_with": "Delt med",
|
||||
"sort_by": "Sorter efter",
|
||||
"asc": "Stigende",
|
||||
"desc": "Faldende",
|
||||
"date_viewed": "Sidst Åbnet",
|
||||
"last_cooked": "Sidst Tilberedt",
|
||||
"times_cooked": "Antal gange tilberedt",
|
||||
"date_created": "Oprettelsesdato",
|
||||
"show_sortby": "Soter efter",
|
||||
"search_rank": "Søg efter rang",
|
||||
"make_now": "Lav nu",
|
||||
"recipe_filter": "Opskriftsfilter",
|
||||
"book_filter_help": "Inkluder opskrifter fra opskriftsfilter udover de manuelt udvalgte.",
|
||||
"review_shopping": "Tjek indkøbsvarer inden der gemmes",
|
||||
"view_recipe": "Vis opskrift",
|
||||
"copy_to_new": "Kopier til ny opskrift",
|
||||
"recipe_name": "Navn på opskrift",
|
||||
"paste_ingredients_placeholder": "Indsæt ingrediensliste her...",
|
||||
"paste_ingredients": "Indsæt ingredienser",
|
||||
"ingredient_list": "Ingrediensliste",
|
||||
"explain": "Forklar",
|
||||
"filter": "Filter",
|
||||
"Website": "Hjemmeside",
|
||||
"App": "App",
|
||||
"Bookmarklet": "Bogmærke",
|
||||
"click_image_import": "Klik på billedet du vil importere til denne opskrift",
|
||||
"no_more_images_found": "Ingen yderligere billeder fundet på hjemmeside.",
|
||||
"import_duplicates": "For at undgå dubletter bliver opskrifter med det samme navn som eksisterende opskrifter ignoreret. Ving den boks af for at tilføje alt.",
|
||||
"paste_json": "Indsæt JSON eller HTML kildekode her for at indlæse opskrift.",
|
||||
"Click_To_Edit": "Klik for at rediger",
|
||||
"search_no_recipes": "Kunne ikke finde nogen opskrifter!",
|
||||
"search_import_help_text": "Importer en opskrift fra en ekstern hjemmeside eller applikation.",
|
||||
"search_create_help_text": "Opret en ny opskrift direkte i Tandoor.",
|
||||
"warning_duplicate_filter": "Advarsel: På grund af tekniske begrænsninger, kan det give uforventede resultater at have flere filtre med den samme kombination af (og/eller/not).",
|
||||
"reset_children": "Nulstil barnets nedarvning",
|
||||
"reset_children_help": "Overskriv alle børn med værdier fra nedarvede felter. Nedarvede felter af børn vil blive sat til at nedarve med mindre de allerede er sat til at nedarve.",
|
||||
"substitute_help": "Erstatninger bliver taget i betragtning når der søges efter opskrifter der kan laves med tilgængelige ingredienser.",
|
||||
"substitute_siblings_help": "Alt mad der deler en forælder med denne mad bliver betragtet som erstatninger.",
|
||||
"substitute_children_help": "Alt mad der er et barn af denne mad bliver betragtet som erstatninger.",
|
||||
"substitute_siblings": "Erstattende søskende",
|
||||
"substitute_children": "Erstattende børn",
|
||||
"SubstituteOnHand": "Du har erstatninger tilgængeligt.",
|
||||
"ChildInheritFields": "Barn nedarvningsfelter",
|
||||
"ChildInheritFields_help": "Børn nedarvede disse felter som standard.",
|
||||
"InheritFields_help": "Værdierne af disse felter vil blive nedarvet fra forælder (Undtagelse: tomme indkøbskategorier bliver ikke nedarvet)",
|
||||
"last_viewed": "Sidst åbnet",
|
||||
"created_on": "Oprettet d.",
|
||||
"updatedon": "Opdateret d.",
|
||||
"Imported_From": "Importeret fra",
|
||||
"advanced_search_settings": "Avancerede søgeindstillinger",
|
||||
"nothing_planned_today": "Du har ikke noget planlagt for i dag!",
|
||||
"no_pinned_recipes": "Du har ingen fastgjorte opskrifter!",
|
||||
"Planned": "Planlagt",
|
||||
"Pinned": "Fastgjort",
|
||||
"Imported": "Importeret",
|
||||
"Quick actions": "Hurtige handlinger",
|
||||
"Ratings": "Bedømmelser",
|
||||
"Internal": "Interne",
|
||||
"Units": "Enheder",
|
||||
"Random Recipes": "Tilfældige opskrifter",
|
||||
"parameter_count": "Parameter {count}",
|
||||
"select_keyword": "Vælg nøgleord",
|
||||
"add_keyword": "Tilføj nøgleord",
|
||||
"select_file": "Vælg fil",
|
||||
"select_recipe": "Vælg opskrift",
|
||||
"select_unit": "Vælg enhed",
|
||||
"select_food": "Vælg mad",
|
||||
"remove_selection": "Fjern markering",
|
||||
"empty_list": "Listen er tom.",
|
||||
"Select": "Vælg",
|
||||
"Supermarkets": "Supermarkeder",
|
||||
"User": "Bruger",
|
||||
"Keyword": "Nøgleord",
|
||||
"Advanced": "Avanceret",
|
||||
"Page": "Side",
|
||||
"Single": "Enkel",
|
||||
"Multiple": "Flere",
|
||||
"Reset": "Nulstil",
|
||||
"Options": "Indstillinger",
|
||||
"Create Food": "Opret mad",
|
||||
"create_food_desc": "Opret mad og sammenkæd den med denne opskrift.",
|
||||
"additional_options": "Yderligere indstillinger",
|
||||
"Importer_Help": "Mere information og hjælp til denne importer:",
|
||||
"Documentation": "Dokumentation",
|
||||
"Select_App_To_Import": "Vælg venligst en App at importere fra",
|
||||
"Import_Supported": "Import understøttet",
|
||||
"Export_Supported": "Eksport understøttet",
|
||||
"Import_Not_Yet_Supported": "Import endnu ikke understøttet",
|
||||
"Export_Not_Yet_Supported": "Eksport endnu ikke understøttet",
|
||||
"Import_Result_Info": "{imported} af {total} opskrifter blev importeret",
|
||||
"Recipes_In_Import": "Opskrifter i din importerede fil",
|
||||
"Toggle": "Skift",
|
||||
"Import_Error": "Der opstod en fejl under din importering. Udvid detaljerne i bunden af siden for at se fejlen.",
|
||||
"Warning_Delete_Supermarket_Category": "At slette en supermarkedskategori vil også slette alle relationer til mad. Er du sikker?",
|
||||
"New_Supermarket": "Opret nyt supermarked",
|
||||
"New_Supermarket_Category": "Opret ny supermarkedskategori",
|
||||
"Are_You_Sure": "Er du sikker?"
|
||||
}
|
||||
|
||||
@@ -202,6 +202,7 @@
|
||||
"Starting_Day": "Starting day of the week",
|
||||
"Meal_Types": "Meal types",
|
||||
"Meal_Type": "Meal type",
|
||||
"New_Entry": "New Entry",
|
||||
"Clone": "Clone",
|
||||
"Drag_Here_To_Delete": "Drag here to delete",
|
||||
"Meal_Type_Required": "Meal type is required",
|
||||
|
||||
@@ -379,5 +379,40 @@
|
||||
"Reset": "Herstel",
|
||||
"remember_search": "Onthoud zoekopdracht",
|
||||
"tree_select": "Gebruik boomselectie",
|
||||
"sql_debug": "SQL Debug"
|
||||
"sql_debug": "SQL Debug",
|
||||
"Bookmarklet": "Bladwijzer",
|
||||
"no_more_images_found": "Geen extra afbeeldingen gevonden op website.",
|
||||
"import_duplicates": "Om dubbelingen te voorkomen worden recepten met dezelfde naam als bestaande genegeerd. Vink dit vakje aan om alles te importeren.",
|
||||
"paste_json": "Plak json of html bron hier om recept te laden.",
|
||||
"Click_To_Edit": "Klik om te bewerken",
|
||||
"Imported": "Geïmporteerd",
|
||||
"Multiple": "Meerdere",
|
||||
"Single": "Enkele",
|
||||
"Options": "Opties",
|
||||
"Importer_Help": "Meer informatie en hulp over de importtool:",
|
||||
"Documentation": "Documentatie",
|
||||
"Select_App_To_Import": "Selecteer een app om van te importeren",
|
||||
"Import_Supported": "Import ondersteund",
|
||||
"Export_Supported": "Export ondersteund",
|
||||
"Import_Not_Yet_Supported": "Import nog niet ondersteund",
|
||||
"Export_Not_Yet_Supported": "Export nog niet ondersteund",
|
||||
"Import_Result_Info": "{imported} van {total} recepten zijn geïmporteerd",
|
||||
"Recipes_In_Import": "Recepten in je importbestand",
|
||||
"Toggle": "Schakelaar",
|
||||
"New_Supermarket": "Maak nieuwe supermarkt",
|
||||
"New_Supermarket_Category": "Maak nieuwe supermarktcategorie",
|
||||
"Are_You_Sure": "Weet je het zeker?",
|
||||
"Ingredient Editor": "Ingrediënten editor",
|
||||
"App": "App",
|
||||
"click_image_import": "Klik op de afbeelding die je wil importeren voor dit recept",
|
||||
"err_deleting_protected_resource": "Het object dat je probeert te verwijderen is in gebruik en kan daardoor niet verwijderd worden.",
|
||||
"one_url_per_line": "Een URL per regel",
|
||||
"Protected": "Beschermd",
|
||||
"Website": "Website",
|
||||
"Imported_From": "Geïmporteerd van",
|
||||
"Import_Error": "Er is een fout opgetreden tijdens je import. Breid de details aan de onderzijde van de pagina uit om ze te bekijken.",
|
||||
"Warning_Delete_Supermarket_Category": "Een supermarktcategorie verwijderen verwijdert ook alle relaties naar ingrediënten. Weet je het zeker?",
|
||||
"create_food_desc": "Maak een ingrediënt en link aan dit recept.",
|
||||
"additional_options": "Extra opties",
|
||||
"Create Food": "Maak Ingrediënt"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user