From 94e1fdfbff91fa39dba2d8a2108d12528d2c0163 Mon Sep 17 00:00:00 2001 From: Aaron <42084688+l0c4lh057@users.noreply.github.com> Date: Mon, 21 Dec 2020 20:00:46 +0100 Subject: [PATCH 01/20] Improve text to ingredient parsing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The previous implementation of parsing ingredients was very simple. I now wrote a parser that I would consider good. It takes care of several edge cases and notations. - Supports fraction unicode (½, ¼, ⅜, ...) - Supports notations like `1½` and `1 1/2` - Supports unit directly after the amount without space inbetween (`2g`, `2½g`) - Supports notes (`5g onion (cubed)` -> amount: 5, unit: g, ingredient: onion, note: cubed) - Supports notes (`5g onion, cubed` -> amount: 5, unit: g, ingredient: onion, note: cubed) - Does not break when both commas and brackets exist --- cookbook/helper/ingredient_parser.py | 131 +++++++++++++++++++++++++++ cookbook/helper/recipe_url_import.py | 40 ++------ 2 files changed, 138 insertions(+), 33 deletions(-) create mode 100644 cookbook/helper/ingredient_parser.py diff --git a/cookbook/helper/ingredient_parser.py b/cookbook/helper/ingredient_parser.py new file mode 100644 index 000000000..2e642c39e --- /dev/null +++ b/cookbook/helper/ingredient_parser.py @@ -0,0 +1,131 @@ +import unicodedata +import string + +def parse_fraction(x): + if len(x) == 1 and "fraction" in unicodedata.decomposition(x): + frac_split = unicodedata.decomposition(x[-1:]).split() + return float((frac_split[1]).replace("003", "")) / float((frac_split[3]).replace("003", "")) + else: + frac_split = x.split("/") + if not len(frac_split) == 2: + raise ValueError + try: + return int(frac_split[0]) / int(frac_split[1]) + except ZeroDivisionError: + raise ValueError + +def parse_amount(x): + amount = 0 + unit = "" + + did_check_frac = False + end = 0 + while end < len(x) and (x[end] in string.digits or ((x[end] == "." or x[end] == ",") and end + 1 < len(x) and x[end+1] in string.digits)): + end += 1 + if end > 0: + amount = float(x[:end].replace(",", ".")) + else: + amount = parse_fraction(x[0]) + end += 1 + did_check_frac = True + if end < len(x): + if did_check_frac: + unit = x[end:] + else: + try: + amount += parse_fraction(x[end]) + unit = x[end+1:] + except ValueError: + unit = x[end:] + return amount, unit + +def parse_ingredient_with_comma(tokens): + ingredient = "" + note = "" + start = 0 + # search for first occurence of an argument ending in a comma + while start < len(tokens) and not tokens[start].endswith(","): + start += 1 + if start == len(tokens): + # no token ending in a comma found -> use everything as ingredient + ingredient = " ".join(tokens) + else: + ingredient = " ".join(tokens[:start+1])[:-1] + note = " ".join(tokens[start+1:]) + return ingredient, note + +def parse_ingredient(tokens): + ingredient = "" + note = "" + if tokens[-1].endswith(")"): + # last argument ends with closing bracket -> look for opening bracket + start = len(tokens) - 1 + while not tokens[start].startswith("(") and not start == 0: + start -= 1 + if start == 0: + # the whole list is wrapped in brackets -> assume it is an error (e.g. assumed first argument was the unit) + raise ValueError + elif start < 0: + # no opening bracket anywhere -> just ignore the last bracket + ingredient, note = parse_ingredient_with_comma(tokens) + else: + # opening bracket found -> split in ingredient and note, remove brackets from note + note = " ".join(tokens[start:])[1:-1] + ingredient = " ".join(tokens[:start]) + else: + ingredient, note = parse_ingredient_with_comma(tokens) + return ingredient, note + +def parse(x): + # initialize default values + amount = 0 + unit = "" + ingredient = "" + note = "" + + tokens = x.split() + if len(tokens) == 1: + # there only is one argument, that must be the ingredient + ingredient = tokens[0] + else: + try: + # try to parse first argument as amount + amount, unit = parse_amount(tokens[0]) + # only try to parse second argument as amount if there are at least three arguments + # if it already has a unit there can't be a fraction for the amount + if len(tokens) > 2: + try: + if not unit == "": + # a unit is already found, no need to try the second argument for a fraction + # probably not the best method to do it, but I didn't want to make an if check and paste the exact same thing in the else as already is in the except + raise ValueError + # try to parse second argument as amount and add that, in case of "2 1/2" or "2 ½" + amount += parse_fraction(tokens[1]) + # assume that units can't end with a comma + if len(tokens) > 3 and not tokens[2].endswith(","): + # try to use third argument as unit and everything else as ingredient, use everything as ingredient if it fails + try: + ingredient, note = parse_ingredient(tokens[3:]) + unit = tokens[2] + except ValueError: + ingredient, note = parse_ingredient(tokens[2:]) + else: + ingredient, note = parse_ingredient(tokens[2:]) + except ValueError: + # assume that units can't end with a comma + if not tokens[1].endswith(","): + # try to use second argument as unit and everything else as ingredient, use everything as ingredient if it fails + try: + ingredient, note = parse_ingredient(tokens[2:]) + unit = tokens[1] + except ValueError: + ingredient, note = parse_ingredient(tokens[1:]) + else: + ingredient, note = parse_ingredient(tokens[1:]) + else: + # only two arguments, first one is the amount which means this is the ingredient + ingredient = tokens[1] + except ValueError: + # can't parse first argument as amount -> no unit -> parse everything as ingredient + ingredient, note = parse_ingredient(tokens) + return amount, unit.strip(), ingredient.strip(), note.strip() diff --git a/cookbook/helper/recipe_url_import.py b/cookbook/helper/recipe_url_import.py index fe2d845b3..bdb11b583 100644 --- a/cookbook/helper/recipe_url_import.py +++ b/cookbook/helper/recipe_url_import.py @@ -11,6 +11,7 @@ from django.utils.dateparse import parse_duration from django.utils.translation import gettext as _ from cookbook.models import Keyword +from cookbook.helper.ingredient_parser import parse as parse_ingredient def get_from_html(html_text, url): @@ -70,39 +71,12 @@ def find_recipe_json(ld_json, url): ingredients = [] for x in ld_json['recipeIngredient']: - ingredient_split = x.split() - ingredient = None - amount = 0 - unit = '' - if len(ingredient_split) > 2: - ingredient = " ".join(ingredient_split[2:]) - unit = ingredient_split[1] - - try: - if 'fraction' in unicodedata.decomposition(ingredient_split[0]): - frac_split = unicodedata.decomposition(ingredient_split[0]).split() - amount = round(float((frac_split[1]).replace('003', '')) / float((frac_split[3]).replace('003', '')), 3) - else: - raise TypeError - except TypeError: # raised by unicodedata.decomposition if there was no unicode character in parsed data - try: - amount = float(ingredient_split[0].replace(',', '.')) - except ValueError: - amount = 0 - ingredient = " ".join(ingredient_split) - if len(ingredient_split) == 2: - ingredient = " ".join(ingredient_split[1:]) - unit = '' - try: - amount = float(ingredient_split[0].replace(',', '.')) - except ValueError: - amount = 0 - ingredient = " ".join(ingredient_split) - if len(ingredient_split) == 1: - ingredient = " ".join(ingredient_split) - - if ingredient: - ingredients.append({'amount': amount, 'unit': {'text': unit, 'id': random.randrange(10000, 99999)}, 'ingredient': {'text': ingredient, 'id': random.randrange(10000, 99999)}, 'original': x}) + try: + amount, unit, ingredient, note = parse_ingredient(x) + if ingredient: + ingredients.append({'amount': amount, 'unit': {'text': unit, 'id': random.randrange(10000, 99999)}, 'ingredient': {'text': ingredient, 'id': random.randrange(10000, 99999)}, "note": note, 'original': x}) + except: + pass ld_json['recipeIngredient'] = ingredients else: From 5e07c6130fcf4ece38de4f487d979ab938caa858 Mon Sep 17 00:00:00 2001 From: Aaron <42084688+l0c4lh057@users.noreply.github.com> Date: Mon, 21 Dec 2020 20:14:32 +0100 Subject: [PATCH 02/20] Switch to 4-space indentation --- cookbook/helper/ingredient_parser.py | 238 +++++++++++++-------------- 1 file changed, 119 insertions(+), 119 deletions(-) diff --git a/cookbook/helper/ingredient_parser.py b/cookbook/helper/ingredient_parser.py index 2e642c39e..bb075c3c0 100644 --- a/cookbook/helper/ingredient_parser.py +++ b/cookbook/helper/ingredient_parser.py @@ -2,130 +2,130 @@ import unicodedata import string def parse_fraction(x): - if len(x) == 1 and "fraction" in unicodedata.decomposition(x): - frac_split = unicodedata.decomposition(x[-1:]).split() - return float((frac_split[1]).replace("003", "")) / float((frac_split[3]).replace("003", "")) - else: - frac_split = x.split("/") - if not len(frac_split) == 2: - raise ValueError - try: - return int(frac_split[0]) / int(frac_split[1]) - except ZeroDivisionError: - raise ValueError + if len(x) == 1 and "fraction" in unicodedata.decomposition(x): + frac_split = unicodedata.decomposition(x[-1:]).split() + return float((frac_split[1]).replace("003", "")) / float((frac_split[3]).replace("003", "")) + else: + frac_split = x.split("/") + if not len(frac_split) == 2: + raise ValueError + try: + return int(frac_split[0]) / int(frac_split[1]) + except ZeroDivisionError: + raise ValueError def parse_amount(x): - amount = 0 - unit = "" - - did_check_frac = False - end = 0 - while end < len(x) and (x[end] in string.digits or ((x[end] == "." or x[end] == ",") and end + 1 < len(x) and x[end+1] in string.digits)): - end += 1 - if end > 0: - amount = float(x[:end].replace(",", ".")) - else: - amount = parse_fraction(x[0]) - end += 1 - did_check_frac = True - if end < len(x): - if did_check_frac: - unit = x[end:] - else: - try: - amount += parse_fraction(x[end]) - unit = x[end+1:] - except ValueError: - unit = x[end:] - return amount, unit + amount = 0 + unit = "" + + did_check_frac = False + end = 0 + while end < len(x) and (x[end] in string.digits or ((x[end] == "." or x[end] == ",") and end + 1 < len(x) and x[end+1] in string.digits)): + end += 1 + if end > 0: + amount = float(x[:end].replace(",", ".")) + else: + amount = parse_fraction(x[0]) + end += 1 + did_check_frac = True + if end < len(x): + if did_check_frac: + unit = x[end:] + else: + try: + amount += parse_fraction(x[end]) + unit = x[end+1:] + except ValueError: + unit = x[end:] + return amount, unit def parse_ingredient_with_comma(tokens): - ingredient = "" - note = "" - start = 0 - # search for first occurence of an argument ending in a comma - while start < len(tokens) and not tokens[start].endswith(","): - start += 1 - if start == len(tokens): - # no token ending in a comma found -> use everything as ingredient - ingredient = " ".join(tokens) - else: - ingredient = " ".join(tokens[:start+1])[:-1] - note = " ".join(tokens[start+1:]) - return ingredient, note + ingredient = "" + note = "" + start = 0 + # search for first occurence of an argument ending in a comma + while start < len(tokens) and not tokens[start].endswith(","): + start += 1 + if start == len(tokens): + # no token ending in a comma found -> use everything as ingredient + ingredient = " ".join(tokens) + else: + ingredient = " ".join(tokens[:start+1])[:-1] + note = " ".join(tokens[start+1:]) + return ingredient, note def parse_ingredient(tokens): - ingredient = "" - note = "" - if tokens[-1].endswith(")"): - # last argument ends with closing bracket -> look for opening bracket - start = len(tokens) - 1 - while not tokens[start].startswith("(") and not start == 0: - start -= 1 - if start == 0: - # the whole list is wrapped in brackets -> assume it is an error (e.g. assumed first argument was the unit) - raise ValueError - elif start < 0: - # no opening bracket anywhere -> just ignore the last bracket - ingredient, note = parse_ingredient_with_comma(tokens) - else: - # opening bracket found -> split in ingredient and note, remove brackets from note - note = " ".join(tokens[start:])[1:-1] - ingredient = " ".join(tokens[:start]) - else: - ingredient, note = parse_ingredient_with_comma(tokens) - return ingredient, note + ingredient = "" + note = "" + if tokens[-1].endswith(")"): + # last argument ends with closing bracket -> look for opening bracket + start = len(tokens) - 1 + while not tokens[start].startswith("(") and not start == 0: + start -= 1 + if start == 0: + # the whole list is wrapped in brackets -> assume it is an error (e.g. assumed first argument was the unit) + raise ValueError + elif start < 0: + # no opening bracket anywhere -> just ignore the last bracket + ingredient, note = parse_ingredient_with_comma(tokens) + else: + # opening bracket found -> split in ingredient and note, remove brackets from note + note = " ".join(tokens[start:])[1:-1] + ingredient = " ".join(tokens[:start]) + else: + ingredient, note = parse_ingredient_with_comma(tokens) + return ingredient, note def parse(x): - # initialize default values - amount = 0 - unit = "" - ingredient = "" - note = "" - - tokens = x.split() - if len(tokens) == 1: - # there only is one argument, that must be the ingredient - ingredient = tokens[0] - else: - try: - # try to parse first argument as amount - amount, unit = parse_amount(tokens[0]) - # only try to parse second argument as amount if there are at least three arguments - # if it already has a unit there can't be a fraction for the amount - if len(tokens) > 2: - try: - if not unit == "": - # a unit is already found, no need to try the second argument for a fraction - # probably not the best method to do it, but I didn't want to make an if check and paste the exact same thing in the else as already is in the except - raise ValueError - # try to parse second argument as amount and add that, in case of "2 1/2" or "2 ½" - amount += parse_fraction(tokens[1]) - # assume that units can't end with a comma - if len(tokens) > 3 and not tokens[2].endswith(","): - # try to use third argument as unit and everything else as ingredient, use everything as ingredient if it fails - try: - ingredient, note = parse_ingredient(tokens[3:]) - unit = tokens[2] - except ValueError: - ingredient, note = parse_ingredient(tokens[2:]) - else: - ingredient, note = parse_ingredient(tokens[2:]) - except ValueError: - # assume that units can't end with a comma - if not tokens[1].endswith(","): - # try to use second argument as unit and everything else as ingredient, use everything as ingredient if it fails - try: - ingredient, note = parse_ingredient(tokens[2:]) - unit = tokens[1] - except ValueError: - ingredient, note = parse_ingredient(tokens[1:]) - else: - ingredient, note = parse_ingredient(tokens[1:]) - else: - # only two arguments, first one is the amount which means this is the ingredient - ingredient = tokens[1] - except ValueError: - # can't parse first argument as amount -> no unit -> parse everything as ingredient - ingredient, note = parse_ingredient(tokens) - return amount, unit.strip(), ingredient.strip(), note.strip() + # initialize default values + amount = 0 + unit = "" + ingredient = "" + note = "" + + tokens = x.split() + if len(tokens) == 1: + # there only is one argument, that must be the ingredient + ingredient = tokens[0] + else: + try: + # try to parse first argument as amount + amount, unit = parse_amount(tokens[0]) + # only try to parse second argument as amount if there are at least three arguments + # if it already has a unit there can't be a fraction for the amount + if len(tokens) > 2: + try: + if not unit == "": + # a unit is already found, no need to try the second argument for a fraction + # probably not the best method to do it, but I didn't want to make an if check and paste the exact same thing in the else as already is in the except + raise ValueError + # try to parse second argument as amount and add that, in case of "2 1/2" or "2 ½" + amount += parse_fraction(tokens[1]) + # assume that units can't end with a comma + if len(tokens) > 3 and not tokens[2].endswith(","): + # try to use third argument as unit and everything else as ingredient, use everything as ingredient if it fails + try: + ingredient, note = parse_ingredient(tokens[3:]) + unit = tokens[2] + except ValueError: + ingredient, note = parse_ingredient(tokens[2:]) + else: + ingredient, note = parse_ingredient(tokens[2:]) + except ValueError: + # assume that units can't end with a comma + if not tokens[1].endswith(","): + # try to use second argument as unit and everything else as ingredient, use everything as ingredient if it fails + try: + ingredient, note = parse_ingredient(tokens[2:]) + unit = tokens[1] + except ValueError: + ingredient, note = parse_ingredient(tokens[1:]) + else: + ingredient, note = parse_ingredient(tokens[1:]) + else: + # only two arguments, first one is the amount which means this is the ingredient + ingredient = tokens[1] + except ValueError: + # can't parse first argument as amount -> no unit -> parse everything as ingredient + ingredient, note = parse_ingredient(tokens) + return amount, unit.strip(), ingredient.strip(), note.strip() From 79396cec9e3047427891346859712c4158208342 Mon Sep 17 00:00:00 2001 From: Aaron <42084688+l0c4lh057@users.noreply.github.com> Date: Mon, 21 Dec 2020 22:42:27 +0100 Subject: [PATCH 03/20] switch from double to single quotes --- cookbook/helper/ingredient_parser.py | 50 ++++++++++++++-------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/cookbook/helper/ingredient_parser.py b/cookbook/helper/ingredient_parser.py index bb075c3c0..1f1b510a9 100644 --- a/cookbook/helper/ingredient_parser.py +++ b/cookbook/helper/ingredient_parser.py @@ -2,11 +2,11 @@ import unicodedata import string def parse_fraction(x): - if len(x) == 1 and "fraction" in unicodedata.decomposition(x): + if len(x) == 1 and 'fraction' in unicodedata.decomposition(x): frac_split = unicodedata.decomposition(x[-1:]).split() - return float((frac_split[1]).replace("003", "")) / float((frac_split[3]).replace("003", "")) + return float((frac_split[1]).replace('003', '')) / float((frac_split[3]).replace('003', '')) else: - frac_split = x.split("/") + frac_split = x.split('/') if not len(frac_split) == 2: raise ValueError try: @@ -16,14 +16,14 @@ def parse_fraction(x): def parse_amount(x): amount = 0 - unit = "" + unit = '' did_check_frac = False end = 0 - while end < len(x) and (x[end] in string.digits or ((x[end] == "." or x[end] == ",") and end + 1 < len(x) and x[end+1] in string.digits)): + while end < len(x) and (x[end] in string.digits or ((x[end] == '.' or x[end] == ',') and end + 1 < len(x) and x[end+1] in string.digits)): end += 1 if end > 0: - amount = float(x[:end].replace(",", ".")) + amount = float(x[:end].replace(',', '.')) else: amount = parse_fraction(x[0]) end += 1 @@ -40,27 +40,27 @@ def parse_amount(x): return amount, unit def parse_ingredient_with_comma(tokens): - ingredient = "" - note = "" + ingredient = '' + note = '' start = 0 # search for first occurence of an argument ending in a comma - while start < len(tokens) and not tokens[start].endswith(","): + while start < len(tokens) and not tokens[start].endswith(','): start += 1 if start == len(tokens): # no token ending in a comma found -> use everything as ingredient - ingredient = " ".join(tokens) + ingredient = ' '.join(tokens) else: - ingredient = " ".join(tokens[:start+1])[:-1] - note = " ".join(tokens[start+1:]) + ingredient = ' '.join(tokens[:start+1])[:-1] + note = ' '.join(tokens[start+1:]) return ingredient, note def parse_ingredient(tokens): - ingredient = "" - note = "" - if tokens[-1].endswith(")"): + ingredient = '' + note = '' + if tokens[-1].endswith(')'): # last argument ends with closing bracket -> look for opening bracket start = len(tokens) - 1 - while not tokens[start].startswith("(") and not start == 0: + while not tokens[start].startswith('(') and not start == 0: start -= 1 if start == 0: # the whole list is wrapped in brackets -> assume it is an error (e.g. assumed first argument was the unit) @@ -70,8 +70,8 @@ def parse_ingredient(tokens): ingredient, note = parse_ingredient_with_comma(tokens) else: # opening bracket found -> split in ingredient and note, remove brackets from note - note = " ".join(tokens[start:])[1:-1] - ingredient = " ".join(tokens[:start]) + note = ' '.join(tokens[start:])[1:-1] + ingredient = ' '.join(tokens[:start]) else: ingredient, note = parse_ingredient_with_comma(tokens) return ingredient, note @@ -79,9 +79,9 @@ def parse_ingredient(tokens): def parse(x): # initialize default values amount = 0 - unit = "" - ingredient = "" - note = "" + unit = '' + ingredient = '' + note = '' tokens = x.split() if len(tokens) == 1: @@ -95,14 +95,14 @@ def parse(x): # if it already has a unit there can't be a fraction for the amount if len(tokens) > 2: try: - if not unit == "": + if not unit == '': # a unit is already found, no need to try the second argument for a fraction # probably not the best method to do it, but I didn't want to make an if check and paste the exact same thing in the else as already is in the except raise ValueError - # try to parse second argument as amount and add that, in case of "2 1/2" or "2 ½" + # try to parse second argument as amount and add that, in case of '2 1/2' or '2 ½' amount += parse_fraction(tokens[1]) # assume that units can't end with a comma - if len(tokens) > 3 and not tokens[2].endswith(","): + if len(tokens) > 3 and not tokens[2].endswith(','): # try to use third argument as unit and everything else as ingredient, use everything as ingredient if it fails try: ingredient, note = parse_ingredient(tokens[3:]) @@ -113,7 +113,7 @@ def parse(x): ingredient, note = parse_ingredient(tokens[2:]) except ValueError: # assume that units can't end with a comma - if not tokens[1].endswith(","): + if not tokens[1].endswith(','): # try to use second argument as unit and everything else as ingredient, use everything as ingredient if it fails try: ingredient, note = parse_ingredient(tokens[2:]) From e7fc15dc727d25c668078d4423e34ef1c0546faa Mon Sep 17 00:00:00 2001 From: Aaron <42084688+l0c4lh057@users.noreply.github.com> Date: Tue, 22 Dec 2020 23:50:59 +0100 Subject: [PATCH 04/20] Show advanced search again if it was used --- cookbook/templates/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cookbook/templates/index.html b/cookbook/templates/index.html index c4f9799fa..568387135 100644 --- a/cookbook/templates/index.html +++ b/cookbook/templates/index.html @@ -62,7 +62,7 @@
- [ ] in list for easier usage in markdown based "
"documents."
@@ -116,63 +125,63 @@ msgstr ""
"Voeg -[ ]in de lijst toe voor gemakkelijker gebruik in op "
"markdown gebaseerde documenten."
-#: .\cookbook\forms.py:119
+#: .\cookbook\forms.py:120
msgid "Export Base64 encoded image?"
msgstr "Base64-gecodeerde afbeelding exporteren?"
-#: .\cookbook\forms.py:123
+#: .\cookbook\forms.py:124
msgid "Download export directly or show on page?"
msgstr "De export direct downloaden of op de pagina weergeven?"
-#: .\cookbook\forms.py:129
+#: .\cookbook\forms.py:130
msgid "Simply paste a JSON export into this textarea and click import."
msgstr "Plak een JSON export in dit tekstveld en klik op importeren."
-#: .\cookbook\forms.py:138
+#: .\cookbook\forms.py:139
msgid "New Unit"
msgstr "Nieuwe eenheid"
-#: .\cookbook\forms.py:139
+#: .\cookbook\forms.py:140
msgid "New unit that other gets replaced by."
msgstr "Nieuwe eenheid waarmee de andere wordt vervangen."
-#: .\cookbook\forms.py:144
+#: .\cookbook\forms.py:145
msgid "Old Unit"
msgstr "Oude eenheid"
-#: .\cookbook\forms.py:145
+#: .\cookbook\forms.py:146
msgid "Unit that should be replaced."
msgstr "Eenheid die vervangen dient te worden."
-#: .\cookbook\forms.py:155
+#: .\cookbook\forms.py:156
msgid "New Food"
msgstr "Nieuw Ingredïent"
-#: .\cookbook\forms.py:156
+#: .\cookbook\forms.py:157
msgid "New food that other gets replaced by."
msgstr "Nieuw Ingredïent dat Oud Ingrediënt vervangt."
-#: .\cookbook\forms.py:161
+#: .\cookbook\forms.py:162
msgid "Old Food"
msgstr "Oud Ingrediënt"
-#: .\cookbook\forms.py:162
+#: .\cookbook\forms.py:163
msgid "Food that should be replaced."
msgstr "Te vervangen Ingrediënt."
-#: .\cookbook\forms.py:174
+#: .\cookbook\forms.py:175
msgid "Add your comment: "
msgstr "Voeg een opmerking toe:"
-#: .\cookbook\forms.py:199
+#: .\cookbook\forms.py:200
msgid "Leave empty for dropbox and enter app password for nextcloud."
msgstr "Laat leeg voor dropbox en vul het app wachtwoord in voor nextcloud."
-#: .\cookbook\forms.py:202
+#: .\cookbook\forms.py:203
msgid "Leave empty for nextcloud and enter api token for dropbox."
msgstr "Laat leeg voor nextcloud en vul de api token in voor dropbox."
-#: .\cookbook\forms.py:210
+#: .\cookbook\forms.py:211
msgid ""
"Leave empty for dropbox and enter only base url for nextcloud "
"(/remote.php/webdav/ is added automatically)"
@@ -180,26 +189,26 @@ msgstr ""
"Laat leeg voor dropbox en vul enkel de base url voor nextcloud in. "
"(/remote.php/webdav/ wordt automatisch toegevoegd.)"
-#: .\cookbook\forms.py:229
+#: .\cookbook\forms.py:230
msgid "Search String"
msgstr "Zoekopdracht"
-#: .\cookbook\forms.py:243
+#: .\cookbook\forms.py:244
msgid "File ID"
msgstr "Bestands ID"
-#: .\cookbook\forms.py:261
+#: .\cookbook\forms.py:262
msgid "You must provide at least a recipe or a title."
msgstr "Je moet minimaal één recept of titel te specificeren."
-#: .\cookbook\forms.py:270
+#: .\cookbook\forms.py:271
msgid "You can list default users to share recipes with in the settings."
msgstr ""
"Je kan in de instellingen standaard gebruikers in stellen om de recepten met"
" te delen."
-#: .\cookbook\forms.py:271
-#: .\cookbook\templates\forms\edit_internal_recipe.html:323
+#: .\cookbook\forms.py:272
+#: .\cookbook\templates\forms\edit_internal_recipe.html:352
msgid ""
"You can use markdown to format this field. See the docs here"
@@ -207,41 +216,42 @@ msgstr ""
"Je kunt markdown gebruiken om dit veld te op te maken. Bekijk de documentatie hier."
-#: .\cookbook\forms.py:272
+#: .\cookbook\forms.py:273
msgid "Scaling factor for recipe."
msgstr "Schaalfactor voor recept."
-#: .\cookbook\forms.py:283
+#: .\cookbook\forms.py:284
msgid "A username is not required, if left blank the new user can choose one."
msgstr ""
"Een gebruikersnaam is niet verplicht. Als het veld leeg is kan de gebruiker "
"er een kiezen."
-#: .\cookbook\helper\permission_helper.py:113
-#: .\cookbook\helper\permission_helper.py:155
-#: .\cookbook\helper\permission_helper.py:169
-#: .\cookbook\helper\permission_helper.py:180
-#: .\cookbook\helper\permission_helper.py:191 .\cookbook\views\data.py:27
+#: .\cookbook\helper\permission_helper.py:130
+#: .\cookbook\helper\permission_helper.py:186
+#: .\cookbook\helper\permission_helper.py:200
+#: .\cookbook\helper\permission_helper.py:211
+#: .\cookbook\helper\permission_helper.py:222 .\cookbook\views\data.py:27
#: .\cookbook\views\views.py:79 .\cookbook\views\views.py:158
msgid "You do not have the required permissions to view this page!"
msgstr "Je hebt niet de benodigde machtigingen om deze pagina te bekijken!"
-#: .\cookbook\helper\permission_helper.py:123
+#: .\cookbook\helper\permission_helper.py:140
msgid "You are not logged in and therefore cannot view this page!"
msgstr "Je bent niet ingelogd en kan deze pagina daarom niet bekijken!"
-#: .\cookbook\helper\permission_helper.py:127
-#: .\cookbook\helper\permission_helper.py:141 .\cookbook\views\delete.py:132
+#: .\cookbook\helper\permission_helper.py:144
+#: .\cookbook\helper\permission_helper.py:158
+#: .\cookbook\helper\permission_helper.py:172 .\cookbook\views\delete.py:132
msgid "You cannot interact with this object as its not owned by you!"
msgstr "Je kunt dit object niet bewerken omdat je de eigenaar niet bent!"
-#: .\cookbook\helper\recipe_url_import.py:35
+#: .\cookbook\helper\recipe_url_import.py:36
msgid "The requested site provided malformed data and cannot be read."
msgstr ""
"De opgevraagde site heeft misvormde data verstrekt en kan niet gelezen "
"worden."
-#: .\cookbook\helper\recipe_url_import.py:44
+#: .\cookbook\helper\recipe_url_import.py:45
msgid ""
"The requested site does not provide any recognized data format to import the"
" recipe from."
@@ -249,7 +259,7 @@ msgstr ""
"De opgevraagde site biedt geen bekend gegevensformaat aan om het recept van "
"te importeren."
-#: .\cookbook\helper\recipe_url_import.py:152
+#: .\cookbook\helper\recipe_url_import.py:159
msgid "Imported from "
msgstr "Geïmporteerd van"
@@ -269,43 +279,43 @@ msgstr "Avondeten"
msgid "Other"
msgstr "Overige"
-#: .\cookbook\models.py:59 .\cookbook\templates\shopping_list.html:44
+#: .\cookbook\models.py:60 .\cookbook\templates\shopping_list.html:44
msgid "Search"
msgstr "Zoeken"
-#: .\cookbook\models.py:59 .\cookbook\templates\base.html:74
+#: .\cookbook\models.py:60 .\cookbook\templates\base.html:74
#: .\cookbook\templates\meal_plan.html:5 .\cookbook\views\delete.py:149
#: .\cookbook\views\edit.py:194 .\cookbook\views\new.py:156
msgid "Meal-Plan"
msgstr "Maaltijdplan"
-#: .\cookbook\models.py:59 .\cookbook\templates\base.html:71
+#: .\cookbook\models.py:60 .\cookbook\templates\base.html:71
msgid "Books"
msgstr "Boeken"
-#: .\cookbook\models.py:65
+#: .\cookbook\models.py:66
msgid "Small"
msgstr "Klein"
-#: .\cookbook\models.py:65
+#: .\cookbook\models.py:66
msgid "Large"
msgstr "Groot"
-#: .\cookbook\models.py:173
-#: .\cookbook\templates\forms\edit_internal_recipe.html:149
+#: .\cookbook\models.py:175
+#: .\cookbook\templates\forms\edit_internal_recipe.html:178
msgid "Text"
msgstr "Tekst"
-#: .\cookbook\models.py:173
-#: .\cookbook\templates\forms\edit_internal_recipe.html:150
+#: .\cookbook\models.py:175
+#: .\cookbook\templates\forms\edit_internal_recipe.html:179
msgid "Time"
msgstr "Tijd"
#: .\cookbook\tables.py:29 .\cookbook\templates\books.html:36
#: .\cookbook\templates\generic\edit_template.html:6
#: .\cookbook\templates\generic\edit_template.html:14
-#: .\cookbook\templates\meal_plan.html:238
-#: .\cookbook\templates\recipe_view.html:36
+#: .\cookbook\templates\meal_plan.html:274
+#: .\cookbook\templates\recipe_view.html:38
#: .\cookbook\templates\recipes_table.html:77
#: .\cookbook\templates\shopping_list.html:29
msgid "Edit"
@@ -316,7 +326,7 @@ msgstr "Bewerken"
#: .\cookbook\templates\generic\delete_template.html:5
#: .\cookbook\templates\generic\delete_template.html:13
#: .\cookbook\templates\generic\edit_template.html:27
-#: .\cookbook\templates\meal_plan.html:234
+#: .\cookbook\templates\meal_plan.html:270
msgid "Delete"
msgstr "Verwijderen"
@@ -364,7 +374,7 @@ msgid "Tags"
msgstr "Labels"
#: .\cookbook\templates\base.html:91 .\cookbook\views\delete.py:78
-#: .\cookbook\views\edit.py:76 .\cookbook\views\lists.py:20
+#: .\cookbook\views\edit.py:76 .\cookbook\views\lists.py:21
#: .\cookbook\views\new.py:56
msgid "Keyword"
msgstr "Sleutelwoord"
@@ -472,8 +482,8 @@ msgid ""
"On this Page you can manage all storage folder locations that should be "
"monitored and synced"
msgstr ""
-"Op deze pagina kan je alle mappen die gemonitord en gesynchroniseerd dienen "
-"te worden beheren."
+"Op deze pagina kan je alle mappen die bewaakt en gesynchroniseerd dienen te "
+"worden beheren."
#: .\cookbook\templates\batch\monitor.html:16
msgid "The path must be in the following format"
@@ -504,8 +514,8 @@ msgstr "Kookboeken"
msgid "New Book"
msgstr "Nieuw boek"
-#: .\cookbook\templates\books.html:27 .\cookbook\templates\recipe_view.html:67
-#: .\cookbook\templates\recipe_view.html:389
+#: .\cookbook\templates\books.html:27 .\cookbook\templates\recipe_view.html:69
+#: .\cookbook\templates\recipe_view.html:451
msgid "by"
msgstr "door"
@@ -515,7 +525,7 @@ msgstr "Recepten in/uitschakelen"
#: .\cookbook\templates\books.html:54
#: .\cookbook\templates\meal_plan_entry.html:48
-#: .\cookbook\templates\recipe_view.html:90
+#: .\cookbook\templates\recipe_view.html:92
#: .\cookbook\templates\recipes_table.html:59
msgid "Last cooked"
msgstr "Laatst bereid"
@@ -529,8 +539,8 @@ msgid "Export Recipes"
msgstr "Recepten exporteren"
#: .\cookbook\templates\export.html:19
-#: .\cookbook\templates\recipe_view.html:50
-#: .\cookbook\templates\shopping_list.html:249
+#: .\cookbook\templates\recipe_view.html:52
+#: .\cookbook\templates\shopping_list.html:272
msgid "Export"
msgstr "Exporteren"
@@ -556,16 +566,16 @@ msgid "Import new Recipe"
msgstr "Nieuw recept importeren"
#: .\cookbook\templates\forms\edit_import_recipe.html:14
-#: .\cookbook\templates\forms\edit_internal_recipe.html:335
-#: .\cookbook\templates\forms\edit_internal_recipe.html:359
+#: .\cookbook\templates\forms\edit_internal_recipe.html:364
+#: .\cookbook\templates\forms\edit_internal_recipe.html:393
#: .\cookbook\templates\generic\edit_template.html:23
#: .\cookbook\templates\generic\new_template.html:23
#: .\cookbook\templates\include\log_cooking.html:28
-#: .\cookbook\templates\meal_plan.html:282
-#: .\cookbook\templates\recipe_view.html:440
+#: .\cookbook\templates\meal_plan.html:318
+#: .\cookbook\templates\recipe_view.html:502
#: .\cookbook\templates\settings.html:28 .\cookbook\templates\settings.html:35
#: .\cookbook\templates\settings.html:57 .\cookbook\templates\settings.html:72
-#: .\cookbook\templates\shopping_list.html:251
+#: .\cookbook\templates\shopping_list.html:274
msgid "Save"
msgstr "Opslaan"
@@ -575,8 +585,8 @@ msgid "Edit Recipe"
msgstr "Recept bewerken"
#: .\cookbook\templates\forms\edit_internal_recipe.html:59
-msgid "Preperation Time"
-msgstr "Voorbereidingstijd"
+msgid "Preparation Time"
+msgstr "Bereidingstijd"
#: .\cookbook\templates\forms\edit_internal_recipe.html:62
msgid "Waiting Time"
@@ -586,153 +596,191 @@ msgstr "Wachttijd"
msgid "Select Keywords"
msgstr "Selecteer sleutelwoorden"
-#: .\cookbook\templates\forms\edit_internal_recipe.html:97
-#: .\cookbook\templates\forms\edit_internal_recipe.html:386
-#: .\cookbook\templates\recipe_view.html:228
-msgid "Step"
-msgstr "Stap"
+#: .\cookbook\templates\forms\edit_internal_recipe.html:88
+#: .\cookbook\templates\recipe_view.html:218
+msgid "Nutrition"
+msgstr "Voedingswaarde"
-#: .\cookbook\templates\forms\edit_internal_recipe.html:113
+#: .\cookbook\templates\forms\edit_internal_recipe.html:92
+#: .\cookbook\templates\forms\edit_internal_recipe.html:142
msgid "Delete Step"
msgstr "Verwijder stap"
-#: .\cookbook\templates\forms\edit_internal_recipe.html:118
+#: .\cookbook\templates\forms\edit_internal_recipe.html:96
+#: .\cookbook\templates\recipe_view.html:222
+msgid "Calories"
+msgstr "Calorieën"
+
+#: .\cookbook\templates\forms\edit_internal_recipe.html:99
+#: .\cookbook\templates\recipe_view.html:230
+msgid "Carbohydrates"
+msgstr "Koolhydraten"
+
+#: .\cookbook\templates\forms\edit_internal_recipe.html:102
+#: .\cookbook\templates\recipe_view.html:238
+msgid "Fats"
+msgstr "Vetten"
+
+#: .\cookbook\templates\forms\edit_internal_recipe.html:104
+#: .\cookbook\templates\recipe_view.html:246
+msgid "Proteins"
+msgstr "Eiwitten"
+
+#: .\cookbook\templates\forms\edit_internal_recipe.html:126
+#: .\cookbook\templates\forms\edit_internal_recipe.html:426
+#: .\cookbook\templates\recipe_view.html:287
+msgid "Step"
+msgstr "Stap"
+
+#: .\cookbook\templates\forms\edit_internal_recipe.html:147
msgid "Show as header"
msgstr "Laat als kop zien"
-#: .\cookbook\templates\forms\edit_internal_recipe.html:124
+#: .\cookbook\templates\forms\edit_internal_recipe.html:153
msgid "Hide as header"
msgstr "Verbergen als kop"
-#: .\cookbook\templates\forms\edit_internal_recipe.html:129
+#: .\cookbook\templates\forms\edit_internal_recipe.html:158
msgid "Move Up"
msgstr "Verplaats omhoog"
-#: .\cookbook\templates\forms\edit_internal_recipe.html:134
+#: .\cookbook\templates\forms\edit_internal_recipe.html:163
msgid "Move Down"
msgstr "Verplaats omlaag"
-#: .\cookbook\templates\forms\edit_internal_recipe.html:143
+#: .\cookbook\templates\forms\edit_internal_recipe.html:172
msgid "Step Name"
msgstr "Stap naam"
-#: .\cookbook\templates\forms\edit_internal_recipe.html:147
+#: .\cookbook\templates\forms\edit_internal_recipe.html:176
msgid "Step Type"
msgstr "Stap type"
-#: .\cookbook\templates\forms\edit_internal_recipe.html:158
+#: .\cookbook\templates\forms\edit_internal_recipe.html:187
msgid "Step time in Minutes"
msgstr "Tijdsduur stap in minuten"
-#: .\cookbook\templates\forms\edit_internal_recipe.html:212
-#: .\cookbook\templates\shopping_list.html:158
+#: .\cookbook\templates\forms\edit_internal_recipe.html:241
+#: .\cookbook\templates\shopping_list.html:148
msgid "Select Unit"
msgstr "Selecteer eenheid"
-#: .\cookbook\templates\forms\edit_internal_recipe.html:213
-#: .\cookbook\templates\forms\edit_internal_recipe.html:237
-#: .\cookbook\templates\shopping_list.html:159
-#: .\cookbook\templates\shopping_list.html:181
+#: .\cookbook\templates\forms\edit_internal_recipe.html:242
+#: .\cookbook\templates\forms\edit_internal_recipe.html:266
+#: .\cookbook\templates\shopping_list.html:149
+#: .\cookbook\templates\shopping_list.html:171
msgid "Create"
msgstr "Maak"
-#: .\cookbook\templates\forms\edit_internal_recipe.html:214
-#: .\cookbook\templates\forms\edit_internal_recipe.html:238
-#: .\cookbook\templates\shopping_list.html:160
-#: .\cookbook\templates\shopping_list.html:182
+#: .\cookbook\templates\forms\edit_internal_recipe.html:243
+#: .\cookbook\templates\forms\edit_internal_recipe.html:267
+#: .\cookbook\templates\shopping_list.html:150
+#: .\cookbook\templates\shopping_list.html:172
+#: .\cookbook\templates\shopping_list.html:214
#: .\cookbook\templates\url_import.html:100
#: .\cookbook\templates\url_import.html:132
msgid "Select"
msgstr "Selecteer"
-#: .\cookbook\templates\forms\edit_internal_recipe.html:236
-#: .\cookbook\templates\shopping_list.html:180
+#: .\cookbook\templates\forms\edit_internal_recipe.html:265
+#: .\cookbook\templates\shopping_list.html:170
msgid "Select Food"
msgstr "Selecteer ingrediënt"
-#: .\cookbook\templates\forms\edit_internal_recipe.html:253
-#: .\cookbook\templates\meal_plan.html:213
+#: .\cookbook\templates\forms\edit_internal_recipe.html:282
+#: .\cookbook\templates\meal_plan.html:249
#: .\cookbook\templates\url_import.html:147
msgid "Note"
msgstr "Notitie"
-#: .\cookbook\templates\forms\edit_internal_recipe.html:270
+#: .\cookbook\templates\forms\edit_internal_recipe.html:299
msgid "Delete Ingredient"
msgstr "Verwijder ingrediënt"
-#: .\cookbook\templates\forms\edit_internal_recipe.html:276
+#: .\cookbook\templates\forms\edit_internal_recipe.html:305
msgid "Make Header"
msgstr "Stel in als kop"
-#: .\cookbook\templates\forms\edit_internal_recipe.html:282
+#: .\cookbook\templates\forms\edit_internal_recipe.html:311
msgid "Make Ingredient"
msgstr "Maak ingrediënt"
-#: .\cookbook\templates\forms\edit_internal_recipe.html:288
+#: .\cookbook\templates\forms\edit_internal_recipe.html:317
msgid "Disable Amount"
msgstr "Hoeveelheid uitschakelen"
-#: .\cookbook\templates\forms\edit_internal_recipe.html:294
+#: .\cookbook\templates\forms\edit_internal_recipe.html:323
msgid "Enable Amount"
msgstr "Hoeveelheid inschakelen"
-#: .\cookbook\templates\forms\edit_internal_recipe.html:320
-#: .\cookbook\templates\recipe_view.html:210
+#: .\cookbook\templates\forms\edit_internal_recipe.html:349
+#: .\cookbook\templates\recipe_view.html:269
#: .\cookbook\templates\url_import.html:171
msgid "Instructions"
msgstr "bereidingswijze"
-#: .\cookbook\templates\forms\edit_internal_recipe.html:333
-#: .\cookbook\templates\forms\edit_internal_recipe.html:356
+#: .\cookbook\templates\forms\edit_internal_recipe.html:362
+#: .\cookbook\templates\forms\edit_internal_recipe.html:390
msgid "Save & View"
msgstr "Opslaan & bekijken"
-#: .\cookbook\templates\forms\edit_internal_recipe.html:337
-#: .\cookbook\templates\forms\edit_internal_recipe.html:362
+#: .\cookbook\templates\forms\edit_internal_recipe.html:366
+#: .\cookbook\templates\forms\edit_internal_recipe.html:396
msgid "Add Step"
msgstr "Voeg stap toe"
-#: .\cookbook\templates\forms\edit_internal_recipe.html:339
-#: .\cookbook\templates\forms\edit_internal_recipe.html:365
+#: .\cookbook\templates\forms\edit_internal_recipe.html:369
+#: .\cookbook\templates\forms\edit_internal_recipe.html:400
+msgid "Add Nutrition"
+msgstr "Voedingswaarde toevoegen"
+
+#: .\cookbook\templates\forms\edit_internal_recipe.html:371
+#: .\cookbook\templates\forms\edit_internal_recipe.html:402
+msgid "Remove Nutrition"
+msgstr "Voedingswaarde verwijderen"
+
+#: .\cookbook\templates\forms\edit_internal_recipe.html:373
+#: .\cookbook\templates\forms\edit_internal_recipe.html:405
msgid "View Recipe"
msgstr "Bekijk recept"
-#: .\cookbook\templates\forms\edit_internal_recipe.html:341
-#: .\cookbook\templates\forms\edit_internal_recipe.html:367
+#: .\cookbook\templates\forms\edit_internal_recipe.html:375
+#: .\cookbook\templates\forms\edit_internal_recipe.html:407
msgid "Delete Recipe"
msgstr "Verwijder recept"
-#: .\cookbook\templates\forms\edit_internal_recipe.html:373
+#: .\cookbook\templates\forms\edit_internal_recipe.html:413
msgid "Steps"
msgstr "Stappen"
-#: .\cookbook\templates\forms\edit_internal_recipe.html:494
-#: .\cookbook\templates\forms\edit_internal_recipe.html:512
-#: .\cookbook\templates\forms\edit_internal_recipe.html:526
-#: .\cookbook\templates\forms\edit_internal_recipe.html:607
-#: .\cookbook\templates\forms\edit_internal_recipe.html:626
-#: .\cookbook\templates\forms\edit_internal_recipe.html:646
-#: .\cookbook\templates\meal_plan.html:396
-#: .\cookbook\templates\meal_plan.html:408
-#: .\cookbook\templates\meal_plan.html:458
-#: .\cookbook\templates\meal_plan.html:471
-#: .\cookbook\templates\meal_plan.html:482
-#: .\cookbook\templates\meal_plan.html:508
-#: .\cookbook\templates\meal_plan.html:519
+#: .\cookbook\templates\forms\edit_internal_recipe.html:534
+#: .\cookbook\templates\forms\edit_internal_recipe.html:552
+#: .\cookbook\templates\forms\edit_internal_recipe.html:566
+#: .\cookbook\templates\forms\edit_internal_recipe.html:647
+#: .\cookbook\templates\forms\edit_internal_recipe.html:666
+#: .\cookbook\templates\forms\edit_internal_recipe.html:686
+#: .\cookbook\templates\meal_plan.html:442
+#: .\cookbook\templates\meal_plan.html:454
+#: .\cookbook\templates\meal_plan.html:509
+#: .\cookbook\templates\meal_plan.html:522
#: .\cookbook\templates\meal_plan.html:533
-#: .\cookbook\templates\meal_plan.html:540
-#: .\cookbook\templates\meal_plan.html:548
-#: .\cookbook\templates\shopping_list.html:421
-#: .\cookbook\templates\shopping_list.html:446
-#: .\cookbook\templates\shopping_list.html:476
-#: .\cookbook\templates\shopping_list.html:496
-#: .\cookbook\templates\shopping_list.html:507
-#: .\cookbook\templates\shopping_list.html:530
-#: .\cookbook\templates\shopping_list.html:556
-#: .\cookbook\templates\shopping_list.html:572
-#: .\cookbook\templates\shopping_list.html:614
-#: .\cookbook\templates\shopping_list.html:624
-#: .\cookbook\templates\shopping_list.html:633
+#: .\cookbook\templates\meal_plan.html:559
+#: .\cookbook\templates\meal_plan.html:570
+#: .\cookbook\templates\meal_plan.html:584
+#: .\cookbook\templates\meal_plan.html:591
+#: .\cookbook\templates\meal_plan.html:599
+#: .\cookbook\templates\shopping_list.html:453
+#: .\cookbook\templates\shopping_list.html:480
+#: .\cookbook\templates\shopping_list.html:516
+#: .\cookbook\templates\shopping_list.html:536
+#: .\cookbook\templates\shopping_list.html:547
+#: .\cookbook\templates\shopping_list.html:570
+#: .\cookbook\templates\shopping_list.html:596
+#: .\cookbook\templates\shopping_list.html:612
+#: .\cookbook\templates\shopping_list.html:654
+#: .\cookbook\templates\shopping_list.html:664
+#: .\cookbook\templates\shopping_list.html:673
+#: .\cookbook\templates\shopping_list.html:692
#: .\cookbook\templates\url_import.html:308
#: .\cookbook\templates\url_import.html:313
#: .\cookbook\templates\url_import.html:322
@@ -742,55 +790,56 @@ msgstr "Stappen"
msgid "Error"
msgstr "Error"
-#: .\cookbook\templates\forms\edit_internal_recipe.html:494
+#: .\cookbook\templates\forms\edit_internal_recipe.html:534
msgid "There was an error loading the recipe!"
msgstr "Er is een fout opgetreden bij het laden van het recept!"
-#: .\cookbook\templates\forms\edit_internal_recipe.html:505
-#: .\cookbook\templates\forms\edit_internal_recipe.html:522
-#: .\cookbook\templates\shopping_list.html:487
-#: .\cookbook\templates\shopping_list.html:503
+#: .\cookbook\templates\forms\edit_internal_recipe.html:545
+#: .\cookbook\templates\forms\edit_internal_recipe.html:562
+#: .\cookbook\templates\shopping_list.html:527
+#: .\cookbook\templates\shopping_list.html:543
msgid "Updated"
msgstr "Geüpdatet"
-#: .\cookbook\templates\forms\edit_internal_recipe.html:505
-#: .\cookbook\templates\forms\edit_internal_recipe.html:522
-#: .\cookbook\templates\shopping_list.html:503
+#: .\cookbook\templates\forms\edit_internal_recipe.html:545
+#: .\cookbook\templates\forms\edit_internal_recipe.html:562
+#: .\cookbook\templates\shopping_list.html:543
msgid "Changes saved successfully!"
msgstr "Wijzigingen succesvol opgeslagen!"
-#: .\cookbook\templates\forms\edit_internal_recipe.html:512
-#: .\cookbook\templates\forms\edit_internal_recipe.html:526
+#: .\cookbook\templates\forms\edit_internal_recipe.html:552
+#: .\cookbook\templates\forms\edit_internal_recipe.html:566
msgid "There was an error updating the recipe!"
msgstr "Er is een fout opgetreden bij het updaten van het recept!"
-#: .\cookbook\templates\forms\edit_internal_recipe.html:570
+#: .\cookbook\templates\forms\edit_internal_recipe.html:610
msgid "Are you sure that you want to delete this ingredient?"
msgstr "Weet je zeker dat je dit ingrediënt wil verwijderen?"
-#: .\cookbook\templates\forms\edit_internal_recipe.html:575
+#: .\cookbook\templates\forms\edit_internal_recipe.html:615
msgid "Are you sure that you want to delete this step?"
msgstr "Weet je zeker dat je deze stap wil verwijderen?"
-#: .\cookbook\templates\forms\edit_internal_recipe.html:607
-#: .\cookbook\templates\forms\edit_internal_recipe.html:626
-#: .\cookbook\templates\forms\edit_internal_recipe.html:646
-#: .\cookbook\templates\meal_plan.html:396
-#: .\cookbook\templates\meal_plan.html:408
-#: .\cookbook\templates\meal_plan.html:458
-#: .\cookbook\templates\meal_plan.html:471
-#: .\cookbook\templates\meal_plan.html:482
-#: .\cookbook\templates\meal_plan.html:508
-#: .\cookbook\templates\meal_plan.html:519
+#: .\cookbook\templates\forms\edit_internal_recipe.html:647
+#: .\cookbook\templates\forms\edit_internal_recipe.html:666
+#: .\cookbook\templates\forms\edit_internal_recipe.html:686
+#: .\cookbook\templates\meal_plan.html:442
+#: .\cookbook\templates\meal_plan.html:454
+#: .\cookbook\templates\meal_plan.html:509
+#: .\cookbook\templates\meal_plan.html:522
#: .\cookbook\templates\meal_plan.html:533
-#: .\cookbook\templates\meal_plan.html:540
-#: .\cookbook\templates\meal_plan.html:548
-#: .\cookbook\templates\shopping_list.html:421
-#: .\cookbook\templates\shopping_list.html:446
-#: .\cookbook\templates\shopping_list.html:572
-#: .\cookbook\templates\shopping_list.html:614
-#: .\cookbook\templates\shopping_list.html:624
-#: .\cookbook\templates\shopping_list.html:633
+#: .\cookbook\templates\meal_plan.html:559
+#: .\cookbook\templates\meal_plan.html:570
+#: .\cookbook\templates\meal_plan.html:584
+#: .\cookbook\templates\meal_plan.html:591
+#: .\cookbook\templates\meal_plan.html:599
+#: .\cookbook\templates\shopping_list.html:453
+#: .\cookbook\templates\shopping_list.html:480
+#: .\cookbook\templates\shopping_list.html:612
+#: .\cookbook\templates\shopping_list.html:654
+#: .\cookbook\templates\shopping_list.html:664
+#: .\cookbook\templates\shopping_list.html:673
+#: .\cookbook\templates\shopping_list.html:692
#: .\cookbook\templates\url_import.html:308
#: .\cookbook\templates\url_import.html:366
#: .\cookbook\templates\url_import.html:384
@@ -864,7 +913,7 @@ msgstr "Alles importeren"
#: .\cookbook\templates\generic\new_template.html:6
#: .\cookbook\templates\generic\new_template.html:14
-#: .\cookbook\templates\meal_plan.html:280
+#: .\cookbook\templates\meal_plan.html:316
msgid "New"
msgstr "Nieuw"
@@ -914,14 +963,14 @@ msgstr "Beoordeling"
#: .\cookbook\templates\include\log_cooking.html:27
#: .\cookbook\templates\include\recipe_open_modal.html:18
-#: .\cookbook\templates\meal_plan.html:240
-#: .\cookbook\templates\meal_plan.html:284
-#: .\cookbook\templates\meal_plan.html:323
+#: .\cookbook\templates\meal_plan.html:276
+#: .\cookbook\templates\meal_plan.html:320
+#: .\cookbook\templates\meal_plan.html:359
msgid "Close"
msgstr "Sluiten"
#: .\cookbook\templates\include\recipe_open_modal.html:7
-#: .\cookbook\templates\meal_plan.html:207 .\cookbook\views\delete.py:25
+#: .\cookbook\templates\meal_plan.html:243 .\cookbook\views\delete.py:25
#: .\cookbook\views\edit.py:227 .\cookbook\views\new.py:36
msgid "Recipe"
msgstr "recept"
@@ -972,7 +1021,7 @@ msgstr "Zoekopdracht opnieuw instellen"
msgid "Last viewed"
msgstr "Laatst bekeken"
-#: .\cookbook\templates\index.html:87 .\cookbook\templates\meal_plan.html:161
+#: .\cookbook\templates\index.html:87 .\cookbook\templates\meal_plan.html:174
#: .\cookbook\templates\stats.html:22
msgid "Recipes"
msgstr "Recepten"
@@ -1127,25 +1176,25 @@ msgstr "Kop"
msgid "Cell"
msgstr "Cel"
-#: .\cookbook\templates\meal_plan.html:96
+#: .\cookbook\templates\meal_plan.html:101
msgid "New Entry"
msgstr "Nieuw item"
-#: .\cookbook\templates\meal_plan.html:107
+#: .\cookbook\templates\meal_plan.html:113
#: .\cookbook\templates\shopping_list.html:48
msgid "Search Recipe"
msgstr "Zoek recept"
-#: .\cookbook\templates\meal_plan.html:122
-#: .\cookbook\templates\meal_plan.html:588
+#: .\cookbook\templates\meal_plan.html:135
+#: .\cookbook\templates\meal_plan.html:640
msgid "Title"
msgstr "Titel"
-#: .\cookbook\templates\meal_plan.html:124
+#: .\cookbook\templates\meal_plan.html:137
msgid "Note (optional)"
msgstr "Notitie (optioneel)"
-#: .\cookbook\templates\meal_plan.html:126
+#: .\cookbook\templates\meal_plan.html:139
msgid ""
"You can use markdown to format this field. See the docs "
@@ -1155,70 +1204,86 @@ msgstr ""
"href=\"/docs/markdown/\" target=\"_blank\" rel=\"noopener "
"noreferrer\">documentatie"
-#: .\cookbook\templates\meal_plan.html:130
+#: .\cookbook\templates\meal_plan.html:143
msgid "Recipe Multiplier"
msgstr "Recept vermenigvuldiger"
-#: .\cookbook\templates\meal_plan.html:136
+#: .\cookbook\templates\meal_plan.html:149
msgid "Create only note"
msgstr "Maak alleen een notitie"
-#: .\cookbook\templates\meal_plan.html:151
+#: .\cookbook\templates\meal_plan.html:164
#: .\cookbook\templates\shopping_list.html:7
#: .\cookbook\templates\shopping_list.html:25
-#: .\cookbook\templates\shopping_list.html:493
+#: .\cookbook\templates\shopping_list.html:533
msgid "Shopping List"
msgstr "Boodschappenlijstje"
-#: .\cookbook\templates\meal_plan.html:155
+#: .\cookbook\templates\meal_plan.html:168
msgid "Shopping List currently empty"
msgstr "Boodschappenlijstje is nog leeg"
-#: .\cookbook\templates\meal_plan.html:158
+#: .\cookbook\templates\meal_plan.html:171
msgid "Open Shopping List"
msgstr "Open boodschappenlijstje"
-#: .\cookbook\templates\meal_plan.html:172
+#: .\cookbook\templates\meal_plan.html:185
msgid "Plan"
msgstr "Plan"
-#: .\cookbook\templates\meal_plan.html:177
-#: .\cookbook\templates\meal_plan.html:251
+#: .\cookbook\templates\meal_plan.html:192
+msgid "Number of Days"
+msgstr "Aantal dagen"
+
+#: .\cookbook\templates\meal_plan.html:202
+msgid "Weekday offset"
+msgstr "Weekdag aanpassing"
+
+#: .\cookbook\templates\meal_plan.html:205
+msgid ""
+"Number of days starting from the first day of the week to offset the default"
+" view."
+msgstr ""
+"Aantal dagen startende met de eerste dag van de week om het standaard "
+"overzicht aan te passen."
+
+#: .\cookbook\templates\meal_plan.html:213
+#: .\cookbook\templates\meal_plan.html:287
msgid "Edit plan types"
msgstr "Bewerk plan soorten"
-#: .\cookbook\templates\meal_plan.html:179
+#: .\cookbook\templates\meal_plan.html:215
msgid "Show help"
msgstr "Toon help"
-#: .\cookbook\templates\meal_plan.html:180
+#: .\cookbook\templates\meal_plan.html:216
msgid "Week iCal export"
msgstr "Week iCal export"
-#: .\cookbook\templates\meal_plan.html:221
+#: .\cookbook\templates\meal_plan.html:257
#: .\cookbook\templates\meal_plan_entry.html:18
msgid "Created by"
msgstr "Gemaakt door"
-#: .\cookbook\templates\meal_plan.html:227
+#: .\cookbook\templates\meal_plan.html:263
#: .\cookbook\templates\meal_plan_entry.html:20
msgid "Shared with"
msgstr "Gedeeld met"
-#: .\cookbook\templates\meal_plan.html:237
-#: .\cookbook\templates\recipe_view.html:41
+#: .\cookbook\templates\meal_plan.html:273
+#: .\cookbook\templates\recipe_view.html:43
msgid "Add to Shopping"
msgstr "Voeg toe aan Boodschappen"
-#: .\cookbook\templates\meal_plan.html:280
+#: .\cookbook\templates\meal_plan.html:316
msgid "New meal type"
msgstr "Nieuwe maaltijdsoort"
-#: .\cookbook\templates\meal_plan.html:295
+#: .\cookbook\templates\meal_plan.html:331
msgid "Meal Plan Help"
msgstr "Maaltijdplanner hulp"
-#: .\cookbook\templates\meal_plan.html:301
+#: .\cookbook\templates\meal_plan.html:337
msgid ""
"\n"
" The meal plan module allows planning of meals both with recipes or just notes.
\n" @@ -1247,7 +1312,7 @@ msgstr "" "Omdat maaltijden vaak gezamenlijk worden gepland kan je in de instellingen gebruikers aangeven met wie je het maaltijdplan wil delen.
\n" "Je kan ook de soort maaltijden die je wil plannen bewerken. Als je jouw plan deelt met iemand met andere soorten, dan zullen deze ook in jouw lijst verschijnen. Gelijknamige soorten worden samengevoegd. Zorg er daarom voor dat de gebruikte soorten overeenkomen met de gebruiker met wie je je maaltijdplannen deelt. Dit voorkomt dubbelingen (zoals Overige en Willekeurig).
" -#: .\cookbook\templates\meal_plan.html:558 +#: .\cookbook\templates\meal_plan.html:609 msgid "" "When deleting a meal type all entries using that type will be deleted as " "well. Deletion will apply when configuration is saved. Do you want to " @@ -1269,68 +1334,64 @@ msgstr "Nog nooit bereid." msgid "Other meals on this day" msgstr "Andere maaltijden op deze dag" -#: .\cookbook\templates\recipe_view.html:38 +#: .\cookbook\templates\recipe_view.html:40 msgid "Add to Book" msgstr "Aan Boek toevoegen" -#: .\cookbook\templates\recipe_view.html:44 +#: .\cookbook\templates\recipe_view.html:46 msgid "Add to Plan" msgstr "Aan Plan toevoegen" -#: .\cookbook\templates\recipe_view.html:46 +#: .\cookbook\templates\recipe_view.html:48 #: .\cookbook\templates\recipes_table.html:81 msgid "Log Cooking" msgstr "Bereiding loggen" -#: .\cookbook\templates\recipe_view.html:48 +#: .\cookbook\templates\recipe_view.html:50 msgid "Print" msgstr "Printen" -#: .\cookbook\templates\recipe_view.html:53 +#: .\cookbook\templates\recipe_view.html:55 msgid "Share" msgstr "Deel" -#: .\cookbook\templates\recipe_view.html:62 +#: .\cookbook\templates\recipe_view.html:64 msgid "in" msgstr "binnen" -#: .\cookbook\templates\recipe_view.html:80 -#: .\cookbook\templates\recipes_table.html:46 -#: .\cookbook\templates\url_import.html:55 -msgid "Preparation time ca." -msgstr "Geschatte voorbereidingstijd" +#: .\cookbook\templates\recipe_view.html:82 +msgid "Preparation time ~" +msgstr "Bereidingstijd" -#: .\cookbook\templates\recipe_view.html:86 -#: .\cookbook\templates\recipes_table.html:52 -#: .\cookbook\templates\url_import.html:60 -msgid "Waiting time ca." -msgstr "Geschatte wachttijd " +#: .\cookbook\templates\recipe_view.html:88 +msgid "Waiting time ~" +msgstr "Wachttijd" -#: .\cookbook\templates\recipe_view.html:201 +#: .\cookbook\templates\recipe_view.html:206 #: .\cookbook\templates\recipes_table.html:19 #: .\cookbook\templates\recipes_table.html:23 #: .\cookbook\templates\url_import.html:50 msgid "Recipe Image" msgstr "Recept afbeelding" -#: .\cookbook\templates\recipe_view.html:231 +#: .\cookbook\templates\recipe_view.html:290 msgid "Minutes" msgstr "Minuten" -#: .\cookbook\templates\recipe_view.html:331 -#: .\cookbook\templates\recipe_view.html:368 +#: .\cookbook\templates\recipe_view.html:393 +#: .\cookbook\templates\recipe_view.html:430 msgid "View external recipe" msgstr "Extern recept bekijken" -#: .\cookbook\templates\recipe_view.html:346 +#: .\cookbook\templates\recipe_view.html:408 msgid "External recipe image" msgstr "Externe recept afbeelding" -#: .\cookbook\templates\recipe_view.html:353 +#: .\cookbook\templates\recipe_view.html:415 msgid "External recipe" msgstr "Extern recept" -#: .\cookbook\templates\recipe_view.html:355 +#: .\cookbook\templates\recipe_view.html:417 msgid "" "\n" " This is an external recipe, which means you can only view it by opening the link\n" @@ -1346,20 +1407,30 @@ msgstr "" "Je kan dit recept naar een flitsend recept omzetten door op de converteer knop te klikken.\n" "Het originele bestand blijft beschikbaar." -#: .\cookbook\templates\recipe_view.html:366 +#: .\cookbook\templates\recipe_view.html:428 msgid "Convert now!" msgstr "Nu converteren" -#: .\cookbook\templates\recipe_view.html:384 +#: .\cookbook\templates\recipe_view.html:446 #: .\cookbook\templates\stats.html:47 msgid "Comments" msgstr "Opmerkingen" -#: .\cookbook\templates\recipe_view.html:407 .\cookbook\views\delete.py:108 +#: .\cookbook\templates\recipe_view.html:469 .\cookbook\views\delete.py:108 #: .\cookbook\views\edit.py:143 msgid "Comment" msgstr "Opmerking" +#: .\cookbook\templates\recipes_table.html:46 +#: .\cookbook\templates\url_import.html:55 +msgid "Preparation time ca." +msgstr "Geschatte voorbereidingstijd" + +#: .\cookbook\templates\recipes_table.html:52 +#: .\cookbook\templates\url_import.html:60 +msgid "Waiting time ca." +msgstr "Geschatte wachttijd " + #: .\cookbook\templates\recipes_table.html:55 msgid "External" msgstr "Extern" @@ -1446,37 +1517,46 @@ msgstr "Boodschappen recepten" msgid "No recipes selected" msgstr "Geen recepten geselecteerd" -#: .\cookbook\templates\shopping_list.html:145 +#: .\cookbook\templates\shopping_list.html:135 msgid "Amount" msgstr "Hoeveelheid" -#: .\cookbook\templates\shopping_list.html:206 +#: .\cookbook\templates\shopping_list.html:196 msgid "Finished" msgstr "Afgerond" -#: .\cookbook\templates\shopping_list.html:257 +#: .\cookbook\templates\shopping_list.html:213 +msgid "Select User" +msgstr "Selecteer gebruiker" + +#: .\cookbook\templates\shopping_list.html:232 +msgid "You are offline, shopping list might not sync." +msgstr "" +"Je bent offline, boodschappenlijstje wordt mogelijk niet gesynchroniseerd." + +#: .\cookbook\templates\shopping_list.html:280 msgid "Copy/Export" msgstr "Kopieër/exporteer" -#: .\cookbook\templates\shopping_list.html:261 +#: .\cookbook\templates\shopping_list.html:284 msgid "List Prefix" msgstr "Lijst voorvoegsel" -#: .\cookbook\templates\shopping_list.html:476 -#: .\cookbook\templates\shopping_list.html:507 -#: .\cookbook\templates\shopping_list.html:530 +#: .\cookbook\templates\shopping_list.html:516 +#: .\cookbook\templates\shopping_list.html:547 +#: .\cookbook\templates\shopping_list.html:570 msgid "There was an error updating a resource!" msgstr "Er is een fout opgetreden bij het updaten van een hulpbron!" -#: .\cookbook\templates\shopping_list.html:487 +#: .\cookbook\templates\shopping_list.html:527 msgid "Object created successfully!" msgstr "Object succesvol aangemaakt!" -#: .\cookbook\templates\shopping_list.html:496 +#: .\cookbook\templates\shopping_list.html:536 msgid "There was an error creating a resource!" msgstr "Er is een fout opgetreden bij het maken van een hulpbron!" -#: .\cookbook\templates\shopping_list.html:556 +#: .\cookbook\templates\shopping_list.html:596 msgid "Please enter a valid food" msgstr "Geef een geldig ingrediënt op" @@ -1508,7 +1588,7 @@ msgstr "Externe recepten" msgid "Internal Recipes" msgstr "Interne recepten" -#: .\cookbook\templates\system.html:21 .\cookbook\views\lists.py:73 +#: .\cookbook\templates\system.html:21 .\cookbook\views\lists.py:74 msgid "Invite Links" msgstr "Uitnodigingslink" @@ -1693,19 +1773,19 @@ msgstr "Parameter filter_list is onjuist geformateerd" msgid "Preference for given user already exists" msgstr "Voorkeur voor gebruiker bestaat al" -#: .\cookbook\views\api.py:338 +#: .\cookbook\views\api.py:349 msgid "Sync successful!" msgstr "Synchronisatie succesvol!" -#: .\cookbook\views\api.py:341 +#: .\cookbook\views\api.py:352 msgid "Error synchronizing with Storage" msgstr "Er is een fout opgetreden bij het synchroniseren met Opslag." -#: .\cookbook\views\api.py:396 +#: .\cookbook\views\api.py:410 msgid "The requested page could not be found." msgstr "De opgevraagde pagina kon niet gevonden worden." -#: .\cookbook\views\api.py:399 +#: .\cookbook\views\api.py:413 msgid "" "The requested page refused to provide any information (Status Code 403)." msgstr "" @@ -1720,9 +1800,9 @@ msgstr[1] "Batch bewerking voldaan. %(count)d Recepten zijn geupdatet." #: .\cookbook\views\delete.py:66 msgid "Monitor" -msgstr "Observator" +msgstr "Bewaker" -#: .\cookbook\views\delete.py:90 .\cookbook\views\lists.py:65 +#: .\cookbook\views\delete.py:90 .\cookbook\views\lists.py:66 #: .\cookbook\views\new.py:75 msgid "Storage Backend" msgstr "Opslag backend" @@ -1732,7 +1812,7 @@ msgid "" "Could not delete this storage backend as it is used in at least one monitor." msgstr "" "Dit Opslag backend kon niet verwijderd worden omdat het gebruikt wordt in " -"tenminste een Observator." +"tenminste een Bewaker." #: .\cookbook\views\delete.py:119 .\cookbook\views\edit.py:175 #: .\cookbook\views\new.py:125 @@ -1803,15 +1883,15 @@ msgstr "" "Het is niet mogelijk om externe recepten te exporteren. Deel het bestand " "zelf of selecteer een intern recept." -#: .\cookbook\views\lists.py:28 +#: .\cookbook\views\lists.py:29 msgid "Import Log" msgstr "Import logboek" -#: .\cookbook\views\lists.py:37 +#: .\cookbook\views\lists.py:38 msgid "Discovery" msgstr "Ontdekken" -#: .\cookbook\views\lists.py:57 +#: .\cookbook\views\lists.py:58 msgid "Shopping Lists" msgstr "Boodschappenlijst" @@ -1835,7 +1915,7 @@ msgstr "Opmerking opgeslagen!" msgid "Bookmark saved!" msgstr "Bladwijzer opgeslagen!" -#: .\cookbook\views\views.py:254 +#: .\cookbook\views\views.py:255 msgid "" "The setup page can only be used to create the first user! If you have " "forgotten your superuser credentials please consult the django documentation" @@ -1846,18 +1926,18 @@ msgstr "" "documentatie raad moeten plegen voor een methode om je wachtwoord te " "resetten." -#: .\cookbook\views\views.py:261 .\cookbook\views\views.py:301 +#: .\cookbook\views\views.py:262 .\cookbook\views\views.py:302 msgid "Passwords dont match!" msgstr "Wachtwoorden komen niet overeen!" -#: .\cookbook\views\views.py:272 .\cookbook\views\views.py:310 +#: .\cookbook\views\views.py:273 .\cookbook\views\views.py:311 msgid "User has been created, please login!" msgstr "Gebruiker is gecreëerd, Log in alstublieft!" -#: .\cookbook\views\views.py:287 +#: .\cookbook\views\views.py:288 msgid "Malformed Invite Link supplied!" msgstr "Onjuiste uitnodigingslink opgegeven!" -#: .\cookbook\views\views.py:327 +#: .\cookbook\views\views.py:328 msgid "Invite Link not valid or already used!" msgstr "De uitnodigingslink is niet valide of al gebruikt!" From f753b63b134e6c4b50e3dc0e55f19900e4168db7 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Fri, 25 Dec 2020 22:47:41 +0000 Subject: [PATCH 08/20] Apply translations in es translation completed for the source file '/cookbook/locale/en/LC_MESSAGES/django.po' on the 'es' language. --- cookbook/locale/es/LC_MESSAGES/django.po | 1988 ++++++++++++++++++++++ 1 file changed, 1988 insertions(+) create mode 100644 cookbook/locale/es/LC_MESSAGES/django.po diff --git a/cookbook/locale/es/LC_MESSAGES/django.po b/cookbook/locale/es/LC_MESSAGES/django.po new file mode 100644 index 000000000..1475ffc21 --- /dev/null +++ b/cookbook/locale/es/LC_MESSAGES/django.po @@ -0,0 +1,1988 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR- [ ] in list for easier usage in markdown based "
+"documents."
+msgstr ""
+"Incluir - [ ] en la lista para facilitar el uso en los "
+"documentos basados en Markdown."
+
+#: .\cookbook\forms.py:120
+msgid "Export Base64 encoded image?"
+msgstr "¿Exportar imagen codificada en Base64?"
+
+#: .\cookbook\forms.py:124
+msgid "Download export directly or show on page?"
+msgstr "¿Descargar exportar directamente o mostrar en la página?"
+
+#: .\cookbook\forms.py:130
+msgid "Simply paste a JSON export into this textarea and click import."
+msgstr ""
+"Simplemente pegue una exportación JSON en este área de texto y haga clic en "
+"importar."
+
+#: .\cookbook\forms.py:139
+msgid "New Unit"
+msgstr "Nueva Unidad"
+
+#: .\cookbook\forms.py:140
+msgid "New unit that other gets replaced by."
+msgstr "Nueva unidad por la que otras son reemplazadas."
+
+#: .\cookbook\forms.py:145
+msgid "Old Unit"
+msgstr "Unidad antigua"
+
+#: .\cookbook\forms.py:146
+msgid "Unit that should be replaced."
+msgstr "Unidad que debe reemplazarse."
+
+#: .\cookbook\forms.py:156
+msgid "New Food"
+msgstr "Nuevo Alimento"
+
+#: .\cookbook\forms.py:157
+msgid "New food that other gets replaced by."
+msgstr "Nuevo alimento que remplaza al anterior."
+
+#: .\cookbook\forms.py:162
+msgid "Old Food"
+msgstr "Alimento anterior"
+
+#: .\cookbook\forms.py:163
+msgid "Food that should be replaced."
+msgstr "Alimento que se va a reemplazar."
+
+#: .\cookbook\forms.py:175
+msgid "Add your comment: "
+msgstr "Añada su comentario:"
+
+#: .\cookbook\forms.py:200
+msgid "Leave empty for dropbox and enter app password for nextcloud."
+msgstr ""
+"Déjelo vacío para Dropbox e ingrese la contraseña de la aplicación para "
+"nextcloud."
+
+#: .\cookbook\forms.py:203
+msgid "Leave empty for nextcloud and enter api token for dropbox."
+msgstr ""
+"Déjelo en blanco para nextcloud e ingrese el token de api para dropbox."
+
+#: .\cookbook\forms.py:211
+msgid ""
+"Leave empty for dropbox and enter only base url for nextcloud "
+"(/remote.php/webdav/ is added automatically)"
+msgstr ""
+"Dejar vació para Dropbox e introducir sólo la URL base para Nextcloud "
+"(/remote.php/webdav/ se añade automáticamente)"
+
+#: .\cookbook\forms.py:230
+msgid "Search String"
+msgstr "Cadena de búsqueda"
+
+#: .\cookbook\forms.py:244
+msgid "File ID"
+msgstr "ID de Fichero"
+
+#: .\cookbook\forms.py:262
+msgid "You must provide at least a recipe or a title."
+msgstr "Debe proporcionar al menos una receta o un título."
+
+#: .\cookbook\forms.py:271
+msgid "You can list default users to share recipes with in the settings."
+msgstr ""
+"Puede enumerar los usuarios predeterminados con los que compartir recetas en"
+" la configuración."
+
+#: .\cookbook\forms.py:272
+#: .\cookbook\templates\forms\edit_internal_recipe.html:352
+msgid ""
+"You can use markdown to format this field. See the docs here"
+msgstr ""
+"Puede utilizar Markdown para formatear este campo. Vea la documentación aqui"
+
+#: .\cookbook\forms.py:273
+msgid "Scaling factor for recipe."
+msgstr "Factor de escala para receta."
+
+#: .\cookbook\forms.py:284
+msgid "A username is not required, if left blank the new user can choose one."
+msgstr ""
+"No se requiere un nombre de usuario, si se deja en blanco, el nuevo usuario "
+"puede elegir uno."
+
+#: .\cookbook\helper\permission_helper.py:130
+#: .\cookbook\helper\permission_helper.py:186
+#: .\cookbook\helper\permission_helper.py:200
+#: .\cookbook\helper\permission_helper.py:211
+#: .\cookbook\helper\permission_helper.py:222 .\cookbook\views\data.py:27
+#: .\cookbook\views\views.py:79 .\cookbook\views\views.py:158
+msgid "You do not have the required permissions to view this page!"
+msgstr "¡No tienes los permisos necesarios para ver esta página!"
+
+#: .\cookbook\helper\permission_helper.py:140
+msgid "You are not logged in and therefore cannot view this page!"
+msgstr "¡No ha iniciado sesión y por lo tanto no puede ver esta página!"
+
+#: .\cookbook\helper\permission_helper.py:144
+#: .\cookbook\helper\permission_helper.py:158
+#: .\cookbook\helper\permission_helper.py:172 .\cookbook\views\delete.py:132
+msgid "You cannot interact with this object as its not owned by you!"
+msgstr "¡No puede interactuar con este objeto ya que no es de su propiedad!"
+
+#: .\cookbook\helper\recipe_url_import.py:36
+msgid "The requested site provided malformed data and cannot be read."
+msgstr ""
+"El sitio solicitado proporcionó datos con formato incorrecto y no se puede "
+"leer."
+
+#: .\cookbook\helper\recipe_url_import.py:45
+msgid ""
+"The requested site does not provide any recognized data format to import the"
+" recipe from."
+msgstr ""
+"El sitio solicitado no proporciona ningún formato de datos reconocido para "
+"importar la receta."
+
+#: .\cookbook\helper\recipe_url_import.py:159
+msgid "Imported from "
+msgstr "Importado desde"
+
+#: .\cookbook\migrations\0047_auto_20200602_1133.py:12
+msgid "Breakfast"
+msgstr "Desayuno"
+
+#: .\cookbook\migrations\0047_auto_20200602_1133.py:17
+msgid "Lunch"
+msgstr "Almuerzo"
+
+#: .\cookbook\migrations\0047_auto_20200602_1133.py:22
+msgid "Dinner"
+msgstr "Cena"
+
+#: .\cookbook\migrations\0047_auto_20200602_1133.py:27
+msgid "Other"
+msgstr "Otro"
+
+#: .\cookbook\models.py:60 .\cookbook\templates\shopping_list.html:44
+msgid "Search"
+msgstr "Buscar"
+
+#: .\cookbook\models.py:60 .\cookbook\templates\base.html:74
+#: .\cookbook\templates\meal_plan.html:5 .\cookbook\views\delete.py:149
+#: .\cookbook\views\edit.py:194 .\cookbook\views\new.py:156
+msgid "Meal-Plan"
+msgstr "Régimen de comidas"
+
+#: .\cookbook\models.py:60 .\cookbook\templates\base.html:71
+msgid "Books"
+msgstr "Libros"
+
+#: .\cookbook\models.py:66
+msgid "Small"
+msgstr "Pequeño"
+
+#: .\cookbook\models.py:66
+msgid "Large"
+msgstr "Grande"
+
+#: .\cookbook\models.py:175
+#: .\cookbook\templates\forms\edit_internal_recipe.html:178
+msgid "Text"
+msgstr "Texto"
+
+#: .\cookbook\models.py:175
+#: .\cookbook\templates\forms\edit_internal_recipe.html:179
+msgid "Time"
+msgstr "Tiempo"
+
+#: .\cookbook\tables.py:29 .\cookbook\templates\books.html:36
+#: .\cookbook\templates\generic\edit_template.html:6
+#: .\cookbook\templates\generic\edit_template.html:14
+#: .\cookbook\templates\meal_plan.html:274
+#: .\cookbook\templates\recipe_view.html:38
+#: .\cookbook\templates\recipes_table.html:77
+#: .\cookbook\templates\shopping_list.html:29
+msgid "Edit"
+msgstr "Editar"
+
+#: .\cookbook\tables.py:103 .\cookbook\tables.py:122
+#: .\cookbook\templates\books.html:38
+#: .\cookbook\templates\generic\delete_template.html:5
+#: .\cookbook\templates\generic\delete_template.html:13
+#: .\cookbook\templates\generic\edit_template.html:27
+#: .\cookbook\templates\meal_plan.html:270
+msgid "Delete"
+msgstr "Eliminar"
+
+#: .\cookbook\tables.py:121
+msgid "Link"
+msgstr "Enlace"
+
+#: .\cookbook\templates\404.html:5
+msgid "404 Error"
+msgstr "Error 404"
+
+#: .\cookbook\templates\404.html:18
+msgid "The page you are looking for could not be found."
+msgstr "No se pudo encontrar la página que busca."
+
+#: .\cookbook\templates\404.html:33
+msgid "Take me Home"
+msgstr "Llévame a Inicio"
+
+#: .\cookbook\templates\404.html:35
+msgid "Report a Bug"
+msgstr "Reportar un error"
+
+#: .\cookbook\templates\api_info.html:5 .\cookbook\templates\base.html:146
+#: .\cookbook\templates\rest_framework\api.html:11
+msgid "API Documentation"
+msgstr "Documentación de API"
+
+#: .\cookbook\templates\base.html:60
+#: .\cookbook\templates\forms\ingredients.html:7
+#: .\cookbook\templates\index.html:7
+msgid "Cookbook"
+msgstr "Libro de cocina"
+
+#: .\cookbook\templates\base.html:67
+msgid "Utensils"
+msgstr "Utensilios"
+
+#: .\cookbook\templates\base.html:77
+msgid "Shopping"
+msgstr "Compras"
+
+#: .\cookbook\templates\base.html:87
+msgid "Tags"
+msgstr "Etiquetas"
+
+#: .\cookbook\templates\base.html:91 .\cookbook\views\delete.py:78
+#: .\cookbook\views\edit.py:76 .\cookbook\views\lists.py:21
+#: .\cookbook\views\new.py:56
+msgid "Keyword"
+msgstr "Palabra clave"
+
+#: .\cookbook\templates\base.html:93
+msgid "Batch Edit"
+msgstr "Edición Masiva"
+
+#: .\cookbook\templates\base.html:98
+msgid "Storage Data"
+msgstr "Almacenamiento de Datos"
+
+#: .\cookbook\templates\base.html:102
+msgid "Storage Backends"
+msgstr "Backends de Almacenamiento"
+
+#: .\cookbook\templates\base.html:104
+msgid "Configure Sync"
+msgstr "Configurar Sincronización"
+
+#: .\cookbook\templates\base.html:106
+msgid "Discovered Recipes"
+msgstr "Recetas Descubiertas"
+
+#: .\cookbook\templates\base.html:108
+msgid "Discovery Log"
+msgstr "Registro de descubrimiento"
+
+#: .\cookbook\templates\base.html:110 .\cookbook\templates\stats.html:10
+msgid "Statistics"
+msgstr "Estadísticas"
+
+#: .\cookbook\templates\base.html:112
+msgid "Units & Ingredients"
+msgstr "Unidades e ingredientes"
+
+#: .\cookbook\templates\base.html:114
+msgid "Import Recipe"
+msgstr "Importar receta"
+
+#: .\cookbook\templates\base.html:130 .\cookbook\templates\settings.html:6
+#: .\cookbook\templates\settings.html:16
+msgid "Settings"
+msgstr "Opciones"
+
+#: .\cookbook\templates\base.html:132 .\cookbook\templates\history.html:6
+#: .\cookbook\templates\history.html:14
+msgid "History"
+msgstr "Historial"
+
+#: .\cookbook\templates\base.html:136 .\cookbook\templates\system.html:13
+msgid "System"
+msgstr "Sistema"
+
+#: .\cookbook\templates\base.html:138
+msgid "Admin"
+msgstr "Administrador"
+
+#: .\cookbook\templates\base.html:142
+msgid "Markdown Help"
+msgstr "Ayuda de Markdown"
+
+#: .\cookbook\templates\base.html:144
+msgid "GitHub"
+msgstr "GitHub"
+
+#: .\cookbook\templates\base.html:148
+msgid "API Browser"
+msgstr "Explorador de API"
+
+#: .\cookbook\templates\base.html:151
+msgid "Logout"
+msgstr "Cerrar sesión"
+
+#: .\cookbook\templates\base.html:156
+#: .\cookbook\templates\registration\login.html:4
+#: .\cookbook\templates\registration\login.html:46
+msgid "Login"
+msgstr "Iniciar sesión"
+
+#: .\cookbook\templates\batch\edit.html:6
+msgid "Batch edit Category"
+msgstr "Edición masiva de Categorías"
+
+#: .\cookbook\templates\batch\edit.html:15
+msgid "Batch edit Recipes"
+msgstr "Edición masiva de Recetas"
+
+#: .\cookbook\templates\batch\edit.html:20
+msgid "Add the specified keywords to all recipes containing a word"
+msgstr ""
+"Agregue las palabras clave especificadas a todas las recetas que contengan "
+"una palabra"
+
+#: .\cookbook\templates\batch\monitor.html:6 .\cookbook\views\edit.py:59
+msgid "Sync"
+msgstr "Sincronizar"
+
+#: .\cookbook\templates\batch\monitor.html:10
+msgid "Manage watched Folders"
+msgstr "Administrar carpetas observadas"
+
+#: .\cookbook\templates\batch\monitor.html:14
+msgid ""
+"On this Page you can manage all storage folder locations that should be "
+"monitored and synced"
+msgstr ""
+"En esta página puede administrar todas las ubicaciones de las carpetas de "
+"almacenamiento que deben monitorearse y sincronizarse"
+
+#: .\cookbook\templates\batch\monitor.html:16
+msgid "The path must be in the following format"
+msgstr "La ruta debe tener el siguiente formato"
+
+#: .\cookbook\templates\batch\monitor.html:27
+msgid "Sync Now!"
+msgstr "¡Sincronizar ahora!"
+
+#: .\cookbook\templates\batch\waiting.html:4
+#: .\cookbook\templates\batch\waiting.html:10
+msgid "Importing Recipes"
+msgstr "Importando Recetas"
+
+#: .\cookbook\templates\batch\waiting.html:23
+msgid ""
+"This can take a few minutes, depending on the number of recipes in sync, "
+"please wait."
+msgstr ""
+"Esto puede tardar unos minutos, dependiendo de la cantidad de recetas "
+"sincronizadas, espere."
+
+#: .\cookbook\templates\books.html:5 .\cookbook\templates\books.html:11
+msgid "Recipe Books"
+msgstr "Libros de recetas"
+
+#: .\cookbook\templates\books.html:15
+msgid "New Book"
+msgstr "Nuevo Libro"
+
+#: .\cookbook\templates\books.html:27 .\cookbook\templates\recipe_view.html:69
+#: .\cookbook\templates\recipe_view.html:451
+msgid "by"
+msgstr "por"
+
+#: .\cookbook\templates\books.html:34
+msgid "Toggle Recipes"
+msgstr "Alternar recetas"
+
+#: .\cookbook\templates\books.html:54
+#: .\cookbook\templates\meal_plan_entry.html:48
+#: .\cookbook\templates\recipe_view.html:92
+#: .\cookbook\templates\recipes_table.html:59
+msgid "Last cooked"
+msgstr "Cocinado por última vez"
+
+#: .\cookbook\templates\books.html:71
+msgid "There are no recipes in this book yet."
+msgstr "Todavía no hay recetas en este libro."
+
+#: .\cookbook\templates\export.html:6
+msgid "Export Recipes"
+msgstr "Exportar recetas"
+
+#: .\cookbook\templates\export.html:19
+#: .\cookbook\templates\recipe_view.html:52
+#: .\cookbook\templates\shopping_list.html:272
+msgid "Export"
+msgstr "Exportar"
+
+#: .\cookbook\templates\export.html:31
+msgid "Exported Recipe"
+msgstr "Receta exportada"
+
+#: .\cookbook\templates\export.html:42
+msgid "Copy to clipboard"
+msgstr "Copiar al portapapeles"
+
+#: .\cookbook\templates\export.html:54
+msgid "Copied!"
+msgstr "¡Copiado!"
+
+#: .\cookbook\templates\export.html:61
+msgid "Copy list to clipboard"
+msgstr "Copiar lista al portapapeles"
+
+#: .\cookbook\templates\forms\edit_import_recipe.html:5
+#: .\cookbook\templates\forms\edit_import_recipe.html:9
+msgid "Import new Recipe"
+msgstr "Importar nueva receta"
+
+#: .\cookbook\templates\forms\edit_import_recipe.html:14
+#: .\cookbook\templates\forms\edit_internal_recipe.html:364
+#: .\cookbook\templates\forms\edit_internal_recipe.html:393
+#: .\cookbook\templates\generic\edit_template.html:23
+#: .\cookbook\templates\generic\new_template.html:23
+#: .\cookbook\templates\include\log_cooking.html:28
+#: .\cookbook\templates\meal_plan.html:318
+#: .\cookbook\templates\recipe_view.html:502
+#: .\cookbook\templates\settings.html:28 .\cookbook\templates\settings.html:35
+#: .\cookbook\templates\settings.html:57 .\cookbook\templates\settings.html:72
+#: .\cookbook\templates\shopping_list.html:274
+msgid "Save"
+msgstr "Guardar"
+
+#: .\cookbook\templates\forms\edit_internal_recipe.html:7
+#: .\cookbook\templates\forms\edit_internal_recipe.html:34
+msgid "Edit Recipe"
+msgstr "Editar receta"
+
+#: .\cookbook\templates\forms\edit_internal_recipe.html:59
+msgid "Preparation Time"
+msgstr "Tiempo de Preparación"
+
+#: .\cookbook\templates\forms\edit_internal_recipe.html:62
+msgid "Waiting Time"
+msgstr "Tiempo de espera"
+
+#: .\cookbook\templates\forms\edit_internal_recipe.html:73
+msgid "Select Keywords"
+msgstr "Seleccionar palabras clave"
+
+#: .\cookbook\templates\forms\edit_internal_recipe.html:88
+#: .\cookbook\templates\recipe_view.html:218
+msgid "Nutrition"
+msgstr "Información Nutricional"
+
+#: .\cookbook\templates\forms\edit_internal_recipe.html:92
+#: .\cookbook\templates\forms\edit_internal_recipe.html:142
+msgid "Delete Step"
+msgstr "Eliminar paso"
+
+#: .\cookbook\templates\forms\edit_internal_recipe.html:96
+#: .\cookbook\templates\recipe_view.html:222
+msgid "Calories"
+msgstr "Calorías"
+
+#: .\cookbook\templates\forms\edit_internal_recipe.html:99
+#: .\cookbook\templates\recipe_view.html:230
+msgid "Carbohydrates"
+msgstr "Carbohidratos"
+
+#: .\cookbook\templates\forms\edit_internal_recipe.html:102
+#: .\cookbook\templates\recipe_view.html:238
+msgid "Fats"
+msgstr "Grasas"
+
+#: .\cookbook\templates\forms\edit_internal_recipe.html:104
+#: .\cookbook\templates\recipe_view.html:246
+msgid "Proteins"
+msgstr "Proteinas"
+
+#: .\cookbook\templates\forms\edit_internal_recipe.html:126
+#: .\cookbook\templates\forms\edit_internal_recipe.html:426
+#: .\cookbook\templates\recipe_view.html:287
+msgid "Step"
+msgstr "Paso"
+
+#: .\cookbook\templates\forms\edit_internal_recipe.html:147
+msgid "Show as header"
+msgstr "Mostrar como encabezado"
+
+#: .\cookbook\templates\forms\edit_internal_recipe.html:153
+msgid "Hide as header"
+msgstr "Ocultar como encabezado"
+
+#: .\cookbook\templates\forms\edit_internal_recipe.html:158
+msgid "Move Up"
+msgstr "Mover Arriba"
+
+#: .\cookbook\templates\forms\edit_internal_recipe.html:163
+msgid "Move Down"
+msgstr "Mover Abajo"
+
+#: .\cookbook\templates\forms\edit_internal_recipe.html:172
+msgid "Step Name"
+msgstr "Nombre del paso"
+
+#: .\cookbook\templates\forms\edit_internal_recipe.html:176
+msgid "Step Type"
+msgstr "Tipo de paso"
+
+#: .\cookbook\templates\forms\edit_internal_recipe.html:187
+msgid "Step time in Minutes"
+msgstr "Tiempo de paso en minutos"
+
+#: .\cookbook\templates\forms\edit_internal_recipe.html:241
+#: .\cookbook\templates\shopping_list.html:148
+msgid "Select Unit"
+msgstr "Seleccionar unidad"
+
+#: .\cookbook\templates\forms\edit_internal_recipe.html:242
+#: .\cookbook\templates\forms\edit_internal_recipe.html:266
+#: .\cookbook\templates\shopping_list.html:149
+#: .\cookbook\templates\shopping_list.html:171
+msgid "Create"
+msgstr "Crear"
+
+#: .\cookbook\templates\forms\edit_internal_recipe.html:243
+#: .\cookbook\templates\forms\edit_internal_recipe.html:267
+#: .\cookbook\templates\shopping_list.html:150
+#: .\cookbook\templates\shopping_list.html:172
+#: .\cookbook\templates\shopping_list.html:214
+#: .\cookbook\templates\url_import.html:100
+#: .\cookbook\templates\url_import.html:132
+msgid "Select"
+msgstr "Seleccionar"
+
+#: .\cookbook\templates\forms\edit_internal_recipe.html:265
+#: .\cookbook\templates\shopping_list.html:170
+msgid "Select Food"
+msgstr "Seleccionar Alimento"
+
+#: .\cookbook\templates\forms\edit_internal_recipe.html:282
+#: .\cookbook\templates\meal_plan.html:249
+#: .\cookbook\templates\url_import.html:147
+msgid "Note"
+msgstr "Nota"
+
+#: .\cookbook\templates\forms\edit_internal_recipe.html:299
+msgid "Delete Ingredient"
+msgstr "Eliminar ingrediente"
+
+#: .\cookbook\templates\forms\edit_internal_recipe.html:305
+msgid "Make Header"
+msgstr "Crear encabezado"
+
+#: .\cookbook\templates\forms\edit_internal_recipe.html:311
+msgid "Make Ingredient"
+msgstr "Crear ingrediente"
+
+#: .\cookbook\templates\forms\edit_internal_recipe.html:317
+msgid "Disable Amount"
+msgstr "Deshabilitar cantidad"
+
+#: .\cookbook\templates\forms\edit_internal_recipe.html:323
+msgid "Enable Amount"
+msgstr "Habilitar cantidad"
+
+#: .\cookbook\templates\forms\edit_internal_recipe.html:349
+#: .\cookbook\templates\recipe_view.html:269
+#: .\cookbook\templates\url_import.html:171
+msgid "Instructions"
+msgstr "Instrucciones"
+
+#: .\cookbook\templates\forms\edit_internal_recipe.html:362
+#: .\cookbook\templates\forms\edit_internal_recipe.html:390
+msgid "Save & View"
+msgstr "Guardar y ver"
+
+#: .\cookbook\templates\forms\edit_internal_recipe.html:366
+#: .\cookbook\templates\forms\edit_internal_recipe.html:396
+msgid "Add Step"
+msgstr "Agregar paso"
+
+#: .\cookbook\templates\forms\edit_internal_recipe.html:369
+#: .\cookbook\templates\forms\edit_internal_recipe.html:400
+msgid "Add Nutrition"
+msgstr "Añadir Información Nutricional"
+
+#: .\cookbook\templates\forms\edit_internal_recipe.html:371
+#: .\cookbook\templates\forms\edit_internal_recipe.html:402
+msgid "Remove Nutrition"
+msgstr "Eliminar Información Nutricional"
+
+#: .\cookbook\templates\forms\edit_internal_recipe.html:373
+#: .\cookbook\templates\forms\edit_internal_recipe.html:405
+msgid "View Recipe"
+msgstr "Ver la receta"
+
+#: .\cookbook\templates\forms\edit_internal_recipe.html:375
+#: .\cookbook\templates\forms\edit_internal_recipe.html:407
+msgid "Delete Recipe"
+msgstr "Eliminar receta"
+
+#: .\cookbook\templates\forms\edit_internal_recipe.html:413
+msgid "Steps"
+msgstr "Pasos"
+
+#: .\cookbook\templates\forms\edit_internal_recipe.html:534
+#: .\cookbook\templates\forms\edit_internal_recipe.html:552
+#: .\cookbook\templates\forms\edit_internal_recipe.html:566
+#: .\cookbook\templates\forms\edit_internal_recipe.html:647
+#: .\cookbook\templates\forms\edit_internal_recipe.html:666
+#: .\cookbook\templates\forms\edit_internal_recipe.html:686
+#: .\cookbook\templates\meal_plan.html:442
+#: .\cookbook\templates\meal_plan.html:454
+#: .\cookbook\templates\meal_plan.html:509
+#: .\cookbook\templates\meal_plan.html:522
+#: .\cookbook\templates\meal_plan.html:533
+#: .\cookbook\templates\meal_plan.html:559
+#: .\cookbook\templates\meal_plan.html:570
+#: .\cookbook\templates\meal_plan.html:584
+#: .\cookbook\templates\meal_plan.html:591
+#: .\cookbook\templates\meal_plan.html:599
+#: .\cookbook\templates\shopping_list.html:453
+#: .\cookbook\templates\shopping_list.html:480
+#: .\cookbook\templates\shopping_list.html:516
+#: .\cookbook\templates\shopping_list.html:536
+#: .\cookbook\templates\shopping_list.html:547
+#: .\cookbook\templates\shopping_list.html:570
+#: .\cookbook\templates\shopping_list.html:596
+#: .\cookbook\templates\shopping_list.html:612
+#: .\cookbook\templates\shopping_list.html:654
+#: .\cookbook\templates\shopping_list.html:664
+#: .\cookbook\templates\shopping_list.html:673
+#: .\cookbook\templates\shopping_list.html:692
+#: .\cookbook\templates\url_import.html:308
+#: .\cookbook\templates\url_import.html:313
+#: .\cookbook\templates\url_import.html:322
+#: .\cookbook\templates\url_import.html:366
+#: .\cookbook\templates\url_import.html:384
+#: .\cookbook\templates\url_import.html:403
+msgid "Error"
+msgstr "Error"
+
+#: .\cookbook\templates\forms\edit_internal_recipe.html:534
+msgid "There was an error loading the recipe!"
+msgstr "¡Hubo un error al cargar la receta!"
+
+#: .\cookbook\templates\forms\edit_internal_recipe.html:545
+#: .\cookbook\templates\forms\edit_internal_recipe.html:562
+#: .\cookbook\templates\shopping_list.html:527
+#: .\cookbook\templates\shopping_list.html:543
+msgid "Updated"
+msgstr "Actualizada"
+
+#: .\cookbook\templates\forms\edit_internal_recipe.html:545
+#: .\cookbook\templates\forms\edit_internal_recipe.html:562
+#: .\cookbook\templates\shopping_list.html:543
+msgid "Changes saved successfully!"
+msgstr "¡Los cambios se guardaron exitosamente!"
+
+#: .\cookbook\templates\forms\edit_internal_recipe.html:552
+#: .\cookbook\templates\forms\edit_internal_recipe.html:566
+msgid "There was an error updating the recipe!"
+msgstr "¡Hubo un error al actualizar la receta!"
+
+#: .\cookbook\templates\forms\edit_internal_recipe.html:610
+msgid "Are you sure that you want to delete this ingredient?"
+msgstr "¿Estás seguro de que quieres eliminar este ingrediente?"
+
+#: .\cookbook\templates\forms\edit_internal_recipe.html:615
+msgid "Are you sure that you want to delete this step?"
+msgstr "¿Estás seguro de que quieres eliminar este paso?"
+
+#: .\cookbook\templates\forms\edit_internal_recipe.html:647
+#: .\cookbook\templates\forms\edit_internal_recipe.html:666
+#: .\cookbook\templates\forms\edit_internal_recipe.html:686
+#: .\cookbook\templates\meal_plan.html:442
+#: .\cookbook\templates\meal_plan.html:454
+#: .\cookbook\templates\meal_plan.html:509
+#: .\cookbook\templates\meal_plan.html:522
+#: .\cookbook\templates\meal_plan.html:533
+#: .\cookbook\templates\meal_plan.html:559
+#: .\cookbook\templates\meal_plan.html:570
+#: .\cookbook\templates\meal_plan.html:584
+#: .\cookbook\templates\meal_plan.html:591
+#: .\cookbook\templates\meal_plan.html:599
+#: .\cookbook\templates\shopping_list.html:453
+#: .\cookbook\templates\shopping_list.html:480
+#: .\cookbook\templates\shopping_list.html:612
+#: .\cookbook\templates\shopping_list.html:654
+#: .\cookbook\templates\shopping_list.html:664
+#: .\cookbook\templates\shopping_list.html:673
+#: .\cookbook\templates\shopping_list.html:692
+#: .\cookbook\templates\url_import.html:308
+#: .\cookbook\templates\url_import.html:366
+#: .\cookbook\templates\url_import.html:384
+#: .\cookbook\templates\url_import.html:403
+msgid "There was an error loading a resource!"
+msgstr "¡Hubo un error al cargar un recurso!"
+
+#: .\cookbook\templates\forms\ingredients.html:15
+msgid "Edit Ingredients"
+msgstr "Editar ingredientes"
+
+#: .\cookbook\templates\forms\ingredients.html:16
+msgid ""
+"\n"
+" The following form can be used if, accidentally, two (or more) units or ingredients where created that should be\n"
+" the same.\n"
+" It merges two units or ingredients and updates all recipes using them.\n"
+" "
+msgstr ""
+"\n"
+" La siguiente forma puede utilizarse si, accidentalmente, se crean dos (o más) unidades o ingredientes que deberían ser\n"
+" iguales.\n"
+" Fusiona dos unidades o ingredientes y actualiza todas las recetas que los usan.\n"
+" "
+
+#: .\cookbook\templates\forms\ingredients.html:24
+#: .\cookbook\templates\stats.html:26
+msgid "Units"
+msgstr "Unidades"
+
+#: .\cookbook\templates\forms\ingredients.html:26
+msgid "Are you sure that you want to merge these two units ?"
+msgstr "¿Estás seguro de que quieres combinar estas dos unidades?"
+
+#: .\cookbook\templates\forms\ingredients.html:31
+#: .\cookbook\templates\forms\ingredients.html:40
+msgid "Merge"
+msgstr "Unir"
+
+#: .\cookbook\templates\forms\ingredients.html:36
+msgid "Are you sure that you want to merge these two ingredients ?"
+msgstr "¿Estás seguro de que quieres combinar estos dos ingredientes?"
+
+#: .\cookbook\templates\generic\delete_template.html:18
+#, python-format
+msgid "Are you sure you want to delete the %(title)s: %(object)s "
+msgstr "¿Estás seguro de que quieres borrar el %(title)s: %(object)s?"
+
+#: .\cookbook\templates\generic\delete_template.html:21
+msgid "Confirm"
+msgstr "Confirmar"
+
+#: .\cookbook\templates\generic\edit_template.html:30
+msgid "View"
+msgstr "Ver"
+
+#: .\cookbook\templates\generic\edit_template.html:34
+msgid "Delete original file"
+msgstr "Eliminar archivo original"
+
+#: .\cookbook\templates\generic\list_template.html:6
+#: .\cookbook\templates\generic\list_template.html:12
+msgid "List"
+msgstr "Listar"
+
+#: .\cookbook\templates\generic\list_template.html:25
+msgid "Filter"
+msgstr "Filtro"
+
+#: .\cookbook\templates\generic\list_template.html:30
+msgid "Import all"
+msgstr "Importar todo"
+
+#: .\cookbook\templates\generic\new_template.html:6
+#: .\cookbook\templates\generic\new_template.html:14
+#: .\cookbook\templates\meal_plan.html:316
+msgid "New"
+msgstr "Nuevo"
+
+#: .\cookbook\templates\generic\table_template.html:76
+#: .\cookbook\templates\recipes_table.html:112
+msgid "previous"
+msgstr "anterior"
+
+#: .\cookbook\templates\generic\table_template.html:98
+#: .\cookbook\templates\recipes_table.html:134
+msgid "next"
+msgstr "siguiente"
+
+#: .\cookbook\templates\history.html:20
+msgid "View Log"
+msgstr "Ver registro"
+
+#: .\cookbook\templates\history.html:24
+msgid "Cook Log"
+msgstr "Registro de cocina"
+
+#: .\cookbook\templates\import.html:6
+msgid "Import Recipes"
+msgstr "Importar recetas"
+
+#: .\cookbook\templates\import.html:14
+#: .\cookbook\templates\url_import.html:203 .\cookbook\views\delete.py:54
+#: .\cookbook\views\edit.py:161
+msgid "Import"
+msgstr "Importar"
+
+#: .\cookbook\templates\include\log_cooking.html:7
+msgid "Log Recipe Cooking"
+msgstr "Registrar receta cocinada"
+
+#: .\cookbook\templates\include\log_cooking.html:13
+msgid "All fields are optional and can be left empty."
+msgstr "Todos los campos son opcionales y pueden dejarse vacíos."
+
+#: .\cookbook\templates\include\log_cooking.html:16
+msgid "Servings"
+msgstr "Raciones"
+
+#: .\cookbook\templates\include\log_cooking.html:19
+msgid "Rating"
+msgstr "Calificación"
+
+#: .\cookbook\templates\include\log_cooking.html:27
+#: .\cookbook\templates\include\recipe_open_modal.html:18
+#: .\cookbook\templates\meal_plan.html:276
+#: .\cookbook\templates\meal_plan.html:320
+#: .\cookbook\templates\meal_plan.html:359
+msgid "Close"
+msgstr "Cerrar"
+
+#: .\cookbook\templates\include\recipe_open_modal.html:7
+#: .\cookbook\templates\meal_plan.html:243 .\cookbook\views\delete.py:25
+#: .\cookbook\views\edit.py:227 .\cookbook\views\new.py:36
+msgid "Recipe"
+msgstr "Receta"
+
+#: .\cookbook\templates\include\recipe_open_modal.html:32
+msgid "Open Recipe"
+msgstr "Abrir Receta"
+
+#: .\cookbook\templates\include\storage_backend_warning.html:4
+msgid "Security Warning"
+msgstr "Advertencia de seguridad"
+
+#: .\cookbook\templates\include\storage_backend_warning.html:5
+msgid ""
+"\n"
+" The Password and Token field are stored as plain text inside the database.\n"
+" This is necessary because they are needed to make API requests, but it also increases the risk of\n"
+" someone stealing it. The meal plan module allows planning of meals both with recipes or just notes.
\n" +"Simply select a recipe from the list of recently viewed recipes or search the one you\n" +" want and drag it to the desired plan position. You can also add a note and a title and\n" +" then drag the recipe to create a plan entry with a custom title and note. Creating only\n" +" Notes is possible by dragging the create note box into the plan.
\n" +"Click on a recipe in order to open the detail view. Here you can also add it to the\n" +" shopping list. You can also add all recipes of a day to the shopping list by\n" +" clicking the shopping cart at the top of the table.
\n" +"Since a common use case is to plan meals together you can define\n" +" users you want to share your plan with in the settings.\n" +"
\n" +"You can also edit the types of meals you want to plan. If you share your plan with\n" +" someone with\n" +" different meals, their meal types will appear in your list as well. To prevent\n" +" duplicates (e.g. Other and Misc.)\n" +" name your meal types the same as the users you share your meals with and they will be\n" +" merged.
\n" +" " +msgstr "" +"\n" +"El módulo de menú permite planificar las comidas con recetas o con notas.
\n" +"Simplemente selecciona una receta de la lista de recetas vistas recientemente o busca la que\n" +" quieras y arrastrala a la posición deseada del menú. También puede añadir una nota y un título y\n" +" luego arrastrar la receta para crear una entrada del plan con un título y una nota personalizados. Es posible crear\n" +" solamente notas arrastrando el cuadro de creación de notas al menú.
\n" +"Haga clic en una receta para abrir la vista detallada. Desde aquí también puedes añadirla a la\n" +" lista de la compra. También puedes añadir todas las recetas de un día a la lista de la compra\n" +" haciendo clic en el carrito de la compra en la parte superior de la tabla.
\n" +"Ya que un caso de uso común es planificar las comidas juntos, en los ajustes\n" +" puedes definir los usuarios con los que quieres compartir el menú.\n" +"
\n" +"También puedes editar los tipos de comidas del menú. Si compartes tu menú con\n" +" alguien con\n" +" diferentes tipos de comidas, sus tipos de comida aparecerán también en tu listado. Para prevenir\n" +" duplicados (p. ej. Otros y Misc.)\n" +" nombra los tipos de comida igual que el resto de usuarios con los que compartes tus comidas y serán\n" +" combinados.
\n" +" " + +#: .\cookbook\templates\meal_plan.html:609 +msgid "" +"When deleting a meal type all entries using that type will be deleted as " +"well. Deletion will apply when configuration is saved. Do you want to " +"proceed?" +msgstr "" +"Al borrar un tipo de comida, todas las entradas que usen ese tipo serán " +"borradas también. El borrado se aplicará cuando se guarde la configuración. " +"¿Quieres continuar?" + +#: .\cookbook\templates\meal_plan_entry.html:6 +msgid "Meal Plan View" +msgstr "Vista de menú" + +#: .\cookbook\templates\meal_plan_entry.html:50 +msgid "Never cooked before." +msgstr "Nunca antes cocinado." + +#: .\cookbook\templates\meal_plan_entry.html:76 +msgid "Other meals on this day" +msgstr "Otras comidas en este día" + +#: .\cookbook\templates\recipe_view.html:40 +msgid "Add to Book" +msgstr "Añadir al Libro" + +#: .\cookbook\templates\recipe_view.html:46 +msgid "Add to Plan" +msgstr "Añadir al menú" + +#: .\cookbook\templates\recipe_view.html:48 +#: .\cookbook\templates\recipes_table.html:81 +msgid "Log Cooking" +msgstr "Registrar receta cocinada" + +#: .\cookbook\templates\recipe_view.html:50 +msgid "Print" +msgstr "Imprimir" + +#: .\cookbook\templates\recipe_view.html:55 +msgid "Share" +msgstr "Compartir" + +#: .\cookbook\templates\recipe_view.html:64 +msgid "in" +msgstr "en" + +#: .\cookbook\templates\recipe_view.html:82 +msgid "Preparation time ~" +msgstr "Tiempo de preparación ~" + +#: .\cookbook\templates\recipe_view.html:88 +msgid "Waiting time ~" +msgstr "Tiempo de espera ~" + +#: .\cookbook\templates\recipe_view.html:206 +#: .\cookbook\templates\recipes_table.html:19 +#: .\cookbook\templates\recipes_table.html:23 +#: .\cookbook\templates\url_import.html:50 +msgid "Recipe Image" +msgstr "Imagen de la receta" + +#: .\cookbook\templates\recipe_view.html:290 +msgid "Minutes" +msgstr "Minutos" + +#: .\cookbook\templates\recipe_view.html:393 +#: .\cookbook\templates\recipe_view.html:430 +msgid "View external recipe" +msgstr "Ver receta externa" + +#: .\cookbook\templates\recipe_view.html:408 +msgid "External recipe image" +msgstr "Imagen de la receta externa" + +#: .\cookbook\templates\recipe_view.html:415 +msgid "External recipe" +msgstr "Receta externa" + +#: .\cookbook\templates\recipe_view.html:417 +msgid "" +"\n" +" This is an external recipe, which means you can only view it by opening the link\n" +" above.\n" +" You can convert this recipe to a fancy recipe by pressing the convert button. The\n" +" original\n" +" file\n" +" will still be accessible.\n" +" " +msgstr "" +"\n" +" Esta es una receta externa, lo que significa que sólo puedes verla abriendo el enlace de\n" +" arriba.\n" +" Puedes convertir esta receta en una receta de lujo pulsando el botón de conversión.\n" +" El\n" +" archivo\n" +" seguirá siendo accesible.\n" +" " + +#: .\cookbook\templates\recipe_view.html:428 +msgid "Convert now!" +msgstr "¡Convertir ahora!" + +#: .\cookbook\templates\recipe_view.html:446 +#: .\cookbook\templates\stats.html:47 +msgid "Comments" +msgstr "Comentarios" + +#: .\cookbook\templates\recipe_view.html:469 .\cookbook\views\delete.py:108 +#: .\cookbook\views\edit.py:143 +msgid "Comment" +msgstr "Comentario" + +#: .\cookbook\templates\recipes_table.html:46 +#: .\cookbook\templates\url_import.html:55 +msgid "Preparation time ca." +msgstr "Tiempo de preparación ca." + +#: .\cookbook\templates\recipes_table.html:52 +#: .\cookbook\templates\url_import.html:60 +msgid "Waiting time ca." +msgstr "Tiempo de espera ca." + +#: .\cookbook\templates\recipes_table.html:55 +msgid "External" +msgstr "Externo" + +#: .\cookbook\templates\registration\login.html:10 +msgid "Your username and password didn't match. Please try again." +msgstr "" +"Tu nombre de usuario y contraseña no coinciden. Por favor, inténtelo de " +"nuevo." + +#: .\cookbook\templates\registration\signup.html:5 +msgid "Register" +msgstr "Registrar" + +#: .\cookbook\templates\registration\signup.html:9 +msgid "Create your Account" +msgstr "Crea tu Cuenta" + +#: .\cookbook\templates\registration\signup.html:14 +msgid "Create User" +msgstr "Crear Usuario" + +#: .\cookbook\templates\rest_framework\api.html:5 +msgid "Recipe Home" +msgstr "Página de inicio" + +#: .\cookbook\templates\settings.html:22 +msgid "Account" +msgstr "Cuenta" + +#: .\cookbook\templates\settings.html:41 +msgid "Language" +msgstr "Idioma" + +#: .\cookbook\templates\settings.html:66 +msgid "Style" +msgstr "Estilo" + +#: .\cookbook\templates\settings.html:78 +msgid "API Token" +msgstr "Token API" + +#: .\cookbook\templates\settings.html:79 +msgid "" +"You can use both basic authentication and token based authentication to " +"access the REST API." +msgstr "" +"Puedes utilizar tanto la autenticación básica como la autenticación basada " +"en tokens para acceder a la API REST." + +#: .\cookbook\templates\settings.html:91 +msgid "" +"Use the token as an Authorization header prefixed by the word token as shown" +" in the following examples:" +msgstr "" +"Utilice el token como cabecera de autorización usando como prefijo la " +"palabra token, tal y como se muestra en los siguientes ejemplos:" + +#: .\cookbook\templates\settings.html:93 +msgid "or" +msgstr "o" + +#: .\cookbook\templates\setup.html:6 .\cookbook\templates\system.html:5 +msgid "Cookbook Setup" +msgstr "Configuración del libro de recetas" + +#: .\cookbook\templates\setup.html:14 +msgid "Setup" +msgstr "Configuración" + +#: .\cookbook\templates\setup.html:15 +msgid "To start using this application you must first create a superuser." +msgstr "" +"Para empezar a usar esta aplicación, primero debes crear un superusuario." + +#: .\cookbook\templates\setup.html:20 +msgid "Create Superuser" +msgstr "Crear Superusuario" + +#: .\cookbook\templates\shopping_list.html:71 +msgid "Shopping Recipes" +msgstr "Recetas en el carro de la compra" + +#: .\cookbook\templates\shopping_list.html:75 +msgid "No recipes selected" +msgstr "No hay recetas seleccionadas" + +#: .\cookbook\templates\shopping_list.html:135 +msgid "Amount" +msgstr "Cantidad" + +#: .\cookbook\templates\shopping_list.html:196 +msgid "Finished" +msgstr "Completada" + +#: .\cookbook\templates\shopping_list.html:213 +msgid "Select User" +msgstr "Seleccionar Usuario" + +#: .\cookbook\templates\shopping_list.html:232 +msgid "You are offline, shopping list might not sync." +msgstr "" +"Estás desconectado, la lista de la compra podría no estar sincronizada." + +#: .\cookbook\templates\shopping_list.html:280 +msgid "Copy/Export" +msgstr "Copiar/Exportar" + +#: .\cookbook\templates\shopping_list.html:284 +msgid "List Prefix" +msgstr "Prefijo de la lista" + +#: .\cookbook\templates\shopping_list.html:516 +#: .\cookbook\templates\shopping_list.html:547 +#: .\cookbook\templates\shopping_list.html:570 +msgid "There was an error updating a resource!" +msgstr "¡Hubo un error al actualizar un recurso!" + +#: .\cookbook\templates\shopping_list.html:527 +msgid "Object created successfully!" +msgstr "¡Objeto creado con éxito!" + +#: .\cookbook\templates\shopping_list.html:536 +msgid "There was an error creating a resource!" +msgstr "¡Hubo un error al crear un recurso!" + +#: .\cookbook\templates\shopping_list.html:596 +msgid "Please enter a valid food" +msgstr "Por favor, introduzca un alimento válido" + +#: .\cookbook\templates\stats.html:4 +msgid "Stats" +msgstr "Estadísticas" + +#: .\cookbook\templates\stats.html:19 +msgid "Number of objects" +msgstr "Número de objetos" + +#: .\cookbook\templates\stats.html:30 +msgid "Recipe Imports" +msgstr "Recetas importadas" + +#: .\cookbook\templates\stats.html:38 +msgid "Objects stats" +msgstr "Estadísticas de objetos" + +#: .\cookbook\templates\stats.html:41 +msgid "Recipes without Keywords" +msgstr "Recetas sin palabras clave" + +#: .\cookbook\templates\stats.html:43 +msgid "External Recipes" +msgstr "Recetas Externas" + +#: .\cookbook\templates\stats.html:45 +msgid "Internal Recipes" +msgstr "Recetas Internas" + +#: .\cookbook\templates\system.html:21 .\cookbook\views\lists.py:74 +msgid "Invite Links" +msgstr "Enlaces de Invitación" + +#: .\cookbook\templates\system.html:22 +msgid "Show Links" +msgstr "Mostrar Enlaces" + +#: .\cookbook\templates\system.html:26 +msgid "Backup & Restore" +msgstr "Copiar y Restaurar" + +#: .\cookbook\templates\system.html:27 +msgid "Download Backup" +msgstr "Descargar Copia de Seguridad" + +#: .\cookbook\templates\system.html:37 +msgid "System Information" +msgstr "Información del Sistema" + +#: .\cookbook\templates\system.html:39 +msgid "" +"\n" +" Django Recipes is an open source free software application. It can be found on\n" +" GitHub.\n" +" Changelogs can be found here.\n" +" " +msgstr "" +"\n" +" Django Recipes es una aplicación de software libre de código abierto. Se puede encontrar en\n" +" GitHub.\n" +" Los registros de cambios se pueden encontrar aquí.\n" +" " + +#: .\cookbook\templates\system.html:53 +msgid "Media Serving" +msgstr "Servidor multimedia" + +#: .\cookbook\templates\system.html:54 .\cookbook\templates\system.html:69 +#: .\cookbook\templates\system.html:85 +msgid "Warning" +msgstr "Advertencia" + +#: .\cookbook\templates\system.html:54 .\cookbook\templates\system.html:69 +#: .\cookbook\templates\system.html:85 .\cookbook\templates\system.html:100 +msgid "Ok" +msgstr "Ok" + +#: .\cookbook\templates\system.html:56 +msgid "" +"Serving media files directly using gunicorn/python is not recommend!\n" +" Please follow the steps described\n" +" here to update\n" +" your installation.\n" +" " +msgstr "" +"Servir archivos multimedia utilizando directamente gunicorn/python no está recomendado!\n" +" Por favor, sigue los pasos descritos\n" +" aquí para actualizar\n" +" tu instalación.\n" +" " + +#: .\cookbook\templates\system.html:62 .\cookbook\templates\system.html:78 +#: .\cookbook\templates\system.html:93 .\cookbook\templates\system.html:107 +msgid "Everything is fine!" +msgstr "¡Todo va bien!" + +#: .\cookbook\templates\system.html:67 +msgid "Secret Key" +msgstr "Clave Secreta" + +#: .\cookbook\templates\system.html:71 +msgid "" +"\n" +" You do not have aSECRET_KEY configured in your .env file. Django defaulted to the\n"
+" standard key\n"
+" provided with the installation which is publicly know and insecure! Please set\n"
+" SECRET_KEY int the .env configuration file.\n"
+" "
+msgstr ""
+"\n"
+" No has configurado la variable SECRET_KEY en el fichero .env. Django está utilizando la\n"
+" clave estándar\n"
+" proporcionada con la instalación, esta clave es pública e insegura. Por favor, configura\n"
+" SECRET_KEY en el fichero de configuración .env.\n"
+" "
+
+#: .\cookbook\templates\system.html:83
+msgid "Debug Mode"
+msgstr "Modo Depuración"
+
+#: .\cookbook\templates\system.html:87
+msgid ""
+"\n"
+" This application is still running in debug mode. This is most likely not needed. Turn of debug mode by\n"
+" setting\n"
+" DEBUG=0 int the .env configuration file.\n"
+" "
+msgstr ""
+"\n"
+" Esta aplicación está funcionando en modo de depuración. Lo más probable es que no sea necesario. Para desactivar el modo de depuración\n"
+" configura\n"
+" DEBUG=0 en el fichero de configuración .env.\n"
+" "
+
+#: .\cookbook\templates\system.html:98
+msgid "Database"
+msgstr "Base de Datos"
+
+#: .\cookbook\templates\system.html:100
+msgid "Info"
+msgstr "Información"
+
+#: .\cookbook\templates\system.html:102
+msgid ""
+"\n"
+" This application is not running with a Postgres database backend. This is ok but not recommended as some\n"
+" features only work with postgres databases.\n"
+" "
+msgstr ""
+"\n"
+" Esta aplicación no se ejecuta con un backend de base de datos Postgres. Esto es válido pero no es recomendado ya que algunas\n"
+" características sólo funcionan con bases de datos Postgres.\n"
+" "
+
+#: .\cookbook\templates\url_import.html:5
+msgid "URL Import"
+msgstr "Importar URL"
+
+#: .\cookbook\templates\url_import.html:23
+msgid "Enter website URL"
+msgstr "Introduce la URL del sitio web"
+
+#: .\cookbook\templates\url_import.html:44
+msgid "Recipe Name"
+msgstr "Nombre de la Receta"
+
+#: .\cookbook\templates\url_import.html:99
+#: .\cookbook\templates\url_import.html:131
+#: .\cookbook\templates\url_import.html:186
+msgid "Select one"
+msgstr "Seleccione uno"
+
+#: .\cookbook\templates\url_import.html:197
+msgid "All Keywords"
+msgstr "Todas las palabras clave."
+
+#: .\cookbook\templates\url_import.html:199
+msgid "Import all Keywords not only the ones already existing."
+msgstr "Importar todas las palabras clave no sólo las ya existentes."
+
+#: .\cookbook\templates\url_import.html:225
+msgid "Information"
+msgstr "Información"
+
+#: .\cookbook\templates\url_import.html:227
+msgid ""
+" Only websites containing ld+json or microdata information can currently\n"
+" be imported. Most big recipe pages support this. If you site cannot be imported but\n"
+" you think\n"
+" it probably has some kind of structured data feel free to post an example in the\n"
+" github issues."
+msgstr ""
+"Actualmente sólo se pueden importar sitios web que contengan información en\n"
+" ld+json o microdatos. La mayoría de las grandes páginas de recetas soportan esto. Si tu sitio no puede ser importado pero \n"
+" crees que\n"
+" tiene algún tipo de datos estructurados, no dudes en poner un ejemplo en las\n"
+" propuestas de GitHub."
+
+#: .\cookbook\templates\url_import.html:235
+msgid "Google ld+json Info"
+msgstr "Información de Google ld+json"
+
+#: .\cookbook\templates\url_import.html:238
+msgid "GitHub Issues"
+msgstr "Propuestas de GitHub"
+
+#: .\cookbook\templates\url_import.html:240
+msgid "Recipe Markup Specification"
+msgstr "Especificación de anotaciones de la receta"
+
+#: .\cookbook\templates\url_import.html:313
+msgid "Already importing the selected recipe, please wait!"
+msgstr "Ya se está importando la receta seleccionada, ¡por favor espere!"
+
+#: .\cookbook\templates\url_import.html:322
+msgid "An error occurred while trying to import this recipe!"
+msgstr "¡Se produjo un error al intentar importar esta receta!"
+
+#: .\cookbook\views\api.py:58
+msgid "Parameter filter_list incorrectly formatted"
+msgstr "Parámetro filter_list formateado incorrectamente"
+
+#: .\cookbook\views\api.py:70
+msgid "Preference for given user already exists"
+msgstr "Las preferencias para este usuario ya existen"
+
+#: .\cookbook\views\api.py:349
+msgid "Sync successful!"
+msgstr "¡Sincronización exitosa!"
+
+#: .\cookbook\views\api.py:352
+msgid "Error synchronizing with Storage"
+msgstr "Error de sincronización con el almacenamiento"
+
+#: .\cookbook\views\api.py:410
+msgid "The requested page could not be found."
+msgstr "La página solicitada no pudo ser encontrada."
+
+#: .\cookbook\views\api.py:413
+msgid ""
+"The requested page refused to provide any information (Status Code 403)."
+msgstr ""
+"La página solicitada se negó a proporcionar información (Código de estado "
+"403)."
+
+#: .\cookbook\views\data.py:83
+#, python-format
+msgid "Batch edit done. %(count)d recipe was updated."
+msgid_plural "Batch edit done. %(count)d Recipes where updated."
+msgstr[0] "Edición por lotes realizada. %(count)d Receta fue actualizada."
+msgstr[1] "Edición masiva realizada. %(count)d Recetas fueron actualizadas."
+
+#: .\cookbook\views\delete.py:66
+msgid "Monitor"
+msgstr "Monitor"
+
+#: .\cookbook\views\delete.py:90 .\cookbook\views\lists.py:66
+#: .\cookbook\views\new.py:75
+msgid "Storage Backend"
+msgstr "Backend de Almacenamiento"
+
+#: .\cookbook\views\delete.py:97
+msgid ""
+"Could not delete this storage backend as it is used in at least one monitor."
+msgstr ""
+"No se pudo borrar este backend de almacenamiento ya que se utiliza en al "
+"menos un monitor."
+
+#: .\cookbook\views\delete.py:119 .\cookbook\views\edit.py:175
+#: .\cookbook\views\new.py:125
+msgid "Recipe Book"
+msgstr "Libro de recetas"
+
+#: .\cookbook\views\delete.py:138
+msgid "Bookmarks"
+msgstr "Marcadores"
+
+#: .\cookbook\views\delete.py:160 .\cookbook\views\new.py:181
+msgid "Invite Link"
+msgstr "Enlace de invitación"
+
+#: .\cookbook\views\edit.py:93
+msgid "Food"
+msgstr "Comida"
+
+#: .\cookbook\views\edit.py:102
+msgid "You cannot edit this storage!"
+msgstr "¡No puede editar este almacenamiento!"
+
+#: .\cookbook\views\edit.py:121
+msgid "Storage saved!"
+msgstr "¡Almacenamiento guardado!"
+
+#: .\cookbook\views\edit.py:123
+msgid "There was an error updating this storage backend!"
+msgstr "¡Hubo un error al actualizar este backend de almacenamiento!"
+
+#: .\cookbook\views\edit.py:130
+msgid "Storage"
+msgstr "Almacenamiento"
+
+#: .\cookbook\views\edit.py:215
+msgid "Changes saved!"
+msgstr "¡Cambios guardados!"
+
+#: .\cookbook\views\edit.py:219
+msgid "Error saving changes!"
+msgstr "¡Error al guardar los cambios!"
+
+#: .\cookbook\views\edit.py:249
+msgid "Units merged!"
+msgstr "¡Unidades fusionadas!"
+
+#: .\cookbook\views\edit.py:262
+msgid "Foods merged!"
+msgstr "¡Alimentos fusionados!"
+
+#: .\cookbook\views\import_export.py:42
+msgid "Recipe imported successfully!"
+msgstr "¡Receta importada con éxito!"
+
+#: .\cookbook\views\import_export.py:45
+msgid "Something went wrong during the import!"
+msgstr "¡Algo salió mal durante la importación!"
+
+#: .\cookbook\views\import_export.py:48
+msgid "Could not parse the supplied JSON!"
+msgstr "¡No se pudo analizar el JSON proporcionado!"
+
+#: .\cookbook\views\import_export.py:79
+msgid ""
+"External recipes cannot be exported, please share the file directly or "
+"select an internal recipe."
+msgstr ""
+"Las recetas externas no se pueden exportar, comparta el archivo directamente"
+" o seleccione una receta interna."
+
+#: .\cookbook\views\lists.py:29
+msgid "Import Log"
+msgstr "Importar registro"
+
+#: .\cookbook\views\lists.py:38
+msgid "Discovery"
+msgstr "Descubrimiento"
+
+#: .\cookbook\views\lists.py:58
+msgid "Shopping Lists"
+msgstr "Listas de la compra"
+
+#: .\cookbook\views\new.py:98
+msgid "Imported new recipe!"
+msgstr "¡Nueva receta importada!"
+
+#: .\cookbook\views\new.py:101
+msgid "There was an error importing this recipe!"
+msgstr "¡Hubo un error al importar esta receta!"
+
+#: .\cookbook\views\views.py:86
+msgid "You do not have the required permissions to perform this action!"
+msgstr "¡No tienes los permisos necesarios para realizar esta acción!"
+
+#: .\cookbook\views\views.py:98
+msgid "Comment saved!"
+msgstr "¡Comentario guardado!"
+
+#: .\cookbook\views\views.py:108
+msgid "Bookmark saved!"
+msgstr "¡Marcador guardado!"
+
+#: .\cookbook\views\views.py:255
+msgid ""
+"The setup page can only be used to create the first user! If you have "
+"forgotten your superuser credentials please consult the django documentation"
+" on how to reset passwords."
+msgstr ""
+"La página de configuración sólo puede ser utilizada para crear el primer "
+"usuario. Si has olvidado tus credenciales de superusuario, por favor "
+"consulta la documentación de django sobre cómo restablecer las contraseñas."
+
+#: .\cookbook\views\views.py:262 .\cookbook\views\views.py:302
+msgid "Passwords dont match!"
+msgstr "¡Las contraseñas no coinciden!"
+
+#: .\cookbook\views\views.py:273 .\cookbook\views\views.py:311
+msgid "User has been created, please login!"
+msgstr "El usuario ha sido creado, ¡inicie sesión!"
+
+#: .\cookbook\views\views.py:288
+msgid "Malformed Invite Link supplied!"
+msgstr "¡Se proporcionó un enlace de invitación con formato incorrecto!"
+
+#: .\cookbook\views\views.py:328
+msgid "Invite Link not valid or already used!"
+msgstr "¡El enlace de invitación no es válido o ya se ha utilizado!"
From d364994ed76ab6b2a5f4cc55fef8be73d32b6718 Mon Sep 17 00:00:00 2001
From: vabene1111 iYFm z|J9qk0Gd!4+J?$RE9!lRvlEl4pF(Bm!Y1;s2)o>adzeJsn!Ea$ z>I2k77oA gayJdVW2I2Kczy><(6BK1}*#o%`oQYeht<{hRNF^&34RD|sq zj{C6)-$SkNKI&|Qw|L)+Sk&3@qYi5xDsx4st*Aj|Hh_z8C$fN`U8A6Z; @;bvq_v6wX6ssvMQlX4F=_gOPX$wdb9v!*&|ARTuF%-oz=me~13nWB)Hx;B#$h z Us2vrU00hmwY;GsH^uMs`?9kAS=nP#{Mor i|6G24}VUimjD0& diff --git a/cookbook/locale/en/LC_MESSAGES/django.mo b/cookbook/locale/en/LC_MESSAGES/django.mo index 29107f70a2f75e3a395a323fcf21c00cf0fc0932..71cbdf3e9d8d54be31066ec4ad8628bc2c1f2845 100644 GIT binary patch delta 15 WcmZ3={D*0R3Zv6R)xeGO*%$#Ukp%nz delta 54 zcmeyvw3K;*3S;&})j+inUFV|I#FEVXJYAQ>l2j`NBLgD?T|*;XLsJDKLn~uTZ39CC JgN? 9>fb9Q%<*_mO^%x*T` z6>q4uRjHSHtF6^wOKqjtYFn$Z7jLbXzqQp`YpZR&wc4uvTWbA(f6w#2XU^;{B>b5V zXMgAVUY_^4zwaCV{!tITBjMLMCP|(EzU`zW`L50%tGh|^7f(!*PjmfA@P>ya$sK8u z+{69vpPM9K2Y-EKl3c^{+g2sXL%`3jPLl6|pFb~2wu67X#@{=sk|e*(^>@J&`R*la zlVmIS8jvcJFM_9nUkCO4hv4zxz2GCjhg^^(CxEAdmw}H5_1*OWC%{v nz<&biR`S>jljLIXi2=vKQLb+XRo{oh{hxpvxn9G^j|5xb zGVq1qY2fYPqri87w}8I`o&`SYB5&VXQ2o0SRQs+4_kg>@{a*vs&))*o?|Z<9f}a4- z1V0I$41NpL_df!k0sc2AdX3QuJ%1Lca`uJm9MtodfTF|g;rW{az6;cMhd{me`{3!| zpMa-=Uj{|*Z-d*xAA>8vt1fZ+WuWNM1ohtY!}Y5`(dDh6=yVsTcKt!P{x~Q;_$(+o zKl-U&-fmF!-T;aY4N&FIfsY1X3ToWm465Dl1V#6|K+*SOpuYPwD8Bexa5eaCQ1m?Q zQg81Wpvqkh>b;9WeYXXi1jj(N 7Ya^&~ zcZ2HpEuiSs2=@ H@JoCJH!1SfGX$bpvrw1gQI#*1@+z8pzc>dNSZti z6rFAj&tD2^oL(R9zZcxi^&fz0|FZQ?_frC%35qXQf}+nw;r ~t+x?K>iF9p?}4WRhoTJUV}nc(T*K~Qx4rGW1QKfv{G zfui$su5_FM#n;aR_5RC2)%QkF^muE)cY}KG&TxG `~LDBCkpx*zd zaQ%Hy Y&O$0IGk_2i5M^g3@bm16P6n4vIg{xXSB0 z4}1dG7lA7G>EN;8&7j&f5pX{!y7xfQ@$;bQ{xwki@&izG_!; 0TQ=r=QVo>~cCn)-S1UwV`9H@G}2dey^gKF1tn|*vw4)_>Q?Ro;J_N)rm z7l-SOpy;s^RJk{SqQg9>?_Ld_1-=Q?IQ|}Z2KYyy>icU@?fW`t{SEjt@S)saw#Cai z1$;c$XM*CtOF+@}@_^TYs`o}v iXWRon8;U#&H>_avurm`4d33>l{%1ehMi1JRMYfZUI%#t>OOjK=J3R z!8PC=Afl0c96Sy@b{jeaJOR{qYeC(=3>1Aff+vDo1MUVj&d&t(UK 9Ra=;)O(k0cREaftGT`%)cv~yel 8eY1uNhQ;FaKM z;5P83$kk2YPq_XDgLDIg{hRC2;asn!k#~dt0ba#>@4bnBg5P-#eFE>jIY~BypQ<7& zymv|sd&l(`K#kWK8Dj=M2^3x41*#pt4W0;o3=|)K8Wf$s0E(aQ1!2MD L< z?*pF*9t6cVZvl@3?*{eVhe7r0v*4BBH$Yf2SpgHMzBVYj&Vv_&9|A7{zYj{@pFHi? zb#M#UzXD31egl-A{~5R(JgwpFxEQ>H>v8Zx@H?RN{#pB+AD;?7jO#5RO-Z(c>c RMo{&<3lyJz7*zlN96S;H3V0IuO;B|I z0Vulv98AGen_l0A;5l5c1D^oi0;+w_2O&xFTJTBWk3nn4jMF0pMUVBM#$gXAy3c^i zz!!s$1YZ-b-wr;5>-T|M!DCw9&TByFfj!`(!F{0m@j_5^cs;1`{Q!6}cn_$0{}fdJ zz6#2Y{R^n}CvDdoXMt+(EuhMu0@c13f@gzo08a)#2tF75IH+;n(DCn{39jY33Tj+m z59<3r1vPGe3re5-BdGQqf2+6uEKuWkAt-vU15W|BgKFoq!B>KP@Ko@BLDB1xU9a~{ zQ01=x)xYz>mEcoB_2Xvn5#SuC{=F<*zXnwM-U{mby8?a)d=%Gz0;--bf;WJF532u{ z _XY8-9>)vrFN`d$r69^L|KT)qyfUq1sy_eb>n{qsOXAh{Bh9=a1$KYkm0 zIQWr(e*vn#F9rM;P;&TFQ0-mY_jYXp#n0P8_4j&E{BRSv0<3}R$IC(S*B#(%z<&d; z0iQdI%?CdLsy(OAF_z$&pvt)md^C7BsPaDv!b-{Kz(;~t9PoN}gXeIagKE!PK=tR> z!u1D0mGfax^6*#S8t^-y`0cUtK_7r>?-uYc!EsRf>`4c`-&Y0P3qF?n)1c~m5h%X8 z9n?6!KHPshsPTR;_z>^|;N!u&LB0Q1pvLdZpz8e=DEj^gRR4~L`8AGbfaim&z{h~& z;CbLaQ0>116uo{A)VO^F)OVi+w}D>+F9KJh>~;UypxWI8&j4pZ)&DwB_Uav=+VQKP z-oG2fWF(&eRsO2ydq38JdcGG_{TV1a?+4d`F9KJA9|1Lf-vl+z-v!SFe*lWF9{U3C z*Uo@-P KO1}k*B641 z2X}$`ZXcL}&jVG@+d ir*sXM)GS$mQorpxQYKYMibHMc*7e9eh5h z@q8orIPg87#{Hw9%K2=#{&u+jFHr3~?Zy86T2R+lgX&)${4O{Ls{gf@!1KpIckm>x zkGswBR8ajn3simQf_ncVQ0-X{s@xsndLO8MJQq|wZvaKV-vBkv9|pIAp906gQ(qRw z9h5xn2PJoJ4)@;!YTVxs>igdXRqw~av%oKcYR?ZrwezQ->O1!3&PS&QJRj8eSAwGF zZtys83e@*ApuX#aYWJ%^mG?GK^70-~?|mfPKMX#U>(7AVlh1=H?;pUYfd34h3qJl8 zKJFXAO FN#`9M|(cy!j z==4eOB=Bn>Dlqvr_*8J>wO-C!LDAhUd=*|D5aBfm^{FUgvu19iZs&uOO;7+3|}>@^0|Y!8vf>FL_+^ zkKi`0AO89zxfHw}yb^pJC_VQ%a1VIg8(i-`13Z@NXM>{4&Ea|qT+Q`9@QL6XLACRP zpy>Ef5V1 T0@%TSv-3}czy@hTf*}Q@8IMm92&!Y@g~^k zcr4$Y&9Q?6^_#2; CJ;!u-_7B{< zhNH`I9>-4ZU%~OOoIfnQ!)bCn=ab?32V7S;PA)zFHrM;Oz98Ha&+E4~T)%+xJsc &$0Iou|J@C) X zIfs5%I23>1%h`3|>dD1j >T)jul*wgYqN4!m;pI z<@qjdzAHR ;1oUaB)!EbV$&!KtOi@?9-cq7MoTz?PL?{S>J27DjK<2nB? z@DRt}b3B}5gyS(BYk2lUa0AEFIljU1b&lWQIE7;)&yV5I?{x4Ua6QNM98+9h$?$j8RlN^V2!S882+W}t6@llQwxYqAX@aY_X!TB@6cY{yS1Ab2m@1&ex$?-CdW!(EU zaEe2}83)VD9nbmWb-gS-ir@HjBTxCS+Dfwny{y}+Hq&laYjm D+XqHl5C7)mEO) zxBF?0m)fo7d^+36=F&zlotRJCovhVpO{Kl*ENwPg`;V&9>O^}ss~pv s^?bdA8 z?NJYn^#-QBc3Mp*tF796yhDRJ-7L>zi{e)k{a&x#s-)x7*-_Qn?lz_xkm9Ibo@_La zuGG0kvzg{S{hi3tYOSW0PBf2#68Arr>pL6hm Mym8xvOezk5^RdHS~{p`*= zU8`vga*7nO4y(A5ZqgTGPYKcy>)om0ka*H1V-<; 2{~1E;Ji? zZ>eEIL<-iNq-FK$d>rbbZ=uH#E32u4kzU2uwJO@ADut3!a!0Icr&S5$(Fs7SrlGI3 zXJ(*YKhK~Be;6(3=5mNc>S`*Z=x(7y>)B+Zb!3%6iCtH`#`P4MPgkApT`%86n9)+h z^Q PZkx0YF4e{(4pH8o$)p0*p(DOr zZ%j_Ye<%WJynKzC*XX+X^H!Rot#&%-7X(7h>Kdn|)jXZcnoSG=Bh<}iDdfo2^*b;S zVxFg~vdUB?-DQI*CA6cF*D9-zSVF5hW70CzMjJCdpiMd-jCP5F*1@1rsE_xgU(9|S zvDTTaJC)V%pOuI0iunSN&AN;J6f2`x(r&+H_QTk%n(l7ry(z3LLfNZMh~+1$wf$ME zF8j(S{MX)}VsicCOaj7Fv@>1RNDnoA5`EZLY35nXwY&Shzi7PST1uRK e)npN`^5Tv~q?j;EVkk)=B+rWf`sHdB2MWoGg8_P|XBk8|ujV8ijAzyydFBS6{w% z{it0@9oy*o!%EhgjZbh*CL2@zF4h1_%ZC_9?r{GkkM*{-aJo7xmE)z2ZP~PE%lOUL zZMkt_nUFfN{o;zPs&w uXgL{{%lywcDn7^h6dC) zLfqSE@p7~2opHYrHt6&x;3cTLztx^Iqsx0)jp1IN?rvsc9Vj_e=Y4hU!4fj`caOQY z(c?AamZKd| 4|cYnP-XL8+aOilOZGW|_wxZm%jI1E$$>J+Me8oMZGpB|%@j5j9R z-5Ks;)?{x86;g(;(VQQ2!(<=F%f4})wx|c4`QCK9HKGdDkV>FdqdmGJ?N!lNy~|hJ zJV8VDuh_8L-c4hp)ggp+qFcqs>a~jzh%UY lci-ECddIo@-PlvRYMckeMl! z?Fv<@Wv046OE>P`hF5oMKg)YqZS@u3!n{XFfM1+r1*A;6jU0z`vKWKt9ppXiy&Sm) zKI8g{?&u&$!Jao8Gr?6UoaK6T#`sy?wit()3kik~OmW#4>bpf^WsYBpn3HXVQ>tFF zP<}gYOs-KO(28MiHs^6k=Gy5hf~pyayE^T+8q~=pUqft-CruDDr0&1Vv?E 8Y62EQoF|9^=F{omucRmuwEiTr z((Tvetq^~TAd^|vbi)CQ%V9yvNTXCG%}`6sd{j+zHHhPsBO8_EqO}*LTe{tLH`!=z zq4|%JH2Gr4k0RYQFkRZrCZUPcrK&>Q=InhRoauHOS;VWZBoe% k_AxIH{WI4ga>CUWG=E z=eucmJRb`Ip 7mXs%NisbsqVUL-m13?Q)w_fLe=ibsUjO9 zNeF7)XqC-$dh^huiMFZF2Y!@DTemEgK@D!L*I?|-MVYHMddriIGtwLh`a09lr0trq zKR(bjzFSJ Xc`(mIWu6O`np&2_zdf&8$ zIw}o~>KN3Nrw{a7S33*7TCz)7dd@1#fvnEg$- y`U^J$i?(nq7tJ zi)OpF|JJ_cV#Ho%vZ9em#L_bS=;_(4zPz~3?M#2kvn|1#rr=tNdR69BgJ4vnGm!WY z=%w{Wj$NLIG38~$xXD$p@BYbZ-b*%Bo8&69oRjWEdwQPS5Sl#MM39@fUx`*#yI?)D za&my?mk&SVvWc!pHnk~CdQQzyPNY?xZA`gyG*RtV(w!(EiFr*gV!?`FO*i>yCc~~< z9#M%f-ALPgWM`8_fV9>zQYu{1+z<<8>DYX$=9k?Wq2+uD9#jTF<@WZJolHoL=#Ea% z2)%xX%ML0@FLvfV+D9po`{_)yiDCTqqC2Bo4#?v0REAdywk(X|NI4J_9^cAI!ag9^ z<`tvh5oGBI5}gbqS)c|VR7!<)s$KVo%(OM7GOr!mwUb6F4G6^z(y@Lg>nZ^dZ|p6d zTU<=binmQYMpf-4;4{o8n?pFBY_?c;2jM8E7T=|NX_}OD^yuMmIi6Hw$w< d^`S2{f zMaRkJMymydHaBvm=+dB%xvVjnAd?*RLA(V;!ozuEoXtcW&33h(US&EbDXuf)0pzTU zVxmU~0iM_#gPO`Oxgs%bq(7zR=XN(#>gPx)BCI@FvZYmSq+bpE8{8<|hH6b#3YOAH zM87btnw^QcCJd>GKpl%a N$zR!_FJ+x`drR(9EGG~ %r z#4PdXKR~+8+`Z)Lc6*AdqQ|`rCp) n?QR8wFY1C*o!6559El^viL5Je3zr(YUqs18`hW|P7TT y8f5LIqOF;#6I z4M>E!2rM*c%dEl{k(7tUxzS^mAeL~VTaZH5gboc}%acIBh rS)FIf5Sp87ovnA<*uMkj2&0ziH<>N8T1X0r9xakNwPw2y;~x2I8%xXi_Pc~W z< =Xj!k$juykf@YgL7Jgm4D)>|}bsND@L4}pBSUo;uDlup1> z``z_-o5naYQAS `Me2hrq>Ns&OjNJ3hkP8GgrK~9a6{*+R18gwN_O(*V%87oh5 zhx8!k9v{Hw7JaG}(Sx=OJf%`rVNuMS7K|30K^2U9L?7qXCsk+iupLgNF%0l-Qj3iP zb`A${$D3!9bF>WV_gi*BM7_-%6FlsOiIe6@X${_qWsE&YRA14PRHkS{t;~DN<%cIY zR;m0c8er$n$3wRe6$-Se|H$QhMP$Zby1}}4EJ?DXN}?yIFFPN|49}YCCoM1Wdf^!@ z=XpyqIj0DKm$tT>XsevtA#Hh0*6a+fOgf8a%tSOb!1RnsGD}$oB?u#6@(K!dOY;%* z2ib!O?CVsK1~k=-K)NXJH#av|@k*x1>f&bO>7iGPoZrp z7b2-Q#pU$~uw9PmDQERY70 P(jGWL~Qq zltUQp3ODC;q!xhd1ZM#gqBFB-I`Lt(d-50UWD;BEmX0unVoA{|taVd|kXgxtxi|Yp z(cuxkX$L)yPZXl=gy4d<^M}M)h~HNyJNq*e)QY5TuFmJBOD2T*mYlKquf?hZ^0LT{ zW{X1@GnZu~N0`T+oMfuOxIWBz_*8be$dZrMwM0LpkLf!4Sv18XShXgmNOoCFTe!l* zv6ery*5X&}+Mnzq)G(s!#3;Q>p&w4xZt=h3XeBLXTpVOiV<18fQuFe}qh^qlE* L!@4Vosqt6dmODin7L zxLFDW8(M3V2sGC@=rL-IiD$GRX+=7NP%r0hZ#pps-;HWQ_JUDL-6)FN5@|hJq}g?f z3z4x!9z(uEt``ZgJU$(7!1?7HJ#Ik8%Ho@{`9YEveeeQaM_Kb1M#PpRdng_O4CHfg zAu65ontQ0%FuNJg&953<$j2$(liDKdG3JRhAI$jb4(8(;%)v4ap;VLVaPHcj;Tq;K ze;Uj8&`Y)@I${(x#aLOHGg2D^-rbX#`&CV^>Z_lUl8|B>!*(S4gL7!=X^cPvYOv<2 zCPk^y=~~AtN&Li@^muc^&2$VgfrkD{_#&-T^btDR8mZGh`NsM5hH6(CXl`g>Q2-Yg zzcuJnxHbuj=L(#|Ir^4UQ=lj)sZ#|3C9CZD@F~<44BQ&^$tlG;SW!h3^v$QPWg?dk zWpV@e`ka7i6^PrR>@2T!8xz^^lA=Y%B+Prsek`6P#DOx|$VYqCsnNBSODh))=Jce? zJTW!Y9?J>9uf-(nV8S5MAm_w93>C2!w+6jZ55cqoNecxl=?%&Z$jWP=s|th%D|M`+ zF7rh~EtR#=Ixwa$pjXS2!3ry5sA+TlN|0nt1b)V*9Bm?dh9IYs?#(ljQko8F4Qex| zYsMuZOFLPcfX-*f>~pu;%|=fPxF)bRX#1J=gvEGdK`gb#WDSZ61!;*6rm{65Xmdoo z&mgnrfHr%z78;8meGQFH$S93zxsCsIH;{9uMsea=Gv2nV!L*3`;luAT3X!5wX1OuP zmkPe@bP(v-<+S_+JA)rlmn0}OJg5M!35&II0@B-3I;AV<21 vlO;ODrBzten#Qk7`lu%;et78P3K4wOr>>%6p-`inrL}4rs-2cxf;#q zRDYQ((4W*4mz|B174dtfmr=pdnbBi?W0|&ymZHH$UwB=-h}$7EkwX+gzMmwo|Q| zZ&IVuiTXq8k{qI)4HTzt -$!SY3GpR(E;HYms@@#}3kOU*AABaJvku80bJ0?fh|DHP`h z>y5Le#qLX%915)C6U2DH3Ja4pfn>@O_~(czw$h1!Fnb6(SeX#qe50dze{vO;$K`0I zXc&*FHo;t23dS^}r(5N)Y0kEx%vwkpp~7 V+77p)$>^|zNSeDy5qA+)(O|RlxizdmWSeo-g7d$2$~L)23Yb FP{nmi$AOEs2&lUD;14!QR+?y4kun)_dz zvu%SoCEWAHf6KXw$pUll_u8s}dV 4 F#OlS{)FTP232&o5s4ROUYP&0RL1B;RT+)dYGQQxhh9{CFm&SuT)O{xgRhE+ z!*PS+$OhAG!ICDr;c=z{%f#F!n>$jIs)LBwCd|+=HX{-lg;CW!fjeQ?0iSfTRXDyr z)n-7jL;i-Cigg 6VyX&eV<;hp*qPyE zaFq%Qi!0<+aF;TrYnK tzxfBWbI*$v89V`b%1B$qkNis z7x)J1X&6zTYO6}%Bj2Jh!4k7tigQZOHOpa3C9Unofjp)=3m&7F!+IX^>z*xR<63t# zTzHX*<7GGb-fv6HRnoD{rK51$M@b5oR(CDR@t`@Im#=8GwVn`$N9Gj4cC+q^4f>M2 zy)Vcc>fwWJ#L`7;Je0@s4h6;PV;P1S7m)N7dp2wkY`i_8;nSOL^pR^9dIAgoy1W8a zl#L5faL&6ktXxqZTt<;gk<{z=DXs@rz*1~zTC{LP;-qVwpR`=M@3gRSR&rmOBIxaC zpow JnW_p*C6*8H*<~zKQD9 zqarzzsLa_$n}3ZY jrs^dc|J1UUY9Q0y=!C-CF`3Jyx(kHdg0m&*N&{cWMu7y=><<)cj2YyujRK) z(*YynT{dm89Jk$FM}ohLwbXgKep1T?*cejp)6CwLQ#0)8P#SZ?8Y_*DeGTZycvhWR zmu^)WW;$IJSGQUcR7E!?vjdj?bQftP2=*w;6K3+!3oclD@!F@3PIgCEFWa$g$Cg1~ zFQ}|twuyWY@;suLV4cMwqoflXt;-ZJGGE@ieDC 4M=zHC{tY!lWtWw{C2b8~u7 zKm?~|UC?rbi7c^7XEV|#O5k&~lI0XyUIlY=^YEQLDNXki4 yxT zFz8a(jS*4;d7s7W*TWMm66?=q2lX*gbB|pMHLD!*c_UDMRD;#C%fs(Vn=7lD{HyoT zhy>{^y!P;ECEc!R&Du1XA|xP8mBaX?v)lcB_>lOQgFR-0m7z;5lw(5|rLh*4rRFpp zA0>k|Xv(a$8WAT}<_QCZ{h`9ywxxmPI?QG@9@%0iwVHTTg_s^W+P!3l4=LFLXG?wN zIJr&Ml0eGx0M)e(k(NoAm`j8pMqqR+vjvdU#)!qG-ei2}Y5ari;F^?{Pw`Qn9US3v zFNX2!9zMiOC~LC(&BKQ(X?chaADXI$R#YJ-I@4N%euY=mGAW!c{L<-TF)7&V=#JD6 zAF}K?dvvt#Bz{ayM&5Fl#AmIQHWR8yQj`A5rDm(qPWo0E&?+prrszN{{Ge)_%v#Qi zn4Vs?qUf6Hx&M71VgZJHlUNqoiDS#{vWCmW)9Pag3_FwBI($ewz*v}h1Tw*W;sSjW z_*!`}HCRm9lEjFy<4E#|*cQ3ZNd_;HqE59XcH_x3hCY;IEO2x^R01z$- Qw$HQGl$>DgQMGhc^^Z-{+6Oo=3vrMCCPJ?*h0ZDS+=+Fc+hty z=-x)SD>TrATirnk!t!ERL}(>LK}*A)uvmvwXaB$mx)pzw{v5umN6rX+Igq3w84gT- z_>iW@yQVVgZFY>HSl8e~F>nWIRa7(70?W)CzLW7}W~6cWeWseZOG83?jx-oy2+GAG z%J4M%0%TXwK58(f*|Hk?%_#NmpV4GaWIxJ*A9@oZV4;Nxb(Ai-tKvN7LnH*u_Jl1? z> r*dGnV_+ovkS=FG&QrOqC-w$NDr t5#TCV! zQqEf%QCJlXAZ-Lg)|w0pSpeTCMV^o75oVB0#B`VT(n)kgRZM>iS+uQDfx%=?SO}Wt zP>}p8kfqDh>$5&7dO8%y)g7|i_tm`xlv~uFv@|hL%pfe-9HnL=> d(y<>vcN)( zEbW)7;G`hl@@7UDVDWfSToE@#xAA_bJC@!QwS6UlC@!lEl&J<{3|JnmEF)r+95^?N zXY22`#$tkH#RfW9-YHcqCx|4#9ae%Deqy%|dY*FzTw2`ufx$Op=~1MqF?Jism((N~ z^AV;%P!V`F+>1;E<4mygzrmdP;rFSBi%9lhcS>2S25zP^xi<_6WOVnnn~fO!UNgR9 zJ4OJ_K9uPsF6cBdN{qcTt`eiR#B5P>AJnd>Vi5MCr-qvl_C{GFTqFAC3|Bk0JxW>x z@}hE$9nES>+o2-1!!g7ZGfd1erMH97n1MuB@iN?Odmd~RIy+r(+k33?mKNnzNaVDd z==OVhB^s`UTC}oklj-e}@-rnZn_{I#HZj+qDO0&~#?OkM@!n`5>4`P2?(t!nkEyZW z2HPpUi82s(gd-SX8NAuHcB$JIDDxD3D-$jW8cF?AmQ>-mZ+s%H!ceNNU=CEt;rHRA zX+8`du4l8|s% aSVmMqe-v |m>Lo^=j4F2#rg27?ZKS`o1>UK-Knb*ts#mHS=i-r| 9hj@20B5q?oniJJ_GLD0w}~Vw6lGMg`eWi`d2;x6^xKFDiMW=xId8(1 zFmb2TWi^l`TgtkJZBM1If?s`~U(ycei6ed%b(t!ZCP1MLX|bVd7c_Q>Z=>=Y`s{vN zTWq;Xm)LW~iXOylibaxI*MlCe^ Mnk|Rarm^N35iLC6BnVRU}sDrM+S#E0wI_AJQ0P zg3tx}%3@SzK2TJQicFn(B Dn%b@Gn2nq_QT1^7fCes3qpQDmGDmAXwMv!nsM8 ziD|PwOg6c$e@lvXqIqUBLQFEB3+idgmSc0ZR}JS+F|7sxMpyd{RFKVMkCcpi>DiKZ z70j7uA_J?OrGHQ|X*j8N4-Ut1Vz1_~dm|1Nw~>cPwv&*O-O!6NIu?<~UYBi#Wnkrn z$Q>~cqoj?a$5V_qbL)eY-cZ@bsd6vn(m`#B0Q{^XtEhOT#!Zu0!VRx8nw`O!4A{W+ zE#EIJYWe2M;DZz;X-r~DBxd}zFOE?eQ{^`QV77FRYf;*Repd_GcAqDk2N%h;8dj#W z)rX;%#xd!<$5f1kxr|hyCh#Xp56MixCpG50B+E_m*jl*YN>q+M**a7&v!LQMT}n0j zW;z t$v4?Hph=z_ew9BEi-cYTy`;BSvXY179|>0+I7uUQ_mhoEw+uSJk^CKz zll%qW<)c0h_S*%?E0IgXHXN0tEFo|ep*YMb#P&9wVgm 208lob(B`p;-rbKqp~OAHx)1Qi~!x4epkQXNymrCGo8|mzKvn@dj!})eV$u z@j!+WUh?^)FcoLEB6^~OsL0t&7HfDWqL50>nuKYwGK0dBC2y79s|%q{{45D>mq)LTWq@n=LfMUd1IJdM`M8?mviO z#ar4T6L$)Zdl=>+*pfR1x3orjRFSdyGo0+GDraE68ggmRt|?M!tPPc4jB$_iV>Trz zH(3*6`pi<4%Jgudu`dN0Vt$*?R0(<(hfD^9k@a1K1b}8wP&sbEbYfCOMse`S=pR_7 zc;8A5H(7=yF81i5TvXvL41yY_;qWDL0)5v;nu)Ms@X0mw6Z}nB;+D=D -l?)> z(I#D;jG?{8xGD&4D3`RO-Lp6u#qB3lr-cRZwUQvoCiAsqx|PetGH6$-&*)4N<-;q< z9!yZ?X^dIE+pb&zN>vf4e-(E&!mp*2Lzr7DXZo0}Dy8AA#$tb=Vp$c;q+C((=CEZ_ z>5oF04>&8R^)R7g#qC64*$&F1*aE2t*&GsjzsPtj?q$(Z$>nfAvvi*&I@CXW5>YbH zgkB+v7!|f^K`zoWa9GX&< (mK)c|bQ z(VXl7GcB-_NtZwJ7%Yn0P^+ gwEQ``uUSH}v zDQT*yUymnH`0)nsMI~Y?HAEb!5(OswD_UgcJbz(hIV+tke nHmcdRI+${T_OA35&_eBQ$9iz30`PJkIf*KD21T0oW5aiAzKyjQ*D-BeY zF^ M1d8FhU;P&Qw{I6~_cJ6w{zFqey#j>Xk{hbRZ1~mAKJb zJgf5my@`{|e80iewoMj!U(Klv)8xh@am@_>=cmlKc)II^Wnu&8!j(12Zu`d(gCk4t zXVec~-5RH&i~XKsfy^2I`UU%oSp19=vWH#Pa#}D^Gs(`CEUu_RFNkQFj>vtaOFce` z2(K#jSlBg}Zoe#NsRnNZ(=oWAwa4)F;&06022Tf}p--qFt!VIfi9v_fBq)#AiuN_c za`K#F3CjEWN&`0WVcj8el!dY -Z?M&_`HIx_O`yZW FYMA&fZzFuK{OwGtARLvBLLk&snT_#HS zr!Uafs) 4eC#C)&Kp!NoHu2~7WkXQ z3YvXXd-zuUQs8 #0?7$bn(t07T_ z{LYYAA!Z8CRx&%-Co|+uy}l_8G8JhjtL{e4Fcv05LfV+y`qx^d=GjCSx3lsvWDSc3 zAVQ(=a4R;p KVTh-@&Z!ppF~TW_CUDP_==cp*ZtY`V!vTr!7EC%uhf6Vru_jLNHv z2BsyvK*?xDy$U54XG7sB{Gt^FP|03H`7ZsQ_S9}7d4nawkTP+v%m~X&kpzjih)oD= z8*M3Lj9gB!>T>8x$%~Q<3_bIpP*UboVM7n~p= J!iGHhNC{)G^1IHtBm ziy4k?@kn`hF5@iEzy=oYR=q-dnmO@44sFd%b|XPj11r|DXcMp5S4zp=kqau6th)xK zAb}OXHrF0j@{yskF#VuK(hF5CGpf-swV8wRJW6@K@_?8{$}uRkLH%(shO$w_QZ!yR zS6Uj2AD0G(MS<++Ev*U&EoIe%54W-jm|;GKJjL=#pWn90Z}myJez?rMYtu)lr0A&o zCSNi? ~gl( z<_Rpfff2W {jm>>JJ#?#VQoR(F$pRo4j#-CAGb{0)jaKxKSbGpwa!Rqrui1=jiZ))yVil0P zr3ijq+@P$fDbgd%=$7OkTQ}yKKm*p-jE&vOdzv6CXMHe%>|(aNwrRQA_if9BTE204 zfl)VGBHvrCp#<0yg2jLzWG+$ oiLVU>XIU8Yqr!)~Hwe2BdXtx`mR7Z}nG>Q-Ek0KH4f z)eIymCCG{OwkTJ(TeIzXMox-yppJY8vk4HqZuO9|^qg % zSk?ZG8%Z&%*^&?rH|0Khh*GkmtPzdbT$Ip3wnVTJhZbthH0p&_6_afB2~NGXoR+8R zSgg%IaTDwZ-H!Q1H#%WKsI`F&hL#@oDOho1p((|&THI@%1*FYk5?dRjm0%*ZZ)eb8 z2C}+lLrYi~s(q|ST=T(-HtO_tc}7apsVH1Z(FWHe7H~g{Mvn9~3+HSe%)KW|hdq$W zhd(zrI?~~&TFwkwY4rmfqy*FhX@FHZT*iZM1zJGa&qX?t(Xgd_X2{`Jr741gfXsvd zhFzrmYxOKH)&y{jpaW6ND=7OPOz $r^O;l^K8t=E2hcEhPf_q!*c#InPCr^z zhwjpnRuat!3k#JiH0zM3>ojv;nqn_!JhE >Nk^INuGOuQmb)ux60-%Hiza?9*io96ZQJslENJgj9AzP$b6JR1MEfx$W( z;!k2a8!#JbM0F_XhWIVqloLvp5hKE|f1bb=r4XU$?P_Uxm3RkZQFt=)sVopEHZP^u zYoSj_WHWed?bc-E6$}NlTCJ6GRP}`|z}3jYEWvUr6^Kx=fyJKF6W@I1LTKK~axcaU zQ3U7QarjUv+QHZa@7ryxj55`c3>s1`UJ@2gm0IxRGFoCy4{@l*mX=rmDj|jY2g^SS z)m3mjj|*xHRZ?gbC!)`ENyKb-JDqhgt2HsC(q5vAB|wLtOZZ$|%{*%*_aXhGa4K~r zt6o#>d9N&8vldLme@)T84#6rqQ|^*!cJtp^&0Iv640sVDKe(OnrT^Iq5%Ys?qLhHx z@jhFpE%L*4DoXcy#TGvJ;tpSOVH&^i XuyEE2Q&%CHvFT7VKtl@j2=5+5Qy%=77gC{k>HfKg?`?nh$W zU=^#tqHFE`gbNsRVA3oyiQ*pRFtE@xtt1g*$+Ek*WPY_|wH0>RLO$}v@NJT{k{Bhl z`w2C|cs9AFi8M9F=PGS77R5{xw0gFZ*s7zF6XwZ|IDwZ)TbmT{FZV6|s;ppqJxl%{ Dng8l3 delta 5783 zcmZwKd3aRS8OQMx5)uRi*@?2;pezA`Bf$+?AI6efNxq4aXUxA8|C(nCvuT=3TB x26F^wP=6mgVs5rE z+|!Ijby$kG;d1PcKS6c;HeQAwqHcH*7vdLwd)bx7WKh2myWq{(p8K2IDJ-R71!^X* z`X{`F9jO1&uYc%&|1a!Jd)igr_g#GZpgML?{alMA$4o$yXUg#kybU$66 m;5Ci0H&d#F9}3F^9w zzGfi#pGHIHfus-T;$(aoXW=E>ghh^*;*+S3-oTsjEULpXIo=XYM}5B#m7%46{Z`ao za8VOp !QqWAkM$P2rtG$%gp$3pZ9$m8 mnf`%p7F z;` D=Fy2dy! YuwXop|; zUP9g2jPQ1Gd(=!vU hKdEQs8FQNYS6Ga%UCX0Pdw0^7iND6V_zr5| zLkq~iQZ})`OHBppRl5ueu>tv&G6zw6 mR5445;h=lO5g5j#)tejWQ@3H1o-2G5`d_!4SU zoyT7I9_q$lq8{U{iQZ;(P!p-bK3I=ExWCyzVKfapQK>qPTH`NJn=yTo*YPmyN&Pz1 z$SY7YT8_$GBW}jEsDWp)v2??3sFe5h>qAie=cQ!*$5YS+(^09K>z}X;b%RROjpL{p zZb5a}jLN`4ROU|l-+zEX>R+Ljrf!O70@dFJ)BwJTm+AT6OF<*uk4ohsBsJzJYCx~x zQap$E ~4pw7=lJ$4gNOIBLQ`VXhD zlm?CbZqyfBP&eM=*Pp~H>d&H5*l&h+-YC>{*P)iE7>D69R0cNSRk#KD-7$}&Qhx&V zetBy~(i`D98r1Q5)C@16mLP-osOo*u!4aqq=3!r4jJiPxwd=Q{GO`mj(|wqYM^NXT zL}lcC)cKz#{lb^16lE28C-g#f&>u^16jopYHRBVgrF-44zk?dspHKt;D=H&j`}QpM zGM0 QxT>jI6_u@i)9@DYQ_1=$F zcg&*R3v;nQ4#3&i32RUjieeh-;GX8SRLRTo5bmG)t+v=o{G3=v+(f)ZoFcSwRuP+s zw&O9sFsiKql_h27cH%HGka&=Ih0u{8evm48|JYSA$wp5d$N7AYI6w>~SjN=x6rT(H zvNn$6m&JWVA)$1)9rG!SBSsS6@f*+Je!m>YTH?E2J(=1(Pf*cXX?-^nKO}Ut^DuR| zjp#&V`E4ul4q}X7e*pUvyrWXTC)x{Ij^RYxG2JgbidDp5t^bcH{D}A#!H!HFdfjT% zG<((5=P&uZnb=4iBOWKTqjjtx))LPUl|&h#J+X!O32_T?D>0tXp?wu3x^e&1(Sgqv zzq}p;L=E8*?TLGcR|y?=5j%)!#2TXQxSzuJiSPLhueW`HdYeurBE)V&$6_LRB31Nu z>OsFe4EGY>CXV`T1$d`l78OJ}v5;6z=-5egCbp`=kwMfGFA^h&WkiV3p^3jFo=jD} zk96oqT;aFP!#9XVLca?-iitU?lJ}0kfpUy^nwaRfSK}kZAmTJpL>wW0N<2&Gc$oNw zhH)*0ZxSyPIfRZS9;tVE3FQsMcH(D51MxgDh1f^vnC+4JJjv&c#G6D%;(8)VOd{Hj zEB(UqMHJ=|xA_g(sJ5xZA>tw88lvrZfkK$L+i%!|yZrLKzQ*Pc$+3SJkkRtVfWv7m zZx8R5ku{^LDx3(#ZFYW{-H@MapUod>?<>f)>k5Y3-xTa_xob>bTDsfN(DLrs%(N?` zZXoVD6^V!&O~l-&DM~d|JC&>Ksqs5{hNHpSU?|Yw)C3z`QydJ1+^9V`VVwQ@gkpPU z;siTj(rWwkq($TT+L=>qN`eh>dMOD<8w2rpFjQ-12jiuQN>l0vs` jmRWRb3a<|D@OskzXBX>}odZMw?jXL2PCtO+Y zR>foH22Upz55!}(erDWWm^rd z#`a47CD{HnSfGd~cov(FWcO%IaM%ZsnI zrN#a1qs5bZ$K1G6;Rd2rb*3V4hikmDojdEA!HH-vzRI~V5DjVm6>jtnj8RA>BvnX6 zY}eAEX-&2~=StgBx}*yOAtS*mzNKhmb5?a*6sRQSsm~bH#_UaVN7;w2f7kAvH{4Du z>trKkhwX^+g?4lKVq11YVHbBLxz}Pvl?Z$EhN<@S{ONY;g1NSC;W@j$Vw3H-=)ob2 z@=}W&42SZHS^UXP!RUg~dHDr-`Qw~|{K;b`jToIjdbHiO=-JNm0-@SOpq6uLqPBeT z@|I(ZuTE?E_pN8s+ZTl!BXQfgrrI{wOt2r;OtjC`F0wQ0np-Z_9Z$1o>j$@F-|nW_ zoW_Bftp}V)AZqtF9 `>s3cfb7i6XUeH3MN zgE7}}Lrx9*$!*(8vqE|C)~8t5{}#O66kL&T?YLN@{UFxMULJ3@FT{u2qC{@TXzPJ0 zx3SR;#alKecBI*UO}p)hrl!2s1C8u&cD>UOaH ?cML=#(NSie>%?vIx?Vj %ji6bJ>x0$ND_`+WLM2=ZB+l2F5Oq1{zzRj7Pcp zf68|7J;Us)_k5?DhNA690{sp6*~Z6vrM6xm;cdY{Vx_kUvo{TEDcf9>X18zbV1K)1 zjO}vYIeX#0m<`__vX$GG*i+kv+Vt)DnNDg3cF6-}_TvW DisI^e;VbHj7vjArxZ(?TAqcV Vh9J z0ngzj7}w93L~Mb>us!O&S=K^KqwdFaT!~F^lWpIMDbycE#$X=D{yg7&Nr8!(wpSQ4 z5Ib0BU?1x1Q4f5^wx7XK)O+_graAgC86(&d*JC=~hl}tr%);~m?g0CuCO8tC@O(3o z!ZggcC;oz(>7%Hb@5OlhJ7(Z(n2KMcW_TK}#j~i4O=lK5KNr={Vp|WP&fkQ}#CnYA zf~^$fcGQhKP!~RhZSVzbfrn8k{}w0XPuLmr2Duq@P#LK}UAMy4Z$V||Zd9grqn`Kl zAo8z<12nK1%t2JDTV3gPn2&n!Y*Z$EsE%u}6|O=p-JPg`Z$qViH!8(1qV9VGwKqP* z9{4RPqb&!Me~q}^V7KEQs0#<8ZXAOpI2|>RXHY4B6I x1&ZFJJel@1k_B^P#v^Eo$rX+TwPED&O>E1A9ej) z+g^woV3loOjauT!1_~Nsy=}N3$57vC+fSl8x`67qDeI#LwLsn15!If9WYr8oWon5% zzY4Wfn{E5Um{0v_WCE=Ja5wd7)(q6{?2by&0NXwWyHPK&=a->oa5E|+8?ASsmS`Jl zuRLgd40EYJhc$Q(hwAemqE$2AjY{chT#LWj`ipj@F<$-i-6`PTT$yYSYDB<$hXP zp|0zN%3MENAB-B%2-IGfh#eyo=1^#Zb*R*CvTnmY)E`BqdcjE7O4RONj=Fvg>VdbT zGIF=|e$;h4ZT)f71fNAM$%`0?qwqcjrSK!v4PV;&_o%f!W9u=z_PSC}Mm@N%t&c!$ zu42>!mZ4_20yXfBs2AM5n2kT6_DH)t@~;Q>%yU0315h0oU@R^~4Xn^wj!JzPmC8e? z)E`0ZnUknYoX55pH=1R@4AiG<9BP2`t%ai_##~B6DGeIgji^nx6P2QUn1OGj9&`fr zfD5RBHM!bd<5X*F)W9-P1Io7bfwn#hm655ae& 6D+8#iDUZbhx-6W9))Lp|_) z)BulSbjH^67*Bih7`LA^Y)?G{wFw8IGMj6ignDk|Itp6ja#Y7lQ8%nb4d^!1THbBz zJFR gUF}8H*q9nvCkVIdVQ?GAU?eT~Radk4jMiYCwxn z4_ac|m!tN~2JDSnkPnDCfK4!V0`Cq?MBUdH)jkZBp;4HGW23VE`4qI)b5IusP^quR z=q^SLWFso&_n~I63pLOuQTM%qdcd2QgojY~eT>TJ3Dh1sg}T1!M1tp=6bibrCF%j~ zY`rV?rQQ>>aV~bl)yQPcF1!v;Bkv$HbrSCi+=#kv*km^oh1i4odQ|)4){ilwRK-ql zFYJl^s87S0xEi%dK0 L0aDUeujC%3Z;c7gLb8sH7HO=rz%*B7=NNhRX z{Y7R5s-Hii`rVJQc-DG8LP0Y#Gu#tRuq)L>Y=JqLh$FEjPQYV0A3w*jtkZ5f$eu-d zsUK!kf5#Pb`4t`W7 yW2Muxih;5mEtql z9Ak^!UELCu$}H52sVizNM<8=ClTo{TyR`xJhJ6LKhdx8?g Jbq)(AGiL7 z8fc4h)?cabK|v49MLlpLHpA)2@|%S?7GJXM$rbKQ+MrV18#VA;%)-f-go{yoB#he3 z8*TeG)PQ$XkpDCa&(bgm-$V@{uF_qS6x8|4Py_9c8u>Wnk6FkMb#xG$;AfbP-{5de z^Sck8jLFm&pw9bH{cZM>|5g+pqCsoE4>h9$cnQ9X+P$A6eVTKq>wEz>Lsh7mE=LV~ zjcxw}>b`qWOY{V$;33rgpQ8HzIzmAsIfdFx303X|%}^;zN8Q*3hhRU{fXh)2z5!El zJ?i?qQ2p(~=C~jA-S9Rlb7@Q5>$;-`78zm-GqHq*C8$mF0V-ujP$NBtX?O rhLy5!GM4dp=_ROkp$)dvFz=Mt$Cwh1@Tpy{HaS!u-mO zEl?fp#1^;*^>I6ZTxwoN4RA!Yo2hHC1NCCm60JgI?pAD~&;K11G_!kAH$H-0@Hte< zzCexmEGo5$OZit3%*0msHR`&vsF|nNxczlReTw>^1~|+*8ugq>QlI~M6g0z1)Qp0t z8Lmbx!FuZ!dwx6WL4QM~ct7^Rw@?H64f|osW$xGY7}Nk3p(ap !F_&zYVP`Cn* zp)!$C>vr4=GpP?n-8dWd?NyGt&X4M7CGve^HlSwwFKmaWP}il@xdX^Vy&t;Z<(OAT z{yh|`XwdH8gv!Jg)SBImo$+bZOg}*l=s2pQ#OvMmZm1a!M6GcyY9M1#AGc|?{W?@e z3sD2Fyq^3k<#jZ)#appGK49znQ5_w|j`$_&0ddRS0j8ij?1j2-5T;{+JztC(*ect; z0WYO~A8KGvMJVV2`%xo$1C_E5tjACT`vtXYo3C(Rz3ovc?u(kh1k@7EMcp63qZmOA zVBtz;&G&vO>N&47aqY3lVG2t55!67wK+W*qs1AR|j@ax5_d&g|HT7K7%%`IUumCl{ zD(sJSI2?DQ9&{Xg N>u@B2IZ)fg;0B;4mHzTPy@Nk z`T%MP{)&3=0o3)cq6T^x)$g~MpwEBYP40 }AwI-o@y@|DClL#I19`b~90_>W@n8 z804*N@= (p8b?x3*l5hvI3AVBji^k& zy^;Knr;y0qN?idq#aXDC&Bs_Q!A|HyeJVDfuG@zCG(3bc_%(4ikxl3r>td2P`2pqb zI0(z}C!N#!_o8wMahURSqKHu1bv#07#2SQ-4utOcn<^Zqh=JUz<6h$9Xvuy5|AF#c z&Sl#3Td0q*=NpOKN9iU)vtQiUiq%A0ZtO@*A$X6NY}?Tl)?(~q%Y8YYL)nY^zXUBq zIkA~gYOW--sh1Jj#5xvfF7r7tgSd=_D~K$jj&Nvu8fW4A$dZ{sl<&ZC#4kkSahgIV z(T&hfZ%aH&d`}!F8js1g@FnUK6U}82oxV(Q82%&L=>8Q-#W-R*?K=8nYvK^)p|(x! zTZvqvIc>v w!V_`G$Kij9DWyb7yg_0r>#GRuM_%&<#F%h82$Udc6tplglIhWQ0Pe1+J>b# zk(&Z|gs31c5IU}Mx%l&8N|S7@%f(jrZ_u&y@f&T=6Zg0uB0g62KW4PtoEaY(Me9C$ zM>DR}F~Rz0w|epC^^|7Y+F-5;T|DFd`|TKe-;K0iPI>3=&abBY4so7{=iFQPTy!^5 z*hDlQoozv{E&X@a8;vKdDYW^CaYP1f4Zl18Hsvn}y^E`e5nPi-=y-*Al$c2zBo@)$ zEr#8ox5@${U@x49-%%fn1F;oOv*)OqKM|j(!0{kaNc=A`npnVfors0RmDF{-5dG=? zGVmYD*K)3s$RhsA^P@)(e$FLsbF1cEYc3aEP5Dkj@7;yAy({fHT4EVavh_bwZbx}0 zafb3Y#IJ;oiG)M^K>Qz}BX_jDQI%^bKZyg-L&OpJ#B!bF;5)%|ral9Q5+7+3MZC0J zLv1^uBi$wXMfj90H}W2ZE?lpp0 gl$_~H}iQ9>u)K8#}ODW%q|3kE={4?$#J|$9!%Zb)RZ_fRQ zBZvaxbK)rR5RpcV;(QFDqYdum`O#ndW??A}BZ((;mSZaM8u5}U978xa1qT!RiA3r; zGO&PnmGT_CAN%VB$7S{!59N`>%|tS7f5B4XQX={{bvcJfAlj=^AJer{{hqA&hUc>` zO;4Iy9S-`!zJR~soj&))wf0s7f<7l?Mtg&WfwJ1-pf~J<8vOk?#}#`EE1ZxgR9#gS z2!=f+fuN@(=q=K%A&<|`pVFXH>~s8KkGC>V?GJ}M*-lPrj;AQ#U+Qp2u~X!$^j3sC z;lS_i^j3!hmEN$g$XiiS+oR$9pouYY-f*a4%-~H4v#<8nhRoFJ%0egT36yw>sd_?T zZ!pZm=p#_+370vZ5??Sx_ug7vqlOyCDc4g1B_$yz9BnFgO1#w-Vb4;ZQ `jh>z7UGnZjt?!7-ZpZBst%=?yv>TZPZ>^!9|x0##MI zqr%55Dt)D8VUIr$_JnHvML7+jsYP-17Ye#HJUy)}t#vWig=)OsV6nseoTUM$)bTfD z6&A&}aTo5TU4Anu5U8*#=Wke95)<1rCd2I}Pi~?vIU336we&zQyI9N}BwhrCz_M zFz8gPT lJF2{)kmJv}*uA?Oc?7qTR_)#TlhxU& zvjUVZrn$cD(q##S >c; #jrJ99iz{nbg zu8EHsSEvu##Z6Qg2o$p}-l{6c&+3N4i^)qMSj>iMTyMXR{FFM{R%O9}-xng2#W@W_ I*FG5c|BtT=S^xk5 delta 8007 zcmZA630&9p9mnx6mmr51hp32X%As-!9-xTe5sHe5d1NRe3CLl9BBuMB(>Z6U^*7Cy zYpz_irCI;YavqhMnU _%zPpl*8EK5mOeevZ=4ot?FQOW}f&O?D z1Mn1P;RRIt$P~w(*p_?>cEB9;!-=+hDh89Uz$9FN{ctO`VtjLsL i(;8xVm+_v?t(w!X&N41Ye)hD7>o?+{Atz%H_iqNHor6lyY=VE(Y zhT7uwSb)F99(WZw0;V0?p&jUmY8P+w=@?3W1Zrodq8{CBo3BQmxmk$X+1E1Ie|30^ z0uAil- 9NiRxif{T#wq(eW(c^K=peX)$US% z_Fp$%r$7_9joRvV1B?mB2#mqLsFjUHO{4_%wv?kLv;x)Pden-aK@GUgmhVILcMMDL z6V%R+bPaSm9EZAb5^Bc9sKZl=n&5+|EnSP6z!SE73u2Q4?B%Is>b) z8*W0~w+pqiC#)B72l+3sjo$yw+0K@~fI7{)Q8&Da8t@cqN6uL jI$Teq26zRv!aW#|@1V}azcC8^ zbDaBoqBr?8RR0;)Y}5{qLhaZyIqbi-cn1YK90yP S{$Va>;A6JnJZd7Jq27Y8Q62f@IxFplx-k{I z;t irV^<)=Q|Zy@q;LCeL|of>7 Hjp}d{s=-#>ntrx(Br* zAE4gfE2x3Kx8;5#okJFeeJPJdj)fV6ez+Rr@DbE~yPR^DIY>fVa|Crtk6X{7p5@1= z4sN2h`Zj9CtwuQ$i9l_29BKjSsEOvF?i-Kle-f(yX{ZIv#^#^@^GWCsE=Jw3wz F9w%YQ80T!1qTZ7EsKfLyYQoQ<7P1XFKE{LEk#8^%{R*5%+74Z6 zm_$PFc{=Ku--){6ZuG}8oP*Wa6VG4(evcZ^XRMPCz##JNQID=G24fn=<51Mrm!tY^ z8q52yfgZFK>u@9aEvRq!pmENxTn(rX$4*?1q2qau_&DlteuaEZP5VNgJB~*_`(_;` z;XA1QZlO2!pWrxX0{gEO47LTsuowB^*d8lUD_xA*p%u85*Ju-7CO>o{ZwMW9FQT0M zi7EWx!UY_FtC+ huQBa<(o4L&!%Xb1;2Thj^*gjrubF9(6`uM?LDl+VYF21-WjL;CBKOT DX5bM_Ml;(fPeI*RgSq%DYNG$dHh2s5Rs@zgJDQ4( e)u24oM^WpbNX>&rvJdYU}sn67p}Nb|{aNs-G2OQT>*pKH;^f)4v)u!3`M9 z_+~2!J>!>c#ctG%M^FQvMRjl!wZ&oObc%7<3s<8rzJ#jZX?+_t(F>@p{u=c*1XMWV zg=3K3|7a5Gus4pxHLAcfsFhqsZSA+HnFmxlr@kY$CZB=&;WHH5;}lz7iJDLYw#Ajm z@3&?n2H-Jt={J=3ZG&s5nchatyu)0lgWl*zeh9{69uCGT)PT=pAnvyHhfw`|iTV!s zR5_0}619+SsKc95#s2G*W>Zj&Q!oe*p;mShHPZ{W{8Lo>f1w^p5H|&59Ja!A48bha z1oBa5=U!BO32MUSsQVUGv;TugtfW9QeFHV{S=3fvLf!Bssza|DX9eM?Z+k3ir^-<6 zmY^oK*7`@}T$;B~XC$fC*{OaQLO$C?LeHiEwKdbN)tE;9XEy&5YR3Dq4IW2zcoFqz zK1OwT#nyj|dE{Ho Ssvs{m%WaStK5(U=FGyQ|GLt75bBn#CnWDO>jMG zr?z4={sr}j&Y^bhBUC?MU|YO_y3d d_oUP3&)|_8&LP^S@>re1{q+Xuh+>k(f+A z4#RLVreYO##^0bOunV<-H!uy)pe7oy!1=8>5>=mp-k6W7FTh~E|I qlpV}ud3iqP!{{YqBO>}8Mv(R}x zf>F;h6tzWBs2zzzZDBfg#F3~SD7N_~R6mbkH{6WsXD@0Zhfw`}iXHH}E%#~S`D-RU zn(T)L^?naQy|0r|9T%e}Qiv01KUvpzJlstpRIovlgXdLKIp^FDxZw` zI0L8Q^EeKDm-4O9`#+IHtl=lqgU+Y;Uep$CwE5FGfP9-}&hK<1aS-`sn2USRjX$EE zxtq_OKEW@b7IYZ3lOLfL@)>GES22?D&4A_3r?U_>kz&+JSD-pvgAw>FYNz(0w)O<_ zaWm&pk8s=y=TSX?&G(}|NNZ4^=BH5oY(qWLgBZv7<`@ZmV7@_}fuLVF14W`b=#8&q z7G~oQc(?K^d0hA?u0j7_8goBx!0s5Z%K2@$Hx4I17qw$MP&@h+y6z;==U2`aHDD|9 zO{f(tMQ>b%>hK}d>EDiOw;y%t-$pNNxmbsJgeb8EWw_p^@1-H*nv+i6)%>h&T{Hdp z_Z}LJB{Y~Wom^cLh*?B5b-FU~1t;13tJnji^ qh)(^y=i37w|Lf02W9MQ+NOCnuQv|R6!$foXJc$>& JR*j=2%>^?%k_7gP(S;K?!-u2) lq+@fFdNyiUKa?}-fZx_JG~M4Jw>-i@ay zzk`@T=o&-WA+6ts%-2LX1$x~^6Gw@Ai1CE3_QWxw9c_B6fJ=WyeItqYiIL