Merge branch 'develop' into feature/unit-conversion

This commit is contained in:
vabene1111 2023-03-15 14:57:00 +01:00
commit 27c5749b21
23 changed files with 384 additions and 272 deletions

View File

@ -5,6 +5,7 @@ from zipfile import ZipFile
from cookbook.helper.image_processing import get_filetype
from cookbook.helper.ingredient_parser import IngredientParser
from cookbook.helper.recipe_url_import import parse_servings, parse_servings_text, parse_time
from cookbook.integration.integration import Integration
from cookbook.models import Ingredient, Recipe, Step
@ -23,41 +24,60 @@ class Mealie(Integration):
name=recipe_json['name'].strip(), description=description,
created_by=self.request.user, internal=True, space=self.request.space)
# TODO parse times (given in PT2H3M )
# @vabene check recipe_url_import.iso_duration_to_minutes I think it does what you are looking for
ingredients_added = False
for s in recipe_json['recipe_instructions']:
step = Step.objects.create(
instruction=s['text'], space=self.request.space,
)
if not ingredients_added:
ingredients_added = True
if len(recipe_json['description'].strip()) > 500:
step.instruction = recipe_json['description'].strip() + '\n\n' + step.instruction
ingredient_parser = IngredientParser(self.request, True)
for ingredient in recipe_json['recipe_ingredient']:
try:
if ingredient['food']:
f = ingredient_parser.get_food(ingredient['food'])
u = ingredient_parser.get_unit(ingredient['unit'])
amount = ingredient['quantity']
note = ingredient['note']
original_text = None
else:
amount, unit, food, note = ingredient_parser.parse(ingredient['note'])
f = ingredient_parser.get_food(food)
u = ingredient_parser.get_unit(unit)
original_text = ingredient['note']
step.ingredients.add(Ingredient.objects.create(
food=f, unit=u, amount=amount, note=note, original_text=original_text, space=self.request.space,
))
except Exception:
pass
step = Step.objects.create(instruction=s['text'], space=self.request.space, )
recipe.steps.add(step)
step = recipe.steps.first()
if not step: # if there is no step in the exported data
step = Step.objects.create(instruction='', space=self.request.space, )
recipe.steps.add(step)
if len(recipe_json['description'].strip()) > 500:
step.instruction = recipe_json['description'].strip() + '\n\n' + step.instruction
ingredient_parser = IngredientParser(self.request, True)
for ingredient in recipe_json['recipe_ingredient']:
try:
if ingredient['food']:
f = ingredient_parser.get_food(ingredient['food'])
u = ingredient_parser.get_unit(ingredient['unit'])
amount = ingredient['quantity']
note = ingredient['note']
original_text = None
else:
amount, unit, food, note = ingredient_parser.parse(ingredient['note'])
f = ingredient_parser.get_food(food)
u = ingredient_parser.get_unit(unit)
original_text = ingredient['note']
step.ingredients.add(Ingredient.objects.create(
food=f, unit=u, amount=amount, note=note, original_text=original_text, space=self.request.space,
))
except Exception:
pass
if 'notes' in recipe_json and len(recipe_json['notes']) > 0:
notes_text = "#### Notes \n\n"
for n in recipe_json['notes']:
notes_text += f'{n["text"]} \n'
step = Step.objects.create(
instruction=notes_text, space=self.request.space,
)
recipe.steps.add(step)
if 'recipe_yield' in recipe_json:
recipe.servings = parse_servings(recipe_json['recipe_yield'])
recipe.servings_text = parse_servings_text(recipe_json['recipe_yield'])
if 'total_time' in recipe_json and recipe_json['total_time'] is not None:
recipe.working_time = parse_time(recipe_json['total_time'])
if 'org_url' in recipe_json:
recipe.source_url = recipe_json['org_url']
recipe.save()
for f in self.files:
if '.zip' in f['name']:
import_zip = ZipFile(f['file'])

View File

@ -5,6 +5,9 @@ import re
from gettext import gettext as _
from io import BytesIO
import requests
import validators
from cookbook.helper.ingredient_parser import IngredientParser
from cookbook.helper.recipe_url_import import parse_servings, parse_servings_text
from cookbook.integration.integration import Integration
@ -81,7 +84,14 @@ class Paprika(Integration):
recipe.steps.add(step)
if recipe_json.get("photo_data", None):
self.import_recipe_image(recipe, BytesIO(base64.b64decode(recipe_json['photo_data'])), filetype='.jpeg')
try:
if recipe_json.get("image_url", None):
url = recipe_json.get("image_url", None)
if validators.url(url, public=True):
response = requests.get(url)
self.import_recipe_image(recipe, BytesIO(response.content))
except:
if recipe_json.get("photo_data", None):
self.import_recipe_image(recipe, BytesIO(base64.b64decode(recipe_json['photo_data'])), filetype='.jpeg')
return recipe

View File

@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-04-29 18:42+0200\n"
"PO-Revision-Date: 2022-08-18 14:32+0000\n"
"Last-Translator: Mathias Rasmussen <math625f@gmail.com>\n"
"PO-Revision-Date: 2023-03-06 10:55+0000\n"
"Last-Translator: Anders Obro <oebro@duck.com>\n"
"Language-Team: Danish <http://translate.tandoor.dev/projects/tandoor/"
"recipes-backend/da/>\n"
"Language: da\n"
@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.10.1\n"
"X-Generator: Weblate 4.15\n"
#: .\cookbook\filters.py:23 .\cookbook\templates\forms\ingredients.html:34
#: .\cookbook\templates\space.html:49 .\cookbook\templates\stats.html:28
@ -2122,9 +2122,9 @@ msgid ""
"return more results than needed to make sure you find what you are looking "
"for."
msgstr ""
"Find hvad du har brug for selvom opskriften har stavefejl. Kan måske "
"returnere flere resultater end du har brug for, for at være sikker på at du "
"finder hvad du leder efter."
"Find hvad du har brug for, selvom opskriften har stavefejl. Kan måske "
"returnere flere resultater end du har brug for, for at være sikker på, at du "
"finder, hvad du leder efter."
#: .\cookbook\templates\settings.html:182
msgid "This is the default behavior"
@ -2196,8 +2196,7 @@ msgid ""
"You can sign in to your account using any of the following third party\n"
" accounts:"
msgstr ""
"Du kan logge ind på din konto med enhver af de følgende tredjepartsapps\n"
" kontoer:"
"Du kan logge ind på din konto med enhver af de følgende tredjepartskontoer:"
#: .\cookbook\templates\socialaccount\connections.html:52
msgid ""
@ -2212,7 +2211,7 @@ msgstr "Tilføj en tredjepartskonto"
#: .\cookbook\templates\socialaccount\signup.html:5
msgid "Signup"
msgstr "Registrering"
msgstr "Registrer"
#: .\cookbook\templates\socialaccount\signup.html:10
#, python-format

View File

