Merge branch 'recipe_description' of github.com:smilerz/recipes into recipe_description

This commit is contained in:
smilerz
2021-03-04 09:30:27 -06:00
24 changed files with 2352 additions and 971 deletions

View File

@@ -13,6 +13,7 @@ TIMEZONE=Europe/Berlin
# add only a database password if you want to run with the default postgres, otherwise change settings accordingly # add only a database password if you want to run with the default postgres, otherwise change settings accordingly
DB_ENGINE=django.db.backends.postgresql DB_ENGINE=django.db.backends.postgresql
# DB_OPTIONS= {} # e.g. {"sslmode":"require"} to enable ssl
POSTGRES_HOST=db_recipes POSTGRES_HOST=db_recipes
POSTGRES_PORT=5432 POSTGRES_PORT=5432
POSTGRES_USER=djangouser POSTGRES_USER=djangouser

22
.github/ISSUE_TEMPLATE/url_import.md vendored Normal file
View File

@@ -0,0 +1,22 @@
---
name: Website Import
about: Anything related to website imports
title: ''
labels: enhancement, url_import
assignees: ''
---
### Version
Please provide your current version (can be found on the system page since v0.8.4)
Version:
### Information
Exact URL you are trying to import from:
When did the issue happen: When pressing the search button with the url / when importing after the page has loaded
Response/Message shown
```
Message
```

View File

