diff --git a/cookbook/integration/mealie.py b/cookbook/integration/mealie.py index 803cc638..ccd16ce9 100644 --- a/cookbook/integration/mealie.py +++ b/cookbook/integration/mealie.py @@ -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']) diff --git a/cookbook/integration/paprika.py b/cookbook/integration/paprika.py index 010783e3..3d78b9eb 100644 --- a/cookbook/integration/paprika.py +++ b/cookbook/integration/paprika.py @@ -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 diff --git a/cookbook/locale/da/LC_MESSAGES/django.po b/cookbook/locale/da/LC_MESSAGES/django.po index ebe0c1cc..7ab8150b 100644 --- a/cookbook/locale/da/LC_MESSAGES/django.po +++ b/cookbook/locale/da/LC_MESSAGES/django.po @@ -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 \n" +"PO-Revision-Date: 2023-03-06 10:55+0000\n" +"Last-Translator: Anders Obro \n" "Language-Team: Danish \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 diff --git a/cookbook/locale/es/LC_MESSAGES/django.po b/cookbook/locale/es/LC_MESSAGES/django.po index ad415e65..820a2a34 100644 --- a/cookbook/locale/es/LC_MESSAGES/django.po +++ b/cookbook/locale/es/LC_MESSAGES/django.po @@ -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 \n" +"PO-Revision-Date: 2023-03-13 06:55+0000\n" +"Last-Translator: Amara Ude \n" "Language-Team: Spanish \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." diff --git a/cookbook/locale/fr/LC_MESSAGES/django.po b/cookbook/locale/fr/LC_MESSAGES/django.po index 9a234aff..83db28c4 100644 --- a/cookbook/locale/fr/LC_MESSAGES/django.po +++ b/cookbook/locale/fr/LC_MESSAGES/django.po @@ -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 \n" +"PO-Revision-Date: 2023-03-13 06:55+0000\n" +"Last-Translator: Jin Zhang \n" "Language-Team: French \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 here " -#| "for full desciption of choices." msgid "" "Select type method of search. Click here for " "full description of choices." msgstr "" -"Sélectionner la méthode de recherche. Cliquer ici pour une description complète des choix." +"Sélectionner la méthode de recherche. Cliquer ici 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 l’unité à 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: %(object)s " msgstr "Êtes-vous sûr(e) de vouloir supprimer %(title)s : %(object)s " #: .\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 important to leave a blank line " -#| "before the list!" msgid "" "Lists can ordered or unordered. It is important to leave a blank line " "before the list!" msgstr "" "Les listes peuvent être ordonnées ou non. Il est important de laisser une " -"ligne vide avant la liste !" +"ligne vide avant la liste!" #: .\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 d’URL." #: .\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" diff --git a/cookbook/locale/nl/LC_MESSAGES/django.po b/cookbook/locale/nl/LC_MESSAGES/django.po index 7e887ab2..1abdb96e 100644 --- a/cookbook/locale/nl/LC_MESSAGES/django.po +++ b/cookbook/locale/nl/LC_MESSAGES/django.po @@ -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 \n" -"Language-Team: Dutch \n" +"PO-Revision-Date: 2023-02-27 13:55+0000\n" +"Last-Translator: Jesse \n" +"Language-Team: Dutch \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 "" diff --git a/cookbook/locale/zh_CN/LC_MESSAGES/django.po b/cookbook/locale/zh_CN/LC_MESSAGES/django.po index 43494dfa..19f012c0 100644 --- a/cookbook/locale/zh_CN/LC_MESSAGES/django.po +++ b/cookbook/locale/zh_CN/LC_MESSAGES/django.po @@ -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: 吕楪 \n" "Language-Team: Chinese (Simplified) \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!" diff --git a/cookbook/locale/zh_Hant/LC_MESSAGES/django.po b/cookbook/locale/zh_Hant/LC_MESSAGES/django.po index ae52972b..c948c725 100644 --- a/cookbook/locale/zh_Hant/LC_MESSAGES/django.po +++ b/cookbook/locale/zh_Hant/LC_MESSAGES/django.po @@ -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 \n" +"Language-Team: Chinese (Traditional) \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 (/remote." "php/webdav/ is added automatically)" -msgstr "" +msgstr "Dropbox 留空並輸入基礎 Nextcloud 網址(/remote.php/webdav/ " +"會自動添加)" #: .\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 docs here" -msgstr "" +msgstr "可以使用 Markdown 設置此字段格式。查看文檔" #: .\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" diff --git a/cookbook/models.py b/cookbook/models.py index 76ff8ad7..8bf63532 100644 --- a/cookbook/models.py +++ b/cookbook/models.py @@ -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) diff --git a/cookbook/templates/recipe_view.html b/cookbook/templates/recipe_view.html index 3cb4e79f..2ec2b117 100644 --- a/cookbook/templates/recipe_view.html +++ b/cookbook/templates/recipe_view.html @@ -48,7 +48,7 @@ {% endfor %} {% if request.user.is_authenticated %} -
+
{% csrf_token %} diff --git a/docs/faq.md b/docs/faq.md index a8242adb..b20a6528 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -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. \ No newline at end of file diff --git a/vue/src/apps/CookbookView/CookbookView.vue b/vue/src/apps/CookbookView/CookbookView.vue index 90bd0aef..b4b87c93 100644 --- a/vue/src/apps/CookbookView/CookbookView.vue +++ b/vue/src/apps/CookbookView/CookbookView.vue @@ -61,9 +61,12 @@
diff --git a/vue/src/apps/MealPlanView/MealPlanView.vue b/vue/src/apps/MealPlanView/MealPlanView.vue index 634a8000..6ed34700 100644 --- a/vue/src/apps/MealPlanView/MealPlanView.vue +++ b/vue/src/apps/MealPlanView/MealPlanView.vue @@ -95,9 +95,9 @@ style="text-overflow: ellipsis; overflow-wrap: anywhere;"> {{ plan.entry.recipe.name }} - {{ plan.entry.title }} + {{ plan.entry.title }}
- + {{ plan.entry.note }}
@@ -293,8 +293,9 @@
@@ -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({ diff --git a/vue/src/apps/RecipeView/RecipeView.vue b/vue/src/apps/RecipeView/RecipeView.vue index 04c44b75..3333b414 100644 --- a/vue/src/apps/RecipeView/RecipeView.vue +++ b/vue/src/apps/RecipeView/RecipeView.vue @@ -4,7 +4,7 @@ -
+
diff --git a/vue/src/apps/ShoppingListView/ShoppingListView.vue b/vue/src/apps/ShoppingListView/ShoppingListView.vue index 3ffa2e41..7dc59d4a 100644 --- a/vue/src/apps/ShoppingListView/ShoppingListView.vue +++ b/vue/src/apps/ShoppingListView/ShoppingListView.vue @@ -569,8 +569,10 @@
diff --git a/vue/src/components/BottomNavigationBar.vue b/vue/src/components/BottomNavigationBar.vue index 4128d931..8fad878b 100644 --- a/vue/src/components/BottomNavigationBar.vue +++ b/vue/src/components/BottomNavigationBar.vue @@ -23,6 +23,13 @@ aria-haspopup="true" aria-expanded="false"> + +
diff --git a/vue/src/locales/da.json b/vue/src/locales/da.json index 9aec5dea..625d401b 100644 --- a/vue/src/locales/da.json +++ b/vue/src/locales/da.json @@ -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." } diff --git a/vue/src/locales/es.json b/vue/src/locales/es.json index 5e8fc8ed..58bc9a00 100644 --- a/vue/src/locales/es.json +++ b/vue/src/locales/es.json @@ -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" } diff --git a/vue/src/locales/fr.json b/vue/src/locales/fr.json index 906e7634..14593788 100644 --- a/vue/src/locales/fr.json +++ b/vue/src/locales/fr.json @@ -1,5 +1,5 @@ { - "err_fetching_resource": "Erreur lors de la récupération d’une 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 d’une ressource !", "err_updating_resource": "Erreur lors de la mise à jour d’une ressource !", "err_deleting_resource": "Erreur lors de la suppression d’une 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 à l’avenir (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" } diff --git a/vue/src/locales/id.json b/vue/src/locales/id.json index 9364956c..cfb67abf 100644 --- a/vue/src/locales/id.json +++ b/vue/src/locales/id.json @@ -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!", diff --git a/vue/src/locales/nl.json b/vue/src/locales/nl.json index 9b8b1089..e0c0ab77 100644 --- a/vue/src/locales/nl.json +++ b/vue/src/locales/nl.json @@ -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" } diff --git a/vue/src/locales/pl.json b/vue/src/locales/pl.json index 56bbf176..c201b6b7 100644 --- a/vue/src/locales/pl.json +++ b/vue/src/locales/pl.json @@ -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" } diff --git a/vue/src/locales/zh_Hans.json b/vue/src/locales/zh_Hans.json index 77f7616b..e0cfc782 100644 --- a/vue/src/locales/zh_Hans.json +++ b/vue/src/locales/zh_Hans.json @@ -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": "导入食谱" }