@ -14,8 +14,8 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-01-19 19:14+0100\n"
"PO-Revision-Date: 2022-08-12 21:32+0000\n"
"Last-Translator: Thorin <thorin8@hotmail.com>\n"
"PO-Revision-Date: 2023-03-13 06:55+0000\n"
"Last-Translator: Amara Ude <apu24@drexel.edu>\n"
"Language-Team: Spanish <http://translate.tandoor.dev/projects/tandoor/"
"recipes-backend/es/>\n"
"Language: es\n"
@ -23,7 +23,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.10.1\n"
"X-Generator: Weblate 4.15\n"
#: .\cookbook\forms.py:52
msgid "Default unit"
@ -143,7 +143,7 @@ msgstr ""
#: .\cookbook\forms.py:84
msgid "Exclude ingredients that are on hand."
msgstr ""
msgstr "Excluir ingredientes que están disponibles."
#: .\cookbook\forms.py:85
msgid "Will optimize the UI for use with your left hand."
@ -296,36 +296,49 @@ msgid ""
"Use fuzzy matching on units, keywords and ingredients when editing and "
"importing recipes."
msgstr ""
"Utilizar comparación difusa en unidades, palabras clave e ingredientes al "
"editar e importar recetas."
#: .\cookbook\forms.py:446
msgid ""
"Fields to search ignoring accents. Selecting this option can improve or "
"degrade search quality depending on language"
msgstr ""
"Campos de búsqueda ignorando acentos.  La selección de esta opción puede "
"mejorar o degradar la calidad de la búsqueda dependiendo del idioma"
#: .\cookbook\forms.py:448
msgid ""
"Fields to search for partial matches. (e.g. searching for 'Pie' will return "
"'pie' and 'piece' and 'soapie')"
msgstr ""
"Campos de búsqueda para coincidencias parciales. (por ejemplo, buscar 'Pie' "
"devolverá 'pie' y 'piece' y 'soapie')"
#: .\cookbook\forms.py:450
msgid ""
"Fields to search for beginning of word matches. (e.g. searching for 'sa' "
"will return 'salad' and 'sandwich')"
msgstr ""
"Campos de búsqueda para coincidencias al principio de la palabra. (por "
"ejemplo, buscar 'sa' devolverá 'ensalada' y 'sándwich')"
#: .\cookbook\forms.py:452
msgid ""
"Fields to 'fuzzy' search. (e.g. searching for 'recpie' will find 'recipe'.) "
"Note: this option will conflict with 'web' and 'raw' methods of search."
msgstr ""
"Campos para búsqueda \"difusa\". (por ejemplo, buscar 'recpie' encontrará "
"'receta'). Nota: esta opción entrará en conflicto con los métodos de "
"búsqueda 'web' y 'raw'."
#: .\cookbook\forms.py:454
msgid ""
"Fields to full text search. Note: 'web', 'phrase', and 'raw' search methods "
"only function with fulltext fields."
msgstr ""
"Campos para búsqueda de texto completo. Nota: los métodos de búsqueda 'web', "
"'phrase' y 'raw' solo funcionan con campos de texto completo."
#: .\cookbook\forms.py:458
msgid "Search Method"
@ -333,25 +346,23 @@ msgstr "Método de Búsqueda"
#: .\cookbook\forms.py:459
msgid "Fuzzy Lookups"
msgstr ""
msgstr "Búsquedas difusas"
#: .\cookbook\forms.py:460
msgid "Ignore Accent"
msgstr ""
msgstr "Ignorar Acento"
#: .\cookbook\forms.py:461
msgid "Partial Match"
msgstr ""
msgstr "Coincidencia Parcial"
#: .\cookbook\forms.py:462
msgid "Starts With"
msgstr ""
msgstr "Comienza Con"
#: .\cookbook\forms.py:463
#, fuzzy
#| msgid "Search"
msgid "Fuzzy Search"
msgstr "Buscar"
msgstr "Búsqueda Difusa"
#: .\cookbook\forms.py:464
msgid "Full Text"
@ -362,42 +373,53 @@ msgid ""
"Users will see all items you add to your shopping list. They must add you "
"to see items on their list."
msgstr ""
"Los usuarios verán todos los elementos que agregues a tu lista de compras. "
"Deben agregarte para ver los elementos en su lista."
#: .\cookbook\forms.py:495
msgid ""
"When adding a meal plan to the shopping list (manually or automatically), "
"include all related recipes."
msgstr ""
"Al agregar un plan de comidas a la lista de compras (manualmente o "
"automáticamente), incluir todas las recetas relacionadas."
#: .\cookbook\forms.py:496
msgid ""
"When adding a meal plan to the shopping list (manually or automatically), "
"exclude ingredients that are on hand."
msgstr ""
"Al agregar un plan de comidas a la lista de compras (manualmente o "
"automáticamente), excluir los ingredientes que están disponibles."
#: .\cookbook\forms.py:497
msgid "Default number of hours to delay a shopping list entry."
msgstr ""
"Número predeterminado de horas para retrasar una entrada en la lista de "
"compras."
#: .\cookbook\forms.py:498
msgid "Filter shopping list to only include supermarket categories."
msgstr ""
"Filtrar la lista de compras para incluir solo categorías de supermercados."
#: .\cookbook\forms.py:499
msgid "Days of recent shopping list entries to display."
msgstr ""
msgstr "Días de entradas recientes en la lista de compras a mostrar."
#: .\cookbook\forms.py:500
msgid "Mark food 'On Hand' when checked off shopping list."
msgstr ""
"Marcar los alimentos como 'Disponible' cuando se marca en la lista de "
"compras."
#: .\cookbook\forms.py:501
msgid "Delimiter to use for CSV exports."
msgstr ""
msgstr "Delimitador a utilizar para exportaciones CSV."
#: .\cookbook\forms.py:502
msgid "Prefix to add when copying list to the clipboard."
msgstr ""
msgstr "Prefijo a agregar al copiar la lista al portapapeles."
#: .\cookbook\forms.py:506
msgid "Share Shopping List"
@ -405,23 +427,23 @@ msgstr "Compartir Lista de la Compra"
#: .\cookbook\forms.py:507
msgid "Autosync"
msgstr ""
msgstr "Autosincronización"
#: .\cookbook\forms.py:508
msgid "Auto Add Meal Plan"
msgstr ""
msgstr "Agregar Plan de Comidas automáticamente"
#: .\cookbook\forms.py:509
msgid "Exclude On Hand"
msgstr ""
msgstr "Excluir Disponible"
#: .\cookbook\forms.py:510
msgid "Include Related"
msgstr ""
msgstr "Incluir Relacionados"
#: .\cookbook\forms.py:511
msgid "Default Delay Hours"
msgstr ""
msgstr "Horas de Retraso Predeterminadas"
#: .\cookbook\forms.py:512
msgid "Filter to Supermarket"
@ -429,11 +451,11 @@ msgstr "Filtrar según Supermercado"
#: .\cookbook\forms.py:513
msgid "Recent Days"
msgstr ""
msgstr "Días Recientes"
#: .\cookbook\forms.py:514
msgid "CSV Delimiter"
msgstr ""
msgstr "Delimitador CSV"
#: .\cookbook\forms.py:515
msgid "List Prefix"
@ -441,21 +463,19 @@ msgstr "Prefijo de la lista"
#: .\cookbook\forms.py:516
msgid "Auto On Hand"
msgstr ""
msgstr "Auto en existencia"
#: .\cookbook\forms.py:526
msgid "Reset Food Inheritance"
msgstr ""
msgstr "Restablecer la herencia de alimentos"
#: .\cookbook\forms.py:527
msgid "Reset all food to inherit the fields configured."
msgstr ""
msgstr "Reiniciar todos los alimentos para heredar los campos configurados."
#: .\cookbook\forms.py:539
#, fuzzy
#| msgid "Food that should be replaced."
msgid "Fields on food that should be inherited by default."
msgstr "Alimento que se va a reemplazar."
msgstr "Campos en los alimentos que deben ser heredados por defecto."
#: .\cookbook\forms.py:540
msgid "Show recipe counts on search filters"
@ -464,12 +484,15 @@ msgstr "Mostrar cantidad de recetas en los filtros de búsquedas"
#: .\cookbook\forms.py:541
msgid "Use the plural form for units and food inside this space."
msgstr ""
"Utilice la forma plural para las unidades y alimentos dentro de este espacio."
#: .\cookbook\helper\AllAuthCustomAdapter.py:39
msgid ""
"In order to prevent spam, the requested email was not send. Please wait a "
"few minutes and try again."
msgstr ""
"Para prevenir el spam, el correo electrónico solicitado no se envió. Por "
"favor, espere unos minutos e inténtelo de nuevo."
#: .\cookbook\helper\permission_helper.py:164
#: .\cookbook\helper\permission_helper.py:187 .\cookbook\views\views.py:114
@ -498,7 +521,7 @@ msgstr "¡No puede interactuar con este objeto ya que no es de tu propiedad!"
#: .\cookbook\helper\permission_helper.py:403
msgid "You have reached the maximum number of recipes for your space."
msgstr ""
msgstr "Ha alcanzado el número máximo de recetas para su espacio."
#: .\cookbook\helper\permission_helper.py:415
msgid "You have more users than allowed in your space."

View File