@@ -12,7 +12,7 @@ class Chowdown(Integration):
def import_file_name_filter(self, zip_info_object): def import_file_name_filter(self, zip_info_object):
print("testing", zip_info_object.filename) print("testing", zip_info_object.filename)
return re.match(r'^_recipes/([A-Za-z\d\s-])+.md$', zip_info_object.filename) return re.match(r'^(_)*recipes/([A-Za-z\d\s-])+.md$', zip_info_object.filename)
def get_recipe_from_file(self, file): def get_recipe_from_file(self, file):
ingredient_mode = False ingredient_mode = False

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@@ -15,12 +15,11 @@ msgstr ""
"POT-Creation-Date: 2021-02-09 18:01+0100\n" "POT-Creation-Date: 2021-02-09 18:01+0100\n"
"PO-Revision-Date: 2020-06-02 19:28+0000\n" "PO-Revision-Date: 2020-06-02 19:28+0000\n"
"Last-Translator: Oliver Thomas Cervera <cervera93-10@yahoo.it>, 2021\n" "Last-Translator: Oliver Thomas Cervera <cervera93-10@yahoo.it>, 2021\n"
"Language-Team: Italian (https://www.transifex.com/django-recipes/" "Language-Team: Italian (https://www.transifex.com/django-recipes/teams/110507/it/)\n"
"teams/110507/it/)\n"
"Language: it\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"
"Language: it\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: .\cookbook\filters.py:22 .\cookbook\templates\base.html:87 #: .\cookbook\filters.py:22 .\cookbook\templates\base.html:87
@@ -84,12 +83,12 @@ msgstr ""
"visualizza una lista della spesa, la lista viene aggiornata ogni tot secondi" "visualizza una lista della spesa, la lista viene aggiornata ogni tot secondi"
" impostati per sincronizzare le modifiche che qualcun altro potrebbe aver " " impostati per sincronizzare le modifiche che qualcun altro potrebbe aver "
"fatto. Utile per gli acquisti con più persone, ma potrebbe utilizzare un po'" "fatto. Utile per gli acquisti con più persone, ma potrebbe utilizzare un po'"
"di dati mobili. Se inferiore al limite di istanza viene ripristinato durante " " di dati mobili. Se inferiore al limite di istanza viene ripristinato "
"il salvataggio." "durante il salvataggio."
#: .\cookbook\forms.py:55 #: .\cookbook\forms.py:55
msgid "Makes the navbar stick to the top of the page." msgid "Makes the navbar stick to the top of the page."
msgstr "" msgstr "Fissa la barra di navigazione nella parte superiore della pagina."
#: .\cookbook\forms.py:71 #: .\cookbook\forms.py:71
msgid "" msgid ""
@@ -128,10 +127,8 @@ msgid "Storage UID"
msgstr "UID di archiviazione" msgstr "UID di archiviazione"
#: .\cookbook\forms.py:117 #: .\cookbook\forms.py:117
#, fuzzy
#| msgid "Number of Days"
msgid "Number of servings" msgid "Number of servings"
msgstr "Numero di giorni" msgstr "Porzioni"
#: .\cookbook\forms.py:128 #: .\cookbook\forms.py:128
msgid "" msgid ""
@@ -143,7 +140,7 @@ msgstr ""
#: .\cookbook\forms.py:143 #: .\cookbook\forms.py:143
msgid "Default" msgid "Default"
msgstr "" msgstr "Predefinito"
#: .\cookbook\forms.py:162 #: .\cookbook\forms.py:162
msgid "New Unit" msgid "New Unit"
@@ -192,11 +189,11 @@ msgstr "Lascia vuoto per nextcloud e inserisci l'api token per dropbox."
#: .\cookbook\forms.py:244 #: .\cookbook\forms.py:244
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 "
"php/webdav/</code> is added automatically)" "(<code>/remote.php/webdav/</code> is added automatically)"
msgstr "" msgstr ""
"Lascia vuoto per dropbox e inserisci solo l'url base per nextcloud (<code>/" "Lascia vuoto per dropbox e inserisci solo l'url base per nextcloud "
"remote.php/webdav/</code> è aggiunto automaticamente)" "(<code>/remote.php/webdav/</code> è aggiunto automaticamente)"
#: .\cookbook\forms.py:263 #: .\cookbook\forms.py:263
msgid "Search String" msgid "Search String"
@@ -219,11 +216,11 @@ msgstr ""
#: .\cookbook\forms.py:313 #: .\cookbook\forms.py:313
#: .\cookbook\templates\forms\edit_internal_recipe.html:377 #: .\cookbook\templates\forms\edit_internal_recipe.html:377
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 "
"\">docs here</a>" "href=\"/docs/markdown/\">docs here</a>"
msgstr "" msgstr ""
"Puoi usare markdown per formattare questo campo. Guarda la <a href=\"/docs/" "Puoi usare markdown per formattare questo campo. Guarda la <a "
"markdown/\">documentazione qui</a>" "href=\"/docs/markdown/\">documentazione qui</a>"
#: .\cookbook\forms.py:328 #: .\cookbook\forms.py:328
msgid "A username is not required, if left blank the new user can choose one." msgid "A username is not required, if left blank the new user can choose one."
@@ -273,6 +270,8 @@ 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 ""
"La procedura di import necessita di un file .zip. Hai scelto il tipo di "
"importazione corretta per i tuoi dati?"
#: .\cookbook\integration\safron.py:23 #: .\cookbook\integration\safron.py:23
#: .\cookbook\templates\forms\edit_internal_recipe.html:65 #: .\cookbook\templates\forms\edit_internal_recipe.html:65
@@ -282,10 +281,8 @@ msgid "Servings"
msgstr "Porzioni" msgstr "Porzioni"
#: .\cookbook\integration\safron.py:25 #: .\cookbook\integration\safron.py:25
#, fuzzy
#| msgid "Waiting time ~"
msgid "Waiting time" msgid "Waiting time"
msgstr "Tempo di Attesa ~" msgstr "Tempo di attesa"
#: .\cookbook\integration\safron.py:27 #: .\cookbook\integration\safron.py:27
#: .\cookbook\templates\forms\edit_internal_recipe.html:59 #: .\cookbook\templates\forms\edit_internal_recipe.html:59
@@ -300,7 +297,7 @@ msgstr "Ricettario"
#: .\cookbook\integration\safron.py:31 #: .\cookbook\integration\safron.py:31
msgid "Section" msgid "Section"
msgstr "" msgstr "Selezione"
#: .\cookbook\migrations\0047_auto_20200602_1133.py:12 #: .\cookbook\migrations\0047_auto_20200602_1133.py:12
msgid "Breakfast" msgid "Breakfast"
@@ -396,37 +393,35 @@ msgstr "Login"
#: .\cookbook\templates\account\login.html:13 #: .\cookbook\templates\account\login.html:13
#: .\cookbook\templates\account\login.html:28 #: .\cookbook\templates\account\login.html:28
msgid "Sign In" msgid "Sign In"
msgstr "" msgstr "Accedi"
#: .\cookbook\templates\account\login.html:38 #: .\cookbook\templates\account\login.html:38
msgid "Social Login" msgid "Social Login"
msgstr "" msgstr "Login con social network"
#: .\cookbook\templates\account\login.html:39 #: .\cookbook\templates\account\login.html:39
msgid "You can use any of the following providers to sign in." msgid "You can use any of the following providers to sign in."
msgstr "" msgstr "Puoi usare uno dei seguenti provider per accedere."
#: .\cookbook\templates\account\logout.html:5 #: .\cookbook\templates\account\logout.html:5
#: .\cookbook\templates\account\logout.html:9 #: .\cookbook\templates\account\logout.html:9
#: .\cookbook\templates\account\logout.html:18 #: .\cookbook\templates\account\logout.html:18
msgid "Sign Out" msgid "Sign Out"
msgstr "" msgstr "Esci"
#: .\cookbook\templates\account\logout.html:11 #: .\cookbook\templates\account\logout.html:11
#, fuzzy
#| msgid "Are you sure that you want to merge these two units?"
msgid "Are you sure you want to sign out?" msgid "Are you sure you want to sign out?"
msgstr "Sei sicuro di volere unire queste due unità di misura?" msgstr "Sei sicuro di voler uscire?"
#: .\cookbook\templates\account\password_reset.html:5 #: .\cookbook\templates\account\password_reset.html:5
#: .\cookbook\templates\account\password_reset_done.html:5 #: .\cookbook\templates\account\password_reset_done.html:5
msgid "Password Reset" msgid "Password Reset"
msgstr "" msgstr "Recupero password"
#: .\cookbook\templates\account\password_reset.html:9 #: .\cookbook\templates\account\password_reset.html:9
#: .\cookbook\templates\account\password_reset_done.html:9 #: .\cookbook\templates\account\password_reset_done.html:9
msgid "Password reset is not implemented for the time being!" msgid "Password reset is not implemented for the time being!"
msgstr "" msgstr "Il recupero della password non è stato ancora implementato!"
#: .\cookbook\templates\account\signup.html:5 #: .\cookbook\templates\account\signup.html:5
msgid "Register" msgid "Register"
@@ -644,20 +639,16 @@ msgid "Waiting Time"
msgstr "Tempo di Attesa" msgstr "Tempo di Attesa"
#: .\cookbook\templates\forms\edit_internal_recipe.html:68 #: .\cookbook\templates\forms\edit_internal_recipe.html:68
#, fuzzy
#| msgid "Servings"
msgid "Servings Text" msgid "Servings Text"
msgstr "Porzioni" msgstr "Nome delle porzioni"
#: .\cookbook\templates\forms\edit_internal_recipe.html:79 #: .\cookbook\templates\forms\edit_internal_recipe.html:79
msgid "Select Keywords" msgid "Select Keywords"
msgstr "Seleziona parole chiave" msgstr "Seleziona parole chiave"
#: .\cookbook\templates\forms\edit_internal_recipe.html:93 #: .\cookbook\templates\forms\edit_internal_recipe.html:93
#, fuzzy
#| msgid "Nutrition"
msgid "Description" msgid "Description"
msgstr "Nutrienti" msgstr "Descrizione"
#: .\cookbook\templates\forms\edit_internal_recipe.html:108 #: .\cookbook\templates\forms\edit_internal_recipe.html:108
msgid "Nutrition" msgid "Nutrition"
@@ -773,7 +764,7 @@ msgstr "Abilita Quantità"
#: .\cookbook\templates\forms\edit_internal_recipe.html:348 #: .\cookbook\templates\forms\edit_internal_recipe.html:348
msgid "Copy Template Reference" msgid "Copy Template Reference"
msgstr "" msgstr "Copia riferimento template"
#: .\cookbook\templates\forms\edit_internal_recipe.html:374 #: .\cookbook\templates\forms\edit_internal_recipe.html:374
#: .\cookbook\templates\url_import.html:177 #: .\cookbook\templates\url_import.html:177
@@ -821,19 +812,14 @@ msgstr "Modifica Ingredienti"
#: .\cookbook\templates\forms\ingredients.html:16 #: .\cookbook\templates\forms\ingredients.html:16
msgid "" msgid ""
"\n" "\n"
" The following form can be used if, accidentally, two (or more) units " " The following form can be used if, accidentally, two (or more) units or ingredients where created that should be\n"
"or ingredients where created that should be\n"
" the same.\n" " the same.\n"
" It merges two units or ingredients and updates all recipes using " " It merges two units or ingredients and updates all recipes using them.\n"
"them.\n"
" " " "
msgstr "" msgstr ""
"\n" "\n"
" Questo modulo può essere utilizzato se, accidentalmente, sono stati " " Questo modulo può essere utilizzato se, accidentalmente, sono stati creati due (o più) unità di misura o ingredienti che dovrebbero essere lo stesso. \n"
"creati due (o più) unità di misura o ingredienti che dovrebbero essere lo " "Unisce due unità di misura o ingredienti e aggiorna tutte le ricette che li utilizzano."
"stesso. \n"
"Unisce due unità di misura o ingredienti e aggiorna tutte le ricette che li "
"utilizzano."
#: .\cookbook\templates\forms\ingredients.html:24 #: .\cookbook\templates\forms\ingredients.html:24
#: .\cookbook\templates\stats.html:26 #: .\cookbook\templates\stats.html:26
@@ -955,19 +941,15 @@ msgstr "Avviso di Sicurezza"
#: .\cookbook\templates\include\storage_backend_warning.html:5 #: .\cookbook\templates\include\storage_backend_warning.html:5
msgid "" msgid ""
"\n" "\n"
" The <b>Password and Token</b> field are stored as <b>plain text</b> " " The <b>Password and Token</b> field are stored as <b>plain text</b> inside the database.\n"
"inside the database.\n" " This is necessary because they are needed to make API requests, but it also increases the risk of\n"
" This is necessary because they are needed to make API requests, but "
"it also increases the risk of\n"
" someone stealing it. <br/>\n" " someone stealing it. <br/>\n"
" To limit the possible damage tokens or accounts with limited access " " To limit the possible damage tokens or accounts with limited access can be used.\n"
"can be used.\n"
" " " "
msgstr "" msgstr ""
"\n" "\n"
"I campi <b>Password e Token</b> sono salvati <b>in chiaro</b> nel database.\n" "I campi <b>Password e Token</b> sono salvati <b>in chiaro</b> nel database.\n"
"È necessario perché servono per fare richieste API, ma questo aumenta il " "È necessario perché servono per fare richieste API, ma questo aumenta il rischio che\n"
"rischio che\n"
"qualcuno possa impossessarsene.<br/>\n" "qualcuno possa impossessarsene.<br/>\n"
"Per liminare il danno puoi usare account con accesso limitato o i token." "Per liminare il danno puoi usare account con accesso limitato o i token."
@@ -1012,29 +994,19 @@ msgstr "Informazioni su Markdown"
#: .\cookbook\templates\markdown_info.html:14 #: .\cookbook\templates\markdown_info.html:14
msgid "" msgid ""
"\n" "\n"
" Markdown is lightweight markup language that can be used to format " " Markdown is lightweight markup language that can be used to format plain text easily.\n"
"plain text easily.\n" " This site uses the <a href=\"https://python-markdown.github.io/\" target=\"_blank\">Python Markdown</a> library to\n"
" This site uses the <a href=\"https://python-markdown.github.io/\" " " convert your text into nice looking HTML. Its full markdown documentation can be found\n"
"target=\"_blank\">Python Markdown</a> library to\n" " <a href=\"https://daringfireball.net/projects/markdown/syntax\" target=\"_blank\">here</a>.\n"
" convert your text into nice looking HTML. Its full markdown " " An incomplete but most likely sufficient documentation can be found below.\n"
"documentation can be found\n"
" <a href=\"https://daringfireball.net/projects/markdown/syntax\" "
"target=\"_blank\">here</a>.\n"
" An incomplete but most likely sufficient documentation can be found "
"below.\n"
" " " "
msgstr "" msgstr ""
"\n" "\n"
" Markdown è un linguaggio di markup molto leggero che può essere " " Markdown è un linguaggio di markup molto leggero che può essere utilizzato per formattare facilmente del testo.\n"
"utilizzato per formattare facilmente del testo.\n" " Questo sito utilizza la libreria <a href=\"https://python-markdown.github.io/\" target=\"_blank\">Python Markdown</a> per\n"
" Questo sito utilizza la libreria <a href=\"https://python-markdown." " convertire il tuo testo in HTML formattato. È possibile trovare la documentazione completa del markdown\n"
"github.io/\" target=\"_blank\">Python Markdown</a> per\n" " <a href=\"https://daringfireball.net/projects/markdown/syntax\" target=\"_blank\">qui</a>.\n"
" convertire il tuo testo in HTML formattato. È possibile trovare la " " Di seguito è possibile trovare una documentazione incompleta ma molto probabilmente sufficiente."
"documentazione completa del markdown\n"
" <a href=\"https://daringfireball.net/projects/markdown/syntax\" target="
"\"_blank\">qui</a>.\n"
" Di seguito è possibile trovare una documentazione incompleta ma molto "
"probabilmente sufficiente."
#: .\cookbook\templates\markdown_info.html:25 #: .\cookbook\templates\markdown_info.html:25
msgid "Headers" msgid "Headers"
@@ -1134,19 +1106,15 @@ msgid "Tables"
msgstr "Tabelle" msgstr "Tabelle"
#: .\cookbook\templates\markdown_info.html:153 #: .\cookbook\templates\markdown_info.html:153
#, fuzzy
#| msgid ""
#| "Markdown tables are hard to create by hand. It is recommended to use a "
#| "table editor like <a href=\"https://www.tablesgenerator.com/"
#| "markdown_tables\" target=\"_blank\">this</a> one."
msgid "" msgid ""
"Markdown tables are hard to create by hand. It is recommended to use a table" "Markdown tables are hard to create by hand. It is recommended to use a table"
"editor like <a href=\"https://www.tablesgenerator.com/markdown_tables\" rel=" " editor like <a href=\"https://www.tablesgenerator.com/markdown_tables\" "
"\"noreferrer noopener\" target=\"_blank\">this one.</a>" "rel=\"noreferrer noopener\" target=\"_blank\">this one.</a>"
msgstr "" msgstr ""
"Le tabelle in markdown sono difficili da creare a mano. È raccomandato " "Le tabelle in markdown sono difficili da creare a mano. Si raccomanda "
"utilizzare un editor di tabelle come <a href=\"https://www.tablesgenerator." "l'utilizzo di un editor di come <a "
"com/markdown_tables\" target=\"_blank\">questo</a>." "href=\"https://www.tablesgenerator.com/markdown_tables\" "
"target=\"_blank\">questo</a>."
#: .\cookbook\templates\markdown_info.html:155 #: .\cookbook\templates\markdown_info.html:155
#: .\cookbook\templates\markdown_info.html:157 #: .\cookbook\templates\markdown_info.html:157
@@ -1184,19 +1152,18 @@ msgstr "Note (opzionale)"
#: .\cookbook\templates\meal_plan.html:143 #: .\cookbook\templates\meal_plan.html:143
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 "
"\" target=\"_blank\" rel=\"noopener noreferrer\">docs here</a>" "href=\"/docs/markdown/\" target=\"_blank\" rel=\"noopener noreferrer\">docs "
"here</a>"
msgstr "" msgstr ""
"Puoi usare markdown per formattare questo campo. Guarda la <a href=\"/docs/" "Puoi usare markdown per formattare questo campo. Guarda la <a "
"markdown/\" target=\"_blank\" rel=\"noopener noreferrer\">documentazione " "href=\"/docs/markdown/\" target=\"_blank\" rel=\"noopener "
"qui</a>" "noreferrer\">documentazione qui</a>"
#: .\cookbook\templates\meal_plan.html:147 #: .\cookbook\templates\meal_plan.html:147
#: .\cookbook\templates\meal_plan.html:251 #: .\cookbook\templates\meal_plan.html:251
#, fuzzy
#| msgid "Servings"
msgid "Serving Count" msgid "Serving Count"
msgstr "Porzioni" msgstr "Numero di porzioni"
#: .\cookbook\templates\meal_plan.html:153 #: .\cookbook\templates\meal_plan.html:153
msgid "Create only note" msgid "Create only note"
@@ -1274,98 +1241,40 @@ msgid "Meal Plan Help"
msgstr "Aiuto per il piano alimentare" msgstr "Aiuto per il piano alimentare"
#: .\cookbook\templates\meal_plan.html:344 #: .\cookbook\templates\meal_plan.html:344
#, fuzzy
#| msgid ""
#| "\n"
#| " <p>The meal plan module allows planning of "
#| "meals both with recipes or just notes.</p>\n"
#| " <p>Simply select a recipe from the list of "
#| "recently viewed recipes or search the one you\n"
#| " want and drag it to the desired plan "
#| "position. You can also add a note and a title and\n"
#| " then drag the recipe to create a plan "
#| "entry with a custom title and note. Creating only\n"
#| " Notes is possible by dragging the create "
#| "note box into the plan.</p>\n"
#| " <p>Click on a recipe in order to open the "
#| "detail view. Here you can also add it to the\n"
#| " shopping list. You can also add all "
#| "recipes of a day to the shopping list by\n"
#| " clicking the shopping cart at the top of "
#| "the table.</p>\n"
#| " <p>Since a common use case is to plan meals "
#| "together you can define\n"
#| " users you want to share your plan with in "
#| "the settings.\n"
#| " </p>\n"
#| " <p>You can also edit the types of meals you "
#| "want to plan. If you share your plan with\n"
#| " someone with\n"
#| " different meals, their meal types will "
#| "appear in your list as well. To prevent\n"
#| " duplicates (e.g. Other and Misc.)\n"
#| " name your meal types the same as the "
#| "users you share your meals with and they will be\n"
#| " merged.</p>\n"
#| " "
msgid "" msgid ""
"\n" "\n"
" <p>The meal plan module allows planning of meals " " <p>The meal plan module allows planning of meals both with recipes and notes.</p>\n"
"both with recipes and notes.</p>\n" " <p>Simply select a recipe from the list of recently viewed recipes or search the one you\n"
" <p>Simply select a recipe from the list of " " want and drag it to the desired plan position. You can also add a note and a title and\n"
"recently viewed recipes or search the one you\n" " then drag the recipe to create a plan entry with a custom title and note. Creating only\n"
" want and drag it to the desired plan " " Notes is possible by dragging the create note box into the plan.</p>\n"
"position. You can also add a note and a title and\n" " <p>Click on a recipe in order to open the detailed view. There you can also add it to the\n"
" then drag the recipe to create a plan entry " " shopping list. You can also add all recipes of a day to the shopping list by\n"
"with a custom title and note. Creating only\n" " clicking the shopping cart at the top of the table.</p>\n"
" Notes is possible by dragging the create " " <p>Since a common use case is to plan meals together you can define\n"
"note box into the plan.</p>\n" " users you want to share your plan with in the settings.\n"
" <p>Click on a recipe in order to open the "
"detailed view. There you can also add it to the\n"
" shopping list. You can also add all recipes "
"of a day to the shopping list by\n"
" clicking the shopping cart at the top of the "
"table.</p>\n"
" <p>Since a common use case is to plan meals "
"together you can define\n"
" users you want to share your plan with in "
"the settings.\n"
" </p>\n" " </p>\n"
" <p>You can also edit the types of meals you want " " <p>You can also edit the types of meals you want to plan. If you share your plan with\n"
"to plan. If you share your plan with\n"
" someone with\n" " someone with\n"
" different meals, their meal types will " " different meals, their meal types will appear in your list as well. To prevent\n"
"appear in your list as well. To prevent\n"
" duplicates (e.g. Other and Misc.)\n" " duplicates (e.g. Other and Misc.)\n"
" name your meal types the same as the users " " name your meal types the same as the users you share your meals with and they will be\n"
"you share your meals with and they will be\n"
" merged.</p>\n" " merged.</p>\n"
" " " "
msgstr "" msgstr ""
"\n" "\n"
"<p>Il modulo del piano alimentare consente di pianificare i pasti sia con " "<p>Il modulo del piano alimentare consente di pianificare i pasti sia con ricette che con semplici note.</p>\n"
"ricette che con semplici note.</p>\n"
"<p>Seleziona una ricetta dalla lista delle ricette recenti o cercane una,\n" "<p>Seleziona una ricetta dalla lista delle ricette recenti o cercane una,\n"
"quindi spostala sulla posizione desiderata. Puoi anche aggiungere una nota e " "quindi spostala sulla posizione desiderata. Puoi anche aggiungere una nota e un titolo e\n"
"un titolo e\n" "poi trascinare la ricetta per creare una voce nel piano con un titolo e una nota personalizzata. Si possono anche creare\n"
"poi trascinare la ricetta per creare una voce nel piano con un titolo e una "
"nota personalizzata. Si possono anche creare\n"
"delle note trascinando la casella della nota nel piano.</p>\n" "delle note trascinando la casella della nota nel piano.</p>\n"
"<p>Clicca su una ricetta per aprire la pagina dei dettagli. Qui potrai anche " "<p>Clicca su una ricetta per aprire la vista dettagliata. Qui potrai anche aggiungerla alla lista della spesa. Puoi anche aggiungere tutte le ricette di un giorno alla lista della spesa, basterà cliccare sul carrello sopra la tabella.</p>\n"
"aggiungerla alla lista della spesa. Puoi anche aggiungere tutte le ricette " "<p>Dato che è comune pianificare i pasti con altre persone, nelle impostazioni puoi scegliere gli utenti con i quali condividere il tuo piano.</p>\n"
"di un giorno alla lista della spesa, basterà cliccare sul carrello sopra la " "<p>Puoi anche modificare i tipi di pasto che vuoi pianificare. Se condividi il piano con\n"
"tabella.</p>\n"
"<p>Dato che è comune pianificare i pasti con qualcun altro, nelle "
"impostazioni puoi scegliere gli utenti con i quali condividere il tuo piano."
"</p>\n"
"<p>Puoi anche modificare i tipi di pasto che vuoi pianificare. Se condividi "
"il piano con\n"
"qualcuno\n" "qualcuno\n"
"con pasti differenti, i loro tipi di pasto appariranno anche nella tua " "con pasti differenti, i loro tipi di pasto appariranno anche nella tua lista. Per evitare\n"
"lista. Per prevenire\n"
"duplicati (es. Altri e Varie)\n" "duplicati (es. Altri e Varie)\n"
"dai nomi ai tuoi tipi di pasto uguali ai tuoi utenti in modo che verranno " "dai nomi ai tuoi tipi di pasto uguali ai tuoi utenti in modo che verranno uniti.</p>"
"uniti.</p>"
#: .\cookbook\templates\meal_plan_entry.html:6 #: .\cookbook\templates\meal_plan_entry.html:6
msgid "Meal Plan View" msgid "Meal Plan View"
@@ -1382,27 +1291,32 @@ msgstr "Altri pasti di questo giorno"
#: .\cookbook\templates\no_groups_info.html:5 #: .\cookbook\templates\no_groups_info.html:5
#: .\cookbook\templates\offline.html:6 #: .\cookbook\templates\offline.html:6
msgid "Offline" msgid "Offline"
msgstr "" msgstr "Non in linea"
#: .\cookbook\templates\no_groups_info.html:12 #: .\cookbook\templates\no_groups_info.html:12
msgid "No Permissions" msgid "No Permissions"
msgstr "" msgstr "Nessun permesso"
#: .\cookbook\templates\no_groups_info.html:15 #: .\cookbook\templates\no_groups_info.html:15
msgid "" msgid ""
"You do not have any groups and therefor cannot use this application. Please " "You do not have any groups and therefor cannot use this application. Please "
"contact your administrator." "contact your administrator."
msgstr "" msgstr ""
"Non fai parte di un gruppo e questo non ti consente di usare l'applicazione."
" Contatta il tuo amministratore."
#: .\cookbook\templates\offline.html:19 #: .\cookbook\templates\offline.html:19
msgid "You are currently offline!" msgid "You are currently offline!"
msgstr "" msgstr "Al momento sei offline!"
#: .\cookbook\templates\offline.html:20 #: .\cookbook\templates\offline.html:20
msgid "" msgid ""
"The recipes listed below are available for offline viewing because you have " "The recipes listed below are available for offline viewing because you have "
"recently viewed them. Keep in mind that data might be outdated." "recently viewed them. Keep in mind that data might be outdated."
msgstr "" msgstr ""
"Le ricette qui sotto sono disponibili per essere consultate quando sei "
"offline perché le hai aperte di recente. Ricorda che queste informazioni "
"potrebbero non essere aggiornate."
#: .\cookbook\templates\recipe_view.html:21 .\cookbook\templates\stats.html:47 #: .\cookbook\templates\recipe_view.html:21 .\cookbook\templates\stats.html:47
msgid "Comments" msgid "Comments"
@@ -1447,7 +1361,7 @@ msgstr "Account"
#: .\cookbook\templates\settings.html:38 #: .\cookbook\templates\settings.html:38
msgid "Link social account" msgid "Link social account"
msgstr "" msgstr "Collega account social"
#: .\cookbook\templates\settings.html:42 #: .\cookbook\templates\settings.html:42
msgid "Language" msgid "Language"
@@ -1509,13 +1423,11 @@ msgstr "Nessuna ricetta selezionata"
#: .\cookbook\templates\shopping_list.html:145 #: .\cookbook\templates\shopping_list.html:145
msgid "Entry Mode" msgid "Entry Mode"
msgstr "" msgstr "Modalità di inserimento"
#: .\cookbook\templates\shopping_list.html:153 #: .\cookbook\templates\shopping_list.html:153
#, fuzzy
#| msgid "New Entry"
msgid "Add Entry" msgid "Add Entry"
msgstr "Nuovo Campo" msgstr "Aggiungi voce"
#: .\cookbook\templates\shopping_list.html:168 #: .\cookbook\templates\shopping_list.html:168
msgid "Amount" msgid "Amount"
@@ -1523,13 +1435,11 @@ msgstr "Quantità"
#: .\cookbook\templates\shopping_list.html:224 #: .\cookbook\templates\shopping_list.html:224
msgid "Supermarket" msgid "Supermarket"
msgstr "" msgstr "Supermercato"
#: .\cookbook\templates\shopping_list.html:234 #: .\cookbook\templates\shopping_list.html:234
#, fuzzy
#| msgid "Select User"
msgid "Select Supermarket" msgid "Select Supermarket"
msgstr "Seleziona utente" msgstr "Seleziona supermercato"
#: .\cookbook\templates\shopping_list.html:258 #: .\cookbook\templates\shopping_list.html:258
msgid "Select User" msgid "Select User"
@@ -1558,26 +1468,27 @@ msgstr "Si è verificato un errore durante la creazione di una risorsa!"
#: .\cookbook\templates\socialaccount\connections.html:4 #: .\cookbook\templates\socialaccount\connections.html:4
#: .\cookbook\templates\socialaccount\connections.html:7 #: .\cookbook\templates\socialaccount\connections.html:7
msgid "Account Connections" msgid "Account Connections"
msgstr "" msgstr "Collegamenti dell'account"
#: .\cookbook\templates\socialaccount\connections.html:10 #: .\cookbook\templates\socialaccount\connections.html:10
msgid "" 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 ""
"Puoi accedere al tuo account usando uno dei seguenti account di terze parti:"
#: .\cookbook\templates\socialaccount\connections.html:36 #: .\cookbook\templates\socialaccount\connections.html:36
msgid "Remove" msgid "Remove"
msgstr "" msgstr "Rimuovi"
#: .\cookbook\templates\socialaccount\connections.html:44 #: .\cookbook\templates\socialaccount\connections.html:44
msgid "" msgid ""
"You currently have no social network accounts connected to this account." "You currently have no social network accounts connected to this account."
msgstr "" msgstr "Non hai account di social network collegati a questo account."
#: .\cookbook\templates\socialaccount\connections.html:47 #: .\cookbook\templates\socialaccount\connections.html:47
msgid "Add a 3rd Party Account" msgid "Add a 3rd Party Account"
msgstr "" msgstr "Aggiungi un account di terze parti"
#: .\cookbook\templates\stats.html:4 #: .\cookbook\templates\stats.html:4
msgid "Stats" msgid "Stats"
@@ -1630,18 +1541,14 @@ msgstr "Informazioni di sistema"
#: .\cookbook\templates\system.html:51 #: .\cookbook\templates\system.html:51
msgid "" msgid ""
"\n" "\n"
" Django Recipes is an open source free software application. It can " " Django Recipes is an open source free software application. It can be found on\n"
"be found on\n"
" <a href=\"https://github.com/vabene1111/recipes\">GitHub</a>.\n" " <a href=\"https://github.com/vabene1111/recipes\">GitHub</a>.\n"
" Changelogs can be found <a href=\"https://github.com/vabene1111/" " Changelogs can be found <a href=\"https://github.com/vabene1111/recipes/releases\">here</a>.\n"
"recipes/releases\">here</a>.\n"
" " " "
msgstr "" msgstr ""
"\n" "\n"
"Django Recipes è una applicazione gratuita e open source. È disponibile su " "Django Recipes è una applicazione gratuita e open source. È disponibile su <a href=\"https://github.com/vabene1111/recipes\">GitHub</a>.\n"
"<a href=\"https://github.com/vabene1111/recipes\">GitHub</a>.\n" "Le ultime novità sono disponibili <a href=\"https://github.com/vabene1111/recipes/releases\">qui</a>."
"Le ultime novità sono disponibili <a href=\"https://github.com/vabene1111/"
"recipes/releases\">qui</a>."
#: .\cookbook\templates\system.html:65 #: .\cookbook\templates\system.html:65
msgid "Media Serving" msgid "Media Serving"
@@ -1661,16 +1568,13 @@ msgstr "Ok"
msgid "" msgid ""
"Serving media files directly using gunicorn/python is <b>not recommend</b>!\n" "Serving media files directly using gunicorn/python is <b>not recommend</b>!\n"
" Please follow the steps described\n" " Please follow the steps described\n"
" <a href=\"https://github.com/vabene1111/recipes/releases/" " <a href=\"https://github.com/vabene1111/recipes/releases/tag/0.8.1\">here</a> to update\n"
"tag/0.8.1\">here</a> to update\n"
" your installation.\n" " your installation.\n"
" " " "
msgstr "" msgstr ""
"Erogare i file multimediali usando gunicorn/python <b>non è raccomandato</" "Erogare i file multimediali usando gunicorn/python <b>non è raccomandato</b>!\n"
"b>!\n"
"Segui i passi descritti\n" "Segui i passi descritti\n"
"<a href=\"https://github.com/vabene1111/recipes/releases/tag/0.8.1\">qui</a> " "<a href=\"https://github.com/vabene1111/recipes/releases/tag/0.8.1\">qui</a> per aggiornare la tua installazione."
"per aggiornare la tua installazione."
#: .\cookbook\templates\system.html:74 .\cookbook\templates\system.html:90 #: .\cookbook\templates\system.html:74 .\cookbook\templates\system.html:90
#: .\cookbook\templates\system.html:105 .\cookbook\templates\system.html:119 #: .\cookbook\templates\system.html:105 .\cookbook\templates\system.html:119
@@ -1684,18 +1588,14 @@ msgstr "Chiave segreta"
#: .\cookbook\templates\system.html:83 #: .\cookbook\templates\system.html:83
msgid "" msgid ""
"\n" "\n"
" You do not have a <code>SECRET_KEY</code> configured in your " " You do not have a <code>SECRET_KEY</code> configured in your <code>.env</code> file. Django defaulted to the\n"
"<code>.env</code> file. Django defaulted to the\n"
" standard key\n" " standard key\n"
" provided with the installation which is publicly know and " " provided with the installation which is publicly know and insecure! Please set\n"
"insecure! Please set\n" " <code>SECRET_KEY</code> int the <code>.env</code> configuration file.\n"
" <code>SECRET_KEY</code> int the <code>.env</code> configuration "
"file.\n"
" " " "
msgstr "" msgstr ""
"\n" "\n"
"Non hai inserito una <code>SECRET_KEY</code> nel file <code>.env</code>. " "Non hai inserito una <code>SECRET_KEY</code> nel file <code>.env</code>. Django ha dovuto usare la chiave standard\n"
"Django ha dovuto usare la chiave standard\n"
"dell'installazione che è pubblica e insicura! Sei pregato di aggiungere una\n" "dell'installazione che è pubblica e insicura! Sei pregato di aggiungere una\n"
"<code>SECRET_KEY</code> nel file di configurazione <code>.env</code>." "<code>SECRET_KEY</code> nel file di configurazione <code>.env</code>."
@@ -1706,16 +1606,13 @@ msgstr "Modalità di debug"
#: .\cookbook\templates\system.html:99 #: .\cookbook\templates\system.html:99
msgid "" msgid ""
"\n" "\n"
" This application is still running in debug mode. This is most " " This application is still running in debug mode. This is most likely not needed. Turn of debug mode by\n"
"likely not needed. Turn of debug mode by\n"
" setting\n" " setting\n"
" <code>DEBUG=0</code> int the <code>.env</code> configuration " " <code>DEBUG=0</code> int the <code>.env</code> configuration file.\n"
"file.\n"
" " " "
msgstr "" msgstr ""
"\n" "\n"
"Questa applicazione è in esecuzione in modalità di debug. Probabilmente non " "Questa applicazione è in esecuzione in modalità di debug. Probabilmente non è necessario, spegni la modalità di debug \n"
"è necessario, spegni la modalità di debug \n"
"configurando\n" "configurando\n"
"<code>DEBUG=0</code> nel file di configurazione<code>.env</code>." "<code>DEBUG=0</code> nel file di configurazione<code>.env</code>."
@@ -1730,14 +1627,12 @@ msgstr "Info"
#: .\cookbook\templates\system.html:114 #: .\cookbook\templates\system.html:114
msgid "" msgid ""
"\n" "\n"
" This application is not running with a Postgres database " " This application is not running with a Postgres database backend. This is ok but not recommended as some\n"
"backend. This is ok but not recommended as some\n"
" features only work with postgres databases.\n" " features only work with postgres databases.\n"
" " " "
msgstr "" msgstr ""
"\n" "\n"
"Questa applicazione non sta girando su un database Postgres. Non è " "Questa applicazione non sta girando su un database Postgres. Non è raccomandato perché alcune\n"
"raccomandato perché alcune\n"
"funzionalità sono disponibili solo con un database Posgres." "funzionalità sono disponibili solo con un database Posgres."
#: .\cookbook\templates\url_import.html:5 #: .\cookbook\templates\url_import.html:5
@@ -1773,18 +1668,14 @@ msgstr "Info"
#: .\cookbook\templates\url_import.html:235 #: .\cookbook\templates\url_import.html:235
msgid "" msgid ""
" Only websites containing ld+json or microdata information can currently\n" " Only websites containing ld+json or microdata information can currently\n"
" be imported. Most big recipe pages " " be imported. Most big recipe pages support this. If you site cannot be imported but\n"
"support this. If you site cannot be imported but\n"
" you think\n" " you think\n"
" it probably has some kind of structured " " it probably has some kind of structured data feel free to post an example in the\n"
"data feel free to post an example in the\n"
" github issues." " github issues."
msgstr "" msgstr ""
"Possono essere importati solo i siti che contengono informazioni Id+json o " "Possono essere importati solo i siti che contengono informazioni Id+json o microdata.\n"
"microdata.\n"
"I maggiori siti di ricette di solito sono supportati.\n" "I maggiori siti di ricette di solito sono supportati.\n"
"Se questo sito non può essere importato ma credi che abbia una qualche tipo " "Se questo sito non può essere importato ma credi che abbia una qualche tipo di struttura dati, puoi inviare un esempio nella sezione Issues su GitHub."
"di struttura dati, puoi inviare un esempio nella sezione Issues su GitHub."
#: .\cookbook\templates\url_import.html:243 #: .\cookbook\templates\url_import.html:243
msgid "Google ld+json Info" msgid "Google ld+json Info"
@@ -1808,7 +1699,7 @@ msgstr "La preferenza per l'utente fornito esiste già"
#: .\cookbook\views\api.py:416 .\cookbook\views\views.py:265 #: .\cookbook\views\api.py:416 .\cookbook\views\views.py:265
msgid "This feature is not available in the demo version!" msgid "This feature is not available in the demo version!"
msgstr "" msgstr "Questa funzione non è disponibile nella versione demo!"
#: .\cookbook\views\api.py:439 #: .\cookbook\views\api.py:439
msgid "Sync successful!" msgid "Sync successful!"
@@ -1832,7 +1723,8 @@ msgstr ""
#, python-format #, python-format
msgid "Batch edit done. %(count)d recipe was updated." msgid "Batch edit done. %(count)d recipe was updated."
msgid_plural "Batch edit done. %(count)d Recipes where updated." msgid_plural "Batch edit done. %(count)d Recipes where updated."
msgstr[0] "Modifica di massa completata. %(count)d ricetta è stata aggiornata." msgstr[0] ""
"Modifica di massa completata. %(count)d ricetta è stata aggiornata."
msgstr[1] "" msgstr[1] ""
"Modifica di massa completata. %(count)d ricette sono state aggiornate." "Modifica di massa completata. %(count)d ricette sono state aggiornate."
@@ -1901,7 +1793,7 @@ msgstr "Le unità sono state unite!"
#: .\cookbook\views\edit.py:295 .\cookbook\views\edit.py:317 #: .\cookbook\views\edit.py:295 .\cookbook\views\edit.py:317
msgid "Cannot merge with the same object!" msgid "Cannot merge with the same object!"
msgstr "" msgstr "Non è possibile unirlo con lo stesso oggetto!"
#: .\cookbook\views\edit.py:311 #: .\cookbook\views\edit.py:311
msgid "Foods merged!" msgid "Foods merged!"
@@ -1909,11 +1801,11 @@ msgstr "Gli alimenti sono stati uniti!"
#: .\cookbook\views\import_export.py:42 #: .\cookbook\views\import_export.py:42
msgid "Importing is not implemented for this provider" msgid "Importing is not implemented for this provider"
msgstr "" msgstr "Questo provider non permette l'importazione"
#: .\cookbook\views\import_export.py:58 #: .\cookbook\views\import_export.py:58
msgid "Exporting is not implemented for this provider" msgid "Exporting is not implemented for this provider"
msgstr "" msgstr "Questo provider non permette l'esportazione"
#: .\cookbook\views\lists.py:42 #: .\cookbook\views\lists.py:42
msgid "Import Log" msgid "Import Log"
@@ -1945,7 +1837,7 @@ msgstr "Commento salvato!"
#: .\cookbook\views\views.py:152 #: .\cookbook\views\views.py:152
msgid "This recipe is already linked to the book!" msgid "This recipe is already linked to the book!"
msgstr "" msgstr "Questa ricetta è già collegata al libro!"
#: .\cookbook\views\views.py:158 #: .\cookbook\views\views.py:158
msgid "Bookmark saved!" msgid "Bookmark saved!"
@@ -1976,158 +1868,3 @@ msgstr "È stato fornito un link di invito non valido!"
#: .\cookbook\views\views.py:470 #: .\cookbook\views\views.py:470
msgid "Invite Link not valid or already used!" msgid "Invite Link not valid or already used!"
msgstr "Il link di invito non è valido o è stato già usato!" msgstr "Il link di invito non è valido o è stato già usato!"
#~ msgid "Export Base64 encoded image?"
#~ msgstr "Esportare immagini codificate in Base64?"
#~ msgid "Download export directly or show on page?"
#~ msgstr "Scaricare l'esportazione direttamente o mostrare sulla pagina?"
#~ msgid "Simply paste a JSON export into this textarea and click import."
#~ msgstr ""
#~ "Semplicemente incolla un'esportazione JSON in questa area di testo e "
#~ "clicca su importa."
#~ msgid "Scaling factor for recipe."
#~ msgstr "Fattore di ridimensionamento per le ricette."
#~ msgid "Exported Recipe"
#~ msgstr "Ricette Esportate"
#~ msgid "Copy to clipboard"
#~ msgstr "Copia negli appunti"
#~ msgid "Copied!"
#~ msgstr "Copiato!"
#~ msgid "Copy list to clipboard"
#~ msgstr "Copia la lista negli appunti"
#~ msgid "Error"
#~ msgstr "Errore"
#~ msgid "There was an error loading the recipe!"
#~ msgstr "Si è verificato un errore durante il caricamento della ricetta!"
#~ msgid "Updated"
#~ msgstr "Caricato"
#~ msgid "Changes saved successfully!"
#~ msgstr "Cambiamenti salvati con successo!"
#~ msgid "There was an error updating the recipe!"
#~ msgstr "Si è verificato un errore durante l'aggiornamento della ricetta!"
#~ msgid "Are you sure that you want to delete this ingredient?"
#~ msgstr "Sei sicuro di voler eliminare questo ingrediente?"
#~ msgid "Are you sure that you want to delete this step?"
#~ msgstr "Sei sicuro di voler eliminare questo step?"
#~ msgid "There was an error loading a resource!"
#~ msgstr "Si è verificato un errore durante il caricamento di una risorsa!"
#~ msgid "Recipe Multiplier"
#~ msgstr "Moltiplicatore di Ricetta"
#~ msgid ""
#~ "When deleting a meal type all entries using that type will be deleted as "
#~ "well. Deletion will apply when configuration is saved. Do you want to "
#~ "proceed?"
#~ msgstr ""
#~ "Quando elimi un tipo di pasto tutte le voci che usano quel tipo verranno "
#~ "eliminate. L'eliminazione avviene quando la configurazione viene salvata. "
#~ "Vuoi procedere?"
#~ msgid "Add to Book"
#~ msgstr "Aggiungi a libro"
#~ msgid "Add to Plan"
#~ msgstr "Aggiungi a piano"
#~ msgid "Print"
#~ msgstr "Stampa"
#~ msgid "Share"
#~ msgstr "Condividi"
#~ msgid "in"
#~ msgstr "in"
#~ msgid "Preparation time ~"
#~ msgstr "Tempo di preparazione ~"
#~ msgid "Minutes"
#~ msgstr "Minuti"
#~ msgid "View external recipe"
#~ msgstr "Mostra ricetta esterna"
#~ msgid "External recipe image"
#~ msgstr "Immagine ricetta esterna"
#~ msgid "External recipe"
#~ msgstr "Ricetta Esterna"
#~ msgid ""
#~ "\n"
#~ " This is an external recipe, which "
#~ "means you can only view it by opening the link\n"
#~ " above.\n"
#~ " You can convert this recipe to a "
#~ "fancy recipe by pressing the convert button. The\n"
#~ " original\n"
#~ " file\n"
#~ " will still be accessible.\n"
#~ " "
#~ msgstr ""
#~ "\n"
#~ "Questa è una ricetta esterna, che significa puoi solo aprirla con il "
#~ "link \n"
#~ "qui sopra.\n"
#~ "Puoi convertire questa ricetta ad una più bella cliccando il tasto "
#~ "Converti.\n"
#~ "Il\n"
#~ "file \n"
#~ "originale\n"
#~ "sarà sempre accessibile."
#~ msgid "Convert now!"
#~ msgstr "Converti ora!"
#~ msgid "Your username and password didn't match. Please try again."
#~ msgstr ""
#~ "La combinazione inserita di username e password non è valida. Riprova."
#~ msgid "There was an error updating a resource!"
#~ msgstr "Si è verificato un errore durante l'aggiornamento di una risorsa!"
#~ msgid "Object created successfully!"
#~ msgstr "Oggetto creato con successo!"
#~ msgid "Please enter a valid food"
#~ msgstr "Inserisci un alimento valido"
#~ msgid "Already importing the selected recipe, please wait!"
#~ msgstr "L'importazione della ricetta selezionata è già in corso, attendere!"
#~ msgid "An error occurred while trying to import this recipe!"
#~ msgstr ""
#~ "Si è verificato un errore durante il tentativo d'importazione di questa "
#~ "ricetta!"
#~ msgid "Recipe imported successfully!"
#~ msgstr "Ricetta importata con successo!"
#~ msgid "Something went wrong during the import!"
#~ msgstr "Qualcosa è andato storto durante l'importazione!"
#~ msgid "Could not parse the supplied JSON!"
#~ msgstr "Impossibile analizzare il codice JSON!"
#~ msgid ""
#~ "External recipes cannot be exported, please share the file directly or "
#~ "select an internal recipe."
#~ msgstr ""
#~ "Le ricette esterne non possono esportate, condividi direttamente il file "
#~ "oppure seleziona una ricetta interna."

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -542,6 +542,7 @@
this.loadShoppingList() this.loadShoppingList()
{% if recipes %} {% if recipes %}
this.loading = true this.loading = true
this.edit_mode = true this.edit_mode = true
let loadingRecipes = [] let loadingRecipes = []
@@ -605,6 +606,7 @@
}) })
}, },
loadInitialRecipe: function (recipe, servings) { loadInitialRecipe: function (recipe, servings) {
servings = 1 //TODO temporary until i can actually fix the servings for this #453
return this.$http.get('{% url 'api:recipe-detail' 123456 %}'.replace('123456', recipe)).then((response) => { return this.$http.get('{% url 'api:recipe-detail' 123456 %}'.replace('123456', recipe)).then((response) => {
this.addRecipeToList(response.data, servings) this.addRecipeToList(response.data, servings)
}).catch((err) => { }).catch((err) => {

View File

@@ -11,15 +11,15 @@ class TestEditsRecipe(TestBase):
def test_ld_json(self): def test_ld_json(self):
test_list = [ test_list = [
{'file': 'cookbook/tests/resources/websites/ld_json_1.html', 'result_length': 3237}, {'file': 'cookbook/tests/resources/websites/ld_json_1.html', 'result_length': 3237},
{'file': 'cookbook/tests/resources/websites/ld_json_2.html', 'result_length': 1509}, {'file': 'cookbook/tests/resources/websites/ld_json_2.html', 'result_length': 1525},
{'file': 'cookbook/tests/resources/websites/ld_json_3.html', 'result_length': 1629}, {'file': 'cookbook/tests/resources/websites/ld_json_3.html', 'result_length': 1644},
{'file': 'cookbook/tests/resources/websites/ld_json_4.html', 'result_length': 1744}, {'file': 'cookbook/tests/resources/websites/ld_json_4.html', 'result_length': 1744},
{'file': 'cookbook/tests/resources/websites/ld_json_itemList.html', 'result_length': 3206}, {'file': 'cookbook/tests/resources/websites/ld_json_itemList.html', 'result_length': 3222},
{'file': 'cookbook/tests/resources/websites/ld_json_multiple.html', 'result_length': 1621}, {'file': 'cookbook/tests/resources/websites/ld_json_multiple.html', 'result_length': 1621},
{'file': 'cookbook/tests/resources/websites/micro_data_1.html', 'result_length': 1079}, {'file': 'cookbook/tests/resources/websites/micro_data_1.html', 'result_length': 1094},
{'file': 'cookbook/tests/resources/websites/micro_data_2.html', 'result_length': 1438}, {'file': 'cookbook/tests/resources/websites/micro_data_2.html', 'result_length': 1453},
{'file': 'cookbook/tests/resources/websites/micro_data_3.html', 'result_length': 1148}, {'file': 'cookbook/tests/resources/websites/micro_data_3.html', 'result_length': 1163},
{'file': 'cookbook/tests/resources/websites/micro_data_4.html', 'result_length': 4396}, {'file': 'cookbook/tests/resources/websites/micro_data_4.html', 'result_length': 4411},
] ]
for test in test_list: for test in test_list:

View File

@@ -71,6 +71,8 @@ class StandardFilterMixin(ViewSetMixin):
queryset = queryset.filter(updated_at__gte=updated_at) queryset = queryset.filter(updated_at__gte=updated_at)
except FieldError: except FieldError:
pass pass
except ValidationError:
raise APIException(_('Parameter updated_at incorrectly formatted'))
limit = self.request.query_params.get('limit', None) limit = self.request.query_params.get('limit', None)
random = self.request.query_params.get('random', False) random = self.request.query_params.get('random', False)

View File

@@ -252,7 +252,7 @@ def shopping_list(request, pk=None):
if re.match(r'^([0-9])+,([0-9])+[.]*([0-9])*$', r): if re.match(r'^([0-9])+,([0-9])+[.]*([0-9])*$', r):
rid, multiplier = r.split(',') rid, multiplier = r.split(',')
if recipe := Recipe.objects.filter(pk=int(rid)).first(): if recipe := Recipe.objects.filter(pk=int(rid)).first():
recipes.append({'recipe': recipe.id, 'multiplier': multiplier}) recipes.append({'recipe': recipe.id, 'servings': multiplier})
edit = True if 'edit' in request.GET and request.GET['edit'] == 'true' else False edit = True if 'edit' in request.GET and request.GET['edit'] == 'true' else False

View File

@@ -63,6 +63,11 @@ Images are saved in a directory called `images`.
In order to import your Chowdown recipes simply create a `.zip` file from those two folders and import them. In order to import your Chowdown recipes simply create a `.zip` file from those two folders and import them.
The folder structure should look as follows The folder structure should look as follows
!!! info "_recipes"
For some reason chowdown uses `_` before the `recipes` folder. To avoid confusion the import supports both
`_recipes` and `recipes`
``` ```
Recipes.zip/ Recipes.zip/
├── _recipes/ ├── _recipes/

View File

@@ -35,6 +35,7 @@ docker-compose:
environment: environment:
# all the other env # all the other env
- SCRIPT_NAME=/<sub path> - SCRIPT_NAME=/<sub path>
- JS_REVERSE_SCRIPT_PREFIX=/<sub path>/
- STATIC_URL=/<www path>/static/ - STATIC_URL=/<www path>/static/
- MEDIA_URL=/<www path>/media/ - MEDIA_URL=/<www path>/media/
labels: labels:

View File

@@ -175,6 +175,7 @@ WSGI_APPLICATION = 'recipes.wsgi.application'
DATABASES = { DATABASES = {
'default': { 'default': {
'ENGINE': os.getenv('DB_ENGINE') if os.getenv('DB_ENGINE') else 'django.db.backends.sqlite3', 'ENGINE': os.getenv('DB_ENGINE') if os.getenv('DB_ENGINE') else 'django.db.backends.sqlite3',
'OPTIONS': ast.literal_eval(os.getenv('DB_OPTIONS')) if os.getenv('DB_OPTIONS') else {},
'HOST': os.getenv('POSTGRES_HOST'), 'HOST': os.getenv('POSTGRES_HOST'),
'PORT': os.getenv('POSTGRES_PORT'), 'PORT': os.getenv('POSTGRES_PORT'),
'USER': os.getenv('POSTGRES_USER'), 'USER': os.getenv('POSTGRES_USER'),
@@ -211,6 +212,7 @@ USE_L10N = True
USE_TZ = True USE_TZ = True
LANGUAGES = [ LANGUAGES = [
('hy', _('Armenian ')),
('ca', _('Catalan')), ('ca', _('Catalan')),
('cs', _('Czech')), ('cs', _('Czech')),
('nl', _('Dutch')), ('nl', _('Dutch')),
@@ -228,6 +230,8 @@ LANGUAGES = [
# path for django_js_reverse to generate the javascript file containing all urls. Only done because the default command (collectstatic_js_reverse) fails to update the manifest # path for django_js_reverse to generate the javascript file containing all urls. Only done because the default command (collectstatic_js_reverse) fails to update the manifest
JS_REVERSE_OUTPUT_PATH = os.path.join(BASE_DIR, "cookbook/static/django_js_reverse") JS_REVERSE_OUTPUT_PATH = os.path.join(BASE_DIR, "cookbook/static/django_js_reverse")
JS_REVERSE_SCRIPT_PREFIX = os.getenv('JS_REVERSE_SCRIPT_PREFIX', os.getenv('SCRIPT_NAME', ''))
STATIC_URL = os.getenv('STATIC_URL', '/static/') STATIC_URL = os.getenv('STATIC_URL', '/static/')
STATIC_ROOT = os.path.join(BASE_DIR, "staticfiles") STATIC_ROOT = os.path.join(BASE_DIR, "staticfiles")

View File

@@ -1,10 +1,10 @@
bleach==3.3.0 bleach==3.3.0
bleach-whitelist==0.0.11 bleach-whitelist==0.0.11
Django==3.1.6 Django==3.1.7
django-annoying==0.10.6 django-annoying==0.10.6
django-autocomplete-light==3.8.1 django-autocomplete-light==3.8.2
django-cleanup==5.1.0 django-cleanup==5.1.0
django-crispy-forms==1.11.0 django-crispy-forms==1.11.1
django-emoji-picker==0.0.6 django-emoji-picker==0.0.6
django-filter==2.4.0 django-filter==2.4.0
django-tables2==2.3.4 django-tables2==2.3.4
@@ -12,7 +12,7 @@ djangorestframework==3.12.2
drf-writable-nested==0.6.2 drf-writable-nested==0.6.2
gunicorn==20.0.4 gunicorn==20.0.4
lxml==4.6.2 lxml==4.6.2
Markdown==3.3.3 Markdown==3.3.4
Pillow==8.1.0 Pillow==8.1.0
psycopg2-binary==2.8.6 psycopg2-binary==2.8.6
python-dotenv==0.15.0 python-dotenv==0.15.0

View File

@@ -24,7 +24,7 @@
<hr/> <hr/>
<div class="row"> <div class="row">
<div class="col col-md-3"> <div class="col col-md-3">
<div class="row d-flex" style="padding-left: 16px;height: 100%"> <div class="row d-flex" style="padding-left: 16px">
<div class="my-auto" style="padding-right: 4px"> <div class="my-auto" style="padding-right: 4px">
<i class="fas fa-user-clock fa-2x text-primary"></i> <i class="fas fa-user-clock fa-2x text-primary"></i>
</div> </div>
@@ -36,7 +36,7 @@
</div> </div>
<div class="col col-md-3"> <div class="col col-md-3">
<div class="row d-flex" style="height: 100%"> <div class="row d-flex">
<div class="my-auto" style="padding-right: 4px"> <div class="my-auto" style="padding-right: 4px">
<i class="far fa-clock fa-2x text-primary"></i> <i class="far fa-clock fa-2x text-primary"></i>
</div> </div>
@@ -48,7 +48,7 @@
</div> </div>
<div class="col col-md-4 col-10"> <div class="col col-md-4 col-10">
<div class="row d-flex" style="padding-left: 16px;height: 100%"> <div class="row d-flex" style="padding-left: 16px">
<div class="my-auto" style="padding-right: 4px"> <div class="my-auto" style="padding-right: 4px">
<i class="fas fa-pizza-slice fa-2x text-primary"></i> <i class="fas fa-pizza-slice fa-2x text-primary"></i>
</div> </div>

View File

@@ -12,7 +12,7 @@
<i class="far fa-check-circle text-primary" v-if="!ingredient.checked"></i> <i class="far fa-check-circle text-primary" v-if="!ingredient.checked"></i>
</td> </td>
<td> <td>
<span v-if="ingredient.amount !== 0">{{ calculateAmount(ingredient.amount) }}</span> <span v-if="ingredient.amount !== 0" v-html="calculateAmount(ingredient.amount)"></span>
</td> </td>
<td> <td>
<span v-if="ingredient.unit !== null && !ingredient.no_amount">{{ ingredient.unit.name }}</span> <span v-if="ingredient.unit !== null && !ingredient.no_amount">{{ ingredient.unit.name }}</span>

View File

@@ -15,7 +15,7 @@
<i class="fas fa-fire fa-fw text-primary"></i> {{ _('Calories') }} <i class="fas fa-fire fa-fw text-primary"></i> {{ _('Calories') }}
</div> </div>
<div class="col-6"> <div class="col-6">
{{ calculateAmount(recipe.nutrition.calories) }} kcal <span v-html="calculateAmount(recipe.nutrition.calories)"></span> kcal
</div> </div>
</div> </div>
@@ -24,8 +24,7 @@
<i class="fas fa-bread-slice fa-fw text-primary"></i> {{ _('Carbohydrates') }} <i class="fas fa-bread-slice fa-fw text-primary"></i> {{ _('Carbohydrates') }}
</div> </div>
<div class="col-6"> <div class="col-6">
<span v-html="calculateAmount(recipe.nutrition.carbohydrates)"></span> g
{{ calculateAmount(recipe.nutrition.carbohydrates) }} g
</div> </div>
</div> </div>
@@ -34,7 +33,7 @@
<i class="fas fa-cheese fa-fw text-primary"></i> {{ _('Fats') }} <i class="fas fa-cheese fa-fw text-primary"></i> {{ _('Fats') }}
</div> </div>
<div class="col-6"> <div class="col-6">
{{ calculateAmount(recipe.nutrition.fats) }} g <span v-html="calculateAmount(recipe.nutrition.fats)"></span> g
</div> </div>
</div> </div>
@@ -43,7 +42,7 @@
<i class="fas fa-drumstick-bite fa-fw text-primary"></i> {{ _('Proteins') }} <i class="fas fa-drumstick-bite fa-fw text-primary"></i> {{ _('Proteins') }}
</div> </div>
<div class="col-6"> <div class="col-6">
{{ calculateAmount(recipe.nutrition.proteins) }} g <span v-html="calculateAmount(recipe.nutrition.proteins)"></span> g
</div> </div>
</div> </div>
</div> </div>

View File

@@ -1,5 +1,5 @@
<template> <template>
<span>{{ calculateAmount(number) }}</span> <span v-html="calculateAmount(number)"></span>
</template> </template>

View File

@@ -78,9 +78,9 @@ export function getUserPreference(pref) {
import {frac} from "@/utils/fractions"; import {frac} from "@/utils/fractions";
export function calculateAmount(amount, factor) { export function calculateAmount(amount, factor) {
if (getUserPreference('user_fractions')) { if (getUserPreference('use_fractions')) {
let return_string = '' let return_string = ''
let fraction = frac.cont((amount * factor), 9, true) let fraction = frac((amount * factor), 9, true)
if (fraction[0] > 0) { if (fraction[0] > 0) {
return_string += fraction[0] return_string += fraction[0]