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.image_processing import get_filetype
from cookbook.helper.ingredient_parser import IngredientParser 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.integration.integration import Integration
from cookbook.models import Ingredient, Recipe, Step from cookbook.models import Ingredient, Recipe, Step
@ -23,41 +24,60 @@ class Mealie(Integration):
name=recipe_json['name'].strip(), description=description, name=recipe_json['name'].strip(), description=description,
created_by=self.request.user, internal=True, space=self.request.space) 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']: for s in recipe_json['recipe_instructions']:
step = Step.objects.create( step = Step.objects.create(instruction=s['text'], space=self.request.space, )
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
recipe.steps.add(step) 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: for f in self.files:
if '.zip' in f['name']: if '.zip' in f['name']:
import_zip = ZipFile(f['file']) import_zip = ZipFile(f['file'])

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -48,7 +48,7 @@
{% endfor %} {% endfor %}
{% if request.user.is_authenticated %} {% 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"> <form method="POST" class="post-form">
{% csrf_token %} {% 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` 1. execute into the container using `docker-compose exec web_recipes sh`
2. activate the virtual environment `source venv/bin/activate` 2. activate the virtual environment `source venv/bin/activate`
3. run `python manage.py createsuperuser` and follow the steps shown. 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> <bottom-navigation-bar>
<template #custom_create_functions> <template #custom_create_functions>
<div class="dropdown-divider" ></div>
<h6 class="dropdown-header">{{ $t('Books')}}</h6>
<a class="dropdown-item" @click="createNew()"><i <a class="dropdown-item" @click="createNew()"><i
class="fa fa-book"></i> {{$t("Create")}}</a> class="fa fa-book"></i> {{$t("Create")}}</a>
<div class="dropdown-divider" ></div>
</template> </template>
</bottom-navigation-bar> </bottom-navigation-bar>
</div> </div>

View File

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

View File

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

View File

@ -569,8 +569,10 @@
<bottom-navigation-bar> <bottom-navigation-bar>
<template #custom_create_functions> <template #custom_create_functions>
<a class="dropdown-item" @click="entrymode = !entrymode; " <div class="dropdown-divider"></div>
><i class="fas fa-cart-plus"></i> <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") }} {{ $t("New_Entry") }}
</a> </a>
@ -583,7 +585,7 @@
<CopyToClipboard :items="csvData" :settings="settings" format="table" <CopyToClipboard :items="csvData" :settings="settings" format="table"
:label="$t('copy_markdown_table')" icon="fab fa-markdown fa-fw"/> :label="$t('copy_markdown_table')" icon="fab fa-markdown fa-fw"/>
<div class="dropdown-divider"></div>
</template> </template>
</bottom-navigation-bar> </bottom-navigation-bar>
</div> </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> aria-haspopup="true" aria-expanded="false"><i class="fas fa-plus-circle fa-2x bottom-nav-link"></i>
</a> </a>
<div class="dropdown-menu center-dropup" aria-labelledby="navbarDropdownMenuLink"> <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 name="custom_create_functions">
</slot> </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"> <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 }} <i :class="cl.icon + ' fa-fw'"></i> {{ cl.label }}
</a> </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>
</div> </div>
</slot> </slot>

View File

@ -459,11 +459,24 @@
"Message": "Besked", "Message": "Besked",
"Sticky_Nav": "Fastlåst navigation", "Sticky_Nav": "Fastlåst navigation",
"reset_food_inheritance": "Nulstil nedarvning", "reset_food_inheritance": "Nulstil nedarvning",
"Plural": "", "Plural": "Flertal",
"plural_short": "", "plural_short": "flertal",
"Use_Plural_Unit_Always": "", "Use_Plural_Unit_Always": "Benyt altid flertalsform for enheder",
"Use_Plural_Unit_Simple": "", "Use_Plural_Unit_Simple": "Brug flertalsform dynamisk for enheder",
"Use_Plural_Food_Always": "", "Use_Plural_Food_Always": "Brug altid flertalsform for mad",
"Use_Plural_Food_Simple": "", "Use_Plural_Food_Simple": "Brug flertalsform dynamisk for mad",
"plural_usage_info": "" "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_Keyword": "Añadir nueva Etiqueta",
"Create_New_Unit": "Añadir nueva unidad", "Create_New_Unit": "Añadir nueva unidad",
"Create_New_Meal_Type": "Añadir nuevo Tipo de Comida", "Create_New_Meal_Type": "Añadir nuevo Tipo de Comida",
"and_up": "", "and_up": "& Arriba",
"and_down": "", "and_down": "& Abajo",
"Instructions": "Instrucciones", "Instructions": "Instrucciones",
"Unrated": "Sin puntuar", "Unrated": "Sin puntuar",
"Automate": "Automatizar", "Automate": "Automatizar",
@ -443,5 +443,14 @@
"Use_Plural_Unit_Simple": "", "Use_Plural_Unit_Simple": "",
"Use_Plural_Food_Always": "", "Use_Plural_Food_Always": "",
"Use_Plural_Food_Simple": "", "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_creating_resource": "Erreur lors de la création dune ressource !",
"err_updating_resource": "Erreur lors de la mise à jour dune ressource !", "err_updating_resource": "Erreur lors de la mise à jour dune ressource !",
"err_deleting_resource": "Erreur lors de la suppression dune ressource !", "err_deleting_resource": "Erreur lors de la suppression dune ressource !",
@ -30,7 +30,7 @@
"Reset_Search": "Réinitialiser la recherche", "Reset_Search": "Réinitialiser la recherche",
"Recently_Viewed": "Vu récemment", "Recently_Viewed": "Vu récemment",
"Load_More": "Charger plus", "Load_More": "Charger plus",
"Keywords": "Mots-clés", "Keywords": "mots-clés",
"Books": "Livres", "Books": "Livres",
"Proteins": "Protéines", "Proteins": "Protéines",
"Fats": "Matières grasses", "Fats": "Matières grasses",
@ -62,11 +62,11 @@
"Size": "Taille", "Size": "Taille",
"Files": "Fichiers", "Files": "Fichiers",
"File": "Fichier", "File": "Fichier",
"Edit": "Modifier", "Edit": "modifier",
"Cancel": "Annuler", "Cancel": "Annuler",
"Delete": "Supprimer", "Delete": "Supprimer",
"Open": "Ouvrir", "Open": "Ouvrir",
"Ok": "Ouvrir", "Ok": "D'accord",
"Save": "Sauvegarder", "Save": "Sauvegarder",
"Step": "Étape", "Step": "Étape",
"Search": "Rechercher", "Search": "Rechercher",
@ -119,7 +119,7 @@
"merge_selection": "Remplacer toutes les occurrences de {source} par {type}.", "merge_selection": "Remplacer toutes les occurrences de {source} par {type}.",
"move_title": "Déplacer {type}", "move_title": "Déplacer {type}",
"del_confirmation_tree": "Êtes-vous sûr de vouloir supprimer {source} et tous ses enfants ?", "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} ?", "confirm_delete": "Voulez-vous vraiment supprimer {objet} ?",
"Note": "Notes", "Note": "Notes",
"Add_Step": "Ajouter une étape", "Add_Step": "Ajouter une étape",
@ -449,5 +449,16 @@
"Import_Not_Yet_Supported": "Importation pas encore prise en charge", "Import_Not_Yet_Supported": "Importation pas encore prise en charge",
"Export_Not_Yet_Supported": "Exportation 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", "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.", "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 mengambil sumber daya!", "err_fetching_resource": "Terjadi kesalahan saat memperoleh sumber daya!",
"err_creating_resource": "Terjadi kesalahan saat membuat 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_resource": "Terjadi kesalahan saat menghapus sumber daya!",
"err_deleting_protected_resource": "Objek yang Anda coba hapus masih digunakan dan tidak dapat dihapus.", "err_deleting_protected_resource": "Objek yang Anda coba hapus masih digunakan dan tidak dapat dihapus.",
"err_moving_resource": "Terjadi kesalahan saat memindahkan sumber daya!", "err_moving_resource": "Terjadi kesalahan saat memindahkan sumber daya!",

View File

@ -74,7 +74,7 @@
"success_deleting_resource": "Hulpbron succesvol verwijderd!", "success_deleting_resource": "Hulpbron succesvol verwijderd!",
"Cancel": "Annuleer", "Cancel": "Annuleer",
"Delete": "Verwijder", "Delete": "Verwijder",
"Ok": "Open", "Ok": "Ok",
"Load_More": "Laad meer", "Load_More": "Laad meer",
"Manage_Books": "Beheer boeken", "Manage_Books": "Beheer boeken",
"Create": "Voeg toe", "Create": "Voeg toe",
@ -162,7 +162,7 @@
"del_confirmation_tree": "Weet je zeker dat je {source} en al zijn kinderen wil verwijderen?", "del_confirmation_tree": "Weet je zeker dat je {source} en al zijn kinderen wil verwijderen?",
"Create_New_Food": "Voeg nieuw Eten toe", "Create_New_Food": "Voeg nieuw Eten toe",
"Time": "Tijd", "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", "Table_of_Contents": "Inhoudsopgave",
"Create_New_Meal_Type": "Voeg Nieuw Maaltijdtype toe", "Create_New_Meal_Type": "Voeg Nieuw Maaltijdtype toe",
"Empty": "Leeg", "Empty": "Leeg",
@ -376,7 +376,7 @@
"substitute_children_help": "Alle ingrediënten die kinderen zijn van dit ingrediënt worden beschouwd als vervangers.", "substitute_children_help": "Alle ingrediënten die kinderen zijn van dit ingrediënt worden beschouwd als vervangers.",
"SubstituteOnHand": "Je hebt een vervanger op voorraad.", "SubstituteOnHand": "Je hebt een vervanger op voorraad.",
"ChildInheritFields": "Kinderen erven velden", "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!", "no_pinned_recipes": "Je hebt geen vastgepinde recepten!",
"Internal": "Interne", "Internal": "Interne",
"Reset": "Herstel", "Reset": "Herstel",
@ -467,11 +467,18 @@
"facet_count_info": "Geef receptenaantal bij zoekfilters weer.", "facet_count_info": "Geef receptenaantal bij zoekfilters weer.",
"Split_All_Steps": "Splits alle rijen in apparte stappen.", "Split_All_Steps": "Splits alle rijen in apparte stappen.",
"Combine_All_Steps": "Voeg alle stappen samen tot een veld.", "Combine_All_Steps": "Voeg alle stappen samen tot een veld.",
"Plural": "", "Plural": "Meervoud",
"plural_short": "", "plural_short": "meervoud",
"Use_Plural_Unit_Always": "", "Use_Plural_Unit_Always": "Gebruik altijd de meervoudsvorm voor eenheden",
"Use_Plural_Unit_Simple": "", "Use_Plural_Unit_Simple": "Gebruik meervoudsvorm voor eenheden dynamisch",
"Use_Plural_Food_Always": "", "Use_Plural_Food_Always": "Gebruik altijd meervoudsvorm voor voedsel",
"Use_Plural_Food_Simple": "", "Use_Plural_Food_Simple": "Gebruik meervoudsvorm voor voedsels dynamisch",
"plural_usage_info": "" "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ść", "Amount": "Ilość",
"Original_Text": "Tekst oryginalny", "Original_Text": "Tekst oryginalny",
"Description_Replace": "Zmień opis", "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": "取消", "Cancel": "取消",
"Delete": "删除", "Delete": "删除",
"Open": "打开", "Open": "打开",
"Ok": "打开", "Ok": "确认",
"Save": "保存", "Save": "保存",
"Step": "步骤", "Step": "步骤",
"Search": "搜索", "Search": "搜索",
@ -477,5 +477,7 @@
"UnpinnedConfirmation": "{recipe} 已取消固定。", "UnpinnedConfirmation": "{recipe} 已取消固定。",
"Unpin": "取消固定", "Unpin": "取消固定",
"Auto_Sort": "自动分类", "Auto_Sort": "自动分类",
"Auto_Sort_Help": "将所有食材移动到最恰当的步骤。" "Auto_Sort_Help": "将所有食材移动到最恰当的步骤。",
"Create Recipe": "创建食谱",
"Import Recipe": "导入食谱"
} }