@ -14,8 +14,8 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-01-19 19:14+0100\n"
"PO-Revision-Date: 2023-02-24 02:55+0000\n"
"Last-Translator: JFL <moijesuistoitues+d85m0tz6@gmail.com>\n"
"PO-Revision-Date: 2023-03-13 06:55+0000\n"
"Last-Translator: Jin Zhang <JinLZhang278@hotmail.com>\n"
"Language-Team: French <http://translate.tandoor.dev/projects/tandoor/"
"recipes-backend/fr/>\n"
"Language: fr\n"
@ -167,7 +167,7 @@ msgstr "Nom"
#: .\cookbook\forms.py:124 .\cookbook\forms.py:297 .\cookbook\views\lists.py:88
msgid "Keywords"
msgstr "mots-clés"
msgstr "Mots-clés"
#: .\cookbook\forms.py:125
msgid "Preparation time in minutes"
@ -288,16 +288,12 @@ msgstr ""
"que davantage de fautes de frappe sont ignorées)."
#: .\cookbook\forms.py:443
#, fuzzy
#| msgid ""
#| "Select type method of search. Click <a href=\"/docs/search/\">here</a> "
#| "for full desciption of choices."
msgid ""
"Select type method of search. Click <a href=\"/docs/search/\">here</a> for "
"full description of choices."
msgstr ""
"Sélectionner la méthode de recherche. Cliquer <a href=\"/docs/search/"
"\">ici</a> pour une description complète des choix."
"Sélectionner la méthode de recherche. Cliquer <a href=\"/docs/search/\""
">ici</a> pour une description complète des choix."
#: .\cookbook\forms.py:444
msgid ""
@ -407,6 +403,8 @@ msgstr ""
#: .\cookbook\forms.py:497
msgid "Default number of hours to delay a shopping list entry."
msgstr ""
"Nombre d'heures par défaut pour retarder l'ajoût d'un article à la liste de "
"courses."
#: .\cookbook\forms.py:498
msgid "Filter shopping list to only include supermarket categories."
@ -416,7 +414,7 @@ msgstr ""
#: .\cookbook\forms.py:499
msgid "Days of recent shopping list entries to display."
msgstr ""
msgstr "Jours des entrées récentes de la liste de courses à afficher."
#: .\cookbook\forms.py:500
msgid "Mark food 'On Hand' when checked off shopping list."
@ -453,7 +451,7 @@ msgstr "Inclure recettes connexes"
#: .\cookbook\forms.py:511
msgid "Default Delay Hours"
msgstr ""
msgstr "Heures de retard par défaut"
#: .\cookbook\forms.py:512
msgid "Filter to Supermarket"
@ -477,7 +475,7 @@ msgstr "Disponible automatique"
#: .\cookbook\forms.py:526
msgid "Reset Food Inheritance"
msgstr ""
msgstr "Réinitialiser l'héritage alimentaire"
#: .\cookbook\forms.py:527
msgid "Reset all food to inherit the fields configured."
@ -545,7 +543,7 @@ msgstr ""
#: .\cookbook\helper\recipe_search.py:570
msgid "One of queryset or hash_key must be provided"
msgstr ""
msgstr "Il est nécessaire de fournir soit le queryset, soit la clé de hachage"
#: .\cookbook\helper\shopping_helper.py:152
msgid "You must supply a servings size"
@ -562,8 +560,9 @@ msgid "Favorite"
msgstr "Favori"
#: .\cookbook\integration\copymethat.py:50
#, fuzzy
msgid "I made this"
msgstr ""
msgstr "J'ai fait ça"
#: .\cookbook\integration\integration.py:223
msgid ""
@ -722,10 +721,8 @@ msgid "Description Replace"
msgstr "Remplacer la Description"
#: .\cookbook\models.py:1231
#, fuzzy
#| msgid "Instructions"
msgid "Instruction Replace"
msgstr "Instructions"
msgstr "Remplacer l'instruction"
#: .\cookbook\models.py:1257 .\cookbook\views\delete.py:36
#: .\cookbook\views\edit.py:251 .\cookbook\views\new.py:48
@ -750,7 +747,7 @@ msgstr "Vous avez atteint votre limite de téléversement de fichiers."
#: .\cookbook\serializer.py:291
msgid "Cannot modify Space owner permission."
msgstr ""
msgstr "Impossible de modifier les permissions du propriétaire de groupe."
#: .\cookbook\serializer.py:1085
msgid "Hello"
@ -806,6 +803,8 @@ msgstr ""
msgid ""
"Providing a list_recipe ID and servings of 0 will delete that shopping list."
msgstr ""
"Fournir un identifiant de liste de courses et un nombre de portions de 0 "
"supprimera cette liste de courses."
#: .\cookbook\serializer.py:1247
msgid "Amount of food to add to the shopping list"
@ -816,8 +815,11 @@ msgid "ID of unit to use for the shopping list"
msgstr "ID de lunité à utiliser pour la liste de courses"
#: .\cookbook\serializer.py:1251
#, fuzzy
msgid "When set to true will delete all food from active shopping lists."
msgstr ""
"Lorsqu'il est défini sur \"true\", tous les aliments des listes de courses "
"actives seront supprimés."
#: .\cookbook\tables.py:61 .\cookbook\tables.py:75
#: .\cookbook\templates\generic\delete_template.html:7
@ -1239,7 +1241,7 @@ msgstr "Vous utilisez la version gratuite de Tandoor"
#: .\cookbook\templates\base.html:361
msgid "Upgrade Now"
msgstr ""
msgstr "Mettez à jour maintenant"
#: .\cookbook\templates\batch\edit.html:6
msgid "Batch edit Category"
@ -1333,8 +1335,9 @@ msgid "Are you sure you want to delete the %(title)s: <b>%(object)s</b> "
msgstr "Êtes-vous sûr(e) de vouloir supprimer %(title)s : <b>%(object)s</b> "
#: .\cookbook\templates\generic\delete_template.html:22
#, fuzzy
msgid "This cannot be undone!"
msgstr ""
msgstr "Cela ne peut pas être annulé !"
#: .\cookbook\templates\generic\delete_template.html:27
msgid "Protected"
@ -1351,7 +1354,7 @@ msgstr "Annuler"
#: .\cookbook\templates\generic\edit_template.html:6
#: .\cookbook\templates\generic\edit_template.html:14
msgid "Edit"
msgstr "modifier"
msgstr "Modifier"
#: .\cookbook\templates\generic\edit_template.html:32
msgid "View"
@ -1499,8 +1502,6 @@ msgstr ""
#: .\cookbook\templates\markdown_info.html:57
#: .\cookbook\templates\markdown_info.html:73
#, fuzzy
#| msgid "or by leaving a blank line inbetween."
msgid "or by leaving a blank line in between."
msgstr "ou en laissant une ligne vide entre deux."
@ -1524,16 +1525,12 @@ msgid "Lists"
msgstr "Listes"
#: .\cookbook\templates\markdown_info.html:85
#, fuzzy
#| msgid ""
#| "Lists can ordered or unorderd. It is <b>important to leave a blank line "
#| "before the list!</b>"
msgid ""
"Lists can ordered or unordered. It is <b>important to leave a blank line "
"before the list!</b>"
msgstr ""
"Les listes peuvent être ordonnées ou non. Il est <b>important de laisser une "
"ligne vide avant la liste !</b>"
"ligne vide avant la liste!</b>"
#: .\cookbook\templates\markdown_info.html:87
#: .\cookbook\templates\markdown_info.html:108
@ -2076,10 +2073,8 @@ msgstr "Créer un compte superutilisateur"
#: .\cookbook\templates\socialaccount\authentication_error.html:7
#: .\cookbook\templates\socialaccount\authentication_error.html:23
#, fuzzy
#| msgid "Social Login"
msgid "Social Network Login Failure"
msgstr "Connexion par réseau social"
msgstr "Échec de la connexion au réseau social"
#: .\cookbook\templates\socialaccount\authentication_error.html:25
msgid ""
@ -2130,16 +2125,20 @@ msgstr "Connecter %(provider)s"
#, python-format
msgid "You are about to connect a new third party account from %(provider)s."
msgstr ""
"Vous êtes sur le point de connecter un nouveau compte tiers depuis "
"%(provider)s."
#: .\cookbook\templates\socialaccount\login.html:13
#, python-format
msgid "Sign In Via %(provider)s"
msgstr ""
msgstr "Se connecter via %(provider)s"
#: .\cookbook\templates\socialaccount\login.html:15
#, python-format
msgid "You are about to sign in using a third party account from %(provider)s."
msgstr ""
"ous êtes sur le point de vous connecter en utilisant un compte tiers depuis "
"%(provider)s."
#: .\cookbook\templates\socialaccount\login.html:20
msgid "Continue"
@ -2204,10 +2203,8 @@ msgid "Owner"
msgstr "Propriétaire"
#: .\cookbook\templates\space_overview.html:57
#, fuzzy
#| msgid "Create Space"
msgid "Leave Space"
msgstr "Créer un groupe"
msgstr "Quitter le groupe"
#: .\cookbook\templates\space_overview.html:78
#: .\cookbook\templates\space_overview.html:88
@ -2442,6 +2439,8 @@ msgstr "{obj.name} a été ajouté(e) à la liste de courses."
#: .\cookbook\views\api.py:679
msgid "ID of recipe a step is part of. For multiple repeat parameter."
msgstr ""
"Identifiant de la recette dont fait partie une étape. Pour plusieurs "
"paramètres de répétition."
#: .\cookbook\views\api.py:681
msgid "Query string matched (fuzzy) against object name."
@ -2608,8 +2607,6 @@ msgid "Bad URL Schema."
msgstr "Mauvais schéma dURL."
#: .\cookbook\views\api.py:1215
#, fuzzy
#| msgid "No useable data could be found."
msgid "No usable data could be found."
msgstr "Aucune information utilisable n'a été trouvée."
@ -2725,10 +2722,8 @@ msgid "Shopping Categories"
msgstr "Catégories de courses"
#: .\cookbook\views\lists.py:187
#, fuzzy
#| msgid "Filter"
msgid "Custom Filters"
msgstr "Filtre"
msgstr "Filtre personnalisé"
#: .\cookbook\views\lists.py:224
msgid "Steps"

