diff --git a/.env.template b/.env.template
index eb798a1dd..9b09e8a38 100644
--- a/.env.template
+++ b/.env.template
@@ -86,8 +86,10 @@ GUNICORN_MEDIA=0
# EMAIL_HOST_PASSWORD=
# EMAIL_USE_TLS=0
# EMAIL_USE_SSL=0
-# DEFAULT_FROM_EMAIL= # email sender address (default 'webmaster@localhost')
-# ACCOUNT_EMAIL_SUBJECT_PREFIX= # prefix used for account related emails (default "[Tandoor Recipes] ")
+# email sender address (default 'webmaster@localhost')
+# DEFAULT_FROM_EMAIL=
+# prefix used for account related emails (default "[Tandoor Recipes] ")
+# ACCOUNT_EMAIL_SUBJECT_PREFIX=
# allow authentication via reverse proxy (e.g. authelia), leave off if you dont know what you are doing
# see docs for more information https://vabene1111.github.io/recipes/features/authentication/
diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml
index 260a5e3bf..7e7723c90 100644
--- a/.github/workflows/docs.yml
+++ b/.github/workflows/docs.yml
@@ -3,7 +3,6 @@ on:
push:
branches:
- master
- - develop
jobs:
deploy:
diff --git a/CONTRIBUTERS.md b/CONTRIBUTERS.md
index 1a5c56ffd..0c0c46351 100644
--- a/CONTRIBUTERS.md
+++ b/CONTRIBUTERS.md
@@ -1,7 +1,10 @@
+# Contributers
+
Many thanks to everyone who contributed to this project! If you add something or help out feel free to add yourself
to this list.
## Code/Features
+
Please have a look at the [list of pull requests](https://github.com/vabene1111/recipes/pulls) for
a complete list of contributions.
Below are some of the larger contributions made yet.
@@ -20,46 +23,61 @@ Below are some of the larger contributions made yet.
## Translations
-### Catalan
+### Catalan
+
[Rubenix](https://www.transifex.com/user/profile/rubenix/)
### Dutch
-[D0T1X](https://www.transifex.com/user/profile/D0T1X/)
-[ikbenfrank](https://www.transifex.com/user/profile/ikbenfrank/)
-[kampsj](https://www.transifex.com/user/profile/kampsj/)
+
+[D0T1X](https://www.transifex.com/user/profile/D0T1X/)
+[ikbenfrank](https://www.transifex.com/user/profile/ikbenfrank/)
+[kampsj](https://www.transifex.com/user/profile/kampsj/)
### French
-[jt117](https://www.transifex.com/user/profile/jt117/)
-[nerdinator](https://www.transifex.com/user/profile/nerdinator/)
-[agaume](https://www.transifex.com/user/profile/agaume/)
+
+[jt117](https://www.transifex.com/user/profile/jt117/)
+[nerdinator](https://www.transifex.com/user/profile/nerdinator/)
+[agaume](https://www.transifex.com/user/profile/agaume/)
### German
+
[eTaurus](https://www.transifex.com/user/profile/eTaurus/)
[l0c4lh057](https://www.transifex.com/user/profile/l0c4lh057/)
-[hyperbit00]
+[hyperbit00](https://github.com/hyperbit00)
### Hungarian
+
[igazka](https://www.transifex.com/user/profile/igazka/)
### Italian
-[SK3LA](https://www.transifex.com/user/profile/SK3LA/)
-[auanasgheps](https://www.transifex.com/user/profile/auanasgheps/)
+
+[SK3LA](https://www.transifex.com/user/profile/SK3LA/)
+[auanasgheps](https://www.transifex.com/user/profile/auanasgheps/)
### Latvian
+
[melkypie](https://github.com/melkypie)
### Portuguese
-[hds](https://www.transifex.com/user/profile/hds/)
-[mlopezifu](https://www.transifex.com/user/profile/mlopezifu/)
-[stormsz](https://www.transifex.com/user/profile/stormsz/)
+[hds](https://www.transifex.com/user/profile/hds/)
+[mlopezifu](https://www.transifex.com/user/profile/mlopezifu/)
+[stormsz](https://www.transifex.com/user/profile/stormsz/)
+
+### Russian
+
+[amillerr](https://github.com/amillerr)
### Spanish
-[albertocp](https://www.transifex.com/user/profile/albertocp/)
-[alfa5](https://www.transifex.com/user/profile/alfa5/)
-[mlopezifu](https://www.transifex.com/user/profile/mlopezifu/)
-[sergio.laya](https://www.transifex.com/user/profile/sergio.laya/)
+[albertocp](https://www.transifex.com/user/profile/albertocp/)
+[alfa5](https://www.transifex.com/user/profile/alfa5/)
+[mlopezifu](https://www.transifex.com/user/profile/mlopezifu/)
+[sergio.laya](https://www.transifex.com/user/profile/sergio.laya/)
+
+### Swedish
+
+[makanz](https://github.com/makanz)
### Turkish
diff --git a/cookbook/forms.py b/cookbook/forms.py
index 4f966f00a..239b17012 100644
--- a/cookbook/forms.py
+++ b/cookbook/forms.py
@@ -49,7 +49,7 @@ class UserPreferenceForm(forms.ModelForm):
fields = (
'default_unit', 'use_fractions', 'use_kj', 'theme', 'nav_color',
'sticky_navbar', 'default_page', 'show_recent', 'search_style',
- 'plan_share', 'ingredient_decimals', 'comments',
+ 'plan_share', 'ingredient_decimals', 'comments', 'left_handed',
)
labels = {
@@ -65,7 +65,8 @@ class UserPreferenceForm(forms.ModelForm):
'plan_share': _('Plan sharing'),
'ingredient_decimals': _('Ingredient decimal places'),
'shopping_auto_sync': _('Shopping list auto sync period'),
- 'comments': _('Comments')
+ 'comments': _('Comments'),
+ 'left_handed': _('Left-handed mode')
}
help_texts = {
@@ -89,6 +90,7 @@ class UserPreferenceForm(forms.ModelForm):
'sticky_navbar': _('Makes the navbar stick to the top of the page.'), # noqa: E501
'mealplan_autoadd_shopping': _('Automatically add meal plan ingredients to shopping list.'),
'mealplan_autoexclude_onhand': _('Exclude ingredients that are on hand.'),
+ 'left_handed': _('Will optimize the UI for use with your left hand.')
}
widgets = {
diff --git a/cookbook/integration/nextcloud_cookbook.py b/cookbook/integration/nextcloud_cookbook.py
index 912ad733a..c302aff50 100644
--- a/cookbook/integration/nextcloud_cookbook.py
+++ b/cookbook/integration/nextcloud_cookbook.py
@@ -43,7 +43,8 @@ class NextcloudCookbook(Integration):
if 'keywords' in recipe_json:
try:
for x in recipe_json['keywords'].split(','):
- recipe.keywords.add(Keyword.objects.get_or_create(space=self.request.space, name=x)[0])
+ if x.strip() != '':
+ recipe.keywords.add(Keyword.objects.get_or_create(space=self.request.space, name=x)[0])
except Exception:
pass
diff --git a/cookbook/integration/recipesage.py b/cookbook/integration/recipesage.py
index d5292456f..29bf0eb4e 100644
--- a/cookbook/integration/recipesage.py
+++ b/cookbook/integration/recipesage.py
@@ -77,14 +77,13 @@ class RecipeSage(Integration):
}
for s in recipe.steps.all():
- if s.type != Step.TIME:
- data['recipeInstructions'].append({
- '@type': 'HowToStep',
- 'text': s.instruction
- })
+ data['recipeInstructions'].append({
+ '@type': 'HowToStep',
+ 'text': s.instruction
+ })
- for i in s.ingredients.all():
- data['recipeIngredient'].append(f'{float(i.amount)} {i.unit} {i.food}')
+ for i in s.ingredients.all():
+ data['recipeIngredient'].append(f'{float(i.amount)} {i.unit} {i.food}')
return data
diff --git a/cookbook/integration/rezkonv.py b/cookbook/integration/rezkonv.py
index 37beb4bc4..c0bfcc8ef 100644
--- a/cookbook/integration/rezkonv.py
+++ b/cookbook/integration/rezkonv.py
@@ -12,33 +12,33 @@ class RezKonv(Integration):
ingredients = []
directions = []
- for line in file.replace('\r', '').split('\n'):
+ for line in file.replace('\r', '').replace('\n\n', '\n').split('\n'):
if 'Titel:' in line:
title = line.replace('Titel:', '').strip()
if 'Kategorien:' in line:
tags = line.replace('Kategorien:', '').strip()
- if ingredient_mode and ('quelle' in line.lower() or 'source' in line.lower()):
+ if ingredient_mode and (
+ 'quelle' in line.lower() or 'source' in line.lower() or (line == '' and len(ingredients) > 0)):
ingredient_mode = False
+ direction_mode = True
if ingredient_mode:
if line != '' and '===' not in line and 'Zubereitung' not in line:
ingredients.append(line.strip())
if direction_mode:
if line.strip() != '' and line.strip() != '=====':
directions.append(line.strip())
- if 'Zutaten:' in line:
+ if 'Zutaten:' in line or 'Ingredients' in line or 'Menge:' in line:
ingredient_mode = True
- if 'Zubereitung:' in line:
- ingredient_mode = False
- direction_mode = True
- recipe = Recipe.objects.create(name=title, created_by=self.request.user, internal=True, space=self.request.space)
+ recipe = Recipe.objects.create(name=title, created_by=self.request.user, internal=True,
+ space=self.request.space)
for k in tags.split(','):
keyword, created = Keyword.objects.get_or_create(name=k.strip(), space=self.request.space)
recipe.keywords.add(keyword)
step = Step.objects.create(
- instruction='\n'.join(directions) + '\n\n', space=self.request.space,
+ instruction=' \n'.join(directions) + '\n\n', space=self.request.space,
)
ingredient_parser = IngredientParser(self.request, True)
@@ -60,7 +60,8 @@ class RezKonv(Integration):
def split_recipe_file(self, file):
recipe_list = []
current_recipe = ''
- encoding_list = ['windows-1250', 'latin-1'] #TODO build algorithm to try trough encodings and fail if none work, use for all importers
+ encoding_list = ['windows-1250',
+ 'latin-1'] # TODO build algorithm to try trough encodings and fail if none work, use for all importers
encoding = 'windows-1250'
for fl in file.readlines():
try:
diff --git a/cookbook/integration/saffron.py b/cookbook/integration/saffron.py
index 0bfc4fbb3..a7ec34f10 100644
--- a/cookbook/integration/saffron.py
+++ b/cookbook/integration/saffron.py
@@ -71,11 +71,10 @@ class Saffron(Integration):
recipeInstructions = []
recipeIngredient = []
for s in recipe.steps.all():
- if s.type != Step.TIME:
- recipeInstructions.append(s.instruction)
+ recipeInstructions.append(s.instruction)
- for i in s.ingredients.all():
- recipeIngredient.append(f'{float(i.amount)} {i.unit} {i.food}')
+ for i in s.ingredients.all():
+ recipeIngredient.append(f'{float(i.amount)} {i.unit} {i.food}')
data += "Ingredients: \n"
for ingredient in recipeIngredient:
diff --git a/cookbook/locale/ca/LC_MESSAGES/django.po b/cookbook/locale/ca/LC_MESSAGES/django.po
index 682a4338c..662a9d12d 100644
--- a/cookbook/locale/ca/LC_MESSAGES/django.po
+++ b/cookbook/locale/ca/LC_MESSAGES/django.po
@@ -8,21 +8,21 @@
# gimy16
\n"
-"Per limitar el possible dany de fitxes o comptes amb accés limitat."
+" Es camps contrasenya i testimoni s’emmagatzemen com a text "
+"pla a la base de dades.\n"
+" Això és necessari perquè són necessaris per fer sol·licituds API, "
+"però també augmenta el risc que\n"
+" algú el robi
\n"
+" Per limitar el possible dany de fitxes o comptes amb accés "
+"limitat.\n"
+" "
#: .\cookbook\templates\index.html:29
msgid "Search recipe ..."
@@ -1486,10 +1475,8 @@ msgstr ""
#: .\cookbook\templates\markdown_info.html:57
#: .\cookbook\templates\markdown_info.html:73
-#, fuzzy
-#| msgid "or by leaving a blank line inbetween."
msgid "or by leaving a blank line in between."
-msgstr "o bé deixant una línia en blanc entremig."
+msgstr "o deixant una línia en blanc entremig."
#: .\cookbook\templates\markdown_info.html:59
#: .\cookbook\templates\markdown_info.html:74
@@ -1511,16 +1498,12 @@ msgid "Lists"
msgstr "Llistes"
#: .\cookbook\templates\markdown_info.html:85
-#, fuzzy
-#| msgid ""
-#| "Lists can ordered or unorderd. It is important to leave a blank line "
-#| "before the list!"
msgid ""
"Lists can ordered or unordered. It is important to leave a blank line "
"before the list!"
msgstr ""
-"Les llistes es poden ordenar o desordenades. És important deixar una "
-"línia en blanc abans de la llista!"
+"Les llistes es poden ordenar o desordenar. És important deixar una línia "
+"en blanc abans de la llista!"
#: .\cookbook\templates\markdown_info.html:87
#: .\cookbook\templates\markdown_info.html:108
@@ -1578,6 +1561,10 @@ msgid ""
"editor like this one."
msgstr ""
+"Les taules de rebaixes són difícils de crear a mà. Es recomana utilitzar un "
+"editor de taules com\n"
+"aquest."
#: .\cookbook\templates\markdown_info.html:155
#: .\cookbook\templates\markdown_info.html:157
@@ -1598,7 +1585,7 @@ msgstr "Cel·la"
#: .\cookbook\templates\meal_plan_entry.html:6
msgid "Meal Plan View"
-msgstr "Vista del pla de menjars"
+msgstr "Vista Pla de menjars"
#: .\cookbook\templates\meal_plan_entry.html:18
msgid "Created by"
@@ -1616,7 +1603,7 @@ msgstr "Darrera cocció"
#: .\cookbook\templates\meal_plan_entry.html:50
msgid "Never cooked before."
-msgstr "No cuinat abans"
+msgstr "No cuinat abans."
#: .\cookbook\templates\meal_plan_entry.html:76
msgid "Other meals on this day"
@@ -1625,91 +1612,92 @@ msgstr "Altres menjars en aquest dia"
#: .\cookbook\templates\no_groups_info.html:5
#: .\cookbook\templates\no_groups_info.html:12
msgid "No Permissions"
-msgstr ""
+msgstr "Sense Permisos"
#: .\cookbook\templates\no_groups_info.html:17
-#, fuzzy
-#| msgid "You are not logged in and therefore cannot view this page!"
msgid "You do not have any groups and therefor cannot use this application."
-msgstr "No heu iniciat la sessió i, per tant, no podeu veure aquesta pàgina."
+msgstr "No teniu cap grup i, per tant, no podeu utilitzar aquesta aplicació."
#: .\cookbook\templates\no_groups_info.html:18
#: .\cookbook\templates\no_perm_info.html:15
msgid "Please contact your administrator."
-msgstr ""
+msgstr "Contacta amb l'administrador."
#: .\cookbook\templates\no_perm_info.html:5
#: .\cookbook\templates\no_perm_info.html:12
msgid "No Permission"
-msgstr ""
+msgstr "Sense Permisos"
#: .\cookbook\templates\no_perm_info.html:15
-#, fuzzy
-#| msgid "You do not have the required permissions to perform this action!"
msgid ""
"You do not have the required permissions to view this page or perform this "
"action."
-msgstr "No teniu els permisos necessaris per dur a terme aquesta acció!"
+msgstr "No teniu els permisos necessaris per dur a terme aquesta acció."
#: .\cookbook\templates\no_space_info.html:6
#: .\cookbook\templates\no_space_info.html:13
msgid "No Space"
-msgstr ""
+msgstr "Sense Espai"
#: .\cookbook\templates\no_space_info.html:17
msgid ""
"Recipes, foods, shopping lists and more are organized in spaces of one or "
"more people."
msgstr ""
+"Receptes, aliments, llistes de la compra i més s'organitzen en espais d'una "
+"o més persones."
#: .\cookbook\templates\no_space_info.html:18
msgid ""
"You can either be invited into an existing space or create your own one."
-msgstr ""
+msgstr "Pots ser convidat a un espai existent o crear el teu propi."
#: .\cookbook\templates\no_space_info.html:31
#: .\cookbook\templates\no_space_info.html:40
msgid "Join Space"
-msgstr ""
+msgstr "uneix-te a l'espai"
#: .\cookbook\templates\no_space_info.html:34
msgid "Join an existing space."
-msgstr ""
+msgstr "Unir-se a espai existent."
#: .\cookbook\templates\no_space_info.html:35
msgid ""
"To join an existing space either enter your invite token or click on the "
"invite link the space owner send you."
msgstr ""
+"Per unir-vos a un espai existent, introduïu el vostre token d'invitació o "
+"feu clic a l'enllaç d'invitació."
#: .\cookbook\templates\no_space_info.html:48
#: .\cookbook\templates\no_space_info.html:56
-#, fuzzy
-#| msgid "Create User"
msgid "Create Space"
-msgstr "Crear Usuari"
+msgstr "Crear Espai"
#: .\cookbook\templates\no_space_info.html:51
msgid "Create your own recipe space."
-msgstr ""
+msgstr "Crear el propi espai de recepta."
#: .\cookbook\templates\no_space_info.html:52
msgid "Start your own recipe space and invite other users to it."
-msgstr ""
+msgstr "Inicieu el vostre propi espai de receptes i convideu altres usuaris."
#: .\cookbook\templates\offline.html:6
msgid "Offline"
-msgstr ""
+msgstr "Desconnectat"
#: .\cookbook\templates\offline.html:19
msgid "You are currently offline!"
-msgstr ""
+msgstr "Estàs desconnectat!"
#: .\cookbook\templates\offline.html:20
msgid ""
"The recipes listed below are available for offline viewing because you have "
"recently viewed them. Keep in mind that data might be outdated."
msgstr ""
+"Les receptes a continuació estan disponibles per a la visualització fora de "
+"línia perquè les heu vist recentment. Tingueu en compte que les dades poden "
+"estar obsoletes."
#: .\cookbook\templates\recipe_view.html:26
msgid "by"
@@ -1746,15 +1734,13 @@ msgstr "Registre de Cuines"
#: .\cookbook\templates\rest_framework\api.html:5
msgid "Recipe Home"
-msgstr "Receptes"
+msgstr "Receptari"
#: .\cookbook\templates\search_info.html:5
#: .\cookbook\templates\search_info.html:9
#: .\cookbook\templates\settings.html:172
-#, fuzzy
-#| msgid "Search String"
msgid "Search Settings"
-msgstr "Cerca Cadena"
+msgstr "Cerca Opcions"
#: .\cookbook\templates\search_info.html:10
msgid ""
@@ -1769,10 +1755,8 @@ msgid ""
msgstr ""
#: .\cookbook\templates\search_info.html:19
-#, fuzzy
-#| msgid "Search"
msgid "Search Methods"
-msgstr "Cerca"
+msgstr "Mètodes de Cerca"
#: .\cookbook\templates\search_info.html:23
msgid ""
@@ -1854,10 +1838,8 @@ msgid ""
msgstr ""
#: .\cookbook\templates\search_info.html:69
-#, fuzzy
-#| msgid "Search Recipe"
msgid "Search Fields"
-msgstr "Cerca Recepta"
+msgstr "Camps de Cerca"
#: .\cookbook\templates\search_info.html:73
msgid ""
@@ -1895,10 +1877,8 @@ msgid ""
msgstr ""
#: .\cookbook\templates\search_info.html:95
-#, fuzzy
-#| msgid "Search"
msgid "Search Index"
-msgstr "Cerca"
+msgstr "Índex de Cerca"
#: .\cookbook\templates\search_info.html:99
msgid ""
@@ -1919,48 +1899,36 @@ msgstr "Compte"
#: .\cookbook\templates\settings.html:35
msgid "Preferences"
-msgstr ""
+msgstr "Preferències"
#: .\cookbook\templates\settings.html:42
-#, fuzzy
-#| msgid "Settings"
msgid "API-Settings"
-msgstr "Opcions"
+msgstr "Opcions API"
#: .\cookbook\templates\settings.html:49
-#, fuzzy
-#| msgid "Search String"
msgid "Search-Settings"
-msgstr "Cerca Cadena"
+msgstr "Cerca-Opcions"
#: .\cookbook\templates\settings.html:56
-#, fuzzy
-#| msgid "Search String"
msgid "Shopping-Settings"
-msgstr "Cerca Cadena"
+msgstr "Compres-Opcions"
#: .\cookbook\templates\settings.html:65
-#, fuzzy
-#| msgid "Settings"
msgid "Name Settings"
-msgstr "Opcions"
+msgstr "Noms Opcions"
#: .\cookbook\templates\settings.html:73
-#, fuzzy
-#| msgid "Settings"
msgid "Account Settings"
-msgstr "Opcions"
+msgstr "Opcions de Compte"
#: .\cookbook\templates\settings.html:75
-#, fuzzy
-#| msgid "Settings"
msgid "Emails"
-msgstr "Opcions"
+msgstr "Emails"
#: .\cookbook\templates\settings.html:78
#: .\cookbook\templates\socialaccount\connections.html:11
msgid "Social"
-msgstr ""
+msgstr "Social"
#: .\cookbook\templates\settings.html:91
msgid "Language"
@@ -1999,22 +1967,28 @@ msgid ""
"There are many options to configure the search depending on your personal "
"preferences."
msgstr ""
+"Hi ha moltes opcions per configurar la cerca en funció de les vostres "
+"preferències personals."
#: .\cookbook\templates\settings.html:174
msgid ""
"Usually you do not need to configure any of them and can just stick "
"with either the default or one of the following presets."
msgstr ""
+"Normalment no cal configurar cap d'ells i només podeu quedar-vos amb "
+"el valor predeterminat o amb un dels següents valors predefinits."
#: .\cookbook\templates\settings.html:175
msgid ""
"If you do want to configure the search you can read about the different "
"options here."
msgstr ""
+"Si vols configurar la cerca, pots llegir les diferents opcions aquí."
#: .\cookbook\templates\settings.html:180
msgid "Fuzzy"
-msgstr ""
+msgstr "Difusa"
#: .\cookbook\templates\settings.html:181
msgid ""
@@ -2022,35 +1996,37 @@ msgid ""
"return more results than needed to make sure you find what you are looking "
"for."
msgstr ""
+"Trobeu el que necessiteu encara que la cerca o la recepta contingui errors "
+"d'ortografia. Pot ser que tornin més resultats dels necessaris."
#: .\cookbook\templates\settings.html:182
msgid "This is the default behavior"
-msgstr ""
+msgstr "Comportament per Defecte"
#: .\cookbook\templates\settings.html:183
#: .\cookbook\templates\settings.html:191
msgid "Apply"
-msgstr ""
+msgstr "Aplicar"
#: .\cookbook\templates\settings.html:188
msgid "Precise"
-msgstr ""
+msgstr "Precisar"
#: .\cookbook\templates\settings.html:189
msgid ""
"Allows fine control over search results but might not return results if too "
"many spelling mistakes are made."
msgstr ""
+"Permet un control minuciós sobre els resultats de la cerca, però és possible "
+"que no es tornin si hi han errors ortogràfics."
#: .\cookbook\templates\settings.html:190
msgid "Perfect for large Databases"
-msgstr ""
+msgstr "Perfecte per BBDD Grans"
#: .\cookbook\templates\settings.html:207
-#, fuzzy
-#| msgid "Shopping List"
msgid "Shopping Settings"
-msgstr "Llista de la Compra"
+msgstr "Opcions de Compra"
#: .\cookbook\templates\setup.html:6 .\cookbook\templates\system.html:5
msgid "Cookbook Setup"
@@ -2087,15 +2063,15 @@ msgstr "Llista de Compra de Receptes"
#: .\cookbook\templates\shopping_list.html:74
msgid "No recipes selected"
-msgstr "Recepta no sel·leccionada"
+msgstr "Receptes no seleccionades"
#: .\cookbook\templates\shopping_list.html:131
msgid "Entry Mode"
-msgstr ""
+msgstr "Mode entrada"
#: .\cookbook\templates\shopping_list.html:139
msgid "Add Entry"
-msgstr ""
+msgstr "Afegir Entrada"
#: .\cookbook\templates\shopping_list.html:152
msgid "Amount"
@@ -2120,22 +2096,19 @@ msgstr "Selecciona Menjar"
#: .\cookbook\templates\shopping_list.html:218
msgid "Select Supermarket"
-msgstr "Seleccioni supermercat"
+msgstr "Selecciona Supermercat"
#: .\cookbook\templates\shopping_list.html:242
msgid "Select User"
-msgstr "Selecciona usuari"
+msgstr "Selecciona Usuari"
#: .\cookbook\templates\shopping_list.html:258
msgid "Finished"
msgstr "Acabat"
#: .\cookbook\templates\shopping_list.html:267
-#, fuzzy
-#| msgid "You are offline, shopping list might not syncronize."
msgid "You are offline, shopping list might not synchronize."
-msgstr ""
-"Estàs fora de línia, és possible que la llista de compra no es sincronitzi."
+msgstr "Fora de línia, és possible que la llista de compra no es sincronitzi."
#: .\cookbook\templates\shopping_list.html:318
msgid "Copy/Export"
@@ -2144,7 +2117,7 @@ msgstr "Copia/Exporta"
#: .\cookbook\templates\socialaccount\connections.html:4
#: .\cookbook\templates\socialaccount\connections.html:15
msgid "Account Connections"
-msgstr ""
+msgstr "Connexions de Compte"
#: .\cookbook\templates\socialaccount\connections.html:18
msgid ""
@@ -2155,15 +2128,15 @@ msgstr ""
#: .\cookbook\templates\socialaccount\connections.html:52
msgid ""
"You currently have no social network accounts connected to this account."
-msgstr ""
+msgstr "Sense xarxes socials connectades al compte."
#: .\cookbook\templates\socialaccount\connections.html:55
msgid "Add a 3rd Party Account"
-msgstr ""
+msgstr "Afegir Compte de tercers"
#: .\cookbook\templates\socialaccount\signup.html:5
msgid "Signup"
-msgstr ""
+msgstr "Registre"
#: .\cookbook\templates\socialaccount\signup.html:10
#, python-format
@@ -2188,15 +2161,15 @@ msgstr ""
#: .\cookbook\templates\socialaccount\snippets\provider_list.html:119
#: .\cookbook\templates\socialaccount\snippets\provider_list.html:127
msgid "Sign in using"
-msgstr ""
+msgstr "Registrar emprant"
#: .\cookbook\templates\space.html:25
msgid "Space:"
-msgstr ""
+msgstr "Espai:"
#: .\cookbook\templates\space.html:26
msgid "Manage Subscription"
-msgstr ""
+msgstr "Administra Subscripció"
#: .\cookbook\templates\space.html:34 .\cookbook\templates\stats.html:19
msgid "Number of objects"
@@ -2220,57 +2193,47 @@ msgstr "Receptes Internes"
#: .\cookbook\templates\space.html:89
msgid "Members"
-msgstr ""
+msgstr "Membres"
#: .\cookbook\templates\space.html:95
-#, fuzzy
-#| msgid "Invite Links"
msgid "Invite User"
-msgstr "Enllaços Invitació"
+msgstr "Convida Usuari"
#: .\cookbook\templates\space.html:107
msgid "User"
-msgstr ""
+msgstr "Usuari"
#: .\cookbook\templates\space.html:108
msgid "Groups"
-msgstr ""
+msgstr "Grups"
#: .\cookbook\templates\space.html:119
-#, fuzzy
-#| msgid "Admin"
msgid "admin"
msgstr "Admin"
#: .\cookbook\templates\space.html:120
msgid "user"
-msgstr ""
+msgstr "usuari"
#: .\cookbook\templates\space.html:121
msgid "guest"
-msgstr ""
+msgstr "convidat"
#: .\cookbook\templates\space.html:122
-#, fuzzy
-#| msgid "Remove"
msgid "remove"
-msgstr "Eliminar"
+msgstr "elimina"
#: .\cookbook\templates\space.html:126
msgid "Update"
-msgstr ""
+msgstr "Actualitza"
#: .\cookbook\templates\space.html:130
-#, fuzzy
-#| msgid "You cannot edit this storage!"
msgid "You cannot edit yourself."
-msgstr "No podeu editar aquest emmagatzematge."
+msgstr "No et pot editar a tu mateix."
#: .\cookbook\templates\space.html:136
-#, fuzzy
-#| msgid "There are no recipes in this book yet."
msgid "There are no members in your space yet!"
-msgstr "Encara no hi ha receptes en aquest llibre."
+msgstr "No hi ha membres en aquest espai!"
#: .\cookbook\templates\space.html:143 .\cookbook\templates\system.html:21
#: .\cookbook\views\lists.py:85
@@ -2304,15 +2267,16 @@ msgid ""
" "
msgstr ""
"\n"
-"Django Recipes és una aplicació de programari lliure de codi obert. Es pot "
-"trobar a\n"
-" GitHub.\n"
-" Els registres de canvis es poden trobar aquí."
+" Django Recipes és una aplicació de programari lliure de codi obert. "
+"Es pot trobar a\n"
+" GitHub.\n"
+" Els registres de canvis es poden trobar aquí.\n"
+" "
#: .\cookbook\templates\system.html:48
msgid "Media Serving"
-msgstr "Publicació de Suports"
+msgstr "Servei Mitjans"
#: .\cookbook\templates\system.html:49 .\cookbook\templates\system.html:64
#: .\cookbook\templates\system.html:80
@@ -2371,7 +2335,7 @@ msgstr ""
#: .\cookbook\templates\system.html:78
msgid "Debug Mode"
-msgstr "Mode de depuració"
+msgstr "Mode Depuració"
#: .\cookbook\templates\system.html:82
msgid ""
@@ -2416,31 +2380,27 @@ msgstr "Importació d’URL"
#: .\cookbook\templates\url_import.html:33
msgid "Drag me to your bookmarks to import recipes from anywhere"
-msgstr ""
+msgstr "Arrossega als marcadors per importar receptes des de qualsevol lloc"
#: .\cookbook\templates\url_import.html:34
-#, fuzzy
-#| msgid "Bookmark saved!"
msgid "Bookmark Me!"
-msgstr "Marcador desat!"
+msgstr "Marca'm!"
#: .\cookbook\templates\url_import.html:38
msgid "URL"
-msgstr ""
+msgstr "URL"
#: .\cookbook\templates\url_import.html:40
msgid "App"
-msgstr ""
+msgstr "App"
#: .\cookbook\templates\url_import.html:44
msgid "Text"
msgstr "Text"
#: .\cookbook\templates\url_import.html:46
-#, fuzzy
-#| msgid "File ID"
msgid "File"
-msgstr "ID d'Arxiu"
+msgstr "Arxiu"
#: .\cookbook\templates\url_import.html:64
msgid "Enter website URL"
@@ -2449,20 +2409,20 @@ msgstr "Introduïu l'URL del lloc web"
#: .\cookbook\templates\url_import.html:104
msgid "Select recipe files to import or drop them here..."
msgstr ""
+"Seleccioneu fitxers de receptes per importar-los o deixeu-los anar aquí..."
#: .\cookbook\templates\url_import.html:125
msgid "Paste json or html source here to load recipe."
-msgstr ""
+msgstr "Enganxa json o html aquí per carregar la recepta."
#: .\cookbook\templates\url_import.html:153
-#, fuzzy
-#| msgid "View Recipe"
msgid "Preview Recipe Data"
-msgstr "Veure Recepta"
+msgstr "Previsualitzar dades Recepta"
#: .\cookbook\templates\url_import.html:154
msgid "Drag recipe attributes from the right into the appropriate box below."
msgstr ""
+"Arrossega atributs de la recepta des de la dreta al quadre corresponent."
#: .\cookbook\templates\url_import.html:163
#: .\cookbook\templates\url_import.html:180
@@ -2475,43 +2435,39 @@ msgstr ""
#: .\cookbook\templates\url_import.html:307
#: .\cookbook\templates\url_import.html:358
msgid "Clear Contents"
-msgstr ""
+msgstr "Neteja comentaris"
#: .\cookbook\templates\url_import.html:165
msgid "Text dragged here will be appended to the name."
-msgstr ""
+msgstr "Text arrossegat aquí s'afegirà al nom."
#: .\cookbook\templates\url_import.html:178
msgid "Description"
-msgstr ""
+msgstr "Descripció"
#: .\cookbook\templates\url_import.html:182
msgid "Text dragged here will be appended to the description."
-msgstr ""
+msgstr "Text arrossegat aquí s'afegirà a la descripció."
#: .\cookbook\templates\url_import.html:199
msgid "Keywords dragged here will be appended to current list"
-msgstr ""
+msgstr "Paraules clau arrossegades aquí s'afegiran a la llista actual"
#: .\cookbook\templates\url_import.html:214
msgid "Image"
-msgstr ""
+msgstr "Imatge"
#: .\cookbook\templates\url_import.html:246
-#, fuzzy
-#| msgid "Preparation Time"
msgid "Prep Time"
-msgstr "Temps de preparació"
+msgstr "Temps preparació"
#: .\cookbook\templates\url_import.html:261
-#, fuzzy
-#| msgid "Time"
msgid "Cook Time"
-msgstr "Temps"
+msgstr "Temps Cocció"
#: .\cookbook\templates\url_import.html:282
msgid "Ingredients dragged here will be appended to current list."
-msgstr ""
+msgstr "Ingredients arrossegats aquí s'afegiran a la llista actual."
#: .\cookbook\templates\url_import.html:304
#: .\cookbook\templates\url_import.html:579
@@ -2522,54 +2478,48 @@ msgstr "Instruccions"
msgid ""
"Recipe instructions dragged here will be appended to current instructions."
msgstr ""
+"Instruccions de la recepta arrossegades aquí s'afegiran a les instruccions "
+"actuals."
#: .\cookbook\templates\url_import.html:332
-#, fuzzy
-#| msgid "Discovered Recipes"
msgid "Discovered Attributes"
-msgstr "Receptes Descobertes"
+msgstr "Atributs Descoberts"
#: .\cookbook\templates\url_import.html:334
msgid ""
"Drag recipe attributes from below into the appropriate box on the left. "
"Click any node to display its full properties."
msgstr ""
+"Arrossega atributs de la recepta des de sota al quadre corresponent de "
+"l'esquerra. Feu clic a qualsevol node per mostrar les seves propietats."
#: .\cookbook\templates\url_import.html:351
-#, fuzzy
-#| msgid "Show as header"
msgid "Show Blank Field"
-msgstr "Mostra com a capçalera"
+msgstr "Mostra Camp en Blanc"
#: .\cookbook\templates\url_import.html:356
msgid "Blank Field"
-msgstr ""
+msgstr "Camp en Blanc"
#: .\cookbook\templates\url_import.html:360
msgid "Items dragged to Blank Field will be appended."
-msgstr ""
+msgstr "S'afegiran Elements arrossegats al camp en blanc."
#: .\cookbook\templates\url_import.html:407
-#, fuzzy
-#| msgid "Delete Step"
msgid "Delete Text"
-msgstr "Esborra Pas"
+msgstr "Esborra Text"
#: .\cookbook\templates\url_import.html:420
-#, fuzzy
-#| msgid "Delete Recipe"
msgid "Delete image"
-msgstr "Esborra Recepta"
+msgstr "Esborra Imatge"
#: .\cookbook\templates\url_import.html:436
msgid "Recipe Name"
msgstr "Nom de la Recepta"
#: .\cookbook\templates\url_import.html:440
-#, fuzzy
-#| msgid "Recipe Markup Specification"
msgid "Recipe Description"
-msgstr "Especificació de marcatge de receptes"
+msgstr "Descripció de Recepta"
#: .\cookbook\templates\url_import.html:504
#: .\cookbook\templates\url_import.html:536
@@ -2582,10 +2532,8 @@ msgid "Note"
msgstr "Nota"
#: .\cookbook\templates\url_import.html:597
-#, fuzzy
-#| msgid "All Keywords"
msgid "Add Keyword"
-msgstr "Totes les paraules clau"
+msgstr "Afegir paraula clau"
#: .\cookbook\templates\url_import.html:610
msgid "All Keywords"
@@ -2631,106 +2579,112 @@ msgid "Recipe Markup Specification"
msgstr "Especificació de marcatge de receptes"
#: .\cookbook\views\api.py:88 .\cookbook\views\api.py:174
-#, fuzzy
-#| msgid "Parameter filter_list incorrectly formatted"
msgid "Parameter updated_at incorrectly formatted"
-msgstr "El paràmetre filter_list té un format incorrecte"
+msgstr "El paràmetre updated_at té un format incorrecte"
#: .\cookbook\views\api.py:194 .\cookbook\views\api.py:295
#, python-brace-format
msgid "No {self.basename} with id {pk} exists"
-msgstr ""
+msgstr "No {self.basename} amb id {pk} existeix"
#: .\cookbook\views\api.py:198
msgid "Cannot merge with the same object!"
-msgstr ""
+msgstr "No es pot fusionar amb el mateix objecte!"
#: .\cookbook\views\api.py:205
#, python-brace-format
msgid "No {self.basename} with id {target} exists"
-msgstr ""
+msgstr "No {self.basename} amb id {target} existeix"
#: .\cookbook\views\api.py:210
msgid "Cannot merge with child object!"
-msgstr ""
+msgstr "No es pot combinar amb l'objecte fill!"
#: .\cookbook\views\api.py:243
#, python-brace-format
msgid "{source.name} was merged successfully with {target.name}"
-msgstr ""
+msgstr "{source.name} s'ha fusionat amb {target.name}"
#: .\cookbook\views\api.py:248
#, python-brace-format
msgid "An error occurred attempting to merge {source.name} with {target.name}"
-msgstr ""
+msgstr "Error en intentar combinar {source.name} amb {target.name}"
#: .\cookbook\views\api.py:304
#, python-brace-format
msgid "{child.name} was moved successfully to the root."
-msgstr ""
+msgstr "{child.name} s'ha mogut correctament a l'arrel."
#: .\cookbook\views\api.py:307 .\cookbook\views\api.py:325
msgid "An error occurred attempting to move "
-msgstr ""
+msgstr "Error a l'intentar moure "
#: .\cookbook\views\api.py:310
msgid "Cannot move an object to itself!"
-msgstr ""
+msgstr "No es pot moure un objecte cap a si mateix!"
#: .\cookbook\views\api.py:316
#, python-brace-format
msgid "No {self.basename} with id {parent} exists"
-msgstr ""
+msgstr "No existeix {self.basename} amb identificador {parent}"
#: .\cookbook\views\api.py:322
#, python-brace-format
msgid "{child.name} was moved successfully to parent {parent.name}"
-msgstr ""
+msgstr "{child.name} s'ha mogut correctament al pare {parent.name}"
#: .\cookbook\views\api.py:474
#, python-brace-format
msgid "{obj.name} was removed from the shopping list."
-msgstr ""
+msgstr "{obj.name} eliminat de la llista de la compra."
#: .\cookbook\views\api.py:479 .\cookbook\views\api.py:729
#: .\cookbook\views\api.py:742
#, python-brace-format
msgid "{obj.name} was added to the shopping list."
-msgstr ""
+msgstr "Afegit {obj.name} a la llista de la compra."
#: .\cookbook\views\api.py:591
msgid "ID of recipe a step is part of. For multiple repeat parameter."
-msgstr ""
+msgstr "ID de recepta forma part d'un pas. Per a múltiples repeteix paràmetre."
#: .\cookbook\views\api.py:592
msgid "Query string matched (fuzzy) against object name."
-msgstr ""
+msgstr "La cadena de consulta coincideix (difusa) amb el nom de l'objecte."
#: .\cookbook\views\api.py:635
msgid ""
"Query string matched (fuzzy) against recipe name. In the future also "
"fulltext search."
msgstr ""
+"Cadena de consulta coincideix (difusa) amb el nom de la recepta. En el futur "
+"també cerca text complet."
#: .\cookbook\views\api.py:636
msgid "ID of keyword a recipe should have. For multiple repeat parameter."
msgstr ""
+"ID de la paraula clau que hauria de tenir una recepta. Per a múltiples "
+"repeteix paràmetre."
#: .\cookbook\views\api.py:637
msgid "ID of food a recipe should have. For multiple repeat parameter."
msgstr ""
+"ID d'aliments que ha de tenir una recepta. Per a múltiples repeteix "
+"paràmetres."
#: .\cookbook\views\api.py:638
msgid "ID of unit a recipe should have."
-msgstr ""
+msgstr "ID d'unitat que hauria de tenir una recepta."
#: .\cookbook\views\api.py:639
msgid "Rating a recipe should have. [0 - 5]"
-msgstr ""
+msgstr "Valoració que hauria de tenir una recepta. [0 - 5]"
#: .\cookbook\views\api.py:640
msgid "ID of book a recipe should be in. For multiple repeat parameter."
msgstr ""
+"ID del llibre hauria d'haver-hi en una recepta. Per al paràmetre de "
+"repetició múltiple."
#: .\cookbook\views\api.py:641
msgid ""
@@ -2782,6 +2736,7 @@ msgstr ""
#: .\cookbook\views\edit.py:129 .\cookbook\views\new.py:95
msgid "This feature is not yet available in the hosted version of tandoor!"
msgstr ""
+"Aquesta funció encara no està disponible a la versió allotjada de tandoor!"
#: .\cookbook\views\api.py:971
msgid "Sync successful!"
@@ -2793,7 +2748,7 @@ msgstr "Error de sincronització amb emmagatzematge"
#: .\cookbook\views\api.py:1055
msgid "Nothing to do."
-msgstr ""
+msgstr "Res a fer."
#: .\cookbook\views\api.py:1070
msgid "The requested site provided malformed data and cannot be read."
@@ -2814,29 +2769,27 @@ msgstr ""
#: .\cookbook\views\api.py:1109
msgid "Connection Refused."
-msgstr ""
+msgstr "Connexió Refusada."
#: .\cookbook\views\api.py:1118
-#, fuzzy
-#| msgid "The requested page could not be found."
msgid "No usable data could be found."
-msgstr "No s'ha pogut trobar la pàgina sol·licitada."
+msgstr "No s'han trobat dades utilitzables."
#: .\cookbook\views\api.py:1134
msgid "I couldn't find anything to do."
-msgstr ""
+msgstr "No es pot trobar res a fer."
#: .\cookbook\views\data.py:34 .\cookbook\views\data.py:129
#: .\cookbook\views\edit.py:49 .\cookbook\views\import_export.py:81
#: .\cookbook\views\new.py:33
msgid "You have reached the maximum number of recipes for your space."
-msgstr ""
+msgstr "Has arribat al nombre màxim de receptes per al vostre espai."
#: .\cookbook\views\data.py:38 .\cookbook\views\data.py:133
#: .\cookbook\views\edit.py:53 .\cookbook\views\import_export.py:85
#: .\cookbook\views\new.py:37
msgid "You have more users than allowed in your space."
-msgstr ""
+msgstr "Tens més usuaris dels permesos al teu espai."
#: .\cookbook\views\data.py:111
#, python-format
@@ -2896,13 +2849,15 @@ msgstr "Error al desar canvis!"
#: .\cookbook\views\import_export.py:107 .\cookbook\views\import_export.py:143
msgid "Importing is not implemented for this provider"
-msgstr ""
+msgstr "Importació no implementada en aquest proveïdor"
#: .\cookbook\views\import_export.py:130
msgid ""
"The PDF Exporter is not enabled on this instance as it is still in an "
"experimental state."
msgstr ""
+"L'exportador de PDF no està habilitat en aquesta instància perquè encara es "
+"troba en un estat experimental."
#: .\cookbook\views\lists.py:25
msgid "Import Log"
@@ -2917,26 +2872,20 @@ msgid "Shopping Lists"
msgstr "Llistes de Compra"
#: .\cookbook\views\lists.py:148
-#, fuzzy
-#| msgid "Supermarket"
msgid "Supermarkets"
-msgstr "Supermercat"
+msgstr "Supermercats"
#: .\cookbook\views\lists.py:164
-#, fuzzy
-#| msgid "Shopping Recipes"
msgid "Shopping Categories"
-msgstr "Llista de Compra de Receptes"
+msgstr "Categories de Compres"
#: .\cookbook\views\lists.py:217
msgid "Steps"
msgstr "Passos"
#: .\cookbook\views\lists.py:232
-#, fuzzy
-#| msgid "Shopping List"
msgid "New Shopping List"
-msgstr "Llista de la Compra"
+msgstr "Nova Llista de Compra"
#: .\cookbook\views\new.py:126
msgid "Imported new recipe!"
@@ -2948,57 +2897,62 @@ msgstr "S'ha produït un error en importar la recepta!"
#: .\cookbook\views\new.py:212
msgid "Hello"
-msgstr ""
+msgstr "Hola"
#: .\cookbook\views\new.py:212
msgid "You have been invited by "
-msgstr ""
+msgstr "Convidat per "
#: .\cookbook\views\new.py:213
msgid " to join their Tandoor Recipes space "
-msgstr ""
+msgstr " per unir-se al seu espai de Receptes "
#: .\cookbook\views\new.py:214
msgid "Click the following link to activate your account: "
-msgstr ""
+msgstr "Click per activar el teu compte: "
#: .\cookbook\views\new.py:215
msgid ""
"If the link does not work use the following code to manually join the space: "
msgstr ""
+"Si l'enllaç no funciona, utilitzeu el codi següent per unir-vos a l'espai: "
#: .\cookbook\views\new.py:216
msgid "The invitation is valid until "
-msgstr ""
+msgstr "Invitació vàlida fins "
#: .\cookbook\views\new.py:217
msgid ""
"Tandoor Recipes is an Open Source recipe manager. Check it out on GitHub "
msgstr ""
+"Tandoor Recipes és un gestor de receptes de codi obert. Comprova a GitHub "
#: .\cookbook\views\new.py:220
msgid "Tandoor Recipes Invite"
-msgstr ""
+msgstr "Invitació de receptes Tandoor"
#: .\cookbook\views\new.py:227
msgid "Invite link successfully send to user."
-msgstr ""
+msgstr "Enllaç d'invitació enviat a l'usuari."
#: .\cookbook\views\new.py:230
msgid ""
"You have send to many emails, please share the link manually or wait a few "
"hours."
msgstr ""
+"Masses emails enviats, compartiu l'enllaç manualment o espereu unes hores."
#: .\cookbook\views\new.py:232
msgid "Email could not be sent to user. Please share the link manually."
-msgstr ""
+msgstr "No es pot enviar email a l'usuari. Comparteix l'enllaç manualment."
#: .\cookbook\views\views.py:126
msgid ""
"You have successfully created your own recipe space. Start by adding some "
"recipes or invite other people to join you."
msgstr ""
+"Espai de Receptes creat correctament. Comenceu afegint algunes receptes o "
+"convida altres persones a unir-se."
#: .\cookbook\views\views.py:174
msgid "You do not have the required permissions to perform this action!"
@@ -3010,21 +2964,23 @@ msgstr "Comentari Desat!"
#: .\cookbook\views\views.py:276
msgid "This feature is not available in the demo version!"
-msgstr ""
+msgstr "Funció no està disponible a la versió de demostració!"
#: .\cookbook\views\views.py:335
msgid "You must select at least one field to search!"
-msgstr ""
+msgstr "Heu de seleccionar almenys un camp per cercar!"
#: .\cookbook\views\views.py:340
msgid ""
"To use this search method you must select at least one full text search "
"field!"
msgstr ""
+"Per utilitzar aquest mètode de cerca, heu de seleccionar almenys un camp de "
+"cerca de text complet!"
#: .\cookbook\views\views.py:344
msgid "Fuzzy search is not compatible with this search method!"
-msgstr ""
+msgstr "Cerca difusa no és compatible amb aquest mètode de cerca!"
#: .\cookbook\views\views.py:473
msgid ""
@@ -3049,14 +3005,12 @@ msgid "Malformed Invite Link supplied!"
msgstr "S'ha proporcionat un enllaç d'invitació mal format."
#: .\cookbook\views\views.py:519
-#, fuzzy
-#| msgid "You are not logged in and therefore cannot view this page!"
msgid "You are already member of a space and therefore cannot join this one."
-msgstr "No heu iniciat la sessió i, per tant, no podeu veure aquesta pàgina."
+msgstr "Ja ets membre d'un espai, no pots unir-te a aquest."
#: .\cookbook\views\views.py:530
msgid "Successfully joined space."
-msgstr ""
+msgstr "Unit correctament a l'espai."
#: .\cookbook\views\views.py:536
msgid "Invite Link not valid or already used!"
@@ -3067,12 +3021,16 @@ msgid ""
"Reporting share links is not enabled for this instance. Please notify the "
"page administrator to report problems."
msgstr ""
+"Notificació d'enllaços compartits no activada en aquesta instància. Aviseu "
+"l'administrador per informar dels problemes."
#: .\cookbook\views\views.py:623
msgid ""
"Recipe sharing link has been disabled! For additional information please "
"contact the page administrator."
msgstr ""
+"L'enllaç per compartir receptes s'ha desactivat! Per obtenir informació "
+"addicional, poseu-vos en contacte amb l'administrador."
#~ msgid "Time"
#~ msgstr "Temps"
diff --git a/cookbook/locale/de/LC_MESSAGES/django.po b/cookbook/locale/de/LC_MESSAGES/django.po
index dbe9ba5ff..0f9c05294 100644
--- a/cookbook/locale/de/LC_MESSAGES/django.po
+++ b/cookbook/locale/de/LC_MESSAGES/django.po
@@ -1469,10 +1469,10 @@ msgid ""
msgstr ""
"\n"
" Markdown ist eine Schreibweise mit der Text einfach formatiert "
-"werden kann. Diese Seite benutzt Python Markdown, eine Bibliothek, die reinen "
"Text in schönes HTML umwandelt. Die komplette Dokumentation befindet sich hier. Die wichtigsten Formatierungszeichen befinden sich hier "
"auf dieser Seite.\n"
" "
diff --git a/cookbook/locale/nl/LC_MESSAGES/django.po b/cookbook/locale/nl/LC_MESSAGES/django.po
index f4b15112a..c21ef24a4 100644
--- a/cookbook/locale/nl/LC_MESSAGES/django.po
+++ b/cookbook/locale/nl/LC_MESSAGES/django.po
@@ -13,10 +13,10 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-02-11 08:52+0100\n"
-"PO-Revision-Date: 2022-02-09 01:31+0000\n"
+"PO-Revision-Date: 2022-04-05 10:31+0000\n"
"Last-Translator: Jesse
- recent includes unchecked items and recently completed items."
msgstr ""
+"Filter boodschappenlijstjes op aangevinkt. [waar,onwaar,beide,recent]"
+"
- recent bevat niet aangevinkte en recent voltooide items."
#: .\cookbook\views\api.py:789
msgid "Returns the shopping list entries sorted by supermarket category order."
msgstr ""
+"Geeft items op boodschappenlijstjes gesorteerd per supermarktcategorie weer."
#: .\cookbook\views\api.py:949 .\cookbook\views\data.py:42
#: .\cookbook\views\edit.py:129 .\cookbook\views\new.py:95
@@ -2929,11 +2892,9 @@ msgstr ""
#: .\cookbook\views\api.py:1109
msgid "Connection Refused."
-msgstr ""
+msgstr "Verbinding geweigerd."
#: .\cookbook\views\api.py:1118
-#, fuzzy
-#| msgid "No useable data could be found."
msgid "No usable data could be found."
msgstr "Er is geen bruikbare data gevonden."
@@ -3017,6 +2978,8 @@ msgid ""
"The PDF Exporter is not enabled on this instance as it is still in an "
"experimental state."
msgstr ""
+"De PDF exporter is niet ingeschakeld op deze instantie gezien het in een "
+"experimentele staat is."
#: .\cookbook\views\lists.py:25
msgid "Import Log"
diff --git a/cookbook/locale/ru/LC_MESSAGES/django.po b/cookbook/locale/ru/LC_MESSAGES/django.po
index 595faa5f7..844b78bae 100644
--- a/cookbook/locale/ru/LC_MESSAGES/django.po
+++ b/cookbook/locale/ru/LC_MESSAGES/django.po
@@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-09-13 22:40+0200\n"
-"PO-Revision-Date: 2021-10-23 09:06+0000\n"
-"Last-Translator: rustam
\n"
+" För att begränsa möjlig skada kan tokens eller konton med begränsad "
+"åtkomst användas.\n"
+" "
#: .\cookbook\templates\index.html:29
msgid "Search recipe ..."
@@ -1004,7 +1020,7 @@ msgstr "Logga in för att se recept"
#: .\cookbook\templates\markdown_info.html:5
#: .\cookbook\templates\markdown_info.html:13
msgid "Markdown Info"
-msgstr ""
+msgstr "Markdown information"
#: .\cookbook\templates\markdown_info.html:14
msgid ""
@@ -1021,6 +1037,18 @@ msgid ""
"below.\n"
" "
msgstr ""
+"\n"
+" Markdown är ett lätt märkningsspråk som kan användas för att enkelt "
+"formatera vanlig text.\n"
+" Den här webbplatsen använder Python Markdown-biblioteket för att\n"
+" konvertera din text till snygg HTML. Dess fullständiga markdown-"
+"dokumentation finns\n"
+" här.\n"
+" En ofullständig men troligen tillräcklig dokumentation finns nedan."
+"\n"
+" "
#: .\cookbook\templates\markdown_info.html:25
msgid "Headers"
@@ -1034,11 +1062,13 @@ msgstr "Formatering"
#: .\cookbook\templates\markdown_info.html:72
msgid "Line breaks are inserted by adding two spaces after the end of a line"
msgstr ""
+"Radbrytningar infogas genom att lägga till två blanksteg efter slutet av en "
+"rad"
#: .\cookbook\templates\markdown_info.html:57
#: .\cookbook\templates\markdown_info.html:73
msgid "or by leaving a blank line inbetween."
-msgstr ""
+msgstr "eller genom att lämna en tom rad däremellan."
#: .\cookbook\templates\markdown_info.html:59
#: .\cookbook\templates\markdown_info.html:74
@@ -1064,11 +1094,13 @@ msgid ""
"Lists can ordered or unorderd. It is important to leave a blank line "
"before the list!"
msgstr ""
+"Listor kan vara ordnade eller oordnade. Det är viktigt att lämna en tom "
+"rad före listan!"
#: .\cookbook\templates\markdown_info.html:87
#: .\cookbook\templates\markdown_info.html:108
msgid "Ordered List"
-msgstr ""
+msgstr "Ordnad lista"
#: .\cookbook\templates\markdown_info.html:89
#: .\cookbook\templates\markdown_info.html:90
@@ -1077,12 +1109,12 @@ msgstr ""
#: .\cookbook\templates\markdown_info.html:111
#: .\cookbook\templates\markdown_info.html:112
msgid "unordered list item"
-msgstr ""
+msgstr "oordnat listobjekt"
#: .\cookbook\templates\markdown_info.html:93
#: .\cookbook\templates\markdown_info.html:114
msgid "Unordered List"
-msgstr ""
+msgstr "Oordnad lista"
#: .\cookbook\templates\markdown_info.html:95
#: .\cookbook\templates\markdown_info.html:96
@@ -1091,22 +1123,24 @@ msgstr ""
#: .\cookbook\templates\markdown_info.html:117
#: .\cookbook\templates\markdown_info.html:118
msgid "ordered list item"
-msgstr ""
+msgstr "ordnat listobjekt"
#: .\cookbook\templates\markdown_info.html:125
msgid "Images & Links"
-msgstr ""
+msgstr "Bilder & länkar"
#: .\cookbook\templates\markdown_info.html:126
msgid ""
"Links can be formatted with Markdown. This application also allows to paste "
"links directly into markdown fields without any formatting."
msgstr ""
+"Länkar kan formateras med Markdown. Denna applikation gör det också möjligt "
+"att klistra in länkar direkt i markdown-fält utan någon formatering."
#: .\cookbook\templates\markdown_info.html:132
#: .\cookbook\templates\markdown_info.html:145
msgid "This will become an image"
-msgstr ""
+msgstr "Detta kommer att bli en bild"
#: .\cookbook\templates\markdown_info.html:152
msgid "Tables"
@@ -1118,124 +1152,131 @@ msgid ""
"editor like this one."
msgstr ""
+"Markdown-tabeller är svåra att skapa för hand. Vi rekommenderar att du "
+"använder en tabellredigerare som denna."
#: .\cookbook\templates\markdown_info.html:155
#: .\cookbook\templates\markdown_info.html:157
#: .\cookbook\templates\markdown_info.html:171
#: .\cookbook\templates\markdown_info.html:177
msgid "Table"
-msgstr ""
+msgstr "Tabell"
#: .\cookbook\templates\markdown_info.html:155
#: .\cookbook\templates\markdown_info.html:172
msgid "Header"
-msgstr ""
+msgstr "Sidhuvud"
#: .\cookbook\templates\markdown_info.html:157
#: .\cookbook\templates\markdown_info.html:178
msgid "Cell"
-msgstr ""
+msgstr "Cell"
#: .\cookbook\templates\meal_plan.html:101
msgid "New Entry"
-msgstr ""
+msgstr "Ny post"
#: .\cookbook\templates\meal_plan.html:113
#: .\cookbook\templates\shopping_list.html:52
msgid "Search Recipe"
-msgstr ""
+msgstr "Sök recept"
#: .\cookbook\templates\meal_plan.html:139
msgid "Title"
-msgstr ""
+msgstr "Titel"
#: .\cookbook\templates\meal_plan.html:141
msgid "Note (optional)"
-msgstr ""
+msgstr "Anmärkning (valfritt)"
#: .\cookbook\templates\meal_plan.html:143
msgid ""
"You can use markdown to format this field. See the docs here"
msgstr ""
+"Du kan använda markdown för att formatera det här fältet. Se dokumenten här"
#: .\cookbook\templates\meal_plan.html:147
#: .\cookbook\templates\meal_plan.html:251
msgid "Serving Count"
-msgstr ""
+msgstr "Antal portioner"
#: .\cookbook\templates\meal_plan.html:153
msgid "Create only note"
-msgstr ""
+msgstr "Skapa endast notering"
#: .\cookbook\templates\meal_plan.html:168
#: .\cookbook\templates\shopping_list.html:7
#: .\cookbook\templates\shopping_list.html:29
#: .\cookbook\templates\shopping_list.html:705
msgid "Shopping List"
-msgstr ""
+msgstr "Inköpslista"
#: .\cookbook\templates\meal_plan.html:172
msgid "Shopping list currently empty"
-msgstr ""
+msgstr "Inköpslistan är för närvarande tom"
#: .\cookbook\templates\meal_plan.html:175
msgid "Open Shopping List"
-msgstr ""
+msgstr "Öppna inköpslistan"
#: .\cookbook\templates\meal_plan.html:189
msgid "Plan"
-msgstr ""
+msgstr "Planen"
#: .\cookbook\templates\meal_plan.html:196
msgid "Number of Days"
-msgstr ""
+msgstr "Antal dagar"
#: .\cookbook\templates\meal_plan.html:206
msgid "Weekday offset"
-msgstr ""
+msgstr "Veckodagsförskjutning"
#: .\cookbook\templates\meal_plan.html:209
msgid ""
"Number of days starting from the first day of the week to offset the default "
"view."
msgstr ""
+"Antal dagar från den första dagen i veckan för att kompensera för "
+"standardvyn."
#: .\cookbook\templates\meal_plan.html:217
#: .\cookbook\templates\meal_plan.html:294
msgid "Edit plan types"
-msgstr ""
+msgstr "Redigera plantyper"
#: .\cookbook\templates\meal_plan.html:219
msgid "Show help"
-msgstr ""
+msgstr "Visa hjälp"
#: .\cookbook\templates\meal_plan.html:220
msgid "Week iCal export"
-msgstr ""
+msgstr "Vecka iCal-export"
#: .\cookbook\templates\meal_plan.html:264
#: .\cookbook\templates\meal_plan_entry.html:18
msgid "Created by"
-msgstr ""
+msgstr "Skapad av"
#: .\cookbook\templates\meal_plan.html:270
#: .\cookbook\templates\meal_plan_entry.html:20
#: .\cookbook\templates\shopping_list.html:250
msgid "Shared with"
-msgstr ""
+msgstr "Delad med"
#: .\cookbook\templates\meal_plan.html:280
msgid "Add to Shopping"
-msgstr ""
+msgstr "Lägg till i inköpslista"
#: .\cookbook\templates\meal_plan.html:323
msgid "New meal type"
-msgstr ""
+msgstr "Ny måltidstyp"
#: .\cookbook\templates\meal_plan.html:338
msgid "Meal Plan Help"
-msgstr ""
+msgstr "Hjälp med måltidsplaner"
#: .\cookbook\templates\meal_plan.html:344
msgid ""
@@ -1272,273 +1313,319 @@ msgid ""
" merged.
Målplansmodulen tillåter planering av " +"måltider både med recept och anteckningar.
\n" +"Välj bara ett recept från listan över nyligen " +"visade recept eller sök på det du\n" +" vill och dra den till önskad planposition. " +"Du kan också lägga till en anteckning och en titel och\n" +" dra sedan receptet för att skapa en planpost " +"med en anpassad titel och anteckning. Skapar endast\n" +" Anteckningar är möjligt genom att dra rutan " +"Skapa anteckningar till planen.
\n" +"Klicka på ett recept för att öppna den " +"detaljerade vyn. Där kan du också lägga till den i\n" +" inköpslista. Du kan också lägga till alla " +"recept för en dag till inköpslistan genom att\n" +" klicka på kundvagnen högst upp i " +"tabellen.
\n" +"Eftersom ett vanligt fall är att planera " +"måltider tillsammans kan du definiera\n" +" användare som du vill dela din plan med i " +"inställningarna.\n" +"
\n" +"Du kan också redigera de typer av måltider du " +"vill planera. Om du delar din plan med\n" +" någon med\n" +" olika måltider, kommer deras måltidstyper " +"också att visas i din lista. Att förebygga\n" +" dubbletter (t.ex. Övrigt och Övrigt)\n" +" namnge dina måltidstyper på samma sätt som " +"användarna du delar dina måltider med och då kommer de att bli\n" +" sammanslagna.
\n" +" " #: .\cookbook\templates\meal_plan_entry.html:6 msgid "Meal Plan View" -msgstr "" +msgstr "Vy över måltidsplan" #: .\cookbook\templates\meal_plan_entry.html:50 msgid "Never cooked before." -msgstr "" +msgstr "Aldrig lagat mat förut." #: .\cookbook\templates\meal_plan_entry.html:76 msgid "Other meals on this day" -msgstr "" +msgstr "Andra måltider denna dag" #: .\cookbook\templates\no_groups_info.html:5 #: .\cookbook\templates\no_groups_info.html:12 msgid "No Permissions" -msgstr "" +msgstr "Inga behörigheter" #: .\cookbook\templates\no_groups_info.html:17 msgid "You do not have any groups and therefor cannot use this application." -msgstr "" +msgstr "Du har inga grupper och kan därför inte använda denna applikation." #: .\cookbook\templates\no_groups_info.html:18 #: .\cookbook\templates\no_perm_info.html:15 #: .\cookbook\templates\no_space_info.html:15 msgid "Please contact your administrator." -msgstr "" +msgstr "Kontakta din administratör." #: .\cookbook\templates\no_perm_info.html:5 #: .\cookbook\templates\no_perm_info.html:12 msgid "No Permission" -msgstr "" +msgstr "Ingen behörighet" #: .\cookbook\templates\no_perm_info.html:15 msgid "" "You do not have the required permissions to view this page or perform this " "action." msgstr "" +"Du har inte de nödvändiga behörigheterna för att visa den här sidan eller " +"utföra den här åtgärden." #: .\cookbook\templates\no_space_info.html:5 #: .\cookbook\templates\no_space_info.html:12 msgid "No Space" -msgstr "" +msgstr "Inget utrymme" #: .\cookbook\templates\no_space_info.html:15 msgid "You are not a member of any space." -msgstr "" +msgstr "Du är inte medlem i något utrymme." #: .\cookbook\templates\offline.html:6 msgid "Offline" -msgstr "" +msgstr "Offline" #: .\cookbook\templates\offline.html:19 msgid "You are currently offline!" -msgstr "" +msgstr "Du är för närvarande offline!" #: .\cookbook\templates\offline.html:20 msgid "" "The recipes listed below are available for offline viewing because you have " "recently viewed them. Keep in mind that data might be outdated." msgstr "" +"Recepten nedan är tillgängliga för offlinevisning eftersom du nyligen har " +"tittat på dem. Tänk på att data kan vara inaktuella." #: .\cookbook\templates\recipe_view.html:21 .\cookbook\templates\stats.html:47 msgid "Comments" -msgstr "" +msgstr "Kommentarer" #: .\cookbook\templates\recipe_view.html:44 .\cookbook\views\delete.py:118 #: .\cookbook\views\edit.py:170 msgid "Comment" -msgstr "" +msgstr "Kommentar" #: .\cookbook\templates\recipes_table.html:19 #: .\cookbook\templates\recipes_table.html:23 #: .\cookbook\templates\url_import.html:69 msgid "Recipe Image" -msgstr "" +msgstr "Receptbild" #: .\cookbook\templates\recipes_table.html:51 #: .\cookbook\templates\url_import.html:74 msgid "Preparation time ca." -msgstr "" +msgstr "Förberedelsetid ca." #: .\cookbook\templates\recipes_table.html:57 #: .\cookbook\templates\url_import.html:79 msgid "Waiting time ca." -msgstr "" +msgstr "Väntetid ca." #: .\cookbook\templates\recipes_table.html:60 msgid "External" -msgstr "" +msgstr "Extern" #: .\cookbook\templates\recipes_table.html:86 msgid "Log Cooking" -msgstr "" +msgstr "Logga matlagning" #: .\cookbook\templates\rest_framework\api.html:5 msgid "Recipe Home" -msgstr "" +msgstr "Recept Hem" #: .\cookbook\templates\settings.html:22 msgid "Account" -msgstr "" +msgstr "Konto" #: .\cookbook\templates\settings.html:38 msgid "Link social account" -msgstr "" +msgstr "Länka socialt konto" #: .\cookbook\templates\settings.html:42 msgid "Language" -msgstr "" +msgstr "Språk" #: .\cookbook\templates\settings.html:67 msgid "Style" -msgstr "" +msgstr "Stil" #: .\cookbook\templates\settings.html:79 msgid "API Token" -msgstr "" +msgstr "API Token" #: .\cookbook\templates\settings.html:80 msgid "" "You can use both basic authentication and token based authentication to " "access the REST API." msgstr "" +"Du kan använda både grundläggande autentisering och tokenbaserad " +"autentisering för att komma åt REST API." #: .\cookbook\templates\settings.html:92 msgid "" "Use the token as an Authorization header prefixed by the word token as shown " "in the following examples:" msgstr "" +"Använd token som en auktoriseringsrubrik med ordet token som prefix som " +"visas i följande exempel:" #: .\cookbook\templates\settings.html:94 msgid "or" -msgstr "" +msgstr "eller" #: .\cookbook\templates\setup.html:6 .\cookbook\templates\system.html:5 msgid "Cookbook Setup" -msgstr "" +msgstr "Kokboksinställning" #: .\cookbook\templates\setup.html:14 msgid "Setup" -msgstr "" +msgstr "Konfiguration" #: .\cookbook\templates\setup.html:15 msgid "" "To start using this application you must first create a superuser account." msgstr "" +"För att börja använda denna applikation måste du först skapa ett " +"superanvändarkonto." #: .\cookbook\templates\setup.html:20 msgid "Create Superuser account" -msgstr "" +msgstr "Skapa ett superanvändarkonto" #: .\cookbook\templates\shopping_list.html:75 msgid "Shopping Recipes" -msgstr "" +msgstr "Shopping recept" #: .\cookbook\templates\shopping_list.html:79 msgid "No recipes selected" -msgstr "" +msgstr "Inga recept har valts" #: .\cookbook\templates\shopping_list.html:146 msgid "Entry Mode" -msgstr "" +msgstr "Ingångsläge" #: .\cookbook\templates\shopping_list.html:154 msgid "Add Entry" -msgstr "" +msgstr "Lägg till post" #: .\cookbook\templates\shopping_list.html:170 msgid "Amount" -msgstr "" +msgstr "Belopp" #: .\cookbook\templates\shopping_list.html:226 msgid "Supermarket" -msgstr "" +msgstr "Mataffär" #: .\cookbook\templates\shopping_list.html:236 msgid "Select Supermarket" -msgstr "" +msgstr "Välj mataffär" #: .\cookbook\templates\shopping_list.html:260 msgid "Select User" -msgstr "" +msgstr "Välj användare" #: .\cookbook\templates\shopping_list.html:279 msgid "Finished" -msgstr "" +msgstr "Avslutad" #: .\cookbook\templates\shopping_list.html:292 msgid "You are offline, shopping list might not syncronize." -msgstr "" +msgstr "Du är offline, inköpslistan kanske inte synkroniseras." #: .\cookbook\templates\shopping_list.html:357 msgid "Copy/Export" -msgstr "" +msgstr "Kopiera/exportera" #: .\cookbook\templates\shopping_list.html:361 msgid "List Prefix" -msgstr "" +msgstr "Lista prefix" #: .\cookbook\templates\shopping_list.html:708 msgid "There was an error creating a resource!" -msgstr "" +msgstr "Det gick inte att skapa en resurs!" #: .\cookbook\templates\socialaccount\connections.html:4 #: .\cookbook\templates\socialaccount\connections.html:7 msgid "Account Connections" -msgstr "" +msgstr "Kontokopplingar" #: .\cookbook\templates\socialaccount\connections.html:10 msgid "" "You can sign in to your account using any of the following third party\n" " accounts:" msgstr "" +"Du kan logga in på ditt konto med någon av följande tredje parts\n" +" konton:" #: .\cookbook\templates\socialaccount\connections.html:36 msgid "Remove" -msgstr "" +msgstr "Ta bort" #: .\cookbook\templates\socialaccount\connections.html:44 msgid "" "You currently have no social network accounts connected to this account." msgstr "" +"Du har för närvarande inga sociala nätverkskonton kopplade till det här " +"kontot." #: .\cookbook\templates\socialaccount\connections.html:47 msgid "Add a 3rd Party Account" -msgstr "" +msgstr "Lägg till ett konto från tredje part" #: .\cookbook\templates\stats.html:4 msgid "Stats" -msgstr "" +msgstr "Statistik" #: .\cookbook\templates\stats.html:19 msgid "Number of objects" -msgstr "" +msgstr "Antal objekt" #: .\cookbook\templates\stats.html:30 msgid "Recipe Imports" -msgstr "" +msgstr "Receptimport" #: .\cookbook\templates\stats.html:38 msgid "Objects stats" -msgstr "" +msgstr "Objektstatistik" #: .\cookbook\templates\stats.html:41 msgid "Recipes without Keywords" -msgstr "" +msgstr "Recept utan nyckelord" #: .\cookbook\templates\stats.html:43 msgid "External Recipes" -msgstr "" +msgstr "Externa recept" #: .\cookbook\templates\stats.html:45 msgid "Internal Recipes" -msgstr "" +msgstr "Interna recept" #: .\cookbook\templates\system.html:21 .\cookbook\views\lists.py:115 msgid "Invite Links" -msgstr "" +msgstr "Inbjudningslänkar" #: .\cookbook\templates\system.html:22 msgid "Show Links" -msgstr "" +msgstr "Visa länkar" #: .\cookbook\templates\system.html:32 msgid "System Information" -msgstr "" +msgstr "Systeminformation" #: .\cookbook\templates\system.html:34 msgid "" @@ -1550,20 +1637,27 @@ msgid "" "recipes/releases\">here.\n" " " msgstr "" +"\n" +" Tandoor Recipes är ett gratisprogram med öppen källkod. Den finns " +"på\n" +" GitHub.\n" +" Ändringsloggar finns här.\n" +" " #: .\cookbook\templates\system.html:48 msgid "Media Serving" -msgstr "" +msgstr "Mediaservering" #: .\cookbook\templates\system.html:49 .\cookbook\templates\system.html:64 #: .\cookbook\templates\system.html:80 msgid "Warning" -msgstr "" +msgstr "Varning" #: .\cookbook\templates\system.html:49 .\cookbook\templates\system.html:64 #: .\cookbook\templates\system.html:80 .\cookbook\templates\system.html:95 msgid "Ok" -msgstr "" +msgstr "Ok" #: .\cookbook\templates\system.html:51 msgid "" @@ -1574,15 +1668,21 @@ msgid "" " your installation.\n" " " msgstr "" +"Att visa mediafiler direkt med gunicorn/python rekommenderas inte!\n" +" Följ stegen som beskrivs\n" +" här för att uppdatera\n" +" din installation.\n" +" " #: .\cookbook\templates\system.html:57 .\cookbook\templates\system.html:73 #: .\cookbook\templates\system.html:88 .\cookbook\templates\system.html:102 msgid "Everything is fine!" -msgstr "" +msgstr "Allting är bra!" #: .\cookbook\templates\system.html:62 msgid "Secret Key" -msgstr "" +msgstr "Hemlig nyckel" #: .\cookbook\templates\system.html:66 msgid "" @@ -1596,10 +1696,19 @@ msgid "" "file.\n" " " msgstr "" +"\n" +" Du har inte enSECRET_KEY konfigurerad i din ."
+"env-fil. Django ställde som standard till\n"
+" standardnyckel\n"
+" försedd med installationen som är allmänt känd och osäker! "
+"Vänligen ställ in\n"
+" SECRET_KEY i konfigurationsfilen .env."
+"\n"
+" "
#: .\cookbook\templates\system.html:78
msgid "Debug Mode"
-msgstr ""
+msgstr "Felsökningsläge"
#: .\cookbook\templates\system.html:82
msgid ""
@@ -1611,14 +1720,20 @@ msgid ""
"file.\n"
" "
msgstr ""
+"\n"
+" Denna applikation körs fortfarande i felsökningsläge. Detta "
+"behövs sannolikt inte. Stäng av felsökningsläget med\n"
+" att sätta\n"
+" DEBUG=0 i konfigurationsfilen .env.\n"
+" "
#: .\cookbook\templates\system.html:93
msgid "Database"
-msgstr ""
+msgstr "Databas"
#: .\cookbook\templates\system.html:95
msgid "Info"
-msgstr ""
+msgstr "Info"
#: .\cookbook\templates\system.html:97
msgid ""
@@ -1628,44 +1743,49 @@ msgid ""
" features only work with postgres databases.\n"
" "
msgstr ""
+"\n"
+" Denna applikation körs inte med en Postgres-databasbackend. "
+"Detta är ok men rekommenderas inte då vissa\n"
+" funktioner bara fungerar med postgres-databaser.\n"
+" "
#: .\cookbook\templates\url_import.html:5
msgid "URL Import"
-msgstr ""
+msgstr "URL-import"
#: .\cookbook\templates\url_import.html:23
msgid "Enter website URL"
-msgstr ""
+msgstr "Ange webbadress"
#: .\cookbook\templates\url_import.html:36
msgid "Enter json directly"
-msgstr ""
+msgstr "Ange json direkt"
#: .\cookbook\templates\url_import.html:57
msgid "Recipe Name"
-msgstr ""
+msgstr "Receptnamn"
#: .\cookbook\templates\url_import.html:62
msgid "Recipe Description"
-msgstr ""
+msgstr "Receptbeskrivning"
#: .\cookbook\templates\url_import.html:123
#: .\cookbook\templates\url_import.html:155
#: .\cookbook\templates\url_import.html:211
msgid "Select one"
-msgstr ""
+msgstr "Välj en"
#: .\cookbook\templates\url_import.html:225
msgid "All Keywords"
-msgstr ""
+msgstr "Alla nyckelord"
#: .\cookbook\templates\url_import.html:228
msgid "Import all keywords, not only the ones already existing."
-msgstr ""
+msgstr "Importera alla sökord, inte bara de som redan finns."
#: .\cookbook\templates\url_import.html:255
msgid "Information"
-msgstr ""
+msgstr "Information"
#: .\cookbook\templates\url_import.html:257
msgid ""
@@ -1677,157 +1797,168 @@ msgid ""
"data feel free to post an example in the\n"
" github issues."
msgstr ""
+" Endast webbplatser som innehåller ld+json- eller mikrodatainformation kan "
+"för närvarande\n"
+" importeras. De flesta stora receptsidor "
+"stödjer detta. Om din webbplats inte kan importeras men\n"
+" tror du\n"
+" den har förmodligen någon form av "
+"strukturerad data, posta gärna ett exempel i\n"
+" github issues."
#: .\cookbook\templates\url_import.html:265
msgid "Google ld+json Info"
-msgstr ""
+msgstr "Google ld+json info"
#: .\cookbook\templates\url_import.html:268
msgid "GitHub Issues"
-msgstr ""
+msgstr "GitHub Issues"
#: .\cookbook\templates\url_import.html:270
msgid "Recipe Markup Specification"
-msgstr ""
+msgstr "Specifikation för receptmärkning"
#: .\cookbook\views\api.py:71
msgid "Parameter updated_at incorrectly formatted"
-msgstr ""
+msgstr "Parameter updated_at felaktigt formaterad"
#: .\cookbook\views\api.py:455 .\cookbook\views\views.py:226
msgid "This feature is not available in the demo version!"
-msgstr ""
+msgstr "Denna funktion är inte tillgänglig i demoversionen!"
#: .\cookbook\views\api.py:478
msgid "Sync successful!"
-msgstr ""
+msgstr "Synkroniseringen lyckades!"
#: .\cookbook\views\api.py:483
msgid "Error synchronizing with Storage"
-msgstr ""
+msgstr "Fel vid synkronisering med lagring"
#: .\cookbook\views\api.py:556 .\cookbook\views\api.py:576
msgid "The requested page could not be found."
-msgstr ""
+msgstr "Sidan kunde inte hittas."
#: .\cookbook\views\api.py:585
msgid ""
"The requested page refused to provide any information (Status Code 403)."
-msgstr ""
+msgstr "Den begärda sidan vägrade att ge någon information (Statuskod 403)."
#: .\cookbook\views\api.py:611
msgid "Could not parse correctly..."
-msgstr ""
+msgstr "Kunde inte tolka korrekt..."
#: .\cookbook\views\data.py:94
#, python-format
msgid "Batch edit done. %(count)d recipe was updated."
msgid_plural "Batch edit done. %(count)d Recipes where updated."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Batchredigering klar. %(count)d recept uppdaterades."
+msgstr[1] "Batchredigering klar. %(count)d recept uppdaterades."
#: .\cookbook\views\delete.py:72
msgid "Monitor"
-msgstr ""
+msgstr "Övervaka"
#: .\cookbook\views\delete.py:96 .\cookbook\views\lists.py:102
#: .\cookbook\views\new.py:86
msgid "Storage Backend"
-msgstr ""
+msgstr "Backend för lagring"
#: .\cookbook\views\delete.py:106
msgid ""
"Could not delete this storage backend as it is used in at least one monitor."
msgstr ""
+"Det gick inte att ta bort denna lagringsbackend eftersom den används i minst "
+"en övervakning."
#: .\cookbook\views\delete.py:129 .\cookbook\views\edit.py:204
#: .\cookbook\views\new.py:144
msgid "Recipe Book"
-msgstr ""
+msgstr "Receptbok"
#: .\cookbook\views\delete.py:141
msgid "Bookmarks"
-msgstr ""
+msgstr "Bokmärken"
#: .\cookbook\views\delete.py:163 .\cookbook\views\new.py:214
msgid "Invite Link"
-msgstr ""
+msgstr "Inbjudningslänk"
#: .\cookbook\views\edit.py:110
msgid "Food"
-msgstr ""
+msgstr "Livsmedel"
#: .\cookbook\views\edit.py:119
msgid "You cannot edit this storage!"
-msgstr ""
+msgstr "Du kan inte redigera denna lagring!"
#: .\cookbook\views\edit.py:139
msgid "Storage saved!"
-msgstr ""
+msgstr "Lagring sparad!"
#: .\cookbook\views\edit.py:145
msgid "There was an error updating this storage backend!"
-msgstr ""
+msgstr "Det uppstod ett fel när denna lagringsbackend skulle uppdateras!"
#: .\cookbook\views\edit.py:156
msgid "Storage"
-msgstr ""
+msgstr "Lagring"
#: .\cookbook\views\edit.py:252
msgid "Changes saved!"
-msgstr ""
+msgstr "Ändringar sparade!"
#: .\cookbook\views\edit.py:256
msgid "Error saving changes!"
-msgstr ""
+msgstr "Det gick inte att spara ändringar!"
#: .\cookbook\views\edit.py:289
msgid "Units merged!"
-msgstr ""
+msgstr "Enheter sammanslagna!"
#: .\cookbook\views\edit.py:291 .\cookbook\views\edit.py:307
msgid "Cannot merge with the same object!"
-msgstr ""
+msgstr "Kan inte slås samman med samma objekt!"
#: .\cookbook\views\edit.py:305
msgid "Foods merged!"
-msgstr ""
+msgstr "Livsmedel sammanslagna!"
#: .\cookbook\views\import_export.py:73
msgid "Importing is not implemented for this provider"
-msgstr ""
+msgstr "Importering är inte implementerad för denna leverantör"
#: .\cookbook\views\import_export.py:92
msgid "Exporting is not implemented for this provider"
-msgstr ""
+msgstr "Export är inte implementerat för denna leverantör"
#: .\cookbook\views\lists.py:40
msgid "Import Log"
-msgstr ""
+msgstr "Import logg"
#: .\cookbook\views\lists.py:53
msgid "Discovery"
-msgstr ""
+msgstr "Upptäck"
#: .\cookbook\views\lists.py:85
msgid "Shopping Lists"
-msgstr ""
+msgstr "Inköpslistor"
#: .\cookbook\views\new.py:111
msgid "Imported new recipe!"
-msgstr ""
+msgstr "Importerat nytt recept!"
#: .\cookbook\views\new.py:114
msgid "There was an error importing this recipe!"
-msgstr ""
+msgstr "Det uppstod ett fel när det här receptet skulle importeras!"
#: .\cookbook\views\views.py:123
msgid "You do not have the required permissions to perform this action!"
msgstr ""
+"Du har inte de nödvändiga behörigheterna för att utföra den här åtgärden!"
#: .\cookbook\views\views.py:134
msgid "Comment saved!"
-msgstr ""
+msgstr "Kommentaren sparad!"
#: .\cookbook\views\views.py:326
msgid ""
@@ -1835,19 +1966,22 @@ msgid ""
"forgotten your superuser credentials please consult the django documentation "
"on how to reset passwords."
msgstr ""
+"Inställningssidan kan endast användas för att skapa den första användaren! "
+"Om du har glömt dina superanvändaruppgifter, vänligen läs django-"
+"dokumentationen om hur du återställer lösenord."
#: .\cookbook\views\views.py:333 .\cookbook\views\views.py:378
msgid "Passwords dont match!"
-msgstr ""
+msgstr "Lösenord matchar inte!"
#: .\cookbook\views\views.py:349 .\cookbook\views\views.py:385
msgid "User has been created, please login!"
-msgstr ""
+msgstr "Användaren har skapats, vänligen logga in!"
#: .\cookbook\views\views.py:365
msgid "Malformed Invite Link supplied!"
-msgstr ""
+msgstr "Felaktig inbjudningslänk!"
#: .\cookbook\views\views.py:405
msgid "Invite Link not valid or already used!"
-msgstr ""
+msgstr "Inbjudningslänken är inte giltig eller redan använd!"
diff --git a/cookbook/managers.py b/cookbook/managers.py
index 636ed896c..5bfc60e43 100644
--- a/cookbook/managers.py
+++ b/cookbook/managers.py
@@ -16,6 +16,7 @@ DICTIONARY = {
'it': 'italian',
# 'lv': 'Latvian',
'es': 'spanish',
+ 'sv': 'swedish',
}
diff --git a/cookbook/serializer.py b/cookbook/serializer.py
index bf9fc7385..c1e64a300 100644
--- a/cookbook/serializer.py
+++ b/cookbook/serializer.py
@@ -42,7 +42,8 @@ class ExtendedRecipeMixin(serializers.ModelSerializer):
api_serializer = None
# extended values are computationally expensive and not needed in normal circumstances
try:
- if str2bool(self.context['request'].query_params.get('extended', False)) and self.__class__ == api_serializer:
+ if str2bool(
+ self.context['request'].query_params.get('extended', False)) and self.__class__ == api_serializer:
return fields
except (AttributeError, KeyError) as e:
pass
@@ -96,7 +97,8 @@ class CustomOnHandField(serializers.Field):
shared_users = getattr(request, '_shared_users', None)
if shared_users is None:
try:
- shared_users = [x.id for x in list(self.context['request'].user.get_shopping_share())] + [self.context['request'].user.id]
+ shared_users = [x.id for x in list(self.context['request'].user.get_shopping_share())] + [
+ self.context['request'].user.id]
except AttributeError: # Anonymous users (using share links) don't have shared users
shared_users = []
return obj.onhand_users.filter(id__in=shared_users).exists()
@@ -170,7 +172,8 @@ class FoodInheritFieldSerializer(WritableNestedModelSerializer):
class UserPreferenceSerializer(WritableNestedModelSerializer):
- food_inherit_default = FoodInheritFieldSerializer(source='space.food_inherit', many=True, allow_null=True, required=False, read_only=True)
+ food_inherit_default = FoodInheritFieldSerializer(source='space.food_inherit', many=True, allow_null=True,
+ required=False, read_only=True)
plan_share = UserNameSerializer(many=True, allow_null=True, required=False, read_only=True)
shopping_share = UserNameSerializer(many=True, allow_null=True, required=False)
food_children_exist = serializers.SerializerMethodField('get_food_children_exist')
@@ -189,9 +192,12 @@ class UserPreferenceSerializer(WritableNestedModelSerializer):
class Meta:
model = UserPreference
fields = (
- 'user', 'theme', 'nav_color', 'default_unit', 'default_page', 'use_fractions', 'use_kj', 'search_style', 'show_recent', 'plan_share',
- 'ingredient_decimals', 'comments', 'shopping_auto_sync', 'mealplan_autoadd_shopping', 'food_inherit_default', 'default_delay',
- 'mealplan_autoinclude_related', 'mealplan_autoexclude_onhand', 'shopping_share', 'shopping_recent_days', 'csv_delim', 'csv_prefix',
+ 'user', 'theme', 'nav_color', 'default_unit', 'default_page', 'use_fractions', 'use_kj', 'search_style',
+ 'show_recent', 'plan_share',
+ 'ingredient_decimals', 'comments', 'shopping_auto_sync', 'mealplan_autoadd_shopping',
+ 'food_inherit_default', 'default_delay',
+ 'mealplan_autoinclude_related', 'mealplan_autoexclude_onhand', 'shopping_share', 'shopping_recent_days',
+ 'csv_delim', 'csv_prefix',
'filter_to_supermarket', 'shopping_add_onhand', 'left_handed', 'food_children_exist'
)
@@ -393,7 +399,6 @@ class FoodSimpleSerializer(serializers.ModelSerializer):
class Meta:
model = Food
fields = ('id', 'name')
- read_only_fields = ['id', 'name']
class FoodSerializer(UniqueFieldsMixin, WritableNestedModelSerializer, ExtendedRecipeMixin):
@@ -416,7 +421,8 @@ class FoodSerializer(UniqueFieldsMixin, WritableNestedModelSerializer, ExtendedR
shared_users = getattr(request, '_shared_users', None)
if shared_users is None:
try:
- shared_users = [x.id for x in list(self.context['request'].user.get_shopping_share())] + [self.context['request'].user.id]
+ shared_users = [x.id for x in list(self.context['request'].user.get_shopping_share())] + [
+ self.context['request'].user.id]
except AttributeError:
shared_users = []
filter = Q(id__in=obj.substitute.all())
@@ -487,11 +493,15 @@ class FoodSerializer(UniqueFieldsMixin, WritableNestedModelSerializer, ExtendedR
read_only_fields = ('id', 'numchild', 'parent', 'image', 'numrecipe')
-class IngredientSerializer(WritableNestedModelSerializer):
- food = FoodSerializer(allow_null=True)
+class IngredientSimpleSerializer(WritableNestedModelSerializer):
+ food = FoodSimpleSerializer(allow_null=True)
unit = UnitSerializer(allow_null=True)
+ used_in_recipes = serializers.SerializerMethodField('get_used_in_recipes')
amount = CustomDecimalField()
+ def get_used_in_recipes(self, obj):
+ return list(Recipe.objects.filter(steps__ingredients=obj.id).values('id', 'name'))
+
def create(self, validated_data):
validated_data['space'] = self.context['request'].space
return super().create(validated_data)
@@ -504,10 +514,14 @@ class IngredientSerializer(WritableNestedModelSerializer):
model = Ingredient
fields = (
'id', 'food', 'unit', 'amount', 'note', 'order',
- 'is_header', 'no_amount', 'original_text'
+ 'is_header', 'no_amount', 'original_text', 'used_in_recipes',
)
+class IngredientSerializer(IngredientSimpleSerializer):
+ food = FoodSerializer(allow_null=True)
+
+
class StepSerializer(WritableNestedModelSerializer, ExtendedRecipeMixin):
ingredients = IngredientSerializer(many=True)
ingredients_markdown = serializers.SerializerMethodField('get_ingredients_markdown')
@@ -702,7 +716,8 @@ class RecipeBookEntrySerializer(serializers.ModelSerializer):
def create(self, validated_data):
book = validated_data['book']
recipe = validated_data['recipe']
- if not book.get_owner() == self.context['request'].user and not self.context['request'].user in book.get_shared():
+ if not book.get_owner() == self.context['request'].user and not self.context[
+ 'request'].user in book.get_shared():
raise NotFound(detail=None, code=None)
obj, created = RecipeBookEntry.objects.get_or_create(book=book, recipe=recipe)
return obj
@@ -731,7 +746,7 @@ class MealPlanSerializer(SpacedModelSerializer, WritableNestedModelSerializer):
def create(self, validated_data):
validated_data['created_by'] = self.context['request'].user
mealplan = super().create(validated_data)
- if self.context['request'].data.get('addshopping', False):
+ if self.context['request'].data.get('addshopping', False) and self.context['request'].data.get('recipe', None):
SLR = RecipeShoppingEditor(user=validated_data['created_by'], space=validated_data['space'])
SLR.create(mealplan=mealplan, servings=validated_data['servings'])
return mealplan
@@ -755,13 +770,14 @@ class ShoppingListRecipeSerializer(serializers.ModelSerializer):
def get_name(self, obj):
if not isinstance(value := obj.servings, Decimal):
value = Decimal(value)
- value = value.quantize(Decimal(1)) if value == value.to_integral() else value.normalize() # strips trailing zero
+ value = value.quantize(
+ Decimal(1)) if value == value.to_integral() else value.normalize() # strips trailing zero
return (
- obj.name
- or getattr(obj.mealplan, 'title', None)
- or (d := getattr(obj.mealplan, 'date', None)) and ': '.join([obj.mealplan.recipe.name, str(d)])
- or obj.recipe.name
- ) + f' ({value:.2g})'
+ obj.name
+ or getattr(obj.mealplan, 'title', None)
+ or (d := getattr(obj.mealplan, 'date', None)) and ': '.join([obj.mealplan.recipe.name, str(d)])
+ or obj.recipe.name
+ ) + f' ({value:.2g})'
def update(self, instance, validated_data):
# TODO remove once old shopping list
@@ -832,7 +848,8 @@ class ShoppingListEntrySerializer(WritableNestedModelSerializer):
class Meta:
model = ShoppingListEntry
fields = (
- 'id', 'list_recipe', 'food', 'unit', 'ingredient', 'ingredient_note', 'amount', 'order', 'checked', 'recipe_mealplan',
+ 'id', 'list_recipe', 'food', 'unit', 'ingredient', 'ingredient_note', 'amount', 'order', 'checked',
+ 'recipe_mealplan',
'created_by', 'created_at', 'completed_at', 'delay_until'
)
read_only_fields = ('id', 'created_by', 'created_at',)
@@ -930,7 +947,10 @@ class ExportLogSerializer(serializers.ModelSerializer):
class Meta:
model = ExportLog
- fields = ('id', 'type', 'msg', 'running', 'total_recipes', 'exported_recipes', 'cache_duration', 'possibly_not_expired', 'created_by', 'created_at')
+ fields = (
+ 'id', 'type', 'msg', 'running', 'total_recipes', 'exported_recipes', 'cache_duration',
+ 'possibly_not_expired',
+ 'created_by', 'created_at')
read_only_fields = ('created_by',)
@@ -1042,10 +1062,12 @@ class RecipeExportSerializer(WritableNestedModelSerializer):
class RecipeShoppingUpdateSerializer(serializers.ModelSerializer):
- list_recipe = serializers.IntegerField(write_only=True, allow_null=True, required=False, help_text=_("Existing shopping list to update"))
+ list_recipe = serializers.IntegerField(write_only=True, allow_null=True, required=False,
+ help_text=_("Existing shopping list to update"))
ingredients = serializers.IntegerField(write_only=True, allow_null=True, required=False, help_text=_(
"List of ingredient IDs from the recipe to add, if not provided all ingredients will be added."))
- servings = serializers.IntegerField(default=1, write_only=True, allow_null=True, required=False, help_text=_("Providing a list_recipe ID and servings of 0 will delete that shopping list."))
+ servings = serializers.IntegerField(default=1, write_only=True, allow_null=True, required=False, help_text=_(
+ "Providing a list_recipe ID and servings of 0 will delete that shopping list."))
class Meta:
model = Recipe
@@ -1053,9 +1075,12 @@ class RecipeShoppingUpdateSerializer(serializers.ModelSerializer):
class FoodShoppingUpdateSerializer(serializers.ModelSerializer):
- amount = serializers.IntegerField(write_only=True, allow_null=True, required=False, help_text=_("Amount of food to add to the shopping list"))
- unit = serializers.IntegerField(write_only=True, allow_null=True, required=False, help_text=_("ID of unit to use for the shopping list"))
- delete = serializers.ChoiceField(choices=['true'], write_only=True, allow_null=True, allow_blank=True, help_text=_("When set to true will delete all food from active shopping lists."))
+ amount = serializers.IntegerField(write_only=True, allow_null=True, required=False,
+ help_text=_("Amount of food to add to the shopping list"))
+ unit = serializers.IntegerField(write_only=True, allow_null=True, required=False,
+ help_text=_("ID of unit to use for the shopping list"))
+ delete = serializers.ChoiceField(choices=['true'], write_only=True, allow_null=True, allow_blank=True,
+ help_text=_("When set to true will delete all food from active shopping lists."))
class Meta:
model = Recipe
diff --git a/cookbook/static/css/app.min.css b/cookbook/static/css/app.min.css
index a100e2c28..2167eb22d 100644
--- a/cookbook/static/css/app.min.css
+++ b/cookbook/static/css/app.min.css
@@ -1,3 +1,15 @@
+.brand-icon {
+ height: 40px;
+}
+
+@media (max-width: 991.98px) {
+ .menu-dropdown-text {
+ font-size: 14px;
+ font-weight: 200;
+ }
+}
+
+
.spinner-tandoor {
animation: rotation 3s infinite linear;
content: url("../assets/spinner.svg");
diff --git a/cookbook/templates/base.html b/cookbook/templates/base.html
index 4b10cf766..625a96fec 100644
--- a/cookbook/templates/base.html
+++ b/cookbook/templates/base.html
@@ -56,21 +56,46 @@
{% block extra_head %}
{% endblock %}
+
+
-