View File

@ -13,16 +13,16 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-01-19 19:14+0100\n"
"PO-Revision-Date: 2022-09-01 20:32+0000\n"
"Last-Translator: 1k2 <tandoor@1k2.nl>\n"
"Language-Team: Dutch <http://translate.tandoor.dev/projects/tandoor/recipes-"
"backend/nl/>\n"
"PO-Revision-Date: 2023-02-27 13:55+0000\n"
"Last-Translator: Jesse <jesse.kamps@pm.me>\n"
"Language-Team: Dutch <http://translate.tandoor.dev/projects/tandoor/"
"recipes-backend/nl/>\n"
"Language: nl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.10.1\n"
"X-Generator: Weblate 4.15\n"
#: .\cookbook\forms.py:52
msgid "Default unit"
@ -473,7 +473,7 @@ msgstr "Toon recepten teller bij zoekfilters"
#: .\cookbook\forms.py:541
msgid "Use the plural form for units and food inside this space."
msgstr ""
msgstr "Gebruik de meervoudsvorm voor eenheden en voedsel in deze ruimte."
#: .\cookbook\helper\AllAuthCustomAdapter.py:39
msgid ""
@ -537,7 +537,7 @@ msgstr "Favoriet"
#: .\cookbook\integration\copymethat.py:50
msgid "I made this"
msgstr ""
msgstr "Ik heb dit gemaakt"
#: .\cookbook\integration\integration.py:223
msgid ""
@ -691,16 +691,12 @@ msgid "Keyword Alias"
msgstr "Etiket alias"
#: .\cookbook\models.py:1231
#, fuzzy
#| msgid "Description"
msgid "Description Replace"
msgstr "Beschrijving"
msgstr "Verrvang beschrijving"
#: .\cookbook\models.py:1231
#, fuzzy
#| msgid "Instructions"
msgid "Instruction Replace"
msgstr "Instructies"
msgstr "Vervang instructies"
#: .\cookbook\models.py:1257 .\cookbook\views\delete.py:36
#: .\cookbook\views\edit.py:251 .\cookbook\views\new.py:48
@ -725,7 +721,7 @@ msgstr "U heeft de uploadlimiet bereikt."
#: .\cookbook\serializer.py:291
msgid "Cannot modify Space owner permission."
msgstr ""
msgstr "Kan de rechten van de ruimte-eigenaar niet wijzigen."
#: .\cookbook\serializer.py:1085
msgid "Hello"
@ -1634,7 +1630,7 @@ msgstr "Terug"
#: .\cookbook\templates\profile.html:7
msgid "Profile"
msgstr ""
msgstr "Profiel"
#: .\cookbook\templates\recipe_view.html:26
msgid "by"
@ -2039,6 +2035,8 @@ msgstr "Verbind %(provider)s"
#, python-format
msgid "You are about to connect a new third party account from %(provider)s."
msgstr ""
"Je staat op het punt een nieuw derde partij account van %(provider)s te "
"verbinden."
#: .\cookbook\templates\socialaccount\login.html:13
#, python-format
@ -2049,6 +2047,8 @@ msgstr "Log in via %(provider)s"
#, python-format
msgid "You are about to sign in using a third party account from %(provider)s."
msgstr ""
"Je staat op het punt met een derde partij account van %(provider)s in te "
"loggen."
#: .\cookbook\templates\socialaccount\login.html:20
msgid "Continue"
@ -2092,7 +2092,7 @@ msgstr "Beheer abonnementen"
#: .\cookbook\templates\space_overview.html:13 .\cookbook\views\delete.py:216
msgid "Space"
msgstr "Space"
msgstr "Ruimte"
#: .\cookbook\templates\space_overview.html:17
msgid ""

View File

@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-01-19 19:14+0100\n"
"PO-Revision-Date: 2022-08-23 13:32+0000\n"
"PO-Revision-Date: 2023-02-26 13:15+0000\n"
"Last-Translator: 吕楪 <thy@irithys.com>\n"
"Language-Team: Chinese (Simplified) <http://translate.tandoor.dev/projects/"
"tandoor/recipes-backend/zh_Hans/>\n"
@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 4.10.1\n"
"X-Generator: Weblate 4.15\n"
#: .\cookbook\forms.py:52
msgid "Default unit"
@ -434,7 +434,7 @@ msgstr "显示搜索筛选器上的食谱计数"
#: .\cookbook\forms.py:541
msgid "Use the plural form for units and food inside this space."
msgstr ""
msgstr "在此空间内使用复数形式表示单位和食物。"
#: .\cookbook\helper\AllAuthCustomAdapter.py:39
msgid ""
@ -495,7 +495,7 @@ msgstr "喜欢"
#: .\cookbook\integration\copymethat.py:50
msgid "I made this"
msgstr ""
msgstr "我做的"
#: .\cookbook\integration\integration.py:223
msgid ""
@ -642,16 +642,12 @@ msgid "Keyword Alias"
msgstr "关键词别名"
#: .\cookbook\models.py:1231
#, fuzzy
#| msgid "Description"
msgid "Description Replace"
msgstr "描述"
#: .\cookbook\models.py:1231
#, fuzzy
#| msgid "Instructions"
msgid "Instruction Replace"
msgstr "说明"
msgstr "指示"
#: .\cookbook\models.py:1257 .\cookbook\views\delete.py:36
#: .\cookbook\views\edit.py:251 .\cookbook\views\new.py:48
@ -1555,7 +1551,7 @@ msgstr "返回"
#: .\cookbook\templates\profile.html:7
msgid "Profile"
msgstr ""
msgstr "简介"
#: .\cookbook\templates\recipe_view.html:26
msgid "by"
@ -2173,10 +2169,9 @@ msgid "Cannot merge with the same object!"
msgstr "无法与同一对象合并!"
#: .\cookbook\views\api.py:232
#, fuzzy, python-brace-format
#| msgid "No {self.basename} with id {target} exists"
#, python-brace-format
msgid "No {self.basename} with id {target} exists"
msgstr "不存在 ID 为 {pk} 的 {self.basename}"
msgstr "不存在 ID 为 {target} 的 {self.basename}"
#: .\cookbook\views\api.py:237
msgid "Cannot merge with child object!"

View File

@ -8,14 +8,16 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-06-12 20:30+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"PO-Revision-Date: 2023-03-12 02:55+0000\n"
"Last-Translator: Feng Zhong <fewoodse@gmail.com>\n"
"Language-Team: Chinese (Traditional) <http://translate.tandoor.dev/projects/"
"tandoor/recipes-backend/zh_Hant/>\n"
"Language: zh_Hant\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 4.15\n"
#: .\cookbook\filters.py:23 .\cookbook\templates\base.html:98
#: .\cookbook\templates\forms\edit_internal_recipe.html:246
@ -23,41 +25,41 @@ msgstr ""
#: .\cookbook\templates\space.html:37 .\cookbook\templates\stats.html:28
#: .\cookbook\templates\url_import.html:270 .\cookbook\views\lists.py:67
msgid "Ingredients"
msgstr ""
msgstr "食材"
#: .\cookbook\forms.py:49
msgid ""
"Color of the top navigation bar. Not all colors work with all themes, just "
"try them out!"
msgstr ""
msgstr "頂部導航欄的顏色。並非所有的顏色都適用於所有的主題,只要試一試就可以了!"
#: .\cookbook\forms.py:51
msgid "Default Unit to be used when inserting a new ingredient into a recipe."
msgstr ""
msgstr "在菜譜中插入新食材時使用的默認單位。"
#: .\cookbook\forms.py:53
msgid ""
"Enables support for fractions in ingredient amounts (e.g. convert decimals "
"to fractions automatically)"
msgstr ""
msgstr "啟用對食材數量的分數支持(例如自動將小數轉換為分數)"
#: .\cookbook\forms.py:56
msgid ""
"Users with whom newly created meal plan/shopping list entries should be "
"shared by default."
msgstr ""
msgstr "默認情況下,將自動與用戶共享新創建的膳食計劃。"
#: .\cookbook\forms.py:58
msgid "Show recently viewed recipes on search page."
msgstr ""
msgstr "在搜索頁面上查看最近看過的食譜。"
#: .\cookbook\forms.py:59
msgid "Number of decimals to round ingredients."
msgstr ""
msgstr "四舍五入食材的小數點數量。"
#: .\cookbook\forms.py:60
msgid "If you want to be able to create and see comments underneath recipes."
msgstr ""
msgstr "如果你希望能夠在菜譜下面創建並看到評論。"
#: .\cookbook\forms.py:62
msgid ""
@ -66,22 +68,25 @@ msgid ""
"Useful when shopping with multiple people but might use a little bit of "
"mobile data. If lower than instance limit it is reset when saving."
msgstr ""
"設置為0將禁用自動同步。當查看購物清單時清單會每隔幾秒鐘更新一次以同步其他"
"人可能做出的改變。在與多人一起購物時很有用,但可能會消耗一點移動數據。如果低"
"於實例限制,它將在保存時被重置。"
#: .\cookbook\forms.py:65
msgid "Makes the navbar stick to the top of the page."
msgstr ""
msgstr "使導航欄保持在頁面的頂部。"
#: .\cookbook\forms.py:81
msgid ""
"Both fields are optional. If none are given the username will be displayed "
"instead"
msgstr ""
msgstr "這兩個字段都是可選的。如果沒有輸入,將顯示用戶名"
#: .\cookbook\forms.py:102 .\cookbook\forms.py:331
#: .\cookbook\templates\forms\edit_internal_recipe.html:49
#: .\cookbook\templates\url_import.html:154
msgid "Name"
msgstr ""
msgstr "名字"
#: .\cookbook\forms.py:103 .\cookbook\forms.py:332
#: .\cookbook\templates\base.html:105
@ -90,37 +95,37 @@ msgstr ""
#: .\cookbook\templates\url_import.html:188
#: .\cookbook\templates\url_import.html:573
msgid "Keywords"
msgstr ""
msgstr "關鍵詞"
#: .\cookbook\forms.py:104
msgid "Preparation time in minutes"
msgstr ""
msgstr "準備時間(分鐘)"
#: .\cookbook\forms.py:105
msgid "Waiting time (cooking/baking) in minutes"
msgstr ""
msgstr "等候(烹飪、烘焙等)時間(分鐘)"
#: .\cookbook\forms.py:106 .\cookbook\forms.py:333
msgid "Path"
msgstr ""
msgstr "路徑"
#: .\cookbook\forms.py:107
msgid "Storage UID"
msgstr ""
msgstr "存儲ID"
#: .\cookbook\forms.py:133
msgid "Default"
msgstr ""
msgstr "默認"
#: .\cookbook\forms.py:144 .\cookbook\templates\url_import.html:90
msgid ""
"To prevent duplicates recipes with the same name as existing ones are "
"ignored. Check this box to import everything."
msgstr ""
msgstr "為防止重復,忽略與現有同名的菜譜。選中此框可導入所有內容(包括同名菜譜)。"
#: .\cookbook\forms.py:164
msgid "New Unit"
msgstr ""
msgstr "新單位"
#: .\cookbook\forms.py:165
msgid "New unit that other gets replaced by."
@ -128,15 +133,15 @@ msgstr ""
#: .\cookbook\forms.py:170
msgid "Old Unit"
msgstr ""
msgstr "舊單位"
#: .\cookbook\forms.py:171
msgid "Unit that should be replaced."
msgstr ""
msgstr "該被替換的單位。"
#: .\cookbook\forms.py:187
msgid "New Food"
msgstr ""
msgstr "新食物"
#: .\cookbook\forms.py:188
msgid "New food that other gets replaced by."
@ -144,85 +149,86 @@ msgstr ""
#: .\cookbook\forms.py:193
msgid "Old Food"
msgstr ""
msgstr "舊食物"
#: .\cookbook\forms.py:194
msgid "Food that should be replaced."
msgstr ""
msgstr "該被替換的食物。"
#: .\cookbook\forms.py:212
msgid "Add your comment: "
msgstr ""
msgstr "發表評論。 "
#: .\cookbook\forms.py:253
msgid "Leave empty for dropbox and enter app password for nextcloud."
msgstr ""
msgstr "Dropbox 留空並輸入 Nextcloud 應用密碼。"
#: .\cookbook\forms.py:260
msgid "Leave empty for nextcloud and enter api token for dropbox."
msgstr ""
msgstr "Nextcloud 留空並輸入 Dropbox API 令牌。"
#: .\cookbook\forms.py:269
msgid ""
"Leave empty for dropbox and enter only base url for nextcloud (<code>/remote."
"php/webdav/</code> is added automatically)"
msgstr ""
msgstr "Dropbox 留空並輸入基礎 Nextcloud 網址(<code>/remote.php/webdav/</code> "
"會自動添加)"
#: .\cookbook\forms.py:307
msgid "Search String"
msgstr ""
msgstr "搜索字符串"
#: .\cookbook\forms.py:334
msgid "File ID"
msgstr ""
msgstr "文件編號"
#: .\cookbook\forms.py:370
msgid "You must provide at least a recipe or a title."
msgstr ""
msgstr "你必須至少提供一份菜譜或一個標題。"
#: .\cookbook\forms.py:383
msgid "You can list default users to share recipes with in the settings."
msgstr ""
msgstr "你可以在設置中列出默認用戶來分享菜譜。"
#: .\cookbook\forms.py:384
#: .\cookbook\templates\forms\edit_internal_recipe.html:404
msgid ""
"You can use markdown to format this field. See the <a href=\"/docs/markdown/"
"\">docs here</a>"
msgstr ""
msgstr "可以使用 Markdown 設置此字段格式。<a href=\"/docs/markdown/\">查看文檔</a>"
#: .\cookbook\forms.py:409
msgid "Maximum number of users for this space reached."
msgstr ""
msgstr "已達到該空間的最大用戶數。"
#: .\cookbook\forms.py:415
msgid "Email address already taken!"
msgstr ""
msgstr "電子郵件地址已被註冊!"
#: .\cookbook\forms.py:423
msgid ""
"An email address is not required but if present the invite link will be send "
"to the user."
msgstr ""
msgstr "電子郵件地址不是必需的,但如果存在,邀請鏈接將被發送給用戶。"
#: .\cookbook\forms.py:438
msgid "Name already taken."
msgstr ""
msgstr "名字已被占用。"
#: .\cookbook\forms.py:449
msgid "Accept Terms and Privacy"
msgstr ""
msgstr "接受條款及隱私政策"
#: .\cookbook\helper\AllAuthCustomAdapter.py:30
msgid ""
"In order to prevent spam, the requested email was not send. Please wait a "
"few minutes and try again."
msgstr ""
msgstr "為了防止垃圾郵件,所要求的電子郵件沒有被發送。請等待幾分鐘後再試。"
#: .\cookbook\helper\permission_helper.py:124
#: .\cookbook\helper\permission_helper.py:144 .\cookbook\views\views.py:147
msgid "You are not logged in and therefore cannot view this page!"
msgstr ""
msgstr "你还沒有登錄,因此不能查看這個頁面!"
#: .\cookbook\helper\permission_helper.py:127
#: .\cookbook\helper\permission_helper.py:132
@ -234,18 +240,18 @@ msgstr ""
#: .\cookbook\views\views.py:158 .\cookbook\views\views.py:165
#: .\cookbook\views\views.py:253
msgid "You do not have the required permissions to view this page!"
msgstr ""
msgstr "你沒有必要的權限來查看這個頁面!"
#: .\cookbook\helper\permission_helper.py:148
#: .\cookbook\helper\permission_helper.py:170
#: .\cookbook\helper\permission_helper.py:185
msgid "You cannot interact with this object as it is not owned by you!"
msgstr ""
msgstr "你不能與此對象交互,因為它不屬於你!"
#: .\cookbook\helper\template_helper.py:60
#: .\cookbook\helper\template_helper.py:62
msgid "Could not parse template code."
msgstr ""
msgstr "無法解析模板代碼。"
#: .\cookbook\integration\integration.py:102
#: .\cookbook\templates\import.html:14 .\cookbook\templates\import.html:20
@ -258,40 +264,40 @@ msgstr ""
#: .\cookbook\templates\url_import.html:604 .\cookbook\views\delete.py:60
#: .\cookbook\views\edit.py:199
msgid "Import"
msgstr ""
msgstr "導入"
#: .\cookbook\integration\integration.py:162
msgid ""
"Importer expected a .zip file. Did you choose the correct importer type for "
"your data ?"
msgstr ""
msgstr "導入需要一個 .zip 文件。你是否為數據選擇了正確的導入器類型?"
#: .\cookbook\integration\integration.py:165
msgid ""
"An unexpected error occurred during the import. Please make sure you have "
"uploaded a valid file."
msgstr ""
msgstr "在導入過程中發生了一個意外的錯誤。請確認你上傳的文件是否有效。"
#: .\cookbook\integration\integration.py:169
msgid "The following recipes were ignored because they already existed:"
msgstr ""
msgstr "以下菜譜被忽略了,因為它們已經存在了:"
#: .\cookbook\integration\integration.py:173
#, python-format
msgid "Imported %s recipes."
msgstr ""
msgstr "導入了%s菜譜。"
#: .\cookbook\integration\paprika.py:46
msgid "Notes"
msgstr ""
msgstr "說明"
#: .\cookbook\integration\paprika.py:49
msgid "Nutritional Information"
msgstr ""
msgstr "營養信息"
#: .\cookbook\integration\paprika.py:53
msgid "Source"
msgstr ""
msgstr "來源"
#: .\cookbook\integration\safron.py:23
#: .\cookbook\templates\forms\edit_internal_recipe.html:79
@ -299,101 +305,101 @@ msgstr ""
#: .\cookbook\templates\url_import.html:224
#: .\cookbook\templates\url_import.html:455
msgid "Servings"
msgstr ""
msgstr "份量"
#: .\cookbook\integration\safron.py:25
msgid "Waiting time"
msgstr ""
msgstr "等待時間"
#: .\cookbook\integration\safron.py:27
#: .\cookbook\templates\forms\edit_internal_recipe.html:73
msgid "Preparation Time"
msgstr ""
msgstr "準備時間"
#: .\cookbook\integration\safron.py:29 .\cookbook\templates\base.html:78
#: .\cookbook\templates\forms\ingredients.html:7
#: .\cookbook\templates\index.html:7
msgid "Cookbook"
msgstr ""
msgstr "菜譜"
#: .\cookbook\integration\safron.py:31
msgid "Section"
msgstr ""
msgstr "部分"
#: .\cookbook\migrations\0047_auto_20200602_1133.py:14
msgid "Breakfast"
msgstr ""
msgstr "早餐"
#: .\cookbook\migrations\0047_auto_20200602_1133.py:19
msgid "Lunch"
msgstr ""
msgstr "午餐"
#: .\cookbook\migrations\0047_auto_20200602_1133.py:24
msgid "Dinner"
msgstr ""
msgstr "晚餐"
#: .\cookbook\migrations\0047_auto_20200602_1133.py:29
msgid "Other"
msgstr ""
msgstr "其他"
#: .\cookbook\models.py:71
msgid ""
"Maximum file storage for space in MB. 0 for unlimited, -1 to disable file "
"upload."
msgstr ""
msgstr "空間的最大文件存儲量,單位為 MB。0表示無限製-1表示禁止上傳文件。"
#: .\cookbook\models.py:121 .\cookbook\templates\search.html:7
#: .\cookbook\templates\shopping_list.html:52
msgid "Search"
msgstr ""
msgstr "搜索"
#: .\cookbook\models.py:122 .\cookbook\templates\base.html:92
#: .\cookbook\templates\meal_plan.html:5 .\cookbook\views\delete.py:152
#: .\cookbook\views\edit.py:233 .\cookbook\views\new.py:201
msgid "Meal-Plan"
msgstr ""
msgstr "膳食計劃"
#: .\cookbook\models.py:123 .\cookbook\templates\base.html:89
msgid "Books"
msgstr ""
msgstr "書籍"
#: .\cookbook\models.py:131
msgid "Small"
msgstr ""
msgstr ""
#: .\cookbook\models.py:131
msgid "Large"
msgstr ""
msgstr ""
#: .\cookbook\models.py:131 .\cookbook\templates\generic\new_template.html:6
#: .\cookbook\templates\generic\new_template.html:14
#: .\cookbook\templates\meal_plan.html:323
msgid "New"
msgstr ""
msgstr ""
#: .\cookbook\models.py:340
#: .\cookbook\templates\forms\edit_internal_recipe.html:202
msgid "Text"
msgstr ""
msgstr "文本"
#: .\cookbook\models.py:340
#: .\cookbook\templates\forms\edit_internal_recipe.html:203
msgid "Time"
msgstr ""
msgstr "時間"
#: .\cookbook\models.py:340
#: .\cookbook\templates\forms\edit_internal_recipe.html:204
#: .\cookbook\templates\forms\edit_internal_recipe.html:218
msgid "File"
msgstr ""
msgstr "文件"
#: .\cookbook\serializer.py:109
msgid "File uploads are not enabled for this Space."
msgstr ""
msgstr "未為此空間啟用文件上傳。"
#: .\cookbook\serializer.py:117
msgid "You have reached your file upload limit."
msgstr ""
msgstr "你已達到文件上傳的限製。"
#: .\cookbook\tables.py:35 .\cookbook\templates\books.html:36
#: .\cookbook\templates\generic\edit_template.html:6
@ -403,7 +409,7 @@ msgstr ""
#: .\cookbook\templates\shopping_list.html:33
#: .\cookbook\templates\space.html:84
msgid "Edit"
msgstr ""
msgstr "編輯"
#: .\cookbook\tables.py:124 .\cookbook\tables.py:147
#: .\cookbook\templates\books.html:38
@ -413,28 +419,28 @@ msgstr ""
#: .\cookbook\templates\meal_plan.html:277
#: .\cookbook\templates\recipes_table.html:90
msgid "Delete"
msgstr ""
msgstr "刪除"
#: .\cookbook\templates\404.html:5
msgid "404 Error"
msgstr ""
msgstr "404錯誤"
#: .\cookbook\templates\404.html:18
msgid "The page you are looking for could not be found."
msgstr ""
msgstr "找不到你要找的頁面。"
#: .\cookbook\templates\404.html:33
msgid "Take me Home"
msgstr ""
msgstr "回到主頁"
#: .\cookbook\templates\404.html:35
msgid "Report a Bug"
msgstr ""
msgstr "報告一個錯誤"
#: .\cookbook\templates\account\email.html:6
#: .\cookbook\templates\account\email.html:9
msgid "E-mail Addresses"
msgstr ""
msgstr "電子郵件地址"
#: .\cookbook\templates\account\email.html:11
msgid "The following e-mail addresses are associated with your account:"
@ -1769,7 +1775,7 @@ msgstr ""
#: .\cookbook\templates\space.html:100
msgid "user"
msgstr ""
msgstr "用戶"
#: .\cookbook\templates\space.html:101
msgid "guest"

View File

@ -700,7 +700,7 @@ class Ingredient(ExportModelOperationsMixin('ingredient'), models.Model, Permiss
if self.always_use_plural_unit and self.unit.plural_name not in (None, "") and not self.no_amount:
unit = self.unit.plural_name
else:
if self.amount > 1 and self.unit.plural_name not in (None, "") and not self.no_amount:
if self.amount > 1 and self.unit is not None and self.unit.plural_name not in (None, "") and not self.no_amount:
unit = self.unit.plural_name
else:
unit = str(self.unit)

View File

@ -48,7 +48,7 @@
{% endfor %}
{% if request.user.is_authenticated %}
<div class="d-print-none">
<div class="d-print-none" style="padding-bottom: 60px">
<form method="POST" class="post-form">
{% csrf_token %}

View File

@ -95,3 +95,14 @@ To create a superuser you need to
1. execute into the container using `docker-compose exec web_recipes sh`
2. activate the virtual environment `source venv/bin/activate`
3. run `python manage.py createsuperuser` and follow the steps shown.
## Why cant I get support for my manual setup?
Even tough I would love to help everyone get tandoor up and running I have only so much time
that I can spend on this project besides work, family and other life things.
Due to the countless problems that can occur when manually installing I simply do not have
the time to help solving each one.
You can install Tandoor manually but please do not expect me or anyone to help you with that.
As a general advice: If you do it manually do NOT change anything at first and slowly work yourself
to your dream setup.

View File

@ -61,9 +61,12 @@
<bottom-navigation-bar>
<template #custom_create_functions>
<div class="dropdown-divider" ></div>
<h6 class="dropdown-header">{{ $t('Books')}}</h6>
<a class="dropdown-item" @click="createNew()"><i
class="fa fa-book"></i> {{$t("Create")}}</a>
<div class="dropdown-divider" ></div>
</template>
</bottom-navigation-bar>
</div>

View File

@ -95,9 +95,9 @@
style="text-overflow: ellipsis; overflow-wrap: anywhere;">
<span class="two-row-text">
<a :href="resolveDjangoUrl('view_recipe', plan.entry.recipe.id)" v-if="plan.entry.recipe">{{ plan.entry.recipe.name }}</a>
<span v-else>{{ plan.entry.title }}</span>
<span v-else>{{ plan.entry.title }}</span> <br/>
</span>
<span v-if="plan.entry.note">
<span v-if="plan.entry.note" class="two-row-text">
<small>{{ plan.entry.note }}</small> <br/>
</span>
<small class="text-muted">
@ -293,8 +293,9 @@
<bottom-navigation-bar :create_links="[{label:$t('Export_To_ICal'), url: iCalUrl, icon:'fas fa-download'}]">
<template #custom_create_functions>
<h6 class="dropdown-header">{{ $t('Meal_Plan')}}</h6>
<a class="dropdown-item" @click="createEntryClick(new Date())"><i
class="fas fa-calendar-plus"></i> {{ $t("Create") }}</a>
class="fas fa-calendar-plus fa-fw"></i> {{ $t("Create") }}</a>
</template>
</bottom-navigation-bar>
</div>
@ -425,7 +426,7 @@ export default {
mobileSimpleGrid() {
let grid = []
if (useMealPlanStore().plan_list.length > 0 && this.current_period !== null) {
if (this.current_period !== null) {
for (const x of Array(7).keys()) {
let moment_date = moment(this.current_period.periodStart).add(x, "d")
grid.push({

View File

@ -4,7 +4,7 @@
<loading-spinner></loading-spinner>
</template>
<div v-if="!loading">
<div v-if="!loading" style="padding-bottom: 60px">
<RecipeSwitcher ref="ref_recipe_switcher" @switch="quickSwitch($event)"/>
<div class="row">
<div class="col-12" style="text-align: center">

View File

@ -569,8 +569,10 @@
<bottom-navigation-bar>
<template #custom_create_functions>
<a class="dropdown-item" @click="entrymode = !entrymode; "
><i class="fas fa-cart-plus"></i>
<div class="dropdown-divider"></div>
<h6 class="dropdown-header">{{ $t('Shopping_list')}}</h6>
<a class="dropdown-item" @click="entrymode = !entrymode; " ><i class="fas fa-cart-plus"></i>
{{ $t("New_Entry") }}
</a>
@ -583,7 +585,7 @@
<CopyToClipboard :items="csvData" :settings="settings" format="table"
:label="$t('copy_markdown_table')" icon="fab fa-markdown fa-fw"/>
<div class="dropdown-divider"></div>
</template>
</bottom-navigation-bar>
</div>

View File

@ -23,6 +23,13 @@
aria-haspopup="true" aria-expanded="false"><i class="fas fa-plus-circle fa-2x bottom-nav-link"></i>
</a>
<div class="dropdown-menu center-dropup" aria-labelledby="navbarDropdownMenuLink">
<a class="dropdown-item" v-bind:href="resolveDjangoUrl('new_recipe')"><i
class="fas fa-fw fa-plus"></i> {{ $t('Create Recipe') }}</a>
<a class="dropdown-item" v-bind:href="resolveDjangoUrl('data_import_url')"><i
class="fas fa-fw fa-file-import"></i> {{ $t('Import Recipe') }}</a>
<div class="dropdown-divider" v-if="create_links.length > 0"></div>
<slot name="custom_create_functions">
</slot>
@ -30,13 +37,9 @@
<a class="dropdown-item" v-bind:href="cl.url" v-for="cl in create_links" v-bind:key="cl.label">
<i :class="cl.icon + ' fa-fw'"></i> {{ cl.label }}
</a>
<div class="dropdown-divider" v-if="create_links.length > 0"></div>
<a class="dropdown-item" v-bind:href="resolveDjangoUrl('new_recipe')"><i
class="fas fa-fw fa-plus"></i> {{ $t('Create Recipe') }}</a>
<a class="dropdown-item" v-bind:href="resolveDjangoUrl('data_import_url')"><i
class="fas fa-fw fa-file-import"></i> {{ $t('Import Recipe') }}</a>
</div>
</div>
</slot>

View File

@ -459,11 +459,24 @@
"Message": "Besked",
"Sticky_Nav": "Fastlåst navigation",
"reset_food_inheritance": "Nulstil nedarvning",
"Plural": "",
"plural_short": "",
"Use_Plural_Unit_Always": "",
"Use_Plural_Unit_Simple": "",
"Use_Plural_Food_Always": "",
"Use_Plural_Food_Simple": "",
"plural_usage_info": ""
"Plural": "Flertal",
"plural_short": "flertal",
"Use_Plural_Unit_Always": "Benyt altid flertalsform for enheder",
"Use_Plural_Unit_Simple": "Brug flertalsform dynamisk for enheder",
"Use_Plural_Food_Always": "Brug altid flertalsform for mad",
"Use_Plural_Food_Simple": "Brug flertalsform dynamisk for mad",
"plural_usage_info": "Brug flertalsform for enheder og mad på denne placering.",
"Original_Text": "Original tekst",
"Import Recipe": "Importer opskrift",
"Amount": "Mængde",
"Split_All_Steps": "Opdel rækker i separate trin.",
"Create Recipe": "Opret opskrift",
"Description_Replace": "Erstat beskrivelse",
"Instruction_Replace": "Erstat instruktion",
"Auto_Sort_Help": "Flyt alle ingredienser til mest egnede trin.",
"Auto_Sort": "Sortér automatisk",
"Unpin": "Frigør",
"PinnedConfirmation": "{recipe} er fastgjort.",
"UnpinnedConfirmation": "{recipe} er frigjort.",
"Combine_All_Steps": "Kombiner alle trin til ét felt."
}

View File

@ -167,8 +167,8 @@
"Create_New_Keyword": "Añadir nueva Etiqueta",
"Create_New_Unit": "Añadir nueva unidad",
"Create_New_Meal_Type": "Añadir nuevo Tipo de Comida",
"and_up": "",
"and_down": "",
"and_up": "& Arriba",
"and_down": "& Abajo",
"Instructions": "Instrucciones",
"Unrated": "Sin puntuar",
"Automate": "Automatizar",
@ -443,5 +443,14 @@
"Use_Plural_Unit_Simple": "",
"Use_Plural_Food_Always": "",
"Use_Plural_Food_Simple": "",
"plural_usage_info": ""
"plural_usage_info": "",
"Original_Text": "Texto original",
"Use_Fractions_Help": "Convertir automáticamente los decimales en fracciones al ver una receta.",
"Description_Replace": "Reemplazar Descripción",
"Instruction_Replace": "Reemplazar Instrucción",
"plan_share_desc": "Las Nuevas entradas del Plan de Comidas se compartirán automáticamente con los usuarios seleccionados.",
"Auto_Sort": "Ordenar Automáticamente",
"Auto_Sort_Help": "Mueva todos los ingredientes al paso que mejor se adapte.",
"Unpin": "Desanclar",
"Amount": "Cantidad"
}

View File

@ -1,5 +1,5 @@
{
"err_fetching_resource": "Erreur lors de la récupération dune ressource !",
"err_fetching_resource": "Il y a eu une erreur lors de la récupération d'une ressource!",
"err_creating_resource": "Erreur lors de la création dune ressource !",
"err_updating_resource": "Erreur lors de la mise à jour dune ressource !",
"err_deleting_resource": "Erreur lors de la suppression dune ressource !",
@ -30,7 +30,7 @@
"Reset_Search": "Réinitialiser la recherche",
"Recently_Viewed": "Vu récemment",
"Load_More": "Charger plus",
"Keywords": "Mots-clés",
"Keywords": "mots-clés",
"Books": "Livres",
"Proteins": "Protéines",
"Fats": "Matières grasses",
@ -62,11 +62,11 @@
"Size": "Taille",
"Files": "Fichiers",
"File": "Fichier",
"Edit": "Modifier",
"Edit": "modifier",
"Cancel": "Annuler",
"Delete": "Supprimer",
"Open": "Ouvrir",
"Ok": "Ouvrir",
"Ok": "D'accord",
"Save": "Sauvegarder",
"Step": "Étape",
"Search": "Rechercher",
@ -119,7 +119,7 @@
"merge_selection": "Remplacer toutes les occurrences de {source} par {type}.",
"move_title": "Déplacer {type}",
"del_confirmation_tree": "Êtes-vous sûr de vouloir supprimer {source} et tous ses enfants ?",
"warning_feature_beta": "Cette fonctionnalité est actuellement en phase BETA (test). Veuillez vous attendre à des bugs et éventuellement à des modifications conséquentes à lavenir (perte éventuelle de données liées à la fonctionnalité) lorsque vous utilisez cette fonctionnalité.",
"warning_feature_beta": "Cette fonctionnalité est actuellement en état BETA (de test). Veuillez vous attendre à des bogues et éventuellement à des modifications majeures à l'avenir (pouvant entraîner une perte de données liées à la fonctionnalité) lors de l'utilisation de cette fonctionnalité.",
"confirm_delete": "Voulez-vous vraiment supprimer {objet} ?",
"Note": "Notes",
"Add_Step": "Ajouter une étape",
@ -449,5 +449,16 @@
"Import_Not_Yet_Supported": "Importation pas encore prise en charge",
"Export_Not_Yet_Supported": "Exportation pas encore prise en charge",
"Import_Result_Info": "{imported} sur {total} recettes ont été importées",
"API": "API"
"API": "API",
"not": "pas",
"Create Recipe": "Créer une recette",
"Import Recipe": "Importer une recette",
"Copy Token": "Copier le jeton",
"Description_Replace": "Remplacer la Description",
"Cosmetic": "Cosmétique",
"explain": "Expliquer",
"Unpin": "Détacher",
"Split_All_Steps": "Diviser toutes les lignes en étapes séparées.",
"Warning_Delete_Supermarket_Category": "Supprimer une catégorie de supermarché supprimera également toutes les relations avec les aliments. Êtes-vous sûr ?",
"Instruction_Replace": "Instruction Remplacer"
}

View File

@ -1,8 +1,8 @@
{
"warning_feature_beta": "Fitur ini saat ini dalam status BETA (pengujian). Harap perkirakan bug dan kemungkinan kerusakan perubahan di masa mendatang (mungkin kehilangan data terkait fitur) saat menggunakan fitur ini.",
"err_fetching_resource": "Terjadi kesalahan saat mengambil sumber daya!",
"warning_feature_beta": "Fitur ini saat ini dalam status BETA (pengujian). Mungkin terdapat bug dan perubahan yang penting di masa mendatang (sehingga mungkin terjadi kehilangan data terkait fitur) saat menggunakan fitur ini.",
"err_fetching_resource": "Terjadi kesalahan saat memperoleh sumber daya!",
"err_creating_resource": "Terjadi kesalahan saat membuat sumber daya!",
"err_updating_resource": "Terjadi kesalahan saat mengupdate sumber daya!",
"err_updating_resource": "Terjadi kesalahan saat memperbarui sumber daya!",
"err_deleting_resource": "Terjadi kesalahan saat menghapus sumber daya!",
"err_deleting_protected_resource": "Objek yang Anda coba hapus masih digunakan dan tidak dapat dihapus.",
"err_moving_resource": "Terjadi kesalahan saat memindahkan sumber daya!",

View File

@ -74,7 +74,7 @@
"success_deleting_resource": "Hulpbron succesvol verwijderd!",
"Cancel": "Annuleer",
"Delete": "Verwijder",
"Ok": "Open",
"Ok": "Ok",
"Load_More": "Laad meer",
"Manage_Books": "Beheer boeken",
"Create": "Voeg toe",
@ -162,7 +162,7 @@
"del_confirmation_tree": "Weet je zeker dat je {source} en al zijn kinderen wil verwijderen?",
"Create_New_Food": "Voeg nieuw Eten toe",
"Time": "Tijd",
"warning_feature_beta": "Deze functie zit op dit moment in de BETA (test) fase. Verwacht hier bugs en toekomstige wijzigingen die tot het verlies van data gaan leiden bij het gebruik.",
"warning_feature_beta": "Deze functie zit op dit moment in de BETA (test) fase. Verwacht hier bugs en toekomstige wijzigingen die tot het verlies van data kunnen leiden bij het gebruik.",
"Table_of_Contents": "Inhoudsopgave",
"Create_New_Meal_Type": "Voeg Nieuw Maaltijdtype toe",
"Empty": "Leeg",
@ -376,7 +376,7 @@
"substitute_children_help": "Alle ingrediënten die kinderen zijn van dit ingrediënt worden beschouwd als vervangers.",
"SubstituteOnHand": "Je hebt een vervanger op voorraad.",
"ChildInheritFields": "Kinderen erven velden",
"InheritFields_help": "De waarden van deze velden worden geërfd van een ouder (uitzondering: lege boodschappencategorieën)",
"InheritFields_help": "De waarden van deze velden worden overgenomen van de bovenliggende waarden (uitzondering: lege boodschappencategorieën)",
"no_pinned_recipes": "Je hebt geen vastgepinde recepten!",
"Internal": "Interne",
"Reset": "Herstel",
@ -467,11 +467,18 @@
"facet_count_info": "Geef receptenaantal bij zoekfilters weer.",
"Split_All_Steps": "Splits alle rijen in apparte stappen.",
"Combine_All_Steps": "Voeg alle stappen samen tot een veld.",
"Plural": "",
"plural_short": "",
"Use_Plural_Unit_Always": "",
"Use_Plural_Unit_Simple": "",
"Use_Plural_Food_Always": "",
"Use_Plural_Food_Simple": "",
"plural_usage_info": ""
"Plural": "Meervoud",
"plural_short": "meervoud",
"Use_Plural_Unit_Always": "Gebruik altijd de meervoudsvorm voor eenheden",
"Use_Plural_Unit_Simple": "Gebruik meervoudsvorm voor eenheden dynamisch",
"Use_Plural_Food_Always": "Gebruik altijd meervoudsvorm voor voedsel",
"Use_Plural_Food_Simple": "Gebruik meervoudsvorm voor voedsels dynamisch",
"plural_usage_info": "Gebruik de meervoudsvorm voor eenheden en voedsels in deze ruimte.",
"Amount": "Hoeveelheid",
"Original_Text": "Originele tekst",
"reset_food_inheritance_info": "Herstel alle voedingsmiddelen naar de standaard overgenomen velden en hun bovenliggende waarden.",
"Description_Replace": "Vervang beschrijving",
"Instruction_Replace": "Vervang instructie",
"Auto_Sort_Help": "Verplaats alle ingrediënten naar de best passende stap.",
"Auto_Sort": "Automatisch sorteren"
}

View File

@ -478,5 +478,7 @@
"Amount": "Ilość",
"Original_Text": "Tekst oryginalny",
"Description_Replace": "Zmień opis",
"Instruction_Replace": "Zmień instrukcję"
"Instruction_Replace": "Zmień instrukcję",
"Import Recipe": "Importuj przepis",
"Create Recipe": "Utwórz przepis"
}

View File

@ -66,7 +66,7 @@
"Cancel": "取消",
"Delete": "删除",
"Open": "打开",
"Ok": "打开",
"Ok": "确认",
"Save": "保存",
"Step": "步骤",
"Search": "搜索",
@ -477,5 +477,7 @@
"UnpinnedConfirmation": "{recipe} 已取消固定。",
"Unpin": "取消固定",
"Auto_Sort": "自动分类",
"Auto_Sort_Help": "将所有食材移动到最恰当的步骤。"
"Auto_Sort_Help": "将所有食材移动到最恰当的步骤。",
"Create Recipe": "创建食谱",
"Import Recipe": "导入食谱"
}