diff --git a/.env.template b/.env.template index 635e079c97..2bdecc834d 100644 --- a/.env.template +++ b/.env.template @@ -45,7 +45,8 @@ SHOPPING_MIN_AUTOSYNC_INTERVAL=5 # Default for user setting sticky navbar # STICKY_NAV_PREF_DEFAULT=1 -# If base URL is something other than just / (you are serving a subfolder in your proxy for instance http://recipe_app/recipes/) +# If base URL is something other than just / (you are serving a subfolder in your proxy for instance http://recipe_app/recipes/) +# Be sure to not have a trailing slash: e.g. '/recipes' instead of '/recipes/' # SCRIPT_NAME=/recipes # If staticfiles are stored at a different location uncomment and change accordingly, MUST END IN / @@ -145,3 +146,7 @@ REVERSE_PROXY_AUTH=0 #AUTH_LDAP_BIND_DN= #AUTH_LDAP_BIND_PASSWORD= #AUTH_LDAP_USER_SEARCH_BASE_DN= + +# Enables exporting PDF (see export docs) +# Disabled by default, uncomment to enable +# ENABLE_PDF_EXPORT=1 diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index f6e365af74..0000000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -name: Bug report -about: Create a report to help us improve -title: '' -labels: '' -assignees: '' - ---- - -### Version -Please provide your current version (can be found on the system page since v0.8.4) -Version: - -### Bug description -A clear and concise description of what the bug is. diff --git a/.github/ISSUE_TEMPLATE/bug_report.md.bak b/.github/ISSUE_TEMPLATE/bug_report.md.bak new file mode 100644 index 0000000000..5cb51e2991 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md.bak @@ -0,0 +1,81 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: '' +assignees: '' + +--- + +## Version + +**Tandoor-Version:** + +## Setup configuration + + +### Setup +- [ ] Docker / Docker-Compose +- [ ] Unraid +- [ ] Synology +- [ ] Kubernetes +- [ ] Manual setup +- [ ] Others (please state below) + +### Reverse Proxy +- [ ] No reverse proxy +- [ ] jwilder's nginx proxy +- [ ] Nginx proxy manager (NPM) +- [ ] SWAG +- [ ] Caddy +- [ ] Traefik +- [ ] Others (please state below) + + +**Additional information:** + +## Bug description +A clear and concise description of what the bug is. + + + +## Logs + + +
+ Web-Container-Logs + + + + ``` + Replace me with logs + ``` +
+ +
+ DB-Container-Logs + + + + ``` + Replace me with logs + ``` +
+ +
+ Nginx-Container-Logs + + + + ``` + Replace me with logs + ``` +
diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 0000000000..e5e1c3beab --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,64 @@ +name: Bug Report +description: "Create a report to help us improve" +#title: "" +#labels: ["Bug"] +body: + - type: markdown + attributes: + value: | + Thanks for taking the time to fill out this bug report! + - type: input + id: version + attributes: + label: Tandoor Version + description: "What version of Tandoor are you using? (can be found on the system page since v0.8.4)" + validations: + required: true + - type: dropdown + id: setup + attributes: + label: Setup + description: "How is your Tandoor instance set up?" + options: + - Docker / Docker-Compose + - Unraid + - Synology + - Kubernetes + - Manual Setup + - Others (please state below) + validations: + required: true + - type: dropdown + id: reverse-proxy + attributes: + label: "Reverse Proxy" + description: "What reverse proxy do you use with Tandoor?" + options: + - No reverse proxy + - jwilder's nginx proxy + - Nginx Proxy Manager (NPM) + - SWAG + - Caddy + - Traefik + - Apache2 + - Others (please state below) + validations: + required: true + - type: input + id: other + attributes: + label: Other + description: "In case you chose 'Others' above, please provide more info here." + - type: textarea + id: bug-descr + attributes: + label: Bug description + description: "Please accurately describe the bug you encountered." + validations: + required: true + - type: textarea + id: logs + attributes: + label: Relevant logs + description: Please copy and paste any relevant logs. This will be automatically formatted into code, so no need for backticks. + render: shell diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000000..f867d5c8de --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,5 @@ +blank_issues_enabled: true +contact_links: + - name: FAQs + url: https://docs.tandoor.dev/faq/ + about: Please take a look at the FAQs before creating a bug ticket. diff --git a/.github/ISSUE_TEMPLATE/doc_issue.yml b/.github/ISSUE_TEMPLATE/doc_issue.yml new file mode 100644 index 0000000000..43bbf75abb --- /dev/null +++ b/.github/ISSUE_TEMPLATE/doc_issue.yml @@ -0,0 +1,40 @@ +name: Documentation Issue +description: "Create a report to help us improve" +#title: "" +labels: ["documentation"] +body: + - type: markdown + attributes: + value: | + Thanks for taking the time to fill out this documentation issue report! + - type: input + id: docs-link + attributes: + label: Documentation link + description: "Please provide a link to the corresponding documentation site on docs.tandoor.dev" + - type: dropdown + id: section + attributes: + label: Affected section + description: "What part of the documentation is the issue about?" + options: + - Installation + - Features + - System + - FAQ + - Does not exist yet + - Other (please state below) + validations: + required: true + - type: input + id: other + attributes: + label: Other + description: "In case you chose 'Other' above, please provide more info here." + - type: textarea + id: descr + attributes: + label: Issue description + description: "Please accurately describe the documentation issue you are seeing." + validations: + required: true diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md.bak similarity index 100% rename from .github/ISSUE_TEMPLATE/feature_request.md rename to .github/ISSUE_TEMPLATE/feature_request.md.bak diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml new file mode 100644 index 0000000000..ad823cfacc --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -0,0 +1,39 @@ +name: Feature Request +description: "Suggest an idea for this project" +#title: "" +labels: ["enhancement"] +body: + - type: markdown + attributes: + value: | + Thanks for taking the time to fill out this feature request! + - type: textarea + id: problem + attributes: + label: "Is your feature request related to a problem? Please describe." + description: "A clear and concise description of what the problem is. Ex. I'm always frustrated when..." + - type: textarea + id: solution + attributes: + label: "Describe the solution you'd like" + description: "A clear and concise description of what you want to happen." + validations: + required: true + - type: textarea + id: alternatives + attributes: + label: "Describe alternatives you've considered" + description: "A clear and concise description of any alternative solutions or features you've considered." + - type: textarea + id: additional + attributes: + label: "Additional context" + description: "Add any other context or screenshots about the feature request here." + - type: checkboxes + attributes: + label: "Contribute" + description: "Are you willing and able to help develop this feature?" + options: + - label: "Yes" + - label: "Partly" + - label: "No" diff --git a/.github/ISSUE_TEMPLATE/help-request.md b/.github/ISSUE_TEMPLATE/help-request.md.bak similarity index 100% rename from .github/ISSUE_TEMPLATE/help-request.md rename to .github/ISSUE_TEMPLATE/help-request.md.bak diff --git a/.github/ISSUE_TEMPLATE/help_request.yml b/.github/ISSUE_TEMPLATE/help_request.yml new file mode 100644 index 0000000000..55c904ee53 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/help_request.yml @@ -0,0 +1,82 @@ +name: Help request +description: "If there is anything wrong with your setup" +#title: "" +labels: ["setup issue"] +body: + - type: markdown + attributes: + value: | + Thanks for taking the time to fill out this help request! + - type: textarea + id: issue + attributes: + label: Issue + description: "Please describe your problem here." + validations: + required: true + - type: input + id: version + attributes: + label: Tandoor Version + description: "What version of Tandoor are you using? (can be found on the system page since v0.8.4)" + validations: + required: true + - type: input + id: os + attributes: + label: OS Version + description: "E.g. Ubuntu 20.02" + validations: + required: true + - type: dropdown + id: setup + attributes: + label: Setup + description: "How is your Tandoor instance set up?" + options: + - Docker / Docker-Compose + - Unraid + - Synology + - Kubernetes + - Manual Setup + - Others (please state below) + validations: + required: true + - type: dropdown + id: reverse-proxy + attributes: + label: "Reverse Proxy" + description: "What reverse proxy do you use with Tandoor?" + options: + - No reverse proxy + - jwilder's nginx proxy + - Nginx Proxy Manager (NPM) + - SWAG + - Caddy + - Traefik + - Others (please state below) + validations: + required: true + - type: input + id: other + attributes: + label: Other + description: "In case you chose 'Others' above or have more info, please provide additional details here." + - type: textarea + id: env + attributes: + label: Environment file + description: "Please include your `.env` config file (**make sure to remove/replace all secrets**)" + render: shell + - type: textarea + id: docker-compose + attributes: + label: Docker-Compose file + description: "When running with docker compose please provide your `docker-compose.yml`" + render: shell + - type: textarea + id: logs + attributes: + label: Relevant logs + description: "If you feel like there is anything interesting please post the output of `docker-compose logs` at container startup and when the issue happens." + render: shell diff --git a/.github/ISSUE_TEMPLATE/url_import.md b/.github/ISSUE_TEMPLATE/url_import.md.bak similarity index 100% rename from .github/ISSUE_TEMPLATE/url_import.md rename to .github/ISSUE_TEMPLATE/url_import.md.bak diff --git a/.github/ISSUE_TEMPLATE/website_import.yml b/.github/ISSUE_TEMPLATE/website_import.yml new file mode 100644 index 0000000000..aeba4fbd22 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/website_import.yml @@ -0,0 +1,36 @@ +name: Website Import +description: "Anything related to website imports" +#title: "" +#labels: ["enhancement"] +body: + - type: markdown + attributes: + value: | + Thanks for taking the time to fill out this website import form! + - type: input + id: version + attributes: + label: Tandoor Version + description: "What version of Tandoor are you using? (can be found on the system page since v0.8.4)" + validations: + required: true + - type: input + id: url + attributes: + label: Import URL + description: "Exact URL you are trying to import from." + validations: + required: true + - type: textarea + id: bug-descr + attributes: + label: "When did the issue happen?" + description: "When pressing the search button with the url / when importing after the page has loaded / ..." + validations: + required: true + - type: textarea + id: logs + attributes: + label: Response / message shown + description: Please copy and paste any relevant logs or responses / messages which are shown in Tandoor. This will be automatically formatted into code, so no need for backticks. + render: shell diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a844103f47..fc3c578aea 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,4 +1,4 @@ -name: Continous Integration +name: Continuous Integration on: [push] diff --git a/README.md b/README.md index cd6442de97..7af8d87975 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@

The recipe manager that allows you to manage your ever growing collection of digital recipes.

- + diff --git a/SECURITY.md b/SECURITY.md index f163a7eb5c..e555834865 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -7,4 +7,4 @@ Since this software is still considered beta/WIP support is always only given fo ## Reporting a Vulnerability Please open a normal public issue if you have any security related concerns. If you feel like the issue should not be discussed in -public just open a generic issue and we will discuss further communitcation there (since GitHub does not allow everyone to create a security advisory :/). +public just open a generic issue and we will discuss further communication there (since GitHub does not allow everyone to create a security advisory :/). diff --git a/cookbook/admin.py b/cookbook/admin.py index e53a27a86d..5c32c168ec 100644 --- a/cookbook/admin.py +++ b/cookbook/admin.py @@ -1,23 +1,22 @@ from django.conf import settings from django.contrib import admin +from django.contrib.auth.admin import UserAdmin +from django.contrib.auth.models import Group, User from django.contrib.postgres.search import SearchVector +from django.utils import translation +from django_scopes import scopes_disabled from treebeard.admin import TreeAdmin from treebeard.forms import movenodeform_factory -from django.contrib.auth.admin import UserAdmin -from django.contrib.auth.models import User, Group -from django_scopes import scopes_disabled -from django.utils import translation - -from .models import (Comment, CookLog, Food, Ingredient, InviteLink, Keyword, - MealPlan, MealType, NutritionInformation, Recipe, - RecipeBook, RecipeBookEntry, RecipeImport, ShareLink, - ShoppingList, ShoppingListEntry, ShoppingListRecipe, - Space, Step, Storage, Sync, SyncLog, Unit, UserPreference, - ViewLog, Supermarket, SupermarketCategory, SupermarketCategoryRelation, - ImportLog, TelegramBot, BookmarkletImport, UserFile, SearchPreference) from cookbook.managers import DICTIONARY +from .models import (BookmarkletImport, Comment, CookLog, Food, FoodInheritField, ImportLog, + Ingredient, InviteLink, Keyword, MealPlan, MealType, NutritionInformation, + Recipe, RecipeBook, RecipeBookEntry, RecipeImport, SearchPreference, ShareLink, + ShoppingList, ShoppingListEntry, ShoppingListRecipe, Space, Step, Storage, + Supermarket, SupermarketCategory, SupermarketCategoryRelation, Sync, SyncLog, + TelegramBot, Unit, UserFile, UserPreference, ViewLog, Automation) + class CustomUserAdmin(UserAdmin): def has_add_permission(self, request, obj=None): @@ -30,11 +29,52 @@ def has_add_permission(self, request, obj=None): admin.site.unregister(Group) +@admin.action(description='Delete all data from a space') +def delete_space_action(modeladmin, request, queryset): + for space in queryset: + CookLog.objects.filter(space=space).delete() + ViewLog.objects.filter(space=space).delete() + ImportLog.objects.filter(space=space).delete() + BookmarkletImport.objects.filter(space=space).delete() + + Comment.objects.filter(recipe__space=space).delete() + Keyword.objects.filter(space=space).delete() + Ingredient.objects.filter(space=space).delete() + Food.objects.filter(space=space).delete() + Unit.objects.filter(space=space).delete() + Step.objects.filter(space=space).delete() + NutritionInformation.objects.filter(space=space).delete() + RecipeBookEntry.objects.filter(book__space=space).delete() + RecipeBook.objects.filter(space=space).delete() + MealType.objects.filter(space=space).delete() + MealPlan.objects.filter(space=space).delete() + ShareLink.objects.filter(space=space).delete() + Recipe.objects.filter(space=space).delete() + + RecipeImport.objects.filter(space=space).delete() + SyncLog.objects.filter(sync__space=space).delete() + Sync.objects.filter(space=space).delete() + Storage.objects.filter(space=space).delete() + + ShoppingListEntry.objects.filter(shoppinglist__space=space).delete() + ShoppingListRecipe.objects.filter(shoppinglist__space=space).delete() + ShoppingList.objects.filter(space=space).delete() + + SupermarketCategoryRelation.objects.filter(supermarket__space=space).delete() + SupermarketCategory.objects.filter(space=space).delete() + Supermarket.objects.filter(space=space).delete() + + InviteLink.objects.filter(space=space).delete() + UserFile.objects.filter(space=space).delete() + Automation.objects.filter(space=space).delete() + + class SpaceAdmin(admin.ModelAdmin): list_display = ('name', 'created_by', 'max_recipes', 'max_users', 'max_file_storage_mb', 'allow_sharing') search_fields = ('name', 'created_by__username') list_filter = ('max_recipes', 'max_users', 'max_file_storage_mb', 'allow_sharing') date_hierarchy = 'created_at' + actions = [delete_space_action] admin.site.register(Space, SpaceAdmin) @@ -129,6 +169,7 @@ def sort_tree(modeladmin, request, queryset): class KeywordAdmin(TreeAdmin): form = movenodeform_factory(Keyword) ordering = ('space', 'path',) + search_fields = ('name',) actions = [sort_tree, enable_tree_sorting, disable_tree_sorting] @@ -136,8 +177,8 @@ class KeywordAdmin(TreeAdmin): class StepAdmin(admin.ModelAdmin): - list_display = ('name', 'type', 'order') - search_fields = ('name', 'type') + list_display = ('name', 'order',) + search_fields = ('name',) admin.site.register(Step, StepAdmin) @@ -173,9 +214,13 @@ def created_by(obj): admin.site.register(Unit) +# admin.site.register(FoodInheritField) + + class FoodAdmin(TreeAdmin): form = movenodeform_factory(Keyword) ordering = ('space', 'path',) + search_fields = ('name',) actions = [sort_tree, enable_tree_sorting, disable_tree_sorting] @@ -280,7 +325,7 @@ class ShoppingListRecipeAdmin(admin.ModelAdmin): class ShoppingListEntryAdmin(admin.ModelAdmin): - list_display = ('id', 'food', 'unit', 'list_recipe', 'checked') + list_display = ('id', 'food', 'unit', 'list_recipe', 'created_by', 'created_at', 'checked') admin.site.register(ShoppingListEntry, ShoppingListEntryAdmin) diff --git a/cookbook/apps.py b/cookbook/apps.py index 5b2777f2b2..e551319dbd 100644 --- a/cookbook/apps.py +++ b/cookbook/apps.py @@ -12,29 +12,26 @@ class CookbookConfig(AppConfig): name = 'cookbook' def ready(self): - # post_save signal is only necessary if using full-text search on postgres - if settings.DATABASES['default']['ENGINE'] in ['django.db.backends.postgresql_psycopg2', - 'django.db.backends.postgresql']: - import cookbook.signals # noqa + import cookbook.signals # noqa - if not settings.DISABLE_TREE_FIX_STARTUP: - # when starting up run fix_tree to: - # a) make sure that nodes are sorted when switching between sort modes - # b) fix problems, if any, with tree consistency - with scopes_disabled(): - try: - from cookbook.models import Keyword, Food - #Keyword.fix_tree(fix_paths=True) # disabled for now, causes to many unknown issues - #Food.fix_tree(fix_paths=True) - except OperationalError: - if DEBUG: - traceback.print_exc() - pass # if model does not exist there is no need to fix it - except ProgrammingError: - if DEBUG: - traceback.print_exc() - pass # if migration has not been run database cannot be fixed yet - except Exception: - if DEBUG: - traceback.print_exc() - pass # dont break startup just because fix could not run, need to investigate cases when this happens + # if not settings.DISABLE_TREE_FIX_STARTUP: + # # when starting up run fix_tree to: + # # a) make sure that nodes are sorted when switching between sort modes + # # b) fix problems, if any, with tree consistency + # with scopes_disabled(): + # try: + # from cookbook.models import Food, Keyword + # Keyword.fix_tree(fix_paths=True) + # Food.fix_tree(fix_paths=True) + # except OperationalError: + # if DEBUG: + # traceback.print_exc() + # pass # if model does not exist there is no need to fix it + # except ProgrammingError: + # if DEBUG: + # traceback.print_exc() + # pass # if migration has not been run database cannot be fixed yet + # except Exception: + # if DEBUG: + # traceback.print_exc() + # pass # dont break startup just because fix could not run, need to investigate cases when this happens diff --git a/cookbook/forms.py b/cookbook/forms.py index 26e5188527..60237ac7eb 100644 --- a/cookbook/forms.py +++ b/cookbook/forms.py @@ -3,16 +3,14 @@ from django import forms from django.conf import settings from django.core.exceptions import ValidationError -from django.forms import widgets, NumberInput +from django.forms import NumberInput, widgets from django.utils.translation import gettext_lazy as _ from django_scopes import scopes_disabled from django_scopes.forms import SafeModelChoiceField, SafeModelMultipleChoiceField from hcaptcha.fields import hCaptchaField -from .models import (Comment, InviteLink, Keyword, MealPlan, Recipe, - RecipeBook, RecipeBookEntry, Storage, Sync, User, - UserPreference, MealType, Space, - SearchPreference) +from .models import (Comment, Food, InviteLink, Keyword, MealPlan, MealType, Recipe, RecipeBook, + RecipeBookEntry, SearchPreference, Space, Storage, Sync, User, UserPreference) class SelectWidget(widgets.Select): @@ -39,7 +37,10 @@ class UserPreferenceForm(forms.ModelForm): prefix = 'preference' def __init__(self, *args, **kwargs): - space = kwargs.pop('space') + if x := kwargs.get('instance', None): + space = x.space + else: + space = kwargs.pop('space') super().__init__(*args, **kwargs) self.fields['plan_share'].queryset = User.objects.filter(userpreference__space=space).all() @@ -48,8 +49,7 @@ class Meta: fields = ( 'default_unit', 'use_fractions', 'use_kj', 'theme', 'nav_color', 'sticky_navbar', 'default_page', 'show_recent', 'search_style', - 'plan_share', 'ingredient_decimals', 'shopping_auto_sync', - 'comments' + 'plan_share', 'ingredient_decimals', 'comments', ) labels = { @@ -76,8 +76,8 @@ class Meta: 'Enables support for fractions in ingredient amounts (e.g. convert decimals to fractions automatically)'), # noqa: E501 'use_kj': _('Display nutritional energy amounts in joules instead of calories'), # noqa: E501 - 'plan_share': _( - 'Users with whom newly created meal plan/shopping list entries should be shared by default.'), + 'plan_share': _('Users with whom newly created meal plans should be shared by default.'), + 'shopping_share': _('Users with whom to share shopping lists.'), # noqa: E501 'show_recent': _('Show recently viewed recipes on search page.'), # noqa: E501 'ingredient_decimals': _('Number of decimals to round ingredients.'), # noqa: E501 @@ -86,11 +86,14 @@ class Meta: 'Setting to 0 will disable auto sync. When viewing a shopping list the list is updated every set seconds to sync changes someone else might have made. Useful when shopping with multiple people but might use a little bit ' # noqa: E501 'of mobile data. If lower than instance limit it is reset when saving.' # noqa: E501 ), - 'sticky_navbar': _('Makes the navbar stick to the top of the page.') # noqa: E501 + '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.'), } widgets = { - 'plan_share': MultiSelectWidget + 'plan_share': MultiSelectWidget, + 'shopping_share': MultiSelectWidget, } @@ -142,7 +145,7 @@ class ImportExportBase(forms.Form): NEXTCLOUD = 'NEXTCLOUD' MEALIE = 'MEALIE' CHOWDOWN = 'CHOWDOWN' - SAFRON = 'SAFRON' + SAFFRON = 'SAFFRON' CHEFTAP = 'CHEFTAP' PEPPERPLATE = 'PEPPERPLATE' RECIPEKEEPER = 'RECIPEKEEPER' @@ -155,13 +158,14 @@ class ImportExportBase(forms.Form): PLANTOEAT = 'PLANTOEAT' COOKBOOKAPP = 'COOKBOOKAPP' COPYMETHAT = 'COPYMETHAT' + PDF = 'PDF' type = forms.ChoiceField(choices=( (DEFAULT, _('Default')), (PAPRIKA, 'Paprika'), (NEXTCLOUD, 'Nextcloud Cookbook'), - (MEALIE, 'Mealie'), (CHOWDOWN, 'Chowdown'), (SAFRON, 'Safron'), (CHEFTAP, 'ChefTap'), + (MEALIE, 'Mealie'), (CHOWDOWN, 'Chowdown'), (SAFFRON, 'Saffron'), (CHEFTAP, 'ChefTap'), (PEPPERPLATE, 'Pepperplate'), (RECETTETEK, 'RecetteTek'), (RECIPESAGE, 'Recipe Sage'), (DOMESTICA, 'Domestica'), (MEALMASTER, 'MealMaster'), (REZKONV, 'RezKonv'), (OPENEATS, 'Openeats'), (RECIPEKEEPER, 'Recipe Keeper'), - (PLANTOEAT, 'Plantoeat'), (COOKBOOKAPP, 'CookBookApp'), (COPYMETHAT, 'CopyMeThat'), + (PLANTOEAT, 'Plantoeat'), (COOKBOOKAPP, 'CookBookApp'), (COPYMETHAT, 'CopyMeThat'), (PDF, 'PDF'), )) @@ -173,7 +177,7 @@ class ImportForm(ImportExportBase): class ExportForm(ImportExportBase): - recipes = forms.ModelMultipleChoiceField(widget=MultiSelectWidget, queryset=Recipe.objects.none()) + recipes = forms.ModelMultipleChoiceField(widget=MultiSelectWidget, queryset=Recipe.objects.none(), required=False) all = forms.BooleanField(required=False) def __init__(self, *args, **kwargs): @@ -225,6 +229,7 @@ class Meta: } +# TODO: Deprecate class RecipeBookEntryForm(forms.ModelForm): prefix = 'bookmark' @@ -264,6 +269,7 @@ class Meta: } +# TODO deprecate class BatchEditForm(forms.Form): search = forms.CharField(label=_('Search String')) keywords = forms.ModelMultipleChoiceField( @@ -300,6 +306,7 @@ class Meta: } +# TODO deprecate class MealPlanForm(forms.ModelForm): def __init__(self, *args, **kwargs): space = kwargs.pop('space') @@ -435,7 +442,7 @@ class Meta: help_texts = { 'search': _( - 'Select type method of search. Click here for full desciption of choices.'), + 'Select type method of search. Click here for full description of choices.'), 'lookup': _('Use fuzzy matching on units, keywords and ingredients when editing and importing recipes.'), 'unaccent': _( 'Fields to search ignoring accents. Selecting this option can improve or degrade search quality depending on language'), @@ -454,7 +461,7 @@ class Meta: 'lookup': _('Fuzzy Lookups'), 'unaccent': _('Ignore Accent'), 'icontains': _("Partial Match"), - 'istartswith': _("Starts Wtih"), + 'istartswith': _("Starts With"), 'trigram': _("Fuzzy Search"), 'fulltext': _("Full Text") } @@ -467,3 +474,73 @@ class Meta: 'trigram': MultiSelectWidget, 'fulltext': MultiSelectWidget, } + + +class ShoppingPreferenceForm(forms.ModelForm): + prefix = 'shopping' + + class Meta: + model = UserPreference + + fields = ( + 'shopping_share', 'shopping_auto_sync', 'mealplan_autoadd_shopping', 'mealplan_autoexclude_onhand', + 'mealplan_autoinclude_related', 'shopping_add_onhand', 'default_delay', 'filter_to_supermarket', 'shopping_recent_days', 'csv_delim', 'csv_prefix' + ) + + help_texts = { + 'shopping_share': _('Users will see all items you add to your shopping list. They must add you to see items on their list.'), + 'shopping_auto_sync': _( + 'Setting to 0 will disable auto sync. When viewing a shopping list the list is updated every set seconds to sync changes someone else might have made. Useful when shopping with multiple people but might use a little bit ' # noqa: E501 + 'of mobile data. If lower than instance limit it is reset when saving.' # noqa: E501 + ), + 'mealplan_autoadd_shopping': _('Automatically add meal plan ingredients to shopping list.'), + 'mealplan_autoinclude_related': _('When adding a meal plan to the shopping list (manually or automatically), include all related recipes.'), + 'mealplan_autoexclude_onhand': _('When adding a meal plan to the shopping list (manually or automatically), exclude ingredients that are on hand.'), + 'default_delay': _('Default number of hours to delay a shopping list entry.'), + 'filter_to_supermarket': _('Filter shopping list to only include supermarket categories.'), + 'shopping_recent_days': _('Days of recent shopping list entries to display.'), + 'shopping_add_onhand': _("Mark food 'On Hand' when checked off shopping list."), + 'csv_delim': _('Delimiter to use for CSV exports.'), + 'csv_prefix': _('Prefix to add when copying list to the clipboard.'), + + } + labels = { + 'shopping_share': _('Share Shopping List'), + 'shopping_auto_sync': _('Autosync'), + 'mealplan_autoadd_shopping': _('Auto Add Meal Plan'), + 'mealplan_autoexclude_onhand': _('Exclude On Hand'), + 'mealplan_autoinclude_related': _('Include Related'), + 'default_delay': _('Default Delay Hours'), + 'filter_to_supermarket': _('Filter to Supermarket'), + 'shopping_recent_days': _('Recent Days'), + 'csv_delim': _('CSV Delimiter'), + "csv_prefix_label": _("List Prefix"), + 'shopping_add_onhand': _("Auto On Hand"), + } + + widgets = { + 'shopping_share': MultiSelectWidget + } + + +class SpacePreferenceForm(forms.ModelForm): + prefix = 'space' + reset_food_inherit = forms.BooleanField(label=_("Reset Food Inheritance"), initial=False, required=False, + help_text=_("Reset all food to inherit the fields configured.")) + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) # populates the post + self.fields['food_inherit'].queryset = Food.inheritable_fields + + class Meta: + model = Space + + fields = ('food_inherit', 'reset_food_inherit', 'show_facet_count') + + help_texts = { + 'food_inherit': _('Fields on food that should be inherited by default.'), + 'show_facet_count': _('Show recipe counts on search filters'), } + + widgets = { + 'food_inherit': MultiSelectWidget + } diff --git a/cookbook/helper/HelperFunctions.py b/cookbook/helper/HelperFunctions.py new file mode 100644 index 0000000000..e2971c2ed2 --- /dev/null +++ b/cookbook/helper/HelperFunctions.py @@ -0,0 +1,13 @@ +from django.db.models import Func + + +class Round(Func): + function = 'ROUND' + template = '%(function)s(%(expressions)s, 0)' + + +def str2bool(v): + if type(v) == bool or v is None: + return v + else: + return v.lower() in ("yes", "true", "1") diff --git a/cookbook/helper/permission_helper.py b/cookbook/helper/permission_helper.py index cb3f791de4..a826fb3f5b 100644 --- a/cookbook/helper/permission_helper.py +++ b/cookbook/helper/permission_helper.py @@ -2,11 +2,9 @@ Source: https://djangosnippets.org/snippets/1703/ """ from django.conf import settings -from django.core.cache import caches - -from cookbook.models import ShareLink from django.contrib import messages from django.contrib.auth.decorators import user_passes_test +from django.core.cache import caches from django.core.exceptions import ValidationError from django.http import HttpResponseRedirect from django.urls import reverse, reverse_lazy @@ -14,6 +12,8 @@ from rest_framework import permissions from rest_framework.permissions import SAFE_METHODS +from cookbook.models import ShareLink + def get_allowed_groups(groups_required): """ @@ -34,7 +34,7 @@ def has_group_permission(user, groups): """ Tests if a given user is member of a certain group (or any higher group) Superusers always bypass permission checks. - Unauthenticated users cant be member of any group thus always return false. + Unauthenticated users can't be member of any group thus always return false. :param user: django auth user object :param groups: list or tuple of groups the user should be checked for :return: True if user is in allowed groups, false otherwise @@ -205,6 +205,9 @@ def has_permission(self, request, view): return request.user.is_authenticated def has_object_permission(self, request, view, obj): + # temporary hack to make old shopping list work with new shopping list + if obj.__class__.__name__ == 'ShoppingList': + return is_object_shared(request.user, obj) or obj.created_by in list(request.user.get_shopping_share()) return is_object_shared(request.user, obj) diff --git a/cookbook/helper/recipe_search.py b/cookbook/helper/recipe_search.py index 850eb87db0..f5560ca1bf 100644 --- a/cookbook/helper/recipe_search.py +++ b/cookbook/helper/recipe_search.py @@ -3,403 +3,905 @@ from django.contrib.postgres.search import SearchQuery, SearchRank, TrigramSimilarity from django.core.cache import caches -from django.db.models import Avg, Case, Count, Func, Max, Q, Subquery, Value, When -from django.db.models.functions import Coalesce +from django.db.models import Avg, Case, Count, F, Func, Max, OuterRef, Q, Subquery, Sum, Value, When +from django.db.models.functions import Coalesce, Substr from django.utils import timezone, translation +from django.utils.translation import gettext as _ from cookbook.filters import RecipeFilter +from cookbook.helper.HelperFunctions import Round, str2bool from cookbook.helper.permission_helper import has_group_permission from cookbook.managers import DICTIONARY -from cookbook.models import Food, Keyword, Recipe, SearchPreference, ViewLog +from cookbook.models import CookLog, Food, Keyword, Recipe, SearchPreference, ViewLog from recipes import settings -class Round(Func): - function = 'ROUND' - template = '%(function)s(%(expressions)s, 0)' - - -def str2bool(v): - if type(v) == bool: - return v - else: - return v.lower() in ("yes", "true", "1") - - # TODO create extensive tests to make sure ORs ANDs and various filters, sorting, etc work as expected # TODO consider creating a simpleListRecipe API that only includes minimum of recipe info and minimal filtering -def search_recipes(request, queryset, params): - if request.user.is_authenticated: - search_prefs = request.user.searchpreference - else: - search_prefs = SearchPreference() - search_string = params.get('query', '').strip() - search_rating = int(params.get('rating', 0)) - search_keywords = params.getlist('keywords', []) - search_foods = params.getlist('foods', []) - search_books = params.getlist('books', []) - search_steps = params.getlist('steps', []) - search_units = params.get('units', None) - - # TODO I think default behavior should be 'AND' which is how most sites operate with facet/filters based on results - search_keywords_or = str2bool(params.get('keywords_or', True)) - search_foods_or = str2bool(params.get('foods_or', True)) - search_books_or = str2bool(params.get('books_or', True)) - - search_internal = str2bool(params.get('internal', False)) - search_random = str2bool(params.get('random', False)) - search_new = str2bool(params.get('new', False)) - search_last_viewed = int(params.get('last_viewed', 0)) - orderby = [] - - # only sort by recent not otherwise filtering/sorting - if search_last_viewed > 0: - last_viewed_recipes = ViewLog.objects.filter( - created_by=request.user, space=request.space, - created_at__gte=timezone.now() - timedelta(days=14) # TODO make recent days a setting - ).order_by('-pk').values_list('recipe__pk', flat=True) - last_viewed_recipes = list(dict.fromkeys(last_viewed_recipes))[:search_last_viewed] # removes duplicates from list prior to slicing - - # return queryset.annotate(last_view=Max('viewlog__pk')).annotate(new=Case(When(pk__in=last_viewed_recipes, then=('last_view')), default=Value(0))).filter(new__gt=0).order_by('-new') - # queryset that only annotates most recent view (higher pk = lastest view) - queryset = queryset.annotate(recent=Coalesce(Max(Case(When(viewlog__created_by=request.user, then='viewlog__pk'))), Value(0))) - orderby += ['-recent'] - - # TODO create setting for default ordering - most cooked, rating, - # TODO create options for live sorting - # TODO make days of new recipe a setting - if search_new: - queryset = ( - queryset.annotate(new_recipe=Case( - When(created_at__gte=(timezone.now() - timedelta(days=7)), then=('pk')), default=Value(0), )) - ) - # only sort by new recipes if not otherwise filtering/sorting - orderby += ['-new_recipe'] - - search_type = search_prefs.search or 'plain' - if len(search_string) > 0: - unaccent_include = search_prefs.unaccent.values_list('field', flat=True) - - icontains_include = [x + '__unaccent' if x in unaccent_include else x for x in search_prefs.icontains.values_list('field', flat=True)] - istartswith_include = [x + '__unaccent' if x in unaccent_include else x for x in search_prefs.istartswith.values_list('field', flat=True)] - trigram_include = [x + '__unaccent' if x in unaccent_include else x for x in search_prefs.trigram.values_list('field', flat=True)] - fulltext_include = search_prefs.fulltext.values_list('field', flat=True) # fulltext doesn't use field name directly - - # if no filters are configured use name__icontains as default - if len(icontains_include) + len(istartswith_include) + len(trigram_include) + len(fulltext_include) == 0: - filters = [Q(**{"name__icontains": search_string})] +class RecipeSearch(): + _postgres = settings.DATABASES['default']['ENGINE'] in ['django.db.backends.postgresql_psycopg2', 'django.db.backends.postgresql'] + + def __init__(self, request, **params): + self._request = request + self._queryset = None + self._params = {**params} + if self._request.user.is_authenticated: + self._search_prefs = request.user.searchpreference else: - filters = [] - - # dynamically build array of filters that will be applied - for f in icontains_include: - filters += [Q(**{"%s__icontains" % f: search_string})] - - for f in istartswith_include: - filters += [Q(**{"%s__istartswith" % f: search_string})] - - if settings.DATABASES['default']['ENGINE'] in ['django.db.backends.postgresql_psycopg2', 'django.db.backends.postgresql']: - language = DICTIONARY.get(translation.get_language(), 'simple') - # django full text search https://docs.djangoproject.com/en/3.2/ref/contrib/postgres/search/#searchquery - # TODO can options install this extension to further enhance search query language https://github.com/caub/pg-tsquery - # trigram breaks full text search 'websearch' and 'raw' capabilities and will be ignored if those methods are chosen - if search_type in ['websearch', 'raw']: - search_trigram = False - else: - search_trigram = True - search_query = SearchQuery( - search_string, - search_type=search_type, - config=language, + self._search_prefs = SearchPreference() + self._string = params.get('query').strip() if params.get('query', None) else None + self._rating = self._params.get('rating', None) + self._keywords = self._params.get('keywords', None) + self._foods = self._params.get('foods', None) + self._books = self._params.get('books', None) + self._steps = self._params.get('steps', None) + self._units = self._params.get('units', None) + # TODO add created by + # TODO add created before/after + # TODO image exists + self._sort_order = self._params.get('sort_order', None) + # TODO add save + + self._keywords_or = str2bool(self._params.get('keywords_or', True)) + self._foods_or = str2bool(self._params.get('foods_or', True)) + self._books_or = str2bool(self._params.get('books_or', True)) + + self._internal = str2bool(self._params.get('internal', False)) + self._random = str2bool(self._params.get('random', False)) + self._new = str2bool(self._params.get('new', False)) + self._last_viewed = int(self._params.get('last_viewed', 0)) + + self._search_type = self._search_prefs.search or 'plain' + if self._string: + unaccent_include = self._search_prefs.unaccent.values_list('field', flat=True) + self._icontains_include = [x + '__unaccent' if x in unaccent_include else x for x in self._search_prefs.icontains.values_list('field', flat=True)] + self._istartswith_include = [x + '__unaccent' if x in unaccent_include else x for x in self._search_prefs.istartswith.values_list('field', flat=True)] + self._trigram_include = None + self._fulltext_include = None + self._trigram = False + if self._postgres and self._string: + self._language = DICTIONARY.get(translation.get_language(), 'simple') + self._trigram_include = [x + '__unaccent' if x in unaccent_include else x for x in self._search_prefs.trigram.values_list('field', flat=True)] + self._fulltext_include = self._search_prefs.fulltext.values_list('field', flat=True) + + if self._search_type not in ['websearch', 'raw'] and self._trigram_include: + self._trigram = True + self.search_query = SearchQuery( + self._string, + search_type=self._search_type, + config=self._language, ) - - # iterate through fields to use in trigrams generating a single trigram - if search_trigram and len(trigram_include) > 0: - trigram = None - for f in trigram_include: - if trigram: - trigram += TrigramSimilarity(f, search_string) - else: - trigram = TrigramSimilarity(f, search_string) - queryset = queryset.annotate(similarity=trigram) - filters += [Q(similarity__gt=search_prefs.trigram_threshold)] - - if 'name' in fulltext_include: - filters += [Q(name_search_vector=search_query)] - if 'description' in fulltext_include: - filters += [Q(desc_search_vector=search_query)] - if 'instructions' in fulltext_include: - filters += [Q(steps__search_vector=search_query)] - if 'keywords' in fulltext_include: - filters += [Q(keywords__in=Subquery(Keyword.objects.filter(name__search=search_query).values_list('id', flat=True)))] - if 'foods' in fulltext_include: - filters += [Q(steps__ingredients__food__in=Subquery(Food.objects.filter(name__search=search_query).values_list('id', flat=True)))] + self.search_rank = ( + SearchRank('name_search_vector', self.search_query, cover_density=True) + + SearchRank('desc_search_vector', self.search_query, cover_density=True) + + SearchRank('steps__search_vector', self.search_query, cover_density=True) + ) + self.orderby = [] + self._default_sort = ['-favorite'] # TODO add user setting + self._filters = None + self._fuzzy_match = None + + def get_queryset(self, queryset): + self._queryset = queryset + self.recently_viewed_recipes(self._last_viewed) + self._favorite_recipes() + self._new_recipes() + # self._last_viewed() + # self._last_cooked() + self.keyword_filters(keywords=self._keywords, operator=self._keywords_or) + self.food_filters(foods=self._foods, operator=self._foods_or) + self.book_filters(books=self._books, operator=self._books_or) + self.rating_filter(rating=self._rating) + self.internal_filter() + self.step_filters(steps=self._steps) + self.unit_filters(units=self._units) + self.string_filters(string=self._string) + # self._queryset = self._queryset.distinct() # TODO 2x check. maybe add filter of recipe__in after orderby + self._apply_order_by() + return self._queryset.filter(space=self._request.space) + + def _apply_order_by(self): + if self._random: + self._queryset = self._queryset.order_by("?") + else: + if self._sort_order: + self._queryset.order_by(*self._sort_order) + return + + order = [] # TODO add user preferences here: name, date cooked, rating, times cooked, date created, date viewed, random + if '-recent' in self.orderby and self._last_viewed: + order += ['-recent'] + if '-new_recipe' in self.orderby and self._new: + order += ['-new_recipe'] + + if '-rank' in self.orderby and '-simularity' in self.orderby: + self._queryset = self._queryset.annotate(score=Sum(F('rank')+F('simularity'))) + order += ['-score'] + elif '-rank' in self.orderby: + self._queryset = self._queryset.annotate(score=F('rank')) + order += ['-score'] + elif '-simularity' in self.orderby: + self._queryset = self._queryset.annotate(score=F('simularity')) + order += ['-score'] + for x in list(set(self.orderby)-set([*order, '-rank', '-simularity'])): + order += [x] + self._queryset = self._queryset.order_by(*order) + + def string_filters(self, string=None): + if not string: + return + + self.build_text_filters(self._string) + if self._postgres: + self.build_fulltext_filters(self._string) + self.build_trigram(self._string) + + if self._filters: query_filter = None - for f in filters: + for f in self._filters: if query_filter: query_filter |= f else: query_filter = f - - # TODO add order by user settings - only do search rank and annotation if rank order is configured - search_rank = ( - SearchRank('name_search_vector', search_query, cover_density=True) - + SearchRank('desc_search_vector', search_query, cover_density=True) - + SearchRank('steps__search_vector', search_query, cover_density=True) - ) - queryset = queryset.filter(query_filter).annotate(rank=search_rank) - orderby += ['-rank'] + self._queryset = self._queryset.filter(query_filter).distinct() + # TODO add annotation for simularity + if self._fulltext_include: + self._queryset = self._queryset.annotate(rank=self.search_rank) + self.orderby += ['-rank'] + + if self._fuzzy_match is not None: # this annotation is full text, not trigram + simularity = self._fuzzy_match.filter(pk=OuterRef('pk')).values('simularity') + self._queryset = self._queryset.annotate(simularity=Coalesce(Subquery(simularity), 0.0)) + self.orderby += ['-simularity'] else: - queryset = queryset.filter(name__icontains=search_string) - - if len(search_keywords) > 0: - if search_keywords_or: + self._queryset = self._queryset.filter(name__icontains=self._string) + + def _new_recipes(self, new_days=7): + # TODO make new days a user-setting + if not self._new: + return + self._queryset = ( + self._queryset.annotate(new_recipe=Case( + When(created_at__gte=(timezone.now() - timedelta(days=new_days)), then=('pk')), default=Value(0), )) + ) + self.orderby += ['-new_recipe'] + + def recently_viewed_recipes(self, last_viewed=None): + if not last_viewed: + return + + last_viewed_recipes = ViewLog.objects.filter(created_by=self._request.user, space=self._request.space).values( + 'recipe').annotate(recent=Max('created_at')).order_by('-recent') + last_viewed_recipes = last_viewed_recipes[:last_viewed] + self.orderby += ['-recent'] + self._queryset = self._queryset.annotate(recent=Coalesce(Max(Case(When(pk__in=last_viewed_recipes.values('recipe'), then='viewlog__pk'))), Value(0))) + + def _favorite_recipes(self): + self.orderby += ['-favorite'] # default sort? + favorite_recipes = CookLog.objects.filter(created_by=self._request.user, space=self._request.space, recipe=OuterRef('pk') + ).values('recipe').annotate(count=Count('pk', distinct=True)).values('count') + self._queryset = self._queryset.annotate(favorite=Coalesce(Subquery(favorite_recipes), 0)) + + def keyword_filters(self, keywords=None, operator=True): + if not keywords: + return + if not isinstance(keywords, list): + keywords = [keywords] + if operator == True: # TODO creating setting to include descendants of keywords a setting - # for kw in Keyword.objects.filter(pk__in=search_keywords): - # search_keywords += list(kw.get_descendants().values_list('pk', flat=True)) - queryset = queryset.filter(keywords__id__in=search_keywords) + self._queryset = self._queryset.filter(keywords__in=Keyword.include_descendants(Keyword.objects.filter(pk__in=keywords))) else: # when performing an 'and' search returned recipes should include a parent OR any of its descedants # AND other keywords selected so filters are appended using keyword__id__in the list of keywords and descendants - for kw in Keyword.objects.filter(pk__in=search_keywords): - queryset = queryset.filter(keywords__id__in=list(kw.get_descendants_and_self().values_list('pk', flat=True))) - - if len(search_foods) > 0: - if search_foods_or: + for kw in Keyword.objects.filter(pk__in=keywords): + self._queryset = self._queryset.filter(keywords__in=list(kw.get_descendants_and_self())) + + def food_filters(self, foods=None, operator=True): + if not foods: + return + if not isinstance(foods, list): + foods = [foods] + if operator == True: # TODO creating setting to include descendants of food a setting - queryset = queryset.filter(steps__ingredients__food__id__in=search_foods) + self._queryset = self._queryset.filter(steps__ingredients__food__in=Food.include_descendants(Food.objects.filter(pk__in=foods))) else: # when performing an 'and' search returned recipes should include a parent OR any of its descedants # AND other foods selected so filters are appended using steps__ingredients__food__id__in the list of foods and descendants - for fd in Food.objects.filter(pk__in=search_foods): - queryset = queryset.filter(steps__ingredients__food__id__in=list(fd.get_descendants_and_self().values_list('pk', flat=True))) - - if len(search_books) > 0: - if search_books_or: - queryset = queryset.filter(recipebookentry__book__id__in=search_books) + for fd in Food.objects.filter(pk__in=foods): + self._queryset = self._queryset.filter(steps__ingredients__food__in=list(fd.get_descendants_and_self())) + + def unit_filters(self, units=None, operator=True): + if operator != True: + raise NotImplementedError + if not units: + return + if not isinstance(units, list): + units = [units] + self._queryset = self._queryset.filter(steps__ingredients__unit__in=units) + + def rating_filter(self, rating=None): + if rating is None: + return + rating = int(rating) + # TODO make ratings a settings user-only vs all-users + self._queryset = self._queryset.annotate(rating=Round(Avg(Case(When(cooklog__created_by=self._request.user, then='cooklog__rating'), default=Value(0))))) + if rating == 0: + self._queryset = self._queryset.filter(rating=0) else: - for k in search_books: - queryset = queryset.filter(recipebookentry__book__id=k) - - if search_rating: - queryset = queryset.annotate(rating=Round(Avg(Case(When(cooklog__created_by=request.user, then='cooklog__rating'), default=Value(0))))) - if search_rating == -1: - queryset = queryset.filter(rating=0) + self._queryset = self._queryset.filter(rating__gte=rating) + + def internal_filter(self): + self._queryset = self._queryset.filter(internal=True) + + def book_filters(self, books=None, operator=True): + if not books: + return + if not isinstance(books, list): + books = [books] + if operator == True: + self._queryset = self._queryset.filter(recipebookentry__book__id__in=books) else: - queryset = queryset.filter(rating__gte=search_rating) - - # probably only useful in Unit list view, so keeping it simple - if search_units: - queryset = queryset.filter(steps__ingredients__unit__id=search_units) - - # probably only useful in Unit list view, so keeping it simple - if search_steps: - queryset = queryset.filter(steps__id__in=search_steps) - - if search_internal: - queryset = queryset.filter(internal=True) - - queryset = queryset.distinct() - - if search_random: - queryset = queryset.order_by("?") - else: - queryset = queryset.order_by(*orderby) - return queryset - - -def get_facet(qs=None, request=None, use_cache=True, hash_key=None): - """ - Gets an annotated list from a queryset. - :param qs: - - recipe queryset to build facets from - - :param request: + for k in books: + self._queryset = self._queryset.filter(recipebookentry__book__id=k) + + def step_filters(self, steps=None, operator=True): + if operator != True: + raise NotImplementedError + if not steps: + return + if not isinstance(steps, list): + steps = [unistepsts] + self._queryset = self._queryset.filter(steps__id__in=steps) + + def build_fulltext_filters(self, string=None): + if not string: + return + if self._fulltext_include: + if not self._filters: + self._filters = [] + if 'name' in self._fulltext_include: + self._filters += [Q(name_search_vector=self.search_query)] + if 'description' in self._fulltext_include: + self._filters += [Q(desc_search_vector=self.search_query)] + if 'steps__instruction' in self._fulltext_include: + self._filters += [Q(steps__search_vector=self.search_query)] + if 'keywords__name' in self._fulltext_include: + self._filters += [Q(keywords__in=Keyword.objects.filter(name__search=self.search_query))] + if 'steps__ingredients__food__name' in self._fulltext_include: + self._filters += [Q(steps__ingredients__food__in=Food.objects.filter(name__search=self.search_query))] + + def build_text_filters(self, string=None): + if not string: + return + + if not self._filters: + self._filters = [] + # dynamically build array of filters that will be applied + for f in self._icontains_include: + self._filters += [Q(**{"%s__icontains" % f: self._string})] + + for f in self._istartswith_include: + self._filters += [Q(**{"%s__istartswith" % f: self._string})] + + def build_trigram(self, string=None): + if not string: + return + if self._trigram: + trigram = None + for f in self._trigram_include: + if trigram: + trigram += TrigramSimilarity(f, self._string) + else: + trigram = TrigramSimilarity(f, self._string) + self._fuzzy_match = Recipe.objects.annotate(trigram=trigram).distinct( + ).annotate(simularity=Max('trigram')).values('id', 'simularity').filter(simularity__gt=self._search_prefs.trigram_threshold) + self._filters += [Q(pk__in=self._fuzzy_match.values('pk'))] + + +# def search_recipes(request, queryset, params): +# if request.user.is_authenticated: +# search_prefs = request.user.searchpreference +# else: +# search_prefs = SearchPreference() +# search_string = params.get('query', '').strip() +# search_rating = int(params.get('rating', 0)) +# search_keywords = params.getlist('keywords', []) +# search_foods = params.getlist('foods', []) +# search_books = params.getlist('books', []) +# search_steps = params.getlist('steps', []) +# search_units = params.get('units', None) + +# search_keywords_or = str2bool(params.get('keywords_or', True)) +# search_foods_or = str2bool(params.get('foods_or', True)) +# search_books_or = str2bool(params.get('books_or', True)) + +# search_internal = str2bool(params.get('internal', False)) +# search_random = str2bool(params.get('random', False)) +# search_new = str2bool(params.get('new', False)) +# search_last_viewed = int(params.get('last_viewed', 0)) # not included in schema currently? +# orderby = [] + +# # only sort by recent not otherwise filtering/sorting +# if search_last_viewed > 0: +# last_viewed_recipes = ViewLog.objects.filter(created_by=request.user, space=request.space).values('recipe').annotate(recent=Max('created_at')).order_by('-recent')[:search_last_viewed] +# queryset = queryset.annotate(recent=Coalesce(Max(Case(When(pk__in=last_viewed_recipes.values('recipe'), then='viewlog__pk'))), Value(0))).order_by('-recent') +# orderby += ['-recent'] +# # TODO add sort by favorite +# favorite_recipes = CookLog.objects.filter(created_by=request.user, space=request.space, recipe=OuterRef('pk')).values('recipe').annotate(count=Count('pk', distinct=True)).values('count') +# # TODO add to serialization and RecipeCard and RecipeView +# queryset = queryset.annotate(favorite=Coalesce(Subquery(favorite_recipes), 0)) + +# # TODO create setting for default ordering - most cooked, rating, +# # TODO create options for live sorting +# # TODO make days of new recipe a setting +# if search_new: +# queryset = ( +# queryset.annotate(new_recipe=Case( +# When(created_at__gte=(timezone.now() - timedelta(days=7)), then=('pk')), default=Value(0), )) +# ) +# # TODO create setting for 'new' recipes +# # only sort by new recipes if not otherwise filtering/sorting +# orderby += ['-new_recipe'] +# orderby += ['-favorite'] + +# search_type = search_prefs.search or 'plain' +# if len(search_string) > 0: +# unaccent_include = search_prefs.unaccent.values_list('field', flat=True) + +# icontains_include = [x + '__unaccent' if x in unaccent_include else x for x in search_prefs.icontains.values_list('field', flat=True)] +# istartswith_include = [x + '__unaccent' if x in unaccent_include else x for x in search_prefs.istartswith.values_list('field', flat=True)] +# trigram_include = [x + '__unaccent' if x in unaccent_include else x for x in search_prefs.trigram.values_list('field', flat=True)] +# fulltext_include = search_prefs.fulltext.values_list('field', flat=True) # fulltext doesn't use field name directly + +# # if no filters are configured use name__icontains as default +# if icontains_include or istartswith_include or trigram_include or fulltext_include: +# filters = [Q(**{"name__icontains": search_string})] +# else: +# filters = [] + +# # dynamically build array of filters that will be applied +# for f in icontains_include: +# filters += [Q(**{"%s__icontains" % f: search_string})] + +# for f in istartswith_include: +# filters += [Q(**{"%s__istartswith" % f: search_string})] + +# if settings.DATABASES['default']['ENGINE'] in ['django.db.backends.postgresql_psycopg2', 'django.db.backends.postgresql']: +# language = DICTIONARY.get(translation.get_language(), 'simple') +# # django full text search https://docs.djangoproject.com/en/3.2/ref/contrib/postgres/search/#searchquery +# # TODO can options install this extension to further enhance search query language https://github.com/caub/pg-tsquery +# # trigram breaks full text search 'websearch' and 'raw' capabilities and will be ignored if those methods are chosen +# if search_type in ['websearch', 'raw']: +# search_trigram = False +# else: +# search_trigram = True +# search_query = SearchQuery( +# search_string, +# search_type=search_type, +# config=language, +# ) + +# # iterate through fields to use in trigrams generating a single trigram +# if search_trigram and len(trigram_include) > 0: +# trigram = None +# for f in trigram_include: +# if trigram: +# trigram += TrigramSimilarity(f, search_string) +# else: +# trigram = TrigramSimilarity(f, search_string) +# queryset = queryset.annotate(similarity=trigram) +# filters += [Q(similarity__gt=search_prefs.trigram_threshold)] + +# if 'name' in fulltext_include: +# filters += [Q(name_search_vector=search_query)] +# if 'description' in fulltext_include: +# filters += [Q(desc_search_vector=search_query)] +# if 'instructions' in fulltext_include: +# filters += [Q(steps__search_vector=search_query)] +# if 'keywords' in fulltext_include: +# filters += [Q(keywords__in=Subquery(Keyword.objects.filter(name__search=search_query).values_list('id', flat=True)))] +# if 'foods' in fulltext_include: +# filters += [Q(steps__ingredients__food__in=Subquery(Food.objects.filter(name__search=search_query).values_list('id', flat=True)))] +# query_filter = None +# for f in filters: +# if query_filter: +# query_filter |= f +# else: +# query_filter = f + +# # TODO add order by user settings - only do search rank and annotation if rank order is configured +# search_rank = ( +# SearchRank('name_search_vector', search_query, cover_density=True) +# + SearchRank('desc_search_vector', search_query, cover_density=True) +# + SearchRank('steps__search_vector', search_query, cover_density=True) +# ) +# queryset = queryset.filter(query_filter).annotate(rank=search_rank) +# orderby += ['-rank'] +# else: +# queryset = queryset.filter(name__icontains=search_string) + +# if len(search_keywords) > 0: +# if search_keywords_or: +# # TODO creating setting to include descendants of keywords a setting +# # for kw in Keyword.objects.filter(pk__in=search_keywords): +# # search_keywords += list(kw.get_descendants().values_list('pk', flat=True)) +# queryset = queryset.filter(keywords__in=Keyword.include_descendants(Keyword.objects.filter(pk__in=search_keywords))) +# else: +# # when performing an 'and' search returned recipes should include a parent OR any of its descedants +# # AND other keywords selected so filters are appended using keyword__id__in the list of keywords and descendants +# for kw in Keyword.objects.filter(pk__in=search_keywords): +# queryset = queryset.filter(keywords__in=list(kw.get_descendants_and_self())) + +# if len(search_foods) > 0: +# if search_foods_or: +# # TODO creating setting to include descendants of food a setting +# queryset = queryset.filter(steps__ingredients__food__in=Food.include_descendants(Food.objects.filter(pk__in=search_foods))) +# else: +# # when performing an 'and' search returned recipes should include a parent OR any of its descedants +# # AND other foods selected so filters are appended using steps__ingredients__food__id__in the list of foods and descendants +# for fd in Food.objects.filter(pk__in=search_foods): +# queryset = queryset.filter(steps__ingredients__food__in=list(fd.get_descendants_and_self())) + +# if len(search_books) > 0: +# if search_books_or: +# queryset = queryset.filter(recipebookentry__book__id__in=search_books) +# else: +# for k in search_books: +# queryset = queryset.filter(recipebookentry__book__id=k) + +# if search_rating: +# # TODO make ratings a settings user-only vs all-users +# queryset = queryset.annotate(rating=Round(Avg(Case(When(cooklog__created_by=request.user, then='cooklog__rating'), default=Value(0))))) +# if search_rating == -1: +# queryset = queryset.filter(rating=0) +# else: +# queryset = queryset.filter(rating__gte=search_rating) + +# # probably only useful in Unit list view, so keeping it simple +# if search_units: +# queryset = queryset.filter(steps__ingredients__unit__id=search_units) + +# # probably only useful in Unit list view, so keeping it simple +# if search_steps: +# queryset = queryset.filter(steps__id__in=search_steps) + +# if search_internal: +# queryset = queryset.filter(internal=True) + +# queryset = queryset.distinct() + +# if search_random: +# queryset = queryset.order_by("?") +# else: +# queryset = queryset.order_by(*orderby) +# return queryset + + +class RecipeFacet(): + class CacheEmpty(Exception): + pass + + def __init__(self, request, queryset=None, hash_key=None, cache_timeout=3600): + if hash_key is None and queryset is None: + raise ValueError(_("One of queryset or hash_key must be provided")) + + self._request = request + self._queryset = queryset + self.hash_key = hash_key or str(hash(frozenset(self._queryset.values_list('pk')))) + self._SEARCH_CACHE_KEY = f"recipes_filter_{self.hash_key}" + self._cache_timeout = cache_timeout + self._cache = caches['default'].get(self._SEARCH_CACHE_KEY, {}) + if self._cache is None and self._queryset is None: + raise self.CacheEmpty("No queryset provided and cache empty") + + self.Keywords = self._cache.get('Keywords', None) + self.Foods = self._cache.get('Foods', None) + self.Books = self._cache.get('Books', None) + self.Ratings = self._cache.get('Ratings', None) + # TODO Move Recent to recipe annotation/serializer: requrires change in RecipeSearch(), RecipeSearchView.vue and serializer + self.Recent = self._cache.get('Recent', None) + + if self._queryset is not None: + self._recipe_list = list(self._queryset.values_list('id', flat=True)) + self._search_params = { + 'keyword_list': self._request.query_params.getlist('keywords', []), + 'food_list': self._request.query_params.getlist('foods', []), + 'book_list': self._request.query_params.getlist('book', []), + 'search_keywords_or': str2bool(self._request.query_params.get('keywords_or', True)), + 'search_foods_or': str2bool(self._request.query_params.get('foods_or', True)), + 'search_books_or': str2bool(self._request.query_params.get('books_or', True)), + 'space': self._request.space, + } + elif self.hash_key is not None: + self._recipe_list = self._cache.get('recipe_list', []) + self._search_params = { + 'keyword_list': self._cache.get('keyword_list', None), + 'food_list': self._cache.get('food_list', None), + 'book_list': self._cache.get('book_list', None), + 'search_keywords_or': self._cache.get('search_keywords_or', None), + 'search_foods_or': self._cache.get('search_foods_or', None), + 'search_books_or': self._cache.get('search_books_or', None), + 'space': self._cache.get('space', None), + } + + self._cache = { + **self._search_params, + 'recipe_list': self._recipe_list, + 'Ratings': self.Ratings, + 'Recent': self.Recent, + 'Keywords': self.Keywords, + 'Foods': self.Foods, + 'Books': self.Books - the web request that contains the necessary query parameters + } + caches['default'].set(self._SEARCH_CACHE_KEY, self._cache, self._cache_timeout) + + def get_facets(self, from_cache=False): + if from_cache: + return { + 'cache_key': self.hash_key or '', + 'Ratings': self.Ratings or {}, + 'Recent': self.Recent or [], + 'Keywords': self.Keywords or [], + 'Foods': self.Foods or [], + 'Books': self.Books or [] + } + return { + 'cache_key': self.hash_key, + 'Ratings': self.get_ratings(), + 'Recent': self.get_recent(), + 'Keywords': self.get_keywords(), + 'Foods': self.get_foods(), + 'Books': self.get_books() + } - :param use_cache: + def set_cache(self, key, value): + self._cache = {**self._cache, key: value} + caches['default'].set( + self._SEARCH_CACHE_KEY, + self._cache, + self._cache_timeout + ) - will find results in cache, if any, and return them or empty list. - will save the list of recipes IDs in the cache for future processing + def get_books(self): + if self.Books is None: + self.Books = [] + return self.Books - :param hash_key: + def get_keywords(self): + if self.Keywords is None: + if self._search_params['search_keywords_or']: + keywords = Keyword.objects.filter(space=self._request.space).distinct() + else: + keywords = Keyword.objects.filter(Q(recipe__in=self._recipe_list) | Q(depth=1)).filter(space=self._request.space).distinct() + + # set keywords to root objects only + keywords = self._keyword_queryset(keywords) + self.Keywords = [{**x, 'children': None} if x['numchild'] > 0 else x for x in list(keywords)] + self.set_cache('Keywords', self.Keywords) + return self.Keywords + + def get_foods(self): + if self.Foods is None: + # # if using an OR search, will annotate all keywords, otherwise, just those that appear in results + if self._search_params['search_foods_or']: + foods = Food.objects.filter(space=self._request.space).distinct() + else: + foods = Food.objects.filter(Q(ingredient__step__recipe__in=self._recipe_list) | Q(depth=1)).filter(space=self._request.space).distinct() + + # set keywords to root objects only + foods = self._food_queryset(foods) + + self.Foods = [{**x, 'children': None} if x['numchild'] > 0 else x for x in list(foods)] + self.set_cache('Foods', self.Foods) + return self.Foods + + def get_books(self): + if self.Books is None: + self.Books = [] + return self.Books + + def get_ratings(self): + if self.Ratings is None: + if not self._request.space.demo and self._request.space.show_facet_count: + if self._queryset is None: + self._queryset = Recipe.objects.filter(id__in=self._recipe_list) + rating_qs = self._queryset.annotate(rating=Round(Avg(Case(When(cooklog__created_by=self._request.user, then='cooklog__rating'), default=Value(0))))) + self.Ratings = dict(Counter(r.rating for r in rating_qs)) + else: + self.Rating = {} + self.set_cache('Ratings', self.Ratings) + return self.Ratings + + def get_recent(self): + if self.Recent is None: + # TODO make days of recent recipe a setting + recent_recipes = ViewLog.objects.filter(created_by=self._request.user, space=self._request.space, created_at__gte=timezone.now() - timedelta(days=14) + ).values_list('recipe__pk', flat=True) + self.Recent = list(recent_recipes) + self.set_cache('Recent', self.Recent) + return self.Recent + + def add_food_children(self, id): + try: + food = Food.objects.get(id=id) + nodes = food.get_ancestors() + except Food.DoesNotExist: + return self.get_facets() + foods = self._food_queryset(Food.objects.filter(path__startswith=food.path, depth=food.depth+1), food) + deep_search = self.Foods + for node in nodes: + index = next((i for i, x in enumerate(deep_search) if x["id"] == node.id), None) + deep_search = deep_search[index]['children'] + index = next((i for i, x in enumerate(deep_search) if x["id"] == food.id), None) + deep_search[index]['children'] = [{**x, 'children': None} if x['numchild'] > 0 else x for x in list(foods)] + self.set_cache('Foods', self.Foods) + return self.get_facets() + + def add_keyword_children(self, id): + try: + keyword = Keyword.objects.get(id=id) + nodes = keyword.get_ancestors() + except Keyword.DoesNotExist: + return self.get_facets() + keywords = self._keyword_queryset(Keyword.objects.filter(path__startswith=keyword.path, depth=keyword.depth+1), keyword) + deep_search = self.Keywords + for node in nodes: + index = next((i for i, x in enumerate(deep_search) if x["id"] == node.id), None) + deep_search = deep_search[index]['children'] + index = next((i for i, x in enumerate(deep_search) if x["id"] == keyword.id), None) + deep_search[index]['children'] = [{**x, 'children': None} if x['numchild'] > 0 else x for x in list(keywords)] + self.set_cache('Keywords', self.Keywords) + return self.get_facets() + + def _recipe_count_queryset(self, field, depth=1, steplen=4): + return Recipe.objects.filter(**{f'{field}__path__startswith': OuterRef('path')}, id__in=self._recipe_list, space=self._request.space + ).values(child=Substr(f'{field}__path', 1, steplen) + ).annotate(count=Count('pk', distinct=True)).values('count') + + def _keyword_queryset(self, queryset, keyword=None): + depth = getattr(keyword, 'depth', 0) + 1 + steplen = depth * Keyword.steplen + + if not self._request.space.demo and self._request.space.show_facet_count: + return queryset.annotate(count=Coalesce(Subquery(self._recipe_count_queryset('keywords', depth, steplen)), 0) + ).filter(depth=depth, count__gt=0 + ).values('id', 'name', 'count', 'numchild').order_by('name')[:200] + else: + return queryset.filter(depth=depth).values('id', 'name', 'numchild').order_by('name') - the cache key of the recipe list to process - only evaluated if the use_cache parameter is false - """ - facets = {} - recipe_list = [] - cache_timeout = 600 + def _food_queryset(self, queryset, food=None): + depth = getattr(food, 'depth', 0) + 1 + steplen = depth * Food.steplen - if use_cache: - qs_hash = hash(frozenset(qs.values_list('pk'))) - facets['cache_key'] = str(qs_hash) - SEARCH_CACHE_KEY = f"recipes_filter_{qs_hash}" - if c := caches['default'].get(SEARCH_CACHE_KEY, None): - facets['Keywords'] = c['Keywords'] or [] - facets['Foods'] = c['Foods'] or [] - facets['Books'] = c['Books'] or [] - facets['Ratings'] = c['Ratings'] or [] - facets['Recent'] = c['Recent'] or [] - else: - facets['Keywords'] = [] - facets['Foods'] = [] - facets['Books'] = [] - rating_qs = qs.annotate(rating=Round(Avg(Case(When(cooklog__created_by=request.user, then='cooklog__rating'), default=Value(0))))) - facets['Ratings'] = dict(Counter(r.rating for r in rating_qs)) - facets['Recent'] = ViewLog.objects.filter( - created_by=request.user, space=request.space, - created_at__gte=timezone.now() - timedelta(days=14) # TODO make days of recent recipe a setting - ).values_list('recipe__pk', flat=True) - - cached_search = { - 'recipe_list': list(qs.values_list('id', flat=True)), - 'keyword_list': request.query_params.getlist('keywords', []), - 'food_list': request.query_params.getlist('foods', []), - 'book_list': request.query_params.getlist('book', []), - 'search_keywords_or': str2bool(request.query_params.get('keywords_or', True)), - 'search_foods_or': str2bool(request.query_params.get('foods_or', True)), - 'search_books_or': str2bool(request.query_params.get('books_or', True)), - 'space': request.space, - 'Ratings': facets['Ratings'], - 'Recent': facets['Recent'], - 'Keywords': facets['Keywords'], - 'Foods': facets['Foods'], - 'Books': facets['Books'] - } - caches['default'].set(SEARCH_CACHE_KEY, cached_search, cache_timeout) - return facets - - SEARCH_CACHE_KEY = f'recipes_filter_{hash_key}' - if c := caches['default'].get(SEARCH_CACHE_KEY, None): - recipe_list = c['recipe_list'] - keyword_list = c['keyword_list'] - food_list = c['food_list'] - book_list = c['book_list'] - search_keywords_or = c['search_keywords_or'] - search_foods_or = c['search_foods_or'] - search_books_or = c['search_books_or'] - else: - return {} - - # if using an OR search, will annotate all keywords, otherwise, just those that appear in results - if search_keywords_or: - keywords = Keyword.objects.filter(space=request.space).annotate(recipe_count=Count('recipe')) - else: - keywords = Keyword.objects.filter(recipe__in=recipe_list, space=request.space).annotate(recipe_count=Count('recipe')) - # custom django-tree function annotates a queryset to make building a tree easier. - # see https://django-treebeard.readthedocs.io/en/latest/api.html#treebeard.models.Node.get_annotated_list_qs for details - kw_a = annotated_qs(keywords, root=True, fill=True) - - # # if using an OR search, will annotate all keywords, otherwise, just those that appear in results - if search_foods_or: - foods = Food.objects.filter(space=request.space).annotate(recipe_count=Count('ingredient')) - else: - foods = Food.objects.filter(ingredient__step__recipe__in=recipe_list, space=request.space).annotate(recipe_count=Count('ingredient')) - food_a = annotated_qs(foods, root=True, fill=True) - - # TODO add rating facet - facets['Keywords'] = fill_annotated_parents(kw_a, keyword_list) - facets['Foods'] = fill_annotated_parents(food_a, food_list) - # TODO add book facet - facets['Books'] = [] - c['Keywords'] = facets['Keywords'] - c['Foods'] = facets['Foods'] - c['Books'] = facets['Books'] - caches['default'].set(SEARCH_CACHE_KEY, c, cache_timeout) - return facets - - -def fill_annotated_parents(annotation, filters): - tree_list = [] - parent = [] - i = 0 - level = -1 - for r in annotation: - expand = False - - annotation[i][1]['id'] = r[0].id - annotation[i][1]['name'] = r[0].name - annotation[i][1]['count'] = getattr(r[0], 'recipe_count', 0) - annotation[i][1]['isDefaultExpanded'] = False - - if str(r[0].id) in filters: - expand = True - if r[1]['level'] < level: - parent = parent[:r[1]['level'] - level] - parent[-1] = i - level = r[1]['level'] - elif r[1]['level'] > level: - parent.extend([i]) - level = r[1]['level'] + if not self._request.space.demo and self._request.space.show_facet_count: + return queryset.annotate(count=Coalesce(Subquery(self._recipe_count_queryset('steps__ingredients__food', depth, steplen)), 0) + ).filter(depth__lte=depth, count__gt=0 + ).values('id', 'name', 'count', 'numchild').order_by('name')[:200] else: - parent[-1] = i - j = 0 - - while j < level: - # this causes some double counting when a recipe has both a child and an ancestor - annotation[parent[j]][1]['count'] += getattr(r[0], 'recipe_count', 0) - if expand: - annotation[parent[j]][1]['isDefaultExpanded'] = True - j += 1 - if level == 0: - tree_list.append(annotation[i][1]) - elif level > 0: - annotation[parent[level - 1]][1].setdefault('children', []).append(annotation[i][1]) - i += 1 - return tree_list - - -def annotated_qs(qs, root=False, fill=False): - """ - Gets an annotated list from a queryset. - :param root: - - Will backfill in annotation to include all parents to root node. - - :param fill: - Will fill in gaps in annotation where nodes between children - and ancestors are not included in the queryset. - """ - - result, info = [], {} - start_depth, prev_depth = (None, None) - nodes_list = list(qs.values_list('pk', flat=True)) - for node in qs.order_by('path'): - node_queue = [node] - while len(node_queue) > 0: - dirty = False - current_node = node_queue[-1] - depth = current_node.get_depth() - # TODO if node is at the wrong depth for some reason this fails - # either create a 'fix node' page, or automatically move the node to the root - parent_id = current_node.parent - if root and depth > 1 and parent_id not in nodes_list: - parent_id = current_node.parent - nodes_list.append(parent_id) - node_queue.append(current_node.__class__.objects.get(pk=parent_id)) - dirty = True - - if fill and depth > 1 and prev_depth and depth > prev_depth and parent_id not in nodes_list: - nodes_list.append(parent_id) - node_queue.append(current_node.__class__.objects.get(pk=parent_id)) - dirty = True - - if not dirty: - working_node = node_queue.pop() - if start_depth is None: - start_depth = depth - open = (depth and (prev_depth is None or depth > prev_depth)) - if prev_depth is not None and depth < prev_depth: - info['close'] = list(range(0, prev_depth - depth)) - info = {'open': open, 'close': [], 'level': depth - start_depth} - result.append((working_node, info,)) - prev_depth = depth - if start_depth and start_depth > 0: - info['close'] = list(range(0, prev_depth - start_depth + 1)) - return result + return queryset.filter(depth__lte=depth).values('id', 'name', 'numchild').order_by('name') + + +# # TODO: This might be faster https://github.com/django-treebeard/django-treebeard/issues/115 +# def get_facet(qs=None, request=None, use_cache=True, hash_key=None, food=None, keyword=None): +# """ +# Gets an annotated list from a queryset. +# :param qs: +# recipe queryset to build facets from +# :param request: +# the web request that contains the necessary query parameters +# :param use_cache: +# will find results in cache, if any, and return them or empty list. +# will save the list of recipes IDs in the cache for future processing +# :param hash_key: +# the cache key of the recipe list to process +# only evaluated if the use_cache parameter is false +# :param food: +# return children facets of food +# only evaluated if the use_cache parameter is false +# :param keyword: +# return children facets of keyword +# only evaluated if the use_cache parameter is false +# """ +# facets = {} +# recipe_list = [] +# cache_timeout = 600 + +# # return cached values +# if use_cache: +# qs_hash = hash(frozenset(qs.values_list('pk'))) +# facets['cache_key'] = str(qs_hash) +# SEARCH_CACHE_KEY = f"recipes_filter_{qs_hash}" +# if c := caches['default'].get(SEARCH_CACHE_KEY, None): +# facets['Keywords'] = c['Keywords'] or [] +# facets['Foods'] = c['Foods'] or [] +# facets['Books'] = c['Books'] or [] +# facets['Ratings'] = c['Ratings'] or [] +# facets['Recent'] = c['Recent'] or [] +# else: +# facets['Keywords'] = [] +# facets['Foods'] = [] +# facets['Books'] = [] +# # TODO make ratings a settings user-only vs all-users +# rating_qs = qs.annotate(rating=Round(Avg(Case(When(cooklog__created_by=request.user, then='cooklog__rating'), default=Value(0))))) +# facets['Ratings'] = dict(Counter(r.rating for r in rating_qs)) +# facets['Recent'] = ViewLog.objects.filter( +# created_by=request.user, space=request.space, +# created_at__gte=timezone.now() - timedelta(days=14) # TODO make days of recent recipe a setting +# ).values_list('recipe__pk', flat=True) + +# cached_search = { +# 'recipe_list': list(qs.values_list('id', flat=True)), +# 'keyword_list': request.query_params.getlist('keywords', []), +# 'food_list': request.query_params.getlist('foods', []), +# 'book_list': request.query_params.getlist('book', []), +# 'search_keywords_or': str2bool(request.query_params.get('keywords_or', True)), +# 'search_foods_or': str2bool(request.query_params.get('foods_or', True)), +# 'search_books_or': str2bool(request.query_params.get('books_or', True)), +# 'space': request.space, +# 'Ratings': facets['Ratings'], +# 'Recent': facets['Recent'], +# 'Keywords': facets['Keywords'], +# 'Foods': facets['Foods'], +# 'Books': facets['Books'] +# } +# caches['default'].set(SEARCH_CACHE_KEY, cached_search, cache_timeout) +# return facets + +# # construct and cache new values by retrieving search parameters from the cache +# SEARCH_CACHE_KEY = f'recipes_filter_{hash_key}' +# if c := caches['default'].get(SEARCH_CACHE_KEY, None): +# recipe_list = c['recipe_list'] +# keyword_list = c['keyword_list'] +# food_list = c['food_list'] +# book_list = c['book_list'] +# search_keywords_or = c['search_keywords_or'] +# search_foods_or = c['search_foods_or'] +# search_books_or = c['search_books_or'] +# else: +# return {} + +# # if using an OR search, will annotate all keywords, otherwise, just those that appear in results +# if search_keywords_or: +# keywords = Keyword.objects.filter(space=request.space).distinct() +# else: +# keywords = Keyword.objects.filter(Q(recipe__in=recipe_list) | Q(depth=1)).filter(space=request.space).distinct() + +# # Subquery that counts recipes for keyword including children +# kw_recipe_count = Recipe.objects.filter(**{'keywords__path__startswith': OuterRef('path')}, id__in=recipe_list, space=request.space +# ).values(kw=Substr('keywords__path', 1, Keyword.steplen) +# ).annotate(count=Count('pk', distinct=True)).values('count') + +# # set keywords to root objects only +# keywords = keywords.annotate(count=Coalesce(Subquery(kw_recipe_count), 0) +# ).filter(depth=1, count__gt=0 +# ).values('id', 'name', 'count', 'numchild' +# ).order_by('name') +# if keyword: +# facets['Keywords'] = list(keywords) +# return facets + +# # custom django-tree function annotates a queryset to make building a tree easier. +# # see https://django-treebeard.readthedocs.io/en/latest/api.html#treebeard.models.Node.get_annotated_list_qs for details +# # kw_a = annotated_qs(keywords, root=True, fill=True) + +# # # if using an OR search, will annotate all keywords, otherwise, just those that appear in results +# if search_foods_or: +# foods = Food.objects.filter(space=request.space).distinct() +# else: +# foods = Food.objects.filter(Q(ingredient__step__recipe__in=recipe_list) | Q(depth=1)).filter(space=request.space).distinct() + +# food_recipe_count = Recipe.objects.filter(**{'steps__ingredients__food__path__startswith': OuterRef('path')}, id__in=recipe_list, space=request.space +# ).values(kw=Substr('steps__ingredients__food__path', 1, Food.steplen * (1+getattr(food, 'depth', 0))) +# ).annotate(count=Count('pk', distinct=True)).values('count') + +# # set keywords to root objects only +# foods = foods.annotate(count=Coalesce(Subquery(food_recipe_count), 0) +# ).filter(depth=(1+getattr(food, 'depth', 0)), count__gt=0 +# ).values('id', 'name', 'count', 'numchild' +# ).order_by('name') +# if food: +# facets['Foods'] = list(foods) +# return facets + +# # food_a = annotated_qs(foods, root=True, fill=True) + +# # c['Keywords'] = facets['Keywords'] = fill_annotated_parents(kw_a, keyword_list) +# c['Keywords'] = facets['Keywords'] = list(keywords) +# # c['Foods'] = facets['Foods'] = fill_annotated_parents(food_a, food_list) +# c['Foods'] = facets['Foods'] = list(foods) +# # TODO add book facet +# c['Books'] = facets['Books'] = [] +# caches['default'].set(SEARCH_CACHE_KEY, c, cache_timeout) +# return facets + + +# def fill_annotated_parents(annotation, filters): +# tree_list = [] +# parent = [] +# i = 0 +# level = -1 +# for r in annotation: +# expand = False + +# annotation[i][1]['id'] = r[0].id +# annotation[i][1]['name'] = r[0].name +# annotation[i][1]['count'] = getattr(r[0], 'recipe_count', 0) +# annotation[i][1]['isDefaultExpanded'] = False + +# if str(r[0].id) in filters: +# expand = True +# if r[1]['level'] < level: +# parent = parent[:r[1]['level'] - level] +# parent[-1] = i +# level = r[1]['level'] +# elif r[1]['level'] > level: +# parent.extend([i]) +# level = r[1]['level'] +# else: +# parent[-1] = i +# j = 0 + +# while j < level: +# # this causes some double counting when a recipe has both a child and an ancestor +# annotation[parent[j]][1]['count'] += getattr(r[0], 'recipe_count', 0) +# if expand: +# annotation[parent[j]][1]['isDefaultExpanded'] = True +# j += 1 +# if level == 0: +# tree_list.append(annotation[i][1]) +# elif level > 0: +# annotation[parent[level - 1]][1].setdefault('children', []).append(annotation[i][1]) +# i += 1 +# return tree_list + + +# def annotated_qs(qs, root=False, fill=False): +# """ +# Gets an annotated list from a queryset. +# :param root: + +# Will backfill in annotation to include all parents to root node. + +# :param fill: +# Will fill in gaps in annotation where nodes between children +# and ancestors are not included in the queryset. +# """ + +# result, info = [], {} +# start_depth, prev_depth = (None, None) +# nodes_list = list(qs.values_list('pk', flat=True)) +# for node in qs.order_by('path'): +# node_queue = [node] +# while len(node_queue) > 0: +# dirty = False +# current_node = node_queue[-1] +# depth = current_node.get_depth() +# parent_id = current_node.parent +# if root and depth > 1 and parent_id not in nodes_list: +# parent_id = current_node.parent +# nodes_list.append(parent_id) +# node_queue.append(current_node.__class__.objects.get(pk=parent_id)) +# dirty = True + +# if fill and depth > 1 and prev_depth and depth > prev_depth and parent_id not in nodes_list: +# nodes_list.append(parent_id) +# node_queue.append(current_node.__class__.objects.get(pk=parent_id)) +# dirty = True + +# if not dirty: +# working_node = node_queue.pop() +# if start_depth is None: +# start_depth = depth +# open = (depth and (prev_depth is None or depth > prev_depth)) +# if prev_depth is not None and depth < prev_depth: +# info['close'] = list(range(0, prev_depth - depth)) +# info = {'open': open, 'close': [], 'level': depth - start_depth} +# result.append((working_node, info,)) +# prev_depth = depth +# if start_depth and start_depth > 0: +# info['close'] = list(range(0, prev_depth - start_depth + 1)) +# return result def old_search(request): @@ -410,3 +912,49 @@ def old_search(request): queryset=Recipe.objects.filter(space=request.user.userpreference.space).all().order_by('name'), space=request.space) return f.qs + + +# from django.db.models import fields +# from cookbook.models import Food, Recipe, Keyword, RecipeBook, Unit +# many_to_many = {} +# one_to_many = {} +# many_to_one = {} +# char = {} +# boolean = {} +# number = {} +# other = {} +# image = {} +# date = {} +# for model in [Food, Recipe, Keyword, RecipeBook, Unit]: +# print(name:=model.__name__, ":") +# for x in model._meta.get_fields(): + +# if x.name in ['space', 'id']: +# continue +# elif x.many_to_many: +# many_to_many[name]=[*many_to_many.get(name, []), x.name] +# elif x.one_to_many: +# one_to_many[name] = [*one_to_many.get(name, []), x.name] +# elif x.many_to_one: +# many_to_one[name] = [*many_to_one.get(name, []), x.name] +# elif isinstance(x, fields.CharField): +# char[name] = [*char.get(name, []), x.name] +# elif isinstance(x, fields.BooleanField): +# boolean[name] = [*boolean.get(name, []), x.name] +# elif isinstance(x, fields.IntegerField) or isinstance(x, fields.DecimalField): +# number[name] = [*number.get(name, []), x.name] +# elif isinstance(x, fields.DateField): +# date[name] = [*date.get(name, []), x.name] +# elif isinstance(x, fields.files.ImageField): +# image[name] = [*image.get(name, []), x.name] +# else: +# other[name] = [*other.get(name, []), x.name] +# if x.hidden: +# hidden[name] = [*hidden.get(name, []), x.name] +# print('---', x.name, ' - ', x.db_type) +# for field_type in [(char, 'char'), (number, 'number'), (other, 'other'), (date, 'date'), (image, 'image'), (one_to_many, 'one_to_many'), (many_to_one, 'many_to_one'), (many_to_many, 'many_to_many')]: +# print(f"{field_type[1]}:") +# for model in field_type[0]: +# print(f"--{model}") +# for field in field_type[0][model]: +# print(f" --{field}") diff --git a/cookbook/helper/scope_middleware.py b/cookbook/helper/scope_middleware.py index 7f0676c7ed..f5179bcba9 100644 --- a/cookbook/helper/scope_middleware.py +++ b/cookbook/helper/scope_middleware.py @@ -5,6 +5,7 @@ from rest_framework.exceptions import AuthenticationFailed from cookbook.views import views +from recipes import settings class ScopeMiddleware: @@ -12,16 +13,17 @@ def __init__(self, get_response): self.get_response = get_response def __call__(self, request): + prefix = settings.JS_REVERSE_SCRIPT_PREFIX or '' if request.user.is_authenticated: - if request.path.startswith('/admin/'): + if request.path.startswith(prefix + '/admin/'): with scopes_disabled(): return self.get_response(request) - if request.path.startswith('/signup/') or request.path.startswith('/invite/'): + if request.path.startswith(prefix + '/signup/') or request.path.startswith(prefix + '/invite/'): return self.get_response(request) - if request.path.startswith('/accounts/'): + if request.path.startswith(prefix + '/accounts/'): return self.get_response(request) with scopes_disabled(): @@ -36,7 +38,7 @@ def __call__(self, request): with scope(space=request.space): return self.get_response(request) else: - if request.path.startswith('/api/'): + if request.path.startswith(prefix + '/api/'): try: if auth := TokenAuthentication().authenticate(request): request.space = auth[0].userpreference.space diff --git a/cookbook/helper/shopping_helper.py b/cookbook/helper/shopping_helper.py new file mode 100644 index 0000000000..98bfe03fbf --- /dev/null +++ b/cookbook/helper/shopping_helper.py @@ -0,0 +1,155 @@ +from datetime import timedelta +from decimal import Decimal + +from django.contrib.postgres.aggregates import ArrayAgg +from django.db.models import F, OuterRef, Q, Subquery, Value +from django.db.models.functions import Coalesce +from django.utils import timezone +from django.utils.translation import gettext as _ + +from cookbook.helper.HelperFunctions import Round, str2bool +from cookbook.models import (Ingredient, ShoppingListEntry, ShoppingListRecipe, + SupermarketCategoryRelation) +from recipes import settings + + +def shopping_helper(qs, request): + supermarket = request.query_params.get('supermarket', None) + checked = request.query_params.get('checked', 'recent') + user = request.user + supermarket_order = [F('food__supermarket_category__name').asc(nulls_first=True), 'food__name'] + + # TODO created either scheduled task or startup task to delete very old shopping list entries + # TODO create user preference to define 'very old' + if supermarket: + supermarket_categories = SupermarketCategoryRelation.objects.filter(supermarket=supermarket, category=OuterRef('food__supermarket_category')) + qs = qs.annotate(supermarket_order=Coalesce(Subquery(supermarket_categories.values('order')), Value(9999))) + supermarket_order = ['supermarket_order'] + supermarket_order + if checked in ['false', 0, '0']: + qs = qs.filter(checked=False) + elif checked in ['true', 1, '1']: + qs = qs.filter(checked=True) + elif checked in ['recent']: + today_start = timezone.now().replace(hour=0, minute=0, second=0) + week_ago = today_start - timedelta(days=user.userpreference.shopping_recent_days) + qs = qs.filter(Q(checked=False) | Q(completed_at__gte=week_ago)) + supermarket_order = ['checked'] + supermarket_order + + return qs.order_by(*supermarket_order).select_related('unit', 'food', 'ingredient', 'created_by', 'list_recipe', 'list_recipe__mealplan', 'list_recipe__recipe') + + +# TODO refactor as class +def list_from_recipe(list_recipe=None, recipe=None, mealplan=None, servings=None, ingredients=None, created_by=None, space=None, append=False): + """ + Creates ShoppingListRecipe and associated ShoppingListEntrys from a recipe or a meal plan with a recipe + :param list_recipe: Modify an existing ShoppingListRecipe + :param recipe: Recipe to use as list of ingredients. One of [recipe, mealplan] are required + :param mealplan: alternatively use a mealplan recipe as source of ingredients + :param servings: Optional: Number of servings to use to scale shoppinglist. If servings = 0 an existing recipe list will be deleted + :param ingredients: Ingredients, list of ingredient IDs to include on the shopping list. When not provided all ingredients will be used + :param append: If False will remove any entries not included with ingredients, when True will append ingredients to the shopping list + """ + r = recipe or getattr(mealplan, 'recipe', None) or getattr(list_recipe, 'recipe', None) + if not r: + raise ValueError(_("You must supply a recipe or mealplan")) + + created_by = created_by or getattr(ShoppingListEntry.objects.filter(list_recipe=list_recipe).first(), 'created_by', None) + if not created_by: + raise ValueError(_("You must supply a created_by")) + + try: + servings = float(servings) + except (ValueError, TypeError): + servings = getattr(mealplan, 'servings', 1.0) + + servings_factor = servings / r.servings + + shared_users = list(created_by.get_shopping_share()) + shared_users.append(created_by) + if list_recipe: + created = False + else: + list_recipe = ShoppingListRecipe.objects.create(recipe=r, mealplan=mealplan, servings=servings) + created = True + + related_step_ing = [] + if servings == 0 and not created: + list_recipe.delete() + return [] + elif ingredients: + ingredients = Ingredient.objects.filter(pk__in=ingredients, space=space) + else: + ingredients = Ingredient.objects.filter(step__recipe=r, space=space) + + if exclude_onhand := created_by.userpreference.mealplan_autoexclude_onhand: + ingredients = ingredients.exclude(food__onhand_users__id__in=[x.id for x in shared_users]) + + if related := created_by.userpreference.mealplan_autoinclude_related: + # TODO: add levels of related recipes (related recipes of related recipes) to use when auto-adding mealplans + related_recipes = r.get_related_recipes() + + for x in related_recipes: + # related recipe is a Step serving size is driven by recipe serving size + # TODO once/if Steps can have a serving size this needs to be refactored + if exclude_onhand: + # if steps are used more than once in a recipe or subrecipe - I don' think this results in the desired behavior + related_step_ing += Ingredient.objects.filter(step__recipe=x, space=space).exclude(food__onhand_users__id__in=[x.id for x in shared_users]).values_list('id', flat=True) + else: + related_step_ing += Ingredient.objects.filter(step__recipe=x, space=space).values_list('id', flat=True) + + x_ing = [] + if ingredients.filter(food__recipe=x).exists(): + for ing in ingredients.filter(food__recipe=x): + if exclude_onhand: + x_ing = Ingredient.objects.filter(step__recipe=x, space=space).exclude(food__onhand_users__id__in=[x.id for x in shared_users]) + else: + x_ing = Ingredient.objects.filter(step__recipe=x, space=space) + for i in [x for x in x_ing]: + ShoppingListEntry.objects.create( + list_recipe=list_recipe, + food=i.food, + unit=i.unit, + ingredient=i, + amount=i.amount * Decimal(servings_factor), + created_by=created_by, + space=space, + ) + # dont' add food to the shopping list that are actually recipes that will be added as ingredients + ingredients = ingredients.exclude(food__recipe=x) + + add_ingredients = list(ingredients.values_list('id', flat=True)) + related_step_ing + if not append: + existing_list = ShoppingListEntry.objects.filter(list_recipe=list_recipe) + # delete shopping list entries not included in ingredients + existing_list.exclude(ingredient__in=ingredients).delete() + # add shopping list entries that did not previously exist + add_ingredients = set(add_ingredients) - set(existing_list.values_list('ingredient__id', flat=True)) + add_ingredients = Ingredient.objects.filter(id__in=add_ingredients, space=space) + + # if servings have changed, update the ShoppingListRecipe and existing Entries + if servings <= 0: + servings = 1 + + if not created and list_recipe.servings != servings: + update_ingredients = set(ingredients.values_list('id', flat=True)) - set(add_ingredients.values_list('id', flat=True)) + list_recipe.servings = servings + list_recipe.save() + for sle in ShoppingListEntry.objects.filter(list_recipe=list_recipe, ingredient__id__in=update_ingredients): + sle.amount = sle.ingredient.amount * Decimal(servings_factor) + sle.save() + + # add any missing Entries + for i in [x for x in add_ingredients if x.food]: + + ShoppingListEntry.objects.create( + list_recipe=list_recipe, + food=i.food, + unit=i.unit, + ingredient=i, + amount=i.amount * Decimal(servings_factor), + created_by=created_by, + space=space, + ) + + # return all shopping list items + return list_recipe diff --git a/cookbook/integration/default.py b/cookbook/integration/default.py index 1fb16e7f6c..39c0bc666b 100644 --- a/cookbook/integration/default.py +++ b/cookbook/integration/default.py @@ -1,5 +1,5 @@ import json -from io import BytesIO +from io import BytesIO, StringIO from re import match from zipfile import ZipFile @@ -35,3 +35,28 @@ def get_file_from_recipe(self, recipe): export = RecipeExportSerializer(recipe).data return 'recipe.json', JSONRenderer().render(export).decode("utf-8") + + def get_files_from_recipes(self, recipes, cookie): + export_zip_stream = BytesIO() + export_zip_obj = ZipFile(export_zip_stream, 'w') + + for r in recipes: + if r.internal and r.space == self.request.space: + recipe_zip_stream = BytesIO() + recipe_zip_obj = ZipFile(recipe_zip_stream, 'w') + + recipe_stream = StringIO() + filename, data = self.get_file_from_recipe(r) + recipe_stream.write(data) + recipe_zip_obj.writestr(filename, recipe_stream.getvalue()) + recipe_stream.close() + try: + recipe_zip_obj.writestr(f'image{get_filetype(r.image.file.name)}', r.image.file.read()) + except ValueError: + pass + + recipe_zip_obj.close() + export_zip_obj.writestr(str(r.pk) + '.zip', recipe_zip_stream.getvalue()) + export_zip_obj.close() + + return [[ 'export.zip', export_zip_stream.getvalue() ]] \ No newline at end of file diff --git a/cookbook/integration/integration.py b/cookbook/integration/integration.py index 2e5ac8513c..6fee602c6d 100644 --- a/cookbook/integration/integration.py +++ b/cookbook/integration/integration.py @@ -3,7 +3,7 @@ import traceback import uuid from io import BytesIO, StringIO -from zipfile import ZipFile, BadZipFile +from zipfile import BadZipFile, ZipFile from bs4 import Tag from django.core.exceptions import ObjectDoesNotExist @@ -42,7 +42,7 @@ def __init__(self, request, export_type): try: last_kw = Keyword.objects.filter(name__regex=r'^(Import [0-9]+)', space=request.space).latest('created_at') name = f'Import {int(last_kw.name.replace("Import ", "")) + 1}' - except ObjectDoesNotExist: + except (ObjectDoesNotExist, ValueError): name = 'Import 1' parent, created = Keyword.objects.get_or_create(name='Import', space=request.space) @@ -53,7 +53,7 @@ def __init__(self, request, export_type): icon=icon, space=request.space ) - except IntegrityError: # in case, for whatever reason, the name does exist append UUID to it. Not nice but works for now. + except (IntegrityError, ValueError): # in case, for whatever reason, the name does exist append UUID to it. Not nice but works for now. self.keyword = parent.add_child( name=f'{name} {str(uuid.uuid4())[0:8]}', description=description, @@ -65,45 +65,30 @@ def do_export(self, recipes): """ Perform the export based on a list of recipes :param recipes: list of recipe objects - :return: HttpResponse with a ZIP file that is directly downloaded + :return: HttpResponse with the file of the requested export format that is directly downloaded (When that format involve multiple files they are zipped together) """ - # TODO this is temporary, find a better solution for different export formats when doing other exporters - if self.export_type != ImportExportBase.RECIPESAGE: - export_zip_stream = BytesIO() - export_zip_obj = ZipFile(export_zip_stream, 'w') + files = self.get_files_from_recipes(recipes, self.request.COOKIES) - for r in recipes: - if r.internal and r.space == self.request.space: - recipe_zip_stream = BytesIO() - recipe_zip_obj = ZipFile(recipe_zip_stream, 'w') + if len(files) == 1: + filename, file = files[0] + export_filename = filename + export_file = file - recipe_stream = StringIO() - filename, data = self.get_file_from_recipe(r) - recipe_stream.write(data) - recipe_zip_obj.writestr(filename, recipe_stream.getvalue()) - recipe_stream.close() - try: - recipe_zip_obj.writestr(f'image{get_filetype(r.image.file.name)}', r.image.file.read()) - except ValueError: - pass - - recipe_zip_obj.close() - export_zip_obj.writestr(str(r.pk) + '.zip', recipe_zip_stream.getvalue()) + else: + export_filename = "export.zip" + export_stream = BytesIO() + export_obj = ZipFile(export_stream, 'w') - export_zip_obj.close() + for filename, file in files: + export_obj.writestr(filename, file) - response = HttpResponse(export_zip_stream.getvalue(), content_type='application/force-download') - response['Content-Disposition'] = 'attachment; filename="export.zip"' - return response - else: - json_list = [] - for r in recipes: - json_list.append(self.get_file_from_recipe(r)) + export_obj.close() + export_file = export_stream.getvalue() - response = HttpResponse(json.dumps(json_list), content_type='application/force-download') - response['Content-Disposition'] = 'attachment; filename="recipes.json"' - return response + response = HttpResponse(export_file, content_type='application/force-download') + response['Content-Disposition'] = 'attachment; filename="' + export_filename + '"' + return response def import_file_name_filter(self, zip_info_object): """ @@ -275,6 +260,16 @@ def get_file_from_recipe(self, recipe): """ raise NotImplementedError('Method not implemented in integration') + def get_files_from_recipes(self, recipes, cookie): + """ + Takes a list of recipe object and converts it to a array containing each file. + Each file is represented as an array [filename, data] where data is a string of the content of the file. + :param recipe: Recipe object that should be converted + :returns: + [[filename, data], ...] + """ + raise NotImplementedError('Method not implemented in integration') + @staticmethod def handle_exception(exception, log=None, message=''): if log: diff --git a/cookbook/integration/pdfexport.py b/cookbook/integration/pdfexport.py new file mode 100644 index 0000000000..b982f24d17 --- /dev/null +++ b/cookbook/integration/pdfexport.py @@ -0,0 +1,55 @@ +import json +from io import BytesIO +from re import match +from zipfile import ZipFile +import asyncio +from pyppeteer import launch + +from rest_framework.renderers import JSONRenderer + +from cookbook.helper.image_processing import get_filetype +from cookbook.integration.integration import Integration +from cookbook.serializer import RecipeExportSerializer + +import django.core.management.commands.runserver as runserver + + +class PDFexport(Integration): + + def get_recipe_from_file(self, file): + raise NotImplementedError('Method not implemented in storage integration') + + async def get_files_from_recipes_async(self, recipes, cookie): + cmd = runserver.Command() + + browser = await launch( + handleSIGINT=False, + handleSIGTERM=False, + handleSIGHUP=False, + ignoreHTTPSErrors=True + ) + + cookies = {'domain': cmd.default_addr, 'name': 'sessionid', 'value': cookie['sessionid'], } + options = {'format': 'letter', + 'margin': { + 'top': '0.75in', + 'bottom': '0.75in', + 'left': '0.75in', + 'right': '0.75in', + } + } + + page = await browser.newPage() + await page.emulateMedia('print') + await page.setCookie(cookies) + + files = [] + for recipe in recipes: + await page.goto('http://' + cmd.default_addr + ':' + cmd.default_port + '/view/recipe/' + str(recipe.id), {'waitUntil': 'networkidle0', }) + files.append([recipe.name + '.pdf', await page.pdf(options)]) + + await browser.close() + return files + + def get_files_from_recipes(self, recipes, cookie): + return asyncio.run(self.get_files_from_recipes_async(recipes, cookie)) diff --git a/cookbook/integration/recettetek.py b/cookbook/integration/recettetek.py index be1c5ae0c0..7ae4115b8d 100644 --- a/cookbook/integration/recettetek.py +++ b/cookbook/integration/recettetek.py @@ -27,10 +27,10 @@ def split_recipe_file(self, file): def get_recipe_from_file(self, file): - # Create initial recipe with just a title and a decription + # Create initial recipe with just a title and a description recipe = Recipe.objects.create(name=file['title'], created_by=self.request.user, internal=True, space=self.request.space, ) - # set the description as an empty string for later use for the source URL, incase there is no description text. + # set the description as an empty string for later use for the source URL, in case there is no description text. recipe.description = '' try: diff --git a/cookbook/integration/recipesage.py b/cookbook/integration/recipesage.py index 9c5f70acef..0ca32194db 100644 --- a/cookbook/integration/recipesage.py +++ b/cookbook/integration/recipesage.py @@ -88,5 +88,12 @@ def get_file_from_recipe(self, recipe): return data + def get_files_from_recipes(self, recipes, cookie): + json_list = [] + for r in recipes: + json_list.append(self.get_file_from_recipe(r)) + + return [['export.json', json.dumps(json_list)]] + def split_recipe_file(self, file): return json.loads(file.read().decode("utf-8")) diff --git a/cookbook/integration/safron.py b/cookbook/integration/saffron.py similarity index 68% rename from cookbook/integration/safron.py rename to cookbook/integration/saffron.py index fa7a793e38..16a93a0cea 100644 --- a/cookbook/integration/safron.py +++ b/cookbook/integration/saffron.py @@ -5,7 +5,7 @@ from cookbook.models import Recipe, Step, Ingredient -class Safron(Integration): +class Saffron(Integration): def get_recipe_from_file(self, file): ingredient_mode = False @@ -58,4 +58,39 @@ def get_recipe_from_file(self, file): return recipe def get_file_from_recipe(self, recipe): - raise NotImplementedError('Method not implemented in storage integration') + + data = "Title: "+recipe.name if recipe.name else ""+"\n" + data += "Description: "+recipe.description if recipe.description else ""+"\n" + data += "Source: \n" + data += "Original URL: \n" + data += "Yield: "+str(recipe.servings)+"\n" + data += "Cookbook: \n" + data += "Section: \n" + data += "Image: \n" + + recipeInstructions = [] + recipeIngredient = [] + for s in recipe.steps.all(): + if s.type != Step.TIME: + recipeInstructions.append(s.instruction) + + for i in s.ingredients.all(): + recipeIngredient.append(f'{float(i.amount)} {i.unit} {i.food}') + + data += "Ingredients: \n" + for ingredient in recipeIngredient: + data += ingredient+"\n" + + data += "Instructions: \n" + for instruction in recipeInstructions: + data += instruction+"\n" + + return recipe.name+'.txt', data + + def get_files_from_recipes(self, recipes, cookie): + files = [] + for r in recipes: + filename, data = self.get_file_from_recipe(r) + files.append([ filename, data ]) + + return files \ No newline at end of file diff --git a/cookbook/locale/ca/LC_MESSAGES/django.mo b/cookbook/locale/ca/LC_MESSAGES/django.mo index 2bd8520d76..701d6bda28 100644 Binary files a/cookbook/locale/ca/LC_MESSAGES/django.mo and b/cookbook/locale/ca/LC_MESSAGES/django.mo differ diff --git a/cookbook/locale/ca/LC_MESSAGES/django.po b/cookbook/locale/ca/LC_MESSAGES/django.po index 9e7b7273c7..b8b88d7789 100644 --- a/cookbook/locale/ca/LC_MESSAGES/django.po +++ b/cookbook/locale/ca/LC_MESSAGES/django.po @@ -13,7 +13,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-08 16:27+0100\n" +"POT-Creation-Date: 2022-01-18 14:52+0100\n" "PO-Revision-Date: 2020-06-02 19:28+0000\n" "Last-Translator: Miguel Canteras , 2021\n" "Language-Team: Catalan (https://www.transifex.com/django-recipes/" @@ -24,81 +24,80 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: .\cookbook\filters.py:23 .\cookbook\templates\base.html:125 -#: .\cookbook\templates\forms\ingredients.html:34 -#: .\cookbook\templates\space.html:43 .\cookbook\templates\stats.html:28 -#: .\cookbook\templates\url_import.html:274 +#: .\cookbook\filters.py:23 .\cookbook\templates\forms\ingredients.html:34 +#: .\cookbook\templates\space.html:50 .\cookbook\templates\stats.html:28 +#: .\cookbook\templates\url_import.html:277 msgid "Ingredients" msgstr "Ingredients" -#: .\cookbook\forms.py:54 +#: .\cookbook\forms.py:56 #, fuzzy #| msgid "Default" msgid "Default unit" msgstr "Per defecte" -#: .\cookbook\forms.py:55 +#: .\cookbook\forms.py:57 #, fuzzy #| msgid "System Information" msgid "Use fractions" msgstr "Informació de Sistema" -#: .\cookbook\forms.py:56 +#: .\cookbook\forms.py:58 msgid "Use KJ" msgstr "" -#: .\cookbook\forms.py:57 +#: .\cookbook\forms.py:59 msgid "Theme" msgstr "" -#: .\cookbook\forms.py:58 +#: .\cookbook\forms.py:60 msgid "Navbar color" msgstr "" -#: .\cookbook\forms.py:59 +#: .\cookbook\forms.py:61 msgid "Sticky navbar" msgstr "" -#: .\cookbook\forms.py:60 +#: .\cookbook\forms.py:62 #, fuzzy #| msgid "Default" msgid "Default page" msgstr "Per defecte" -#: .\cookbook\forms.py:61 +#: .\cookbook\forms.py:63 #, fuzzy #| msgid "Shopping Recipes" msgid "Show recent recipes" msgstr "Llista de Compra de Receptes" -#: .\cookbook\forms.py:62 +#: .\cookbook\forms.py:64 #, fuzzy #| msgid "Search" msgid "Search style" msgstr "Cerca" -#: .\cookbook\forms.py:63 +#: .\cookbook\forms.py:65 msgid "Plan sharing" msgstr "" -#: .\cookbook\forms.py:64 +#: .\cookbook\forms.py:66 #, fuzzy #| msgid "Ingredients" msgid "Ingredient decimal places" msgstr "Ingredients" -#: .\cookbook\forms.py:65 +#: .\cookbook\forms.py:67 #, fuzzy #| msgid "Shopping list currently empty" msgid "Shopping list auto sync period" msgstr "La llista de la compra està buida actualment" -#: .\cookbook\forms.py:66 .\cookbook\templates\recipe_view.html:21 -#: .\cookbook\templates\space.html:62 .\cookbook\templates\stats.html:47 +#: .\cookbook\forms.py:68 .\cookbook\templates\recipe_view.html:21 +#: .\cookbook\templates\space.html:77 .\cookbook\templates\stats.html:47 msgid "Comments" msgstr "Comentaris" -#: .\cookbook\forms.py:70 +#: .\cookbook\forms.py:72 msgid "" "Color of the top navigation bar. Not all colors work with all themes, just " "try them out!" @@ -106,13 +105,13 @@ msgstr "" "Color de la barra de navegació superior. No tots els colors funcionen amb " "tots els temes, només cal provar-los." -#: .\cookbook\forms.py:72 +#: .\cookbook\forms.py:74 msgid "Default Unit to be used when inserting a new ingredient into a recipe." msgstr "" "Unitat per defecte que s'utilitzarà quan s'insereixi un ingredient nou en " "una recepta." -#: .\cookbook\forms.py:74 +#: .\cookbook\forms.py:76 msgid "" "Enables support for fractions in ingredient amounts (e.g. convert decimals " "to fractions automatically)" @@ -120,31 +119,39 @@ msgstr "" "Permet l'ús de fraccions de quantitats d'ingredients (p.ex.: converteix els " "decimals a fraccions automàticament)" -#: .\cookbook\forms.py:76 +#: .\cookbook\forms.py:78 msgid "Display nutritional energy amounts in joules instead of calories" msgstr "" -#: .\cookbook\forms.py:78 -msgid "" -"Users with whom newly created meal plan/shopping list entries should be " -"shared by default." +#: .\cookbook\forms.py:79 +#, fuzzy +#| msgid "" +#| "Users with whom newly created meal plan/shopping list entries should be " +#| "shared by default." +msgid "Users with whom newly created meal plans should be shared by default." msgstr "" "Els usuaris que han creat elements d'un pla de menjars/llistat de compra " "s'haurien de compartir per defecte." #: .\cookbook\forms.py:80 +#, fuzzy +#| msgid "Open Shopping List" +msgid "Users with whom to share shopping lists." +msgstr "Llista de la Compra Oberta" + +#: .\cookbook\forms.py:82 msgid "Show recently viewed recipes on search page." msgstr "Mostra les receptes vistes recentment a la pàgina de cerca." -#: .\cookbook\forms.py:81 +#: .\cookbook\forms.py:83 msgid "Number of decimals to round ingredients." msgstr "Nombre de decimals dels ingredients." -#: .\cookbook\forms.py:82 +#: .\cookbook\forms.py:84 msgid "If you want to be able to create and see comments underneath recipes." msgstr "Si vols poder crear i veure comentaris a sota de les receptes." -#: .\cookbook\forms.py:84 +#: .\cookbook\forms.py:86 .\cookbook\forms.py:493 msgid "" "Setting to 0 will disable auto sync. When viewing a shopping list the list " "is updated every set seconds to sync changes someone else might have made. " @@ -157,11 +164,19 @@ msgstr "" "diverses persones, però pot fer servir una mica de dades mòbils. Si és " "inferior al límit d’instància, es restablirà quan es desa." -#: .\cookbook\forms.py:87 +#: .\cookbook\forms.py:89 msgid "Makes the navbar stick to the top of the page." msgstr "" -#: .\cookbook\forms.py:103 +#: .\cookbook\forms.py:90 .\cookbook\forms.py:496 +msgid "Automatically add meal plan ingredients to shopping list." +msgstr "" + +#: .\cookbook\forms.py:91 +msgid "Exclude ingredients that are on hand." +msgstr "" + +#: .\cookbook\forms.py:108 msgid "" "Both fields are optional. If none are given the username will be displayed " "instead" @@ -169,59 +184,59 @@ msgstr "" "Tots dos camps són opcionals. Si no se'n dóna cap, es mostrarà el nom " "d'usuari" -#: .\cookbook\forms.py:124 .\cookbook\forms.py:289 -#: .\cookbook\templates\url_import.html:158 +#: .\cookbook\forms.py:129 .\cookbook\forms.py:298 +#: .\cookbook\templates\url_import.html:161 msgid "Name" msgstr "Nom" -#: .\cookbook\forms.py:125 .\cookbook\forms.py:290 -#: .\cookbook\templates\space.html:39 .\cookbook\templates\stats.html:24 -#: .\cookbook\templates\url_import.html:192 -#: .\cookbook\templates\url_import.html:578 .\cookbook\views\lists.py:112 +#: .\cookbook\forms.py:130 .\cookbook\forms.py:299 +#: .\cookbook\templates\space.html:44 .\cookbook\templates\stats.html:24 +#: .\cookbook\templates\url_import.html:195 +#: .\cookbook\templates\url_import.html:585 .\cookbook\views\lists.py:97 msgid "Keywords" msgstr "Paraules clau" -#: .\cookbook\forms.py:126 +#: .\cookbook\forms.py:131 msgid "Preparation time in minutes" msgstr "Temps de preparació en minuts" -#: .\cookbook\forms.py:127 +#: .\cookbook\forms.py:132 msgid "Waiting time (cooking/baking) in minutes" msgstr "Temps d'espera (cocció/fornejat) en minuts" -#: .\cookbook\forms.py:128 .\cookbook\forms.py:259 .\cookbook\forms.py:291 +#: .\cookbook\forms.py:133 .\cookbook\forms.py:267 .\cookbook\forms.py:300 msgid "Path" msgstr "Ruta" -#: .\cookbook\forms.py:129 +#: .\cookbook\forms.py:134 msgid "Storage UID" msgstr "UID Emmagatzematge" -#: .\cookbook\forms.py:157 +#: .\cookbook\forms.py:164 msgid "Default" msgstr "Per defecte" -#: .\cookbook\forms.py:168 .\cookbook\templates\url_import.html:94 +#: .\cookbook\forms.py:175 .\cookbook\templates\url_import.html:97 msgid "" "To prevent duplicates recipes with the same name as existing ones are " "ignored. Check this box to import everything." msgstr "" -#: .\cookbook\forms.py:190 +#: .\cookbook\forms.py:197 msgid "Add your comment: " msgstr "Afegir el teu comentari:" -#: .\cookbook\forms.py:205 +#: .\cookbook\forms.py:212 msgid "Leave empty for dropbox and enter app password for nextcloud." msgstr "" "Deixeu-lo buit per a Dropbox i introduïu la contrasenya de l'aplicació per a " "nextcloud." -#: .\cookbook\forms.py:212 +#: .\cookbook\forms.py:219 msgid "Leave empty for nextcloud and enter api token for dropbox." msgstr "Deixeu-lo buit per a nextcloud i introduïu el token API per a Dropbox." -#: .\cookbook\forms.py:221 +#: .\cookbook\forms.py:228 msgid "" "Leave empty for dropbox and enter only base url for nextcloud (/remote." "php/webdav/ is added automatically)" @@ -229,33 +244,33 @@ msgstr "" "Deixeu-lo buit per a Dropbox i introduïu només l'URL base per a nextcloud " "(/remote.php/webdav/ s'afegeix automàticament)" -#: .\cookbook\forms.py:258 .\cookbook\views\edit.py:166 +#: .\cookbook\forms.py:266 .\cookbook\views\edit.py:166 msgid "Storage" msgstr "Emmagatzematge" -#: .\cookbook\forms.py:260 +#: .\cookbook\forms.py:268 msgid "Active" msgstr "" -#: .\cookbook\forms.py:265 +#: .\cookbook\forms.py:274 msgid "Search String" msgstr "Cerca Cadena" -#: .\cookbook\forms.py:292 +#: .\cookbook\forms.py:301 msgid "File ID" msgstr "ID d'Arxiu" -#: .\cookbook\forms.py:313 +#: .\cookbook\forms.py:323 msgid "You must provide at least a recipe or a title." msgstr "Has de proporcionar com a mínim una recepta o un títol." -#: .\cookbook\forms.py:326 +#: .\cookbook\forms.py:336 msgid "You can list default users to share recipes with in the settings." msgstr "" "Podeu llistar els usuaris predeterminats amb els quals voleu compartir " "receptes a la configuració." -#: .\cookbook\forms.py:327 +#: .\cookbook\forms.py:337 msgid "" "You can use markdown to format this field. See the docs here" @@ -263,110 +278,220 @@ msgstr "" "Podeu utilitzar el marcador per donar format a aquest camp. Consulteu els documents aquí " -#: .\cookbook\forms.py:353 +#: .\cookbook\forms.py:363 msgid "Maximum number of users for this space reached." msgstr "" -#: .\cookbook\forms.py:359 +#: .\cookbook\forms.py:369 msgid "Email address already taken!" msgstr "" -#: .\cookbook\forms.py:367 +#: .\cookbook\forms.py:377 msgid "" "An email address is not required but if present the invite link will be sent " "to the user." msgstr "" -#: .\cookbook\forms.py:382 +#: .\cookbook\forms.py:392 msgid "Name already taken." msgstr "" -#: .\cookbook\forms.py:393 +#: .\cookbook\forms.py:403 msgid "Accept Terms and Privacy" msgstr "" -#: .\cookbook\forms.py:425 +#: .\cookbook\forms.py:435 msgid "" "Determines how fuzzy a search is if it uses trigram similarity matching (e." "g. low values mean more typos are ignored)." msgstr "" -#: .\cookbook\forms.py:435 +#: .\cookbook\forms.py:445 msgid "" "Select type method of search. Click here for " "full desciption of choices." msgstr "" -#: .\cookbook\forms.py:436 +#: .\cookbook\forms.py:446 msgid "" "Use fuzzy matching on units, keywords and ingredients when editing and " "importing recipes." msgstr "" -#: .\cookbook\forms.py:438 +#: .\cookbook\forms.py:448 msgid "" "Fields to search ignoring accents. Selecting this option can improve or " "degrade search quality depending on language" msgstr "" -#: .\cookbook\forms.py:440 +#: .\cookbook\forms.py:450 msgid "" "Fields to search for partial matches. (e.g. searching for 'Pie' will return " "'pie' and 'piece' and 'soapie')" msgstr "" -#: .\cookbook\forms.py:442 +#: .\cookbook\forms.py:452 msgid "" "Fields to search for beginning of word matches. (e.g. searching for 'sa' " "will return 'salad' and 'sandwich')" msgstr "" -#: .\cookbook\forms.py:444 +#: .\cookbook\forms.py:454 msgid "" "Fields to 'fuzzy' search. (e.g. searching for 'recpie' will find 'recipe'.) " "Note: this option will conflict with 'web' and 'raw' methods of search." msgstr "" -#: .\cookbook\forms.py:446 +#: .\cookbook\forms.py:456 msgid "" "Fields to full text search. Note: 'web', 'phrase', and 'raw' search methods " "only function with fulltext fields." msgstr "" -#: .\cookbook\forms.py:450 +#: .\cookbook\forms.py:460 #, fuzzy #| msgid "Search" msgid "Search Method" msgstr "Cerca" -#: .\cookbook\forms.py:451 +#: .\cookbook\forms.py:461 msgid "Fuzzy Lookups" msgstr "" -#: .\cookbook\forms.py:452 +#: .\cookbook\forms.py:462 msgid "Ignore Accent" msgstr "" -#: .\cookbook\forms.py:453 +#: .\cookbook\forms.py:463 msgid "Partial Match" msgstr "" -#: .\cookbook\forms.py:454 +#: .\cookbook\forms.py:464 msgid "Starts Wtih" msgstr "" -#: .\cookbook\forms.py:455 +#: .\cookbook\forms.py:465 #, fuzzy #| msgid "Search" msgid "Fuzzy Search" msgstr "Cerca" -#: .\cookbook\forms.py:456 +#: .\cookbook\forms.py:466 #, fuzzy #| msgid "Text" msgid "Full Text" msgstr "Text" +#: .\cookbook\forms.py:491 +msgid "" +"Users will see all items you add to your shopping list. They must add you " +"to see items on their list." +msgstr "" + +#: .\cookbook\forms.py:497 +msgid "" +"When adding a meal plan to the shopping list (manually or automatically), " +"include all related recipes." +msgstr "" + +#: .\cookbook\forms.py:498 +msgid "" +"When adding a meal plan to the shopping list (manually or automatically), " +"exclude ingredients that are on hand." +msgstr "" + +#: .\cookbook\forms.py:499 +msgid "Default number of hours to delay a shopping list entry." +msgstr "" + +#: .\cookbook\forms.py:500 +msgid "Filter shopping list to only include supermarket categories." +msgstr "" + +#: .\cookbook\forms.py:501 +msgid "Days of recent shopping list entries to display." +msgstr "" + +#: .\cookbook\forms.py:502 +msgid "Mark food 'On Hand' when checked off shopping list." +msgstr "" + +#: .\cookbook\forms.py:503 +msgid "Delimiter to use for CSV exports." +msgstr "" + +#: .\cookbook\forms.py:504 +msgid "Prefix to add when copying list to the clipboard." +msgstr "" + +#: .\cookbook\forms.py:508 +#, fuzzy +#| msgid "Shopping List" +msgid "Share Shopping List" +msgstr "Llista de la Compra" + +#: .\cookbook\forms.py:509 +msgid "Autosync" +msgstr "" + +#: .\cookbook\forms.py:510 +msgid "Auto Add Meal Plan" +msgstr "" + +#: .\cookbook\forms.py:511 +msgid "Exclude On Hand" +msgstr "" + +#: .\cookbook\forms.py:512 +msgid "Include Related" +msgstr "" + +#: .\cookbook\forms.py:513 +msgid "Default Delay Hours" +msgstr "" + +#: .\cookbook\forms.py:514 +#, fuzzy +#| msgid "Select Supermarket" +msgid "Filter to Supermarket" +msgstr "Seleccioni supermercat" + +#: .\cookbook\forms.py:515 +msgid "Recent Days" +msgstr "" + +#: .\cookbook\forms.py:516 +msgid "CSV Delimiter" +msgstr "" + +#: .\cookbook\forms.py:517 .\cookbook\templates\shopping_list.html:322 +msgid "List Prefix" +msgstr "Prefix de Llista" + +#: .\cookbook\forms.py:518 +msgid "Auto On Hand" +msgstr "" + +#: .\cookbook\forms.py:528 +msgid "Reset Food Inheritance" +msgstr "" + +#: .\cookbook\forms.py:529 +msgid "Reset all food to inherit the fields configured." +msgstr "" + +#: .\cookbook\forms.py:541 +#, fuzzy +#| msgid "Food that should be replaced." +msgid "Fields on food that should be inherited by default." +msgstr "Menjar que s’hauria de substituir." + +#: .\cookbook\forms.py:542 +#, fuzzy +#| msgid "Show recently viewed recipes on search page." +msgid "Show recipe counts on search filters" +msgstr "Mostra les receptes vistes recentment a la pàgina de cerca." + #: .\cookbook\helper\AllAuthCustomAdapter.py:36 msgid "" "In order to prevent spam, the requested email was not send. Please wait a " @@ -374,19 +499,19 @@ msgid "" msgstr "" #: .\cookbook\helper\permission_helper.py:136 -#: .\cookbook\helper\permission_helper.py:159 .\cookbook\views\views.py:149 +#: .\cookbook\helper\permission_helper.py:159 .\cookbook\views\views.py:148 msgid "You are not logged in and therefore cannot view this page!" msgstr "No heu iniciat la sessió i, per tant, no podeu veure aquesta pàgina." #: .\cookbook\helper\permission_helper.py:140 #: .\cookbook\helper\permission_helper.py:146 #: .\cookbook\helper\permission_helper.py:171 -#: .\cookbook\helper\permission_helper.py:216 -#: .\cookbook\helper\permission_helper.py:230 -#: .\cookbook\helper\permission_helper.py:241 -#: .\cookbook\helper\permission_helper.py:252 .\cookbook\views\data.py:47 -#: .\cookbook\views\views.py:160 .\cookbook\views\views.py:167 -#: .\cookbook\views\views.py:233 +#: .\cookbook\helper\permission_helper.py:219 +#: .\cookbook\helper\permission_helper.py:233 +#: .\cookbook\helper\permission_helper.py:244 +#: .\cookbook\helper\permission_helper.py:255 .\cookbook\views\data.py:47 +#: .\cookbook\views\views.py:159 .\cookbook\views\views.py:166 +#: .\cookbook\views\views.py:232 msgid "You do not have the required permissions to view this page!" msgstr "No teniu els permisos necessaris per veure aquesta pàgina!" @@ -397,41 +522,42 @@ msgid "You cannot interact with this object as it is not owned by you!" msgstr "" "No pots interaccionar amb aquest objecte ja que no és de la teva propietat!" +#: .\cookbook\helper\recipe_search.py:473 +msgid "One of queryset or hash_key must be provided" +msgstr "" + +#: .\cookbook\helper\shopping_helper.py:54 +#, fuzzy +#| msgid "You must provide at least a recipe or a title." +msgid "You must supply a recipe or mealplan" +msgstr "Has de proporcionar com a mínim una recepta o un títol." + +#: .\cookbook\helper\shopping_helper.py:58 +msgid "You must supply a created_by" +msgstr "" + #: .\cookbook\helper\template_helper.py:61 #: .\cookbook\helper\template_helper.py:63 msgid "Could not parse template code." msgstr "" -#: .\cookbook\integration\integration.py:126 -#: .\cookbook\templates\import.html:14 .\cookbook\templates\import.html:20 -#: .\cookbook\templates\import_response.html:7 -#: .\cookbook\templates\test.html:14 .\cookbook\templates\test.html:20 -#: .\cookbook\templates\url_import.html:27 -#: .\cookbook\templates\url_import.html:105 -#: .\cookbook\templates\url_import.html:127 -#: .\cookbook\templates\url_import.html:321 -#: .\cookbook\templates\url_import.html:609 .\cookbook\views\delete.py:89 -#: .\cookbook\views\edit.py:200 -msgid "Import" -msgstr "Importar" - -#: .\cookbook\integration\integration.py:208 +#: .\cookbook\integration\integration.py:200 msgid "" "Importer expected a .zip file. Did you choose the correct importer type for " "your data ?" msgstr "" -#: .\cookbook\integration\integration.py:211 +#: .\cookbook\integration\integration.py:203 msgid "" "An unexpected error occurred during the import. Please make sure you have " "uploaded a valid file." msgstr "" -#: .\cookbook\integration\integration.py:216 +#: .\cookbook\integration\integration.py:208 msgid "The following recipes were ignored because they already existed:" msgstr "" -#: .\cookbook\integration\integration.py:220 +#: .\cookbook\integration\integration.py:212 #, fuzzy, python-format #| msgid "Imported new recipe!" msgid "Imported %s recipes." @@ -449,32 +575,32 @@ msgstr "Nota" msgid "Nutritional Information" msgstr "Informació" -#: .\cookbook\integration\paprika.py:53 .\cookbook\templates\url_import.html:40 +#: .\cookbook\integration\paprika.py:53 .\cookbook\templates\url_import.html:42 msgid "Source" msgstr "" -#: .\cookbook\integration\safron.py:23 -#: .\cookbook\templates\include\log_cooking.html:16 -#: .\cookbook\templates\url_import.html:228 -#: .\cookbook\templates\url_import.html:459 +#: .\cookbook\integration\saffron.py:23 +#: .\cookbook\templates\include\log_cooking.html:18 +#: .\cookbook\templates\url_import.html:231 +#: .\cookbook\templates\url_import.html:462 msgid "Servings" msgstr "Racions" -#: .\cookbook\integration\safron.py:25 +#: .\cookbook\integration\saffron.py:25 msgid "Waiting time" msgstr "Temps d'espera" -#: .\cookbook\integration\safron.py:27 +#: .\cookbook\integration\saffron.py:27 msgid "Preparation Time" msgstr "Temps de preparació" -#: .\cookbook\integration\safron.py:29 .\cookbook\templates\base.html:78 +#: .\cookbook\integration\saffron.py:29 .\cookbook\templates\base.html:78 #: .\cookbook\templates\forms\ingredients.html:7 #: .\cookbook\templates\index.html:7 msgid "Cookbook" msgstr "Receptari" -#: .\cookbook\integration\safron.py:31 +#: .\cookbook\integration\saffron.py:31 msgid "Section" msgstr "Secció" @@ -510,113 +636,144 @@ msgstr "Sopar" msgid "Other" msgstr "Un altre" -#: .\cookbook\models.py:150 +#: .\cookbook\models.py:246 msgid "" "Maximum file storage for space in MB. 0 for unlimited, -1 to disable file " "upload." msgstr "" -#: .\cookbook\models.py:202 .\cookbook\templates\search.html:7 -#: .\cookbook\templates\shopping_list.html:59 +#: .\cookbook\models.py:300 .\cookbook\templates\search.html:7 +#: .\cookbook\templates\shopping_list.html:53 msgid "Search" msgstr "Cerca" -#: .\cookbook\models.py:203 .\cookbook\templates\base.html:82 +#: .\cookbook\models.py:301 .\cookbook\templates\base.html:82 #: .\cookbook\templates\meal_plan.html:7 #: .\cookbook\templates\meal_plan_new.html:7 .\cookbook\views\delete.py:181 #: .\cookbook\views\edit.py:220 .\cookbook\views\new.py:184 msgid "Meal-Plan" msgstr "Plans de Menjar" -#: .\cookbook\models.py:204 .\cookbook\templates\base.html:90 +#: .\cookbook\models.py:302 .\cookbook\templates\base.html:90 msgid "Books" msgstr "Receptes" -#: .\cookbook\models.py:212 +#: .\cookbook\models.py:310 msgid "Small" msgstr "Petit" -#: .\cookbook\models.py:212 +#: .\cookbook\models.py:310 msgid "Large" msgstr "Gran" -#: .\cookbook\models.py:212 .\cookbook\templates\generic\new_template.html:6 +#: .\cookbook\models.py:310 .\cookbook\templates\generic\new_template.html:6 #: .\cookbook\templates\generic\new_template.html:14 msgid "New" msgstr "Nova" -#: .\cookbook\models.py:396 +#: .\cookbook\models.py:512 msgid " is part of a recipe step and cannot be deleted" msgstr "" -#: .\cookbook\models.py:441 .\cookbook\templates\url_import.html:42 +#: .\cookbook\models.py:586 .\cookbook\templates\url_import.html:44 msgid "Text" msgstr "Text" -#: .\cookbook\models.py:441 +#: .\cookbook\models.py:586 msgid "Time" msgstr "Temps" -#: .\cookbook\models.py:441 .\cookbook\templates\url_import.html:44 +#: .\cookbook\models.py:586 .\cookbook\templates\url_import.html:46 #, fuzzy #| msgid "File ID" msgid "File" msgstr "ID d'Arxiu" -#: .\cookbook\models.py:441 +#: .\cookbook\models.py:586 #: .\cookbook\templates\include\recipe_open_modal.html:7 #: .\cookbook\views\delete.py:39 .\cookbook\views\edit.py:260 #: .\cookbook\views\new.py:53 msgid "Recipe" msgstr "Recepta" -#: .\cookbook\models.py:871 .\cookbook\templates\search_info.html:28 +#: .\cookbook\models.py:1041 .\cookbook\templates\search_info.html:28 msgid "Simple" msgstr "" -#: .\cookbook\models.py:872 .\cookbook\templates\search_info.html:33 +#: .\cookbook\models.py:1042 .\cookbook\templates\search_info.html:33 msgid "Phrase" msgstr "" -#: .\cookbook\models.py:873 .\cookbook\templates\search_info.html:38 +#: .\cookbook\models.py:1043 .\cookbook\templates\search_info.html:38 msgid "Web" msgstr "" -#: .\cookbook\models.py:874 .\cookbook\templates\search_info.html:47 +#: .\cookbook\models.py:1044 .\cookbook\templates\search_info.html:47 msgid "Raw" msgstr "" -#: .\cookbook\models.py:912 +#: .\cookbook\models.py:1082 #, fuzzy #| msgid "Food" msgid "Food Alias" msgstr "Menjar" -#: .\cookbook\models.py:912 +#: .\cookbook\models.py:1082 #, fuzzy #| msgid "Units" msgid "Unit Alias" msgstr "Unitats" -#: .\cookbook\models.py:912 +#: .\cookbook\models.py:1082 #, fuzzy #| msgid "Keywords" msgid "Keyword Alias" msgstr "Paraules clau" -#: .\cookbook\serializer.py:157 +#: .\cookbook\serializer.py:175 +msgid "A user is required" +msgstr "" + +#: .\cookbook\serializer.py:195 msgid "File uploads are not enabled for this Space." msgstr "" -#: .\cookbook\serializer.py:168 +#: .\cookbook\serializer.py:206 msgid "You have reached your file upload limit." msgstr "" +#: .\cookbook\serializer.py:962 +msgid "Existing shopping list to update" +msgstr "" + +#: .\cookbook\serializer.py:964 +msgid "" +"List of ingredient IDs from the recipe to add, if not provided all " +"ingredients will be added." +msgstr "" + +#: .\cookbook\serializer.py:965 +msgid "" +"Providing a list_recipe ID and servings of 0 will delete that shopping list." +msgstr "" + +#: .\cookbook\serializer.py:973 +msgid "Amount of food to add to the shopping list" +msgstr "" + +#: .\cookbook\serializer.py:974 +msgid "ID of unit to use for the shopping list" +msgstr "" + +#: .\cookbook\serializer.py:975 +msgid "When set to true will delete all food from active shopping lists." +msgstr "" + #: .\cookbook\tables.py:35 .\cookbook\templates\generic\edit_template.html:6 #: .\cookbook\templates\generic\edit_template.html:14 #: .\cookbook\templates\recipes_table.html:82 -#: .\cookbook\templates\shopping_list.html:40 -#: .\cookbook\templates\space.html:90 +#: .\cookbook\templates\shopping_list.html:37 +#: .\cookbook\templates\space.html:109 msgid "Edit" msgstr "Edita" @@ -756,27 +913,27 @@ msgstr "Iniciar Sessió" msgid "Sign In" msgstr "" -#: .\cookbook\templates\account\login.html:32 +#: .\cookbook\templates\account\login.html:34 #: .\cookbook\templates\socialaccount\signup.html:8 #: .\cookbook\templates\socialaccount\signup.html:57 msgid "Sign Up" msgstr "" -#: .\cookbook\templates\account\login.html:36 -#: .\cookbook\templates\account\login.html:37 +#: .\cookbook\templates\account\login.html:39 +#: .\cookbook\templates\account\login.html:41 #: .\cookbook\templates\account\password_reset.html:29 msgid "Reset My Password" msgstr "" -#: .\cookbook\templates\account\login.html:37 +#: .\cookbook\templates\account\login.html:40 msgid "Lost your password?" msgstr "" -#: .\cookbook\templates\account\login.html:48 +#: .\cookbook\templates\account\login.html:52 msgid "Social Login" msgstr "" -#: .\cookbook\templates\account\login.html:49 +#: .\cookbook\templates\account\login.html:53 msgid "You can use any of the following providers to sign in." msgstr "" @@ -804,7 +961,7 @@ msgstr "Canvis desats!" #: .\cookbook\templates\account\password_change.html:12 #: .\cookbook\templates\account\password_set.html:12 -#: .\cookbook\templates\settings.html:69 +#: .\cookbook\templates\settings.html:76 #, fuzzy #| msgid "Settings" msgid "Password" @@ -929,15 +1086,21 @@ msgstr "Compres" msgid "Keyword" msgstr "Paraula Clau" +#: .\cookbook\templates\base.html:125 .\cookbook\views\lists.py:114 +#, fuzzy +#| msgid "Food" +msgid "Foods" +msgstr "Menjar" + #: .\cookbook\templates\base.html:137 #: .\cookbook\templates\forms\ingredients.html:24 -#: .\cookbook\templates\space.html:41 .\cookbook\templates\stats.html:26 -#: .\cookbook\views\lists.py:146 +#: .\cookbook\templates\space.html:47 .\cookbook\templates\stats.html:26 +#: .\cookbook\views\lists.py:131 msgid "Units" msgstr "Unitats" #: .\cookbook\templates\base.html:151 -#: .\cookbook\templates\shopping_list.html:237 +#: .\cookbook\templates\shopping_list.html:208 #: .\cookbook\templates\supermarket.html:7 msgid "Supermarket" msgstr "Supermercat" @@ -948,13 +1111,13 @@ msgstr "Supermercat" msgid "Supermarket Category" msgstr "Supermercat" -#: .\cookbook\templates\base.html:175 .\cookbook\views\lists.py:195 +#: .\cookbook\templates\base.html:175 .\cookbook\views\lists.py:180 #, fuzzy #| msgid "Information" msgid "Automations" msgstr "Informació" -#: .\cookbook\templates\base.html:189 .\cookbook\views\lists.py:215 +#: .\cookbook\templates\base.html:189 .\cookbook\views\lists.py:200 #, fuzzy #| msgid "File ID" msgid "Files" @@ -971,7 +1134,7 @@ msgstr "Historial" #: .\cookbook\templates\base.html:228 .\cookbook\templates\export.html:14 #: .\cookbook\templates\export.html:20 -#: .\cookbook\templates\shopping_list.html:358 +#: .\cookbook\templates\shopping_list.html:310 #: .\cookbook\templates\test2.html:14 .\cookbook\templates\test2.html:20 msgid "Export" msgstr "Exporta" @@ -981,19 +1144,19 @@ msgid "Import Recipe" msgstr "Importa recepta" #: .\cookbook\templates\base.html:246 -#: .\cookbook\templates\shopping_list.html:195 -#: .\cookbook\templates\shopping_list.html:217 +#: .\cookbook\templates\shopping_list.html:165 +#: .\cookbook\templates\shopping_list.html:188 msgid "Create" msgstr "Crea" #: .\cookbook\templates\base.html:259 #: .\cookbook\templates\generic\list_template.html:14 -#: .\cookbook\templates\space.html:58 .\cookbook\templates\stats.html:43 +#: .\cookbook\templates\space.html:69 .\cookbook\templates\stats.html:43 msgid "External Recipes" msgstr "Receptes Externes" -#: .\cookbook\templates\base.html:262 .\cookbook\templates\space.html:7 -#: .\cookbook\templates\space.html:19 +#: .\cookbook\templates\base.html:262 .\cookbook\templates\space.html:8 +#: .\cookbook\templates\space.html:20 .\cookbook\templates\space.html:150 #, fuzzy #| msgid "Settings" msgid "Space Settings" @@ -1065,11 +1228,13 @@ msgstr "El camí ha de tenir el format següent" #: .\cookbook\templates\forms\edit_import_recipe.html:14 #: .\cookbook\templates\generic\edit_template.html:23 #: .\cookbook\templates\generic\new_template.html:23 -#: .\cookbook\templates\include\log_cooking.html:28 -#: .\cookbook\templates\settings.html:63 .\cookbook\templates\settings.html:105 -#: .\cookbook\templates\settings.html:123 -#: .\cookbook\templates\settings.html:195 -#: .\cookbook\templates\shopping_list.html:360 +#: .\cookbook\templates\include\log_cooking.html:30 +#: .\cookbook\templates\settings.html:70 .\cookbook\templates\settings.html:112 +#: .\cookbook\templates\settings.html:130 +#: .\cookbook\templates\settings.html:202 +#: .\cookbook\templates\settings.html:213 +#: .\cookbook\templates\shopping_list.html:311 +#: .\cookbook\templates\space.html:155 msgid "Save" msgstr "Desa" @@ -1181,15 +1346,22 @@ msgid "Delete original file" msgstr "Esborra arxiu original" #: .\cookbook\templates\generic\list_template.html:6 -#: .\cookbook\templates\generic\list_template.html:21 +#: .\cookbook\templates\generic\list_template.html:22 msgid "List" msgstr "Llista" -#: .\cookbook\templates\generic\list_template.html:34 +#: .\cookbook\templates\generic\list_template.html:33 +#: .\cookbook\templates\shopping_list.html:33 +#, fuzzy +#| msgid "Open Shopping List" +msgid "Try the new shopping list" +msgstr "Llista de la Compra Oberta" + +#: .\cookbook\templates\generic\list_template.html:45 msgid "Filter" msgstr "Filtre" -#: .\cookbook\templates\generic\list_template.html:39 +#: .\cookbook\templates\generic\list_template.html:50 msgid "Import all" msgstr "Importa tot" @@ -1215,19 +1387,31 @@ msgstr "Registre de Receptes" msgid "Import Recipes" msgstr "Importar Receptes" -#: .\cookbook\templates\include\log_cooking.html:7 +#: .\cookbook\templates\import.html:14 .\cookbook\templates\import.html:20 +#: .\cookbook\templates\import_response.html:7 +#: .\cookbook\templates\test.html:14 .\cookbook\templates\test.html:20 +#: .\cookbook\templates\url_import.html:29 +#: .\cookbook\templates\url_import.html:108 +#: .\cookbook\templates\url_import.html:130 +#: .\cookbook\templates\url_import.html:324 +#: .\cookbook\templates\url_import.html:618 .\cookbook\views\delete.py:89 +#: .\cookbook\views\edit.py:200 +msgid "Import" +msgstr "Importar" + +#: .\cookbook\templates\include\log_cooking.html:9 msgid "Log Recipe Cooking" msgstr "Registre de Receptes de Cuina" -#: .\cookbook\templates\include\log_cooking.html:13 +#: .\cookbook\templates\include\log_cooking.html:15 msgid "All fields are optional and can be left empty." msgstr "Tots els camps són opcionals i es poden deixar buits." -#: .\cookbook\templates\include\log_cooking.html:19 +#: .\cookbook\templates\include\log_cooking.html:21 msgid "Rating" msgstr "Valoració" -#: .\cookbook\templates\include\log_cooking.html:27 +#: .\cookbook\templates\include\log_cooking.html:29 #: .\cookbook\templates\include\recipe_open_modal.html:18 msgid "Close" msgstr "Tanca" @@ -1280,7 +1464,7 @@ msgstr "Restableix la cerca" msgid "Last viewed" msgstr "Darrera visualització" -#: .\cookbook\templates\index.html:87 .\cookbook\templates\space.html:35 +#: .\cookbook\templates\index.html:87 .\cookbook\templates\space.html:37 #: .\cookbook\templates\stats.html:22 msgid "Recipes" msgstr "Receptes" @@ -1449,7 +1633,7 @@ msgid "Created by" msgstr "Creat per" #: .\cookbook\templates\meal_plan_entry.html:20 -#: .\cookbook\templates\shopping_list.html:261 +#: .\cookbook\templates\shopping_list.html:232 msgid "Shared with" msgstr "Compartit per" @@ -1566,17 +1750,17 @@ msgstr "Comentari" #: .\cookbook\templates\recipes_table.html:19 #: .\cookbook\templates\recipes_table.html:23 -#: .\cookbook\templates\url_import.html:444 +#: .\cookbook\templates\url_import.html:447 msgid "Recipe Image" msgstr "Imatge de la Recepta" #: .\cookbook\templates\recipes_table.html:51 -#: .\cookbook\templates\url_import.html:449 +#: .\cookbook\templates\url_import.html:452 msgid "Preparation time ca." msgstr "Temps de Preparació ca." #: .\cookbook\templates\recipes_table.html:57 -#: .\cookbook\templates\url_import.html:454 +#: .\cookbook\templates\url_import.html:457 msgid "Waiting time ca." msgstr "Temps d'Espera ca." @@ -1594,7 +1778,7 @@ msgstr "Receptes" #: .\cookbook\templates\search_info.html:5 #: .\cookbook\templates\search_info.html:9 -#: .\cookbook\templates\settings.html:165 +#: .\cookbook\templates\settings.html:172 #, fuzzy #| msgid "Search String" msgid "Search Settings" @@ -1777,42 +1961,48 @@ msgstr "Opcions" msgid "Search-Settings" msgstr "Cerca Cadena" -#: .\cookbook\templates\settings.html:58 +#: .\cookbook\templates\settings.html:56 +#, fuzzy +#| msgid "Search String" +msgid "Shopping-Settings" +msgstr "Cerca Cadena" + +#: .\cookbook\templates\settings.html:65 #, fuzzy #| msgid "Settings" msgid "Name Settings" msgstr "Opcions" -#: .\cookbook\templates\settings.html:66 +#: .\cookbook\templates\settings.html:73 #, fuzzy #| msgid "Settings" msgid "Account Settings" msgstr "Opcions" -#: .\cookbook\templates\settings.html:68 +#: .\cookbook\templates\settings.html:75 #, fuzzy #| msgid "Settings" msgid "Emails" msgstr "Opcions" -#: .\cookbook\templates\settings.html:71 +#: .\cookbook\templates\settings.html:78 #: .\cookbook\templates\socialaccount\connections.html:11 msgid "Social" msgstr "" -#: .\cookbook\templates\settings.html:84 +#: .\cookbook\templates\settings.html:91 msgid "Language" msgstr "Idioma" -#: .\cookbook\templates\settings.html:114 +#: .\cookbook\templates\settings.html:121 msgid "Style" msgstr "Estil" -#: .\cookbook\templates\settings.html:135 +#: .\cookbook\templates\settings.html:142 msgid "API Token" msgstr "Token API" -#: .\cookbook\templates\settings.html:136 +#: .\cookbook\templates\settings.html:143 msgid "" "You can use both basic authentication and token based authentication to " "access the REST API." @@ -1820,7 +2010,7 @@ msgstr "" "Podeu utilitzar tant l’autenticació bàsica com l’autenticació basada en " "token per accedir a l’API REST." -#: .\cookbook\templates\settings.html:153 +#: .\cookbook\templates\settings.html:160 msgid "" "Use the token as an Authorization header prefixed by the word token as shown " "in the following examples:" @@ -1828,62 +2018,68 @@ msgstr "" "Utilitzeu el testimoni com a capçalera d'autorització prefixada per la " "paraula símbol tal com es mostra als exemples següents:" -#: .\cookbook\templates\settings.html:155 +#: .\cookbook\templates\settings.html:162 msgid "or" msgstr "o" -#: .\cookbook\templates\settings.html:166 +#: .\cookbook\templates\settings.html:173 msgid "" "There are many options to configure the search depending on your personal " "preferences." msgstr "" -#: .\cookbook\templates\settings.html:167 +#: .\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 "" -#: .\cookbook\templates\settings.html:168 +#: .\cookbook\templates\settings.html:175 msgid "" "If you do want to configure the search you can read about the different " "options here." msgstr "" -#: .\cookbook\templates\settings.html:173 +#: .\cookbook\templates\settings.html:180 msgid "Fuzzy" msgstr "" -#: .\cookbook\templates\settings.html:174 +#: .\cookbook\templates\settings.html:181 msgid "" "Find what you need even if your search or the recipe contains typos. Might " "return more results than needed to make sure you find what you are looking " "for." msgstr "" -#: .\cookbook\templates\settings.html:175 +#: .\cookbook\templates\settings.html:182 msgid "This is the default behavior" msgstr "" -#: .\cookbook\templates\settings.html:176 -#: .\cookbook\templates\settings.html:184 +#: .\cookbook\templates\settings.html:183 +#: .\cookbook\templates\settings.html:191 msgid "Apply" msgstr "" -#: .\cookbook\templates\settings.html:181 +#: .\cookbook\templates\settings.html:188 msgid "Precise" msgstr "" -#: .\cookbook\templates\settings.html:182 +#: .\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 "" -#: .\cookbook\templates\settings.html:183 +#: .\cookbook\templates\settings.html:190 msgid "Perfect for large Databases" msgstr "" +#: .\cookbook\templates\settings.html:207 +#, fuzzy +#| msgid "Shopping List" +msgid "Shopping Settings" +msgstr "Llista de la Compra" + #: .\cookbook\templates\setup.html:6 .\cookbook\templates\system.html:5 msgid "Cookbook Setup" msgstr "Opcions del Cookbook" @@ -1903,84 +2099,74 @@ msgstr "" msgid "Create Superuser account" msgstr "Crear compte de superusuari" -#: .\cookbook\templates\shopping_list.html:7 +#: .\cookbook\templates\shopping_list.html:8 #: .\cookbook\templates\shopping_list.html:29 -#: .\cookbook\templates\shopping_list.html:721 +#: .\cookbook\templates\shopping_list.html:663 msgid "Shopping List" msgstr "Llista de la Compra" -#: .\cookbook\templates\shopping_list.html:34 -#, fuzzy -#| msgid "Open Shopping List" -msgid "Try the new shopping list" -msgstr "Llista de la Compra Oberta" - -#: .\cookbook\templates\shopping_list.html:63 +#: .\cookbook\templates\shopping_list.html:55 msgid "Search Recipe" msgstr "Cerca Recepta" -#: .\cookbook\templates\shopping_list.html:86 +#: .\cookbook\templates\shopping_list.html:72 msgid "Shopping Recipes" msgstr "Llista de Compra de Receptes" -#: .\cookbook\templates\shopping_list.html:90 +#: .\cookbook\templates\shopping_list.html:74 msgid "No recipes selected" msgstr "Recepta no sel·leccionada" -#: .\cookbook\templates\shopping_list.html:157 +#: .\cookbook\templates\shopping_list.html:131 msgid "Entry Mode" msgstr "" -#: .\cookbook\templates\shopping_list.html:165 +#: .\cookbook\templates\shopping_list.html:139 msgid "Add Entry" msgstr "" -#: .\cookbook\templates\shopping_list.html:181 +#: .\cookbook\templates\shopping_list.html:152 msgid "Amount" msgstr "Quantitat" -#: .\cookbook\templates\shopping_list.html:194 +#: .\cookbook\templates\shopping_list.html:164 msgid "Select Unit" msgstr "Selecciona Unitat" -#: .\cookbook\templates\shopping_list.html:196 -#: .\cookbook\templates\shopping_list.html:218 -#: .\cookbook\templates\shopping_list.html:248 -#: .\cookbook\templates\shopping_list.html:272 -#: .\cookbook\templates\url_import.html:500 -#: .\cookbook\templates\url_import.html:532 +#: .\cookbook\templates\shopping_list.html:166 +#: .\cookbook\templates\shopping_list.html:189 +#: .\cookbook\templates\shopping_list.html:219 +#: .\cookbook\templates\shopping_list.html:243 +#: .\cookbook\templates\url_import.html:505 +#: .\cookbook\templates\url_import.html:537 msgid "Select" msgstr "Selecciona" -#: .\cookbook\templates\shopping_list.html:216 +#: .\cookbook\templates\shopping_list.html:187 msgid "Select Food" msgstr "Selecciona Menjar" -#: .\cookbook\templates\shopping_list.html:247 +#: .\cookbook\templates\shopping_list.html:218 msgid "Select Supermarket" msgstr "Seleccioni supermercat" -#: .\cookbook\templates\shopping_list.html:271 +#: .\cookbook\templates\shopping_list.html:242 msgid "Select User" msgstr "Selecciona usuari" -#: .\cookbook\templates\shopping_list.html:290 +#: .\cookbook\templates\shopping_list.html:258 msgid "Finished" msgstr "Acabat" -#: .\cookbook\templates\shopping_list.html:303 +#: .\cookbook\templates\shopping_list.html:267 msgid "You are offline, shopping list might not syncronize." msgstr "" "Estàs fora de línia, és possible que la llista de compra no es sincronitzi." -#: .\cookbook\templates\shopping_list.html:368 +#: .\cookbook\templates\shopping_list.html:318 msgid "Copy/Export" msgstr "Copia/Exporta" -#: .\cookbook\templates\shopping_list.html:372 -msgid "List Prefix" -msgstr "Prefix de Llista" - #: .\cookbook\templates\socialaccount\connections.html:4 #: .\cookbook\templates\socialaccount\connections.html:15 msgid "Account Connections" @@ -2030,90 +2216,90 @@ msgstr "" msgid "Sign in using" msgstr "" -#: .\cookbook\templates\space.html:23 +#: .\cookbook\templates\space.html:25 msgid "Space:" msgstr "" -#: .\cookbook\templates\space.html:24 +#: .\cookbook\templates\space.html:26 msgid "Manage Subscription" msgstr "" -#: .\cookbook\templates\space.html:32 .\cookbook\templates\stats.html:19 +#: .\cookbook\templates\space.html:34 .\cookbook\templates\stats.html:19 msgid "Number of objects" msgstr "Nombre d'objectes" -#: .\cookbook\templates\space.html:45 .\cookbook\templates\stats.html:30 +#: .\cookbook\templates\space.html:54 .\cookbook\templates\stats.html:30 msgid "Recipe Imports" msgstr "Importacions de receptes" -#: .\cookbook\templates\space.html:53 .\cookbook\templates\stats.html:38 +#: .\cookbook\templates\space.html:62 .\cookbook\templates\stats.html:38 msgid "Objects stats" msgstr "Estadístiques d'objectes" -#: .\cookbook\templates\space.html:56 .\cookbook\templates\stats.html:41 +#: .\cookbook\templates\space.html:65 .\cookbook\templates\stats.html:41 msgid "Recipes without Keywords" msgstr "Receptes sense paraules clau" -#: .\cookbook\templates\space.html:60 .\cookbook\templates\stats.html:45 +#: .\cookbook\templates\space.html:73 .\cookbook\templates\stats.html:45 msgid "Internal Recipes" msgstr "Receptes Internes" -#: .\cookbook\templates\space.html:73 +#: .\cookbook\templates\space.html:89 msgid "Members" msgstr "" -#: .\cookbook\templates\space.html:77 +#: .\cookbook\templates\space.html:95 #, fuzzy #| msgid "Invite Links" msgid "Invite User" msgstr "Enllaços Invitació" -#: .\cookbook\templates\space.html:88 +#: .\cookbook\templates\space.html:107 msgid "User" msgstr "" -#: .\cookbook\templates\space.html:89 +#: .\cookbook\templates\space.html:108 msgid "Groups" msgstr "" -#: .\cookbook\templates\space.html:105 +#: .\cookbook\templates\space.html:119 #, fuzzy #| msgid "Admin" msgid "admin" msgstr "Admin" -#: .\cookbook\templates\space.html:106 +#: .\cookbook\templates\space.html:120 msgid "user" msgstr "" -#: .\cookbook\templates\space.html:107 +#: .\cookbook\templates\space.html:121 msgid "guest" msgstr "" -#: .\cookbook\templates\space.html:108 +#: .\cookbook\templates\space.html:122 #, fuzzy #| msgid "Remove" msgid "remove" msgstr "Eliminar" -#: .\cookbook\templates\space.html:112 +#: .\cookbook\templates\space.html:126 msgid "Update" msgstr "" -#: .\cookbook\templates\space.html:116 +#: .\cookbook\templates\space.html:130 #, fuzzy #| msgid "You cannot edit this storage!" msgid "You cannot edit yourself." msgstr "No podeu editar aquest emmagatzematge." -#: .\cookbook\templates\space.html:123 +#: .\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." -#: .\cookbook\templates\space.html:130 .\cookbook\templates\system.html:21 -#: .\cookbook\views\lists.py:100 +#: .\cookbook\templates\space.html:143 .\cookbook\templates\system.html:21 +#: .\cookbook\views\lists.py:85 msgid "Invite Links" msgstr "Enllaços Invitació" @@ -2250,186 +2436,186 @@ msgstr "" "Això està bé, però no es recomana com alguns\n" "les funcions només funcionen amb bases de dades postgres." -#: .\cookbook\templates\url_import.html:6 +#: .\cookbook\templates\url_import.html:8 msgid "URL Import" msgstr "Importació d’URL" -#: .\cookbook\templates\url_import.html:31 +#: .\cookbook\templates\url_import.html:33 msgid "Drag me to your bookmarks to import recipes from anywhere" msgstr "" -#: .\cookbook\templates\url_import.html:32 +#: .\cookbook\templates\url_import.html:34 #, fuzzy #| msgid "Bookmark saved!" msgid "Bookmark Me!" msgstr "Marcador desat!" -#: .\cookbook\templates\url_import.html:36 +#: .\cookbook\templates\url_import.html:38 msgid "URL" msgstr "" -#: .\cookbook\templates\url_import.html:38 +#: .\cookbook\templates\url_import.html:40 msgid "App" msgstr "" -#: .\cookbook\templates\url_import.html:62 +#: .\cookbook\templates\url_import.html:64 msgid "Enter website URL" msgstr "Introduïu l'URL del lloc web" -#: .\cookbook\templates\url_import.html:101 +#: .\cookbook\templates\url_import.html:104 msgid "Select recipe files to import or drop them here..." msgstr "" -#: .\cookbook\templates\url_import.html:122 +#: .\cookbook\templates\url_import.html:125 msgid "Paste json or html source here to load recipe." msgstr "" -#: .\cookbook\templates\url_import.html:150 +#: .\cookbook\templates\url_import.html:153 #, fuzzy #| msgid "View Recipe" msgid "Preview Recipe Data" msgstr "Veure Recepta" -#: .\cookbook\templates\url_import.html:151 +#: .\cookbook\templates\url_import.html:154 msgid "Drag recipe attributes from the right into the appropriate box below." msgstr "" -#: .\cookbook\templates\url_import.html:160 -#: .\cookbook\templates\url_import.html:177 -#: .\cookbook\templates\url_import.html:194 -#: .\cookbook\templates\url_import.html:213 -#: .\cookbook\templates\url_import.html:231 -#: .\cookbook\templates\url_import.html:246 -#: .\cookbook\templates\url_import.html:261 -#: .\cookbook\templates\url_import.html:277 -#: .\cookbook\templates\url_import.html:304 -#: .\cookbook\templates\url_import.html:355 +#: .\cookbook\templates\url_import.html:163 +#: .\cookbook\templates\url_import.html:180 +#: .\cookbook\templates\url_import.html:197 +#: .\cookbook\templates\url_import.html:216 +#: .\cookbook\templates\url_import.html:234 +#: .\cookbook\templates\url_import.html:249 +#: .\cookbook\templates\url_import.html:264 +#: .\cookbook\templates\url_import.html:280 +#: .\cookbook\templates\url_import.html:307 +#: .\cookbook\templates\url_import.html:358 msgid "Clear Contents" msgstr "" -#: .\cookbook\templates\url_import.html:162 +#: .\cookbook\templates\url_import.html:165 msgid "Text dragged here will be appended to the name." msgstr "" -#: .\cookbook\templates\url_import.html:175 +#: .\cookbook\templates\url_import.html:178 msgid "Description" msgstr "" -#: .\cookbook\templates\url_import.html:179 +#: .\cookbook\templates\url_import.html:182 msgid "Text dragged here will be appended to the description." msgstr "" -#: .\cookbook\templates\url_import.html:196 +#: .\cookbook\templates\url_import.html:199 msgid "Keywords dragged here will be appended to current list" msgstr "" -#: .\cookbook\templates\url_import.html:211 +#: .\cookbook\templates\url_import.html:214 msgid "Image" msgstr "" -#: .\cookbook\templates\url_import.html:243 +#: .\cookbook\templates\url_import.html:246 #, fuzzy #| msgid "Preparation Time" msgid "Prep Time" msgstr "Temps de preparació" -#: .\cookbook\templates\url_import.html:258 +#: .\cookbook\templates\url_import.html:261 #, fuzzy #| msgid "Time" msgid "Cook Time" msgstr "Temps" -#: .\cookbook\templates\url_import.html:279 +#: .\cookbook\templates\url_import.html:282 msgid "Ingredients dragged here will be appended to current list." msgstr "" -#: .\cookbook\templates\url_import.html:301 -#: .\cookbook\templates\url_import.html:572 +#: .\cookbook\templates\url_import.html:304 +#: .\cookbook\templates\url_import.html:579 msgid "Instructions" msgstr "Instruccions" -#: .\cookbook\templates\url_import.html:306 +#: .\cookbook\templates\url_import.html:309 msgid "" "Recipe instructions dragged here will be appended to current instructions." msgstr "" -#: .\cookbook\templates\url_import.html:329 +#: .\cookbook\templates\url_import.html:332 #, fuzzy #| msgid "Discovered Recipes" msgid "Discovered Attributes" msgstr "Receptes Descobertes" -#: .\cookbook\templates\url_import.html:331 +#: .\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 "" -#: .\cookbook\templates\url_import.html:348 +#: .\cookbook\templates\url_import.html:351 #, fuzzy #| msgid "Show as header" msgid "Show Blank Field" msgstr "Mostra com a capçalera" -#: .\cookbook\templates\url_import.html:353 +#: .\cookbook\templates\url_import.html:356 msgid "Blank Field" msgstr "" -#: .\cookbook\templates\url_import.html:357 +#: .\cookbook\templates\url_import.html:360 msgid "Items dragged to Blank Field will be appended." msgstr "" -#: .\cookbook\templates\url_import.html:404 +#: .\cookbook\templates\url_import.html:407 #, fuzzy #| msgid "Delete Step" msgid "Delete Text" msgstr "Esborra Pas" -#: .\cookbook\templates\url_import.html:417 +#: .\cookbook\templates\url_import.html:420 #, fuzzy #| msgid "Delete Recipe" msgid "Delete image" msgstr "Esborra Recepta" -#: .\cookbook\templates\url_import.html:433 +#: .\cookbook\templates\url_import.html:436 msgid "Recipe Name" msgstr "Nom de la Recepta" -#: .\cookbook\templates\url_import.html:437 +#: .\cookbook\templates\url_import.html:440 #, fuzzy #| msgid "Recipe Markup Specification" msgid "Recipe Description" msgstr "Especificació de marcatge de receptes" -#: .\cookbook\templates\url_import.html:499 -#: .\cookbook\templates\url_import.html:531 -#: .\cookbook\templates\url_import.html:587 +#: .\cookbook\templates\url_import.html:504 +#: .\cookbook\templates\url_import.html:536 +#: .\cookbook\templates\url_import.html:596 msgid "Select one" msgstr "Sel·lecciona un" -#: .\cookbook\templates\url_import.html:547 +#: .\cookbook\templates\url_import.html:554 msgid "Note" msgstr "Nota" -#: .\cookbook\templates\url_import.html:588 +#: .\cookbook\templates\url_import.html:597 #, fuzzy #| msgid "All Keywords" msgid "Add Keyword" msgstr "Totes les paraules clau" -#: .\cookbook\templates\url_import.html:601 +#: .\cookbook\templates\url_import.html:610 msgid "All Keywords" msgstr "Totes les paraules clau" -#: .\cookbook\templates\url_import.html:604 +#: .\cookbook\templates\url_import.html:613 msgid "Import all keywords, not only the ones already existing." msgstr "Importa totes les paraules clau, no només les ja existents." -#: .\cookbook\templates\url_import.html:631 +#: .\cookbook\templates\url_import.html:640 msgid "Information" msgstr "Informació" -#: .\cookbook\templates\url_import.html:633 +#: .\cookbook\templates\url_import.html:642 msgid "" " Only websites containing ld+json or microdata information can currently\n" " be imported. Most big recipe pages " @@ -2448,107 +2634,192 @@ msgstr "" "un exemple a\n" "problemes de github." -#: .\cookbook\templates\url_import.html:641 +#: .\cookbook\templates\url_import.html:650 msgid "Google ld+json Info" msgstr "Google ld+json Info" -#: .\cookbook\templates\url_import.html:644 +#: .\cookbook\templates\url_import.html:653 msgid "GitHub Issues" msgstr "Problemes de GitHub" -#: .\cookbook\templates\url_import.html:646 +#: .\cookbook\templates\url_import.html:655 msgid "Recipe Markup Specification" msgstr "Especificació de marcatge de receptes" -#: .\cookbook\views\api.py:83 .\cookbook\views\api.py:132 +#: .\cookbook\views\api.py:88 .\cookbook\views\api.py:170 #, fuzzy #| msgid "Parameter filter_list incorrectly formatted" msgid "Parameter updated_at incorrectly formatted" msgstr "El paràmetre filter_list té un format incorrecte" -#: .\cookbook\views\api.py:152 +#: .\cookbook\views\api.py:190 .\cookbook\views\api.py:291 #, python-brace-format msgid "No {self.basename} with id {pk} exists" msgstr "" -#: .\cookbook\views\api.py:156 +#: .\cookbook\views\api.py:194 msgid "Cannot merge with the same object!" msgstr "" -#: .\cookbook\views\api.py:163 +#: .\cookbook\views\api.py:201 #, python-brace-format msgid "No {self.basename} with id {target} exists" msgstr "" -#: .\cookbook\views\api.py:168 +#: .\cookbook\views\api.py:206 msgid "Cannot merge with child object!" msgstr "" -#: .\cookbook\views\api.py:201 +#: .\cookbook\views\api.py:239 #, python-brace-format msgid "{source.name} was merged successfully with {target.name}" msgstr "" -#: .\cookbook\views\api.py:205 +#: .\cookbook\views\api.py:244 #, python-brace-format msgid "An error occurred attempting to merge {source.name} with {target.name}" msgstr "" -#: .\cookbook\views\api.py:249 -#, python-brace-format -msgid "No {self.basename} with id {child} exists" -msgstr "" - -#: .\cookbook\views\api.py:258 +#: .\cookbook\views\api.py:300 #, python-brace-format msgid "{child.name} was moved successfully to the root." msgstr "" -#: .\cookbook\views\api.py:261 .\cookbook\views\api.py:279 +#: .\cookbook\views\api.py:303 .\cookbook\views\api.py:321 msgid "An error occurred attempting to move " msgstr "" -#: .\cookbook\views\api.py:264 +#: .\cookbook\views\api.py:306 msgid "Cannot move an object to itself!" msgstr "" -#: .\cookbook\views\api.py:270 +#: .\cookbook\views\api.py:312 #, python-brace-format msgid "No {self.basename} with id {parent} exists" msgstr "" -#: .\cookbook\views\api.py:276 +#: .\cookbook\views\api.py:318 #, python-brace-format msgid "{child.name} was moved successfully to parent {parent.name}" msgstr "" -#: .\cookbook\views\api.py:723 .\cookbook\views\data.py:42 +#: .\cookbook\views\api.py:470 +#, python-brace-format +msgid "{obj.name} was removed from the shopping list." +msgstr "" + +#: .\cookbook\views\api.py:475 .\cookbook\views\api.py:726 +#, python-brace-format +msgid "{obj.name} was added to the shopping list." +msgstr "" + +#: .\cookbook\views\api.py:587 +msgid "ID of recipe a step is part of. For multiple repeat parameter." +msgstr "" + +#: .\cookbook\views\api.py:588 +msgid "Query string matched (fuzzy) against object name." +msgstr "" + +#: .\cookbook\views\api.py:631 +msgid "" +"Query string matched (fuzzy) against recipe name. In the future also " +"fulltext search." +msgstr "" + +#: .\cookbook\views\api.py:632 +msgid "ID of keyword a recipe should have. For multiple repeat parameter." +msgstr "" + +#: .\cookbook\views\api.py:633 +msgid "ID of food a recipe should have. For multiple repeat parameter." +msgstr "" + +#: .\cookbook\views\api.py:634 +msgid "ID of unit a recipe should have." +msgstr "" + +#: .\cookbook\views\api.py:635 +msgid "Rating a recipe should have. [0 - 5]" +msgstr "" + +#: .\cookbook\views\api.py:636 +msgid "ID of book a recipe should be in. For multiple repeat parameter." +msgstr "" + +#: .\cookbook\views\api.py:637 +msgid "" +"If recipe should have all (AND=false) or any (OR=true) of the " +"provided keywords." +msgstr "" + +#: .\cookbook\views\api.py:638 +msgid "" +"If recipe should have all (AND=false) or any (OR=true) of the " +"provided foods." +msgstr "" + +#: .\cookbook\views\api.py:639 +msgid "" +"If recipe should be in all (AND=false) or any (OR=true) of the " +"provided books." +msgstr "" + +#: .\cookbook\views\api.py:640 +msgid "If only internal recipes should be returned. [true/false]" +msgstr "" + +#: .\cookbook\views\api.py:641 +msgid "Returns the results in randomized order. [true/false]" +msgstr "" + +#: .\cookbook\views\api.py:642 +msgid "Returns new results first in search results. [true/false]" +msgstr "" + +#: .\cookbook\views\api.py:768 +msgid "" +"Returns the shopping list entry with a primary key of id. Multiple values " +"allowed." +msgstr "" + +#: .\cookbook\views\api.py:771 +msgid "" +"Filter shopping list entries on checked. [true, false, both, recent]
- recent includes unchecked items and recently completed items." +msgstr "" + +#: .\cookbook\views\api.py:773 +msgid "Returns the shopping list entries sorted by supermarket category order." +msgstr "" + +#: .\cookbook\views\api.py:922 .\cookbook\views\data.py:42 #: .\cookbook\views\edit.py:129 .\cookbook\views\new.py:95 msgid "This feature is not yet available in the hosted version of tandoor!" msgstr "" -#: .\cookbook\views\api.py:745 +#: .\cookbook\views\api.py:944 msgid "Sync successful!" msgstr "Sincronització correcte" -#: .\cookbook\views\api.py:750 +#: .\cookbook\views\api.py:949 msgid "Error synchronizing with Storage" msgstr "Error de sincronització amb emmagatzematge" -#: .\cookbook\views\api.py:828 +#: .\cookbook\views\api.py:1028 msgid "Nothing to do." msgstr "" -#: .\cookbook\views\api.py:843 +#: .\cookbook\views\api.py:1043 msgid "The requested site provided malformed data and cannot be read." msgstr "" "El lloc sol·licitat proporcionava dades malformades i no es pot llegir." -#: .\cookbook\views\api.py:850 +#: .\cookbook\views\api.py:1050 msgid "The requested page could not be found." msgstr "No s'ha pogut trobar la pàgina sol·licitada." -#: .\cookbook\views\api.py:859 +#: .\cookbook\views\api.py:1068 msgid "" "The requested site does not provide any recognized data format to import the " "recipe from." @@ -2556,24 +2827,28 @@ msgstr "" "El lloc sol·licitat no proporciona cap format de dades reconegut des d’on " "importar la recepta." -#: .\cookbook\views\api.py:873 +#: .\cookbook\views\api.py:1082 +msgid "Connection Refused." +msgstr "" + +#: .\cookbook\views\api.py:1091 #, fuzzy #| msgid "The requested page could not be found." msgid "No useable data could be found." msgstr "No s'ha pogut trobar la pàgina sol·licitada." -#: .\cookbook\views\api.py:889 +#: .\cookbook\views\api.py:1107 msgid "I couldn't find anything to do." msgstr "" #: .\cookbook\views\data.py:34 .\cookbook\views\data.py:129 -#: .\cookbook\views\edit.py:49 .\cookbook\views\import_export.py:73 +#: .\cookbook\views\edit.py:49 .\cookbook\views\import_export.py:80 #: .\cookbook\views\new.py:33 msgid "You have reached the maximum number of recipes for your space." msgstr "" #: .\cookbook\views\data.py:38 .\cookbook\views\data.py:133 -#: .\cookbook\views\edit.py:53 .\cookbook\views\import_export.py:77 +#: .\cookbook\views\edit.py:53 .\cookbook\views\import_export.py:84 #: .\cookbook\views\new.py:37 msgid "You have more users than allowed in your space." msgstr "" @@ -2590,7 +2865,7 @@ msgstr[1] "" msgid "Monitor" msgstr "Monitoratge" -#: .\cookbook\views\delete.py:125 .\cookbook\views\lists.py:86 +#: .\cookbook\views\delete.py:125 .\cookbook\views\lists.py:71 #: .\cookbook\views\new.py:101 msgid "Storage Backend" msgstr "Backend d'emmagatzematge" @@ -2610,7 +2885,7 @@ msgstr "Llibre de Receptes" msgid "Bookmarks" msgstr "Marcadors" -#: .\cookbook\views\delete.py:192 .\cookbook\views\new.py:235 +#: .\cookbook\views\delete.py:192 .\cookbook\views\new.py:238 msgid "Invite Link" msgstr "Enllaç de invitació" @@ -2634,44 +2909,48 @@ msgstr "Canvis desats!" msgid "Error saving changes!" msgstr "Error al desar canvis!" -#: .\cookbook\views\import_export.py:99 +#: .\cookbook\views\import_export.py:106 msgid "Importing is not implemented for this provider" msgstr "" -#: .\cookbook\views\import_export.py:121 +#: .\cookbook\views\import_export.py:127 +msgid "" +"The PDF Exporter is not enabled on this instance as it is still in an " +"experimental state." +msgstr "" + +#: .\cookbook\views\import_export.py:132 msgid "Exporting is not implemented for this provider" msgstr "" -#: .\cookbook\views\lists.py:26 +#: .\cookbook\views\lists.py:25 msgid "Import Log" msgstr "Importa Registre" -#: .\cookbook\views\lists.py:39 +#: .\cookbook\views\lists.py:38 msgid "Discovery" msgstr "Descobriment" -#: .\cookbook\views\lists.py:69 +#: .\cookbook\views\lists.py:54 msgid "Shopping Lists" msgstr "Llistes de Compra" -#: .\cookbook\views\lists.py:129 -#, fuzzy -#| msgid "Food" -msgid "Foods" -msgstr "Menjar" - -#: .\cookbook\views\lists.py:163 +#: .\cookbook\views\lists.py:148 #, fuzzy #| msgid "Supermarket" msgid "Supermarkets" msgstr "Supermercat" -#: .\cookbook\views\lists.py:179 +#: .\cookbook\views\lists.py:164 #, fuzzy #| msgid "Shopping Recipes" msgid "Shopping Categories" msgstr "Llista de Compra de Receptes" +#: .\cookbook\views\lists.py:217 +msgid "Steps" +msgstr "Passos" + #: .\cookbook\views\lists.py:232 #, fuzzy #| msgid "Shopping List" @@ -2686,87 +2965,87 @@ msgstr "Nova Recepta importada!" msgid "There was an error importing this recipe!" msgstr "S'ha produït un error en importar la recepta!" -#: .\cookbook\views\new.py:209 +#: .\cookbook\views\new.py:212 msgid "Hello" msgstr "" -#: .\cookbook\views\new.py:209 +#: .\cookbook\views\new.py:212 msgid "You have been invited by " msgstr "" -#: .\cookbook\views\new.py:210 +#: .\cookbook\views\new.py:213 msgid " to join their Tandoor Recipes space " msgstr "" -#: .\cookbook\views\new.py:211 +#: .\cookbook\views\new.py:214 msgid "Click the following link to activate your account: " msgstr "" -#: .\cookbook\views\new.py:212 +#: .\cookbook\views\new.py:215 msgid "" "If the link does not work use the following code to manually join the space: " msgstr "" -#: .\cookbook\views\new.py:213 +#: .\cookbook\views\new.py:216 msgid "The invitation is valid until " msgstr "" -#: .\cookbook\views\new.py:214 +#: .\cookbook\views\new.py:217 msgid "" "Tandoor Recipes is an Open Source recipe manager. Check it out on GitHub " msgstr "" -#: .\cookbook\views\new.py:217 +#: .\cookbook\views\new.py:220 msgid "Tandoor Recipes Invite" msgstr "" -#: .\cookbook\views\new.py:224 +#: .\cookbook\views\new.py:227 msgid "Invite link successfully send to user." msgstr "" -#: .\cookbook\views\new.py:227 +#: .\cookbook\views\new.py:230 msgid "" "You have send to many emails, please share the link manually or wait a few " "hours." msgstr "" -#: .\cookbook\views\new.py:229 +#: .\cookbook\views\new.py:232 msgid "Email to user could not be send, please share link manually." msgstr "" -#: .\cookbook\views\views.py:127 +#: .\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 "" -#: .\cookbook\views\views.py:175 +#: .\cookbook\views\views.py:174 msgid "You do not have the required permissions to perform this action!" msgstr "No teniu els permisos necessaris per dur a terme aquesta acció!" -#: .\cookbook\views\views.py:186 +#: .\cookbook\views\views.py:185 msgid "Comment saved!" msgstr "Comentari Desat!" -#: .\cookbook\views\views.py:277 +#: .\cookbook\views\views.py:276 msgid "This feature is not available in the demo version!" msgstr "" -#: .\cookbook\views\views.py:340 +#: .\cookbook\views\views.py:335 msgid "You must select at least one field to search!" msgstr "" -#: .\cookbook\views\views.py:345 +#: .\cookbook\views\views.py:340 msgid "" "To use this search method you must select at least one full text search " "field!" msgstr "" -#: .\cookbook\views\views.py:349 +#: .\cookbook\views\views.py:344 msgid "Fuzzy search is not compatible with this search method!" msgstr "" -#: .\cookbook\views\views.py:452 +#: .\cookbook\views\views.py:470 msgid "" "The setup page can only be used to create the first user! If you have " "forgotten your superuser credentials please consult the django documentation " @@ -2776,39 +3055,39 @@ msgstr "" "Si heu oblidat les vostres credencials de superusuari, consulteu la " "documentació de django sobre com restablir les contrasenyes." -#: .\cookbook\views\views.py:459 +#: .\cookbook\views\views.py:477 msgid "Passwords dont match!" msgstr "Les contrasenyes no coincideixen!" -#: .\cookbook\views\views.py:475 +#: .\cookbook\views\views.py:493 msgid "User has been created, please login!" msgstr "L'usuari s'ha creat, si us plau inicieu la sessió!" -#: .\cookbook\views\views.py:491 +#: .\cookbook\views\views.py:509 msgid "Malformed Invite Link supplied!" msgstr "S'ha proporcionat un enllaç d'invitació mal format." -#: .\cookbook\views\views.py:498 +#: .\cookbook\views\views.py:516 #, 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." -#: .\cookbook\views\views.py:509 +#: .\cookbook\views\views.py:527 msgid "Successfully joined space." msgstr "" -#: .\cookbook\views\views.py:515 +#: .\cookbook\views\views.py:533 msgid "Invite Link not valid or already used!" msgstr "L'enllaç d'invitació no és vàlid o ja s'ha utilitzat." -#: .\cookbook\views\views.py:579 +#: .\cookbook\views\views.py:614 msgid "" "Reporting share links is not enabled for this instance. Please notify the " "page administrator to report problems." msgstr "" -#: .\cookbook\views\views.py:585 +#: .\cookbook\views\views.py:620 msgid "" "Recipe sharing link has been disabled! For additional information please " "contact the page administrator." @@ -2835,9 +3114,6 @@ msgstr "" #~ msgid "Old Food" #~ msgstr "Antic Menjar" -#~ msgid "Food that should be replaced." -#~ msgstr "Menjar que s’hauria de substituir." - #~ msgid "New Entry" #~ msgstr "Nova Entrada" @@ -3019,9 +3295,6 @@ msgstr "" #~ msgid "Delete Recipe" #~ msgstr "Esborra Recepta" -#~ msgid "Steps" -#~ msgstr "Passos" - #~ msgid "" #~ "A username is not required, if left blank the new user can choose one." #~ msgstr "" diff --git a/cookbook/locale/de/LC_MESSAGES/django.mo b/cookbook/locale/de/LC_MESSAGES/django.mo index 3a35611ea5..77c8a4f366 100644 Binary files a/cookbook/locale/de/LC_MESSAGES/django.mo and b/cookbook/locale/de/LC_MESSAGES/django.mo differ diff --git a/cookbook/locale/de/LC_MESSAGES/django.po b/cookbook/locale/de/LC_MESSAGES/django.po index 85d9770e3f..c78fc3f2bb 100644 --- a/cookbook/locale/de/LC_MESSAGES/django.po +++ b/cookbook/locale/de/LC_MESSAGES/django.po @@ -14,9 +14,9 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-08 16:27+0100\n" -"PO-Revision-Date: 2021-11-12 20:06+0000\n" -"Last-Translator: A. L. \n" +"POT-Creation-Date: 2022-01-18 14:52+0100\n" +"PO-Revision-Date: 2022-01-20 22:47+0000\n" +"Last-Translator: Sebastian Weber \n" "Language-Team: German \n" "Language: de\n" @@ -26,67 +26,66 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.8\n" -#: .\cookbook\filters.py:23 .\cookbook\templates\base.html:125 -#: .\cookbook\templates\forms\ingredients.html:34 -#: .\cookbook\templates\space.html:43 .\cookbook\templates\stats.html:28 -#: .\cookbook\templates\url_import.html:274 +#: .\cookbook\filters.py:23 .\cookbook\templates\forms\ingredients.html:34 +#: .\cookbook\templates\space.html:50 .\cookbook\templates\stats.html:28 +#: .\cookbook\templates\url_import.html:277 msgid "Ingredients" msgstr "Zutaten" -#: .\cookbook\forms.py:54 +#: .\cookbook\forms.py:56 msgid "Default unit" msgstr "Standardeinheit" -#: .\cookbook\forms.py:55 +#: .\cookbook\forms.py:57 msgid "Use fractions" msgstr "Brüche verwenden" -#: .\cookbook\forms.py:56 +#: .\cookbook\forms.py:58 msgid "Use KJ" msgstr "Kilojoule verwenden" -#: .\cookbook\forms.py:57 +#: .\cookbook\forms.py:59 msgid "Theme" msgstr "Theme" -#: .\cookbook\forms.py:58 +#: .\cookbook\forms.py:60 msgid "Navbar color" msgstr "Farbe der Navigationsleiste" -#: .\cookbook\forms.py:59 +#: .\cookbook\forms.py:61 msgid "Sticky navbar" msgstr "Navigationsleiste anheften" -#: .\cookbook\forms.py:60 +#: .\cookbook\forms.py:62 msgid "Default page" msgstr "Standardseite" -#: .\cookbook\forms.py:61 +#: .\cookbook\forms.py:63 msgid "Show recent recipes" msgstr "Zuletzt betrachtete Rezepte anzeigen" -#: .\cookbook\forms.py:62 +#: .\cookbook\forms.py:64 msgid "Search style" msgstr "Suchmethode" -#: .\cookbook\forms.py:63 +#: .\cookbook\forms.py:65 msgid "Plan sharing" msgstr "Essensplan teilen" -#: .\cookbook\forms.py:64 +#: .\cookbook\forms.py:66 msgid "Ingredient decimal places" msgstr "Nachkommastellen für Zutaten" -#: .\cookbook\forms.py:65 +#: .\cookbook\forms.py:67 msgid "Shopping list auto sync period" msgstr "Synchronisierungshäufigkeit der Einkaufsliste" -#: .\cookbook\forms.py:66 .\cookbook\templates\recipe_view.html:21 -#: .\cookbook\templates\space.html:62 .\cookbook\templates\stats.html:47 +#: .\cookbook\forms.py:68 .\cookbook\templates\recipe_view.html:21 +#: .\cookbook\templates\space.html:77 .\cookbook\templates\stats.html:47 msgid "Comments" msgstr "Kommentare" -#: .\cookbook\forms.py:70 +#: .\cookbook\forms.py:72 msgid "" "Color of the top navigation bar. Not all colors work with all themes, just " "try them out!" @@ -94,13 +93,13 @@ msgstr "" "Farbe der oberen Navigationsleiste. Nicht alle Farben passen, daher einfach " "mal ausprobieren!" -#: .\cookbook\forms.py:72 +#: .\cookbook\forms.py:74 msgid "Default Unit to be used when inserting a new ingredient into a recipe." msgstr "" "Standardeinheit, die beim Einfügen einer neuen Zutat in ein Rezept zu " "verwenden ist." -#: .\cookbook\forms.py:74 +#: .\cookbook\forms.py:76 msgid "" "Enables support for fractions in ingredient amounts (e.g. convert decimals " "to fractions automatically)" @@ -108,33 +107,39 @@ msgstr "" "Unterstützung für Brüche in Zutaten aktivieren. Dadurch werden Dezimalzahlen " "mit Brüchen ersetzt, z.B. 0.5 mit ½." -#: .\cookbook\forms.py:76 +#: .\cookbook\forms.py:78 msgid "Display nutritional energy amounts in joules instead of calories" msgstr "Nährwerte in Joule statt Kalorien anzeigen" -#: .\cookbook\forms.py:78 -msgid "" -"Users with whom newly created meal plan/shopping list entries should be " -"shared by default." +#: .\cookbook\forms.py:79 +#, fuzzy +#| msgid "" +#| "Users with whom newly created meal plan/shopping list entries should be " +#| "shared by default." +msgid "Users with whom newly created meal plans should be shared by default." msgstr "" "Nutzer, mit denen neue Pläne und Einkaufslisten standardmäßig geteilt werden " "sollen." #: .\cookbook\forms.py:80 +msgid "Users with whom to share shopping lists." +msgstr "Benutzer, mit denen Einkaufslisten geteilt werden sollen." + +#: .\cookbook\forms.py:82 msgid "Show recently viewed recipes on search page." msgstr "Zuletzt angeschaute Rezepte bei der Suche anzeigen." -#: .\cookbook\forms.py:81 +#: .\cookbook\forms.py:83 msgid "Number of decimals to round ingredients." msgstr "Anzahl an Dezimalstellen, auf die gerundet werden soll." -#: .\cookbook\forms.py:82 +#: .\cookbook\forms.py:84 msgid "If you want to be able to create and see comments underneath recipes." msgstr "" "Wenn du in der Lage sein willst, Kommentare unter Rezepten zu erstellen und " "zu sehen." -#: .\cookbook\forms.py:84 +#: .\cookbook\forms.py:86 .\cookbook\forms.py:493 msgid "" "Setting to 0 will disable auto sync. When viewing a shopping list the list " "is updated every set seconds to sync changes someone else might have made. " @@ -146,11 +151,19 @@ msgstr "" "aktualisiert. Dies ist nützlich, wenn mehrere Personen eine Liste beim " "Einkaufen verwenden, benötigt jedoch etwas Datenvolumen." -#: .\cookbook\forms.py:87 +#: .\cookbook\forms.py:89 msgid "Makes the navbar stick to the top of the page." msgstr "Navigationsleiste wird oben angeheftet." -#: .\cookbook\forms.py:103 +#: .\cookbook\forms.py:90 .\cookbook\forms.py:496 +msgid "Automatically add meal plan ingredients to shopping list." +msgstr "" + +#: .\cookbook\forms.py:91 +msgid "Exclude ingredients that are on hand." +msgstr "" + +#: .\cookbook\forms.py:108 msgid "" "Both fields are optional. If none are given the username will be displayed " "instead" @@ -158,39 +171,39 @@ msgstr "" "Beide Felder sind optional. Wenn keins von beiden gegeben ist, wird der " "Nutzername angezeigt" -#: .\cookbook\forms.py:124 .\cookbook\forms.py:289 -#: .\cookbook\templates\url_import.html:158 +#: .\cookbook\forms.py:129 .\cookbook\forms.py:298 +#: .\cookbook\templates\url_import.html:161 msgid "Name" msgstr "Name" -#: .\cookbook\forms.py:125 .\cookbook\forms.py:290 -#: .\cookbook\templates\space.html:39 .\cookbook\templates\stats.html:24 -#: .\cookbook\templates\url_import.html:192 -#: .\cookbook\templates\url_import.html:578 .\cookbook\views\lists.py:112 +#: .\cookbook\forms.py:130 .\cookbook\forms.py:299 +#: .\cookbook\templates\space.html:44 .\cookbook\templates\stats.html:24 +#: .\cookbook\templates\url_import.html:195 +#: .\cookbook\templates\url_import.html:585 .\cookbook\views\lists.py:97 msgid "Keywords" msgstr "Stichwörter" -#: .\cookbook\forms.py:126 +#: .\cookbook\forms.py:131 msgid "Preparation time in minutes" msgstr "Zubereitungszeit in Minuten" -#: .\cookbook\forms.py:127 +#: .\cookbook\forms.py:132 msgid "Waiting time (cooking/baking) in minutes" msgstr "Wartezeit (kochen/backen) in Minuten" -#: .\cookbook\forms.py:128 .\cookbook\forms.py:259 .\cookbook\forms.py:291 +#: .\cookbook\forms.py:133 .\cookbook\forms.py:267 .\cookbook\forms.py:300 msgid "Path" msgstr "Pfad" -#: .\cookbook\forms.py:129 +#: .\cookbook\forms.py:134 msgid "Storage UID" msgstr "Speicher-UID" -#: .\cookbook\forms.py:157 +#: .\cookbook\forms.py:164 msgid "Default" msgstr "Standard" -#: .\cookbook\forms.py:168 .\cookbook\templates\url_import.html:94 +#: .\cookbook\forms.py:175 .\cookbook\templates\url_import.html:97 msgid "" "To prevent duplicates recipes with the same name as existing ones are " "ignored. Check this box to import everything." @@ -198,19 +211,19 @@ msgstr "" "Um Duplikate zu vermeiden werden Rezepte mit dem gleichen Namen ignoriert. " "Aktivieren Sie dieses Kontrollkästchen, um alles zu importieren." -#: .\cookbook\forms.py:190 +#: .\cookbook\forms.py:197 msgid "Add your comment: " msgstr "Schreibe einen Kommentar: " -#: .\cookbook\forms.py:205 +#: .\cookbook\forms.py:212 msgid "Leave empty for dropbox and enter app password for nextcloud." msgstr "Für Dropbox leer lassen, bei Nextcloud App-Passwort eingeben." -#: .\cookbook\forms.py:212 +#: .\cookbook\forms.py:219 msgid "Leave empty for nextcloud and enter api token for dropbox." msgstr "Für Nextcloud leer lassen, für Dropbox API-Token eingeben." -#: .\cookbook\forms.py:221 +#: .\cookbook\forms.py:228 msgid "" "Leave empty for dropbox and enter only base url for nextcloud (/remote." "php/webdav/ is added automatically)" @@ -218,33 +231,33 @@ msgstr "" "Für Dropbox leer lassen, für Nextcloud Server-URL angeben (/remote.php/" "webdav/ wird automatisch hinzugefügt)" -#: .\cookbook\forms.py:258 .\cookbook\views\edit.py:166 +#: .\cookbook\forms.py:266 .\cookbook\views\edit.py:166 msgid "Storage" msgstr "Speicher" -#: .\cookbook\forms.py:260 +#: .\cookbook\forms.py:268 msgid "Active" msgstr "Aktiv" -#: .\cookbook\forms.py:265 +#: .\cookbook\forms.py:274 msgid "Search String" msgstr "Suchwort" -#: .\cookbook\forms.py:292 +#: .\cookbook\forms.py:301 msgid "File ID" msgstr "Datei-ID" -#: .\cookbook\forms.py:313 +#: .\cookbook\forms.py:323 msgid "You must provide at least a recipe or a title." msgstr "Mindestens ein Rezept oder ein Titel müssen angegeben werden." -#: .\cookbook\forms.py:326 +#: .\cookbook\forms.py:336 msgid "You can list default users to share recipes with in the settings." msgstr "" "Sie können in den Einstellungen Standardbenutzer auflisten, für die Sie " "Rezepte freigeben möchten." -#: .\cookbook\forms.py:327 +#: .\cookbook\forms.py:337 msgid "" "You can use markdown to format this field. See the docs here" @@ -252,15 +265,15 @@ msgstr "" "Markdown kann genutzt werden, um dieses Feld zu formatieren. Siehe hier für weitere Information" -#: .\cookbook\forms.py:353 +#: .\cookbook\forms.py:363 msgid "Maximum number of users for this space reached." msgstr "Maximale Nutzer-Anzahl wurde für diesen Space erreicht." -#: .\cookbook\forms.py:359 +#: .\cookbook\forms.py:369 msgid "Email address already taken!" msgstr "Email-Adresse ist bereits vergeben!" -#: .\cookbook\forms.py:367 +#: .\cookbook\forms.py:377 msgid "" "An email address is not required but if present the invite link will be sent " "to the user." @@ -268,15 +281,15 @@ msgstr "" "Eine Email-Adresse wird nicht benötigt, aber falls vorhanden, wird der " "Einladungslink zum Benutzer geschickt." -#: .\cookbook\forms.py:382 +#: .\cookbook\forms.py:392 msgid "Name already taken." msgstr "Name wird bereits verwendet." -#: .\cookbook\forms.py:393 +#: .\cookbook\forms.py:403 msgid "Accept Terms and Privacy" msgstr "AGB und Datenschutzerklärung akzeptieren" -#: .\cookbook\forms.py:425 +#: .\cookbook\forms.py:435 msgid "" "Determines how fuzzy a search is if it uses trigram similarity matching (e." "g. low values mean more typos are ignored)." @@ -284,7 +297,7 @@ msgstr "" "Legt fest wie unscharf eine Suche ist, falls Trigramme verwendet werden (i." "A. führen niedrigere Werte zum ignorieren von mehr Tippfehlern)." -#: .\cookbook\forms.py:435 +#: .\cookbook\forms.py:445 msgid "" "Select type method of search. Click here for " "full desciption of choices." @@ -292,7 +305,7 @@ msgstr "" "Suchmethode auswählen. Klicke hier für eine " "Auflistung der Optionen." -#: .\cookbook\forms.py:436 +#: .\cookbook\forms.py:446 msgid "" "Use fuzzy matching on units, keywords and ingredients when editing and " "importing recipes." @@ -300,7 +313,7 @@ msgstr "" "Benutze die unscharfe Suche für Einheiten, Schlüsselwörter und Zutaten beim " "ändern und importieren von Rezepten." -#: .\cookbook\forms.py:438 +#: .\cookbook\forms.py:448 msgid "" "Fields to search ignoring accents. Selecting this option can improve or " "degrade search quality depending on language" @@ -309,7 +322,7 @@ msgstr "" "kann die Suchqualität abhängig von der Sprache verbessern oder " "verschlechtern." -#: .\cookbook\forms.py:440 +#: .\cookbook\forms.py:450 msgid "" "Fields to search for partial matches. (e.g. searching for 'Pie' will return " "'pie' and 'piece' and 'soapie')" @@ -317,7 +330,7 @@ msgstr "" "Felder welche auf partielle Treffer durchsucht werden. (z.B. eine Suche " "nach \"Spa\" wird \"Spaghetti\", \"Spargel\" und \"Grünspargel\" liefern.)" -#: .\cookbook\forms.py:442 +#: .\cookbook\forms.py:452 msgid "" "Fields to search for beginning of word matches. (e.g. searching for 'sa' " "will return 'salad' and 'sandwich')" @@ -325,7 +338,7 @@ msgstr "" "Felder welche auf übereinstimmenden Wortbeginn durchsucht werden. (z.B. eine " "Suche nach \"Spa\" wird \"Spaghetti\" und \"Spargel\" liefern.)" -#: .\cookbook\forms.py:444 +#: .\cookbook\forms.py:454 msgid "" "Fields to 'fuzzy' search. (e.g. searching for 'recpie' will find 'recipe'.) " "Note: this option will conflict with 'web' and 'raw' methods of search." @@ -334,7 +347,7 @@ msgstr "" "\"Kuhcen\" wird \"Kuchen\" liefern.) Tipp: Diese Option konfligiert mit den " "\"web\" und \"raw\" Suchtypen." -#: .\cookbook\forms.py:446 +#: .\cookbook\forms.py:456 msgid "" "Fields to full text search. Note: 'web', 'phrase', and 'raw' search methods " "only function with fulltext fields." @@ -342,34 +355,144 @@ msgstr "" "Felder welche im Volltext durchsucht werden sollen. Tipp: Die Suchtypen \"web" "\", \"raw\" und \"phrase\" funktionieren nur mit Volltext-Feldern." -#: .\cookbook\forms.py:450 +#: .\cookbook\forms.py:460 msgid "Search Method" msgstr "Suchmethode" -#: .\cookbook\forms.py:451 +#: .\cookbook\forms.py:461 msgid "Fuzzy Lookups" msgstr "Unscharfe Suche" -#: .\cookbook\forms.py:452 +#: .\cookbook\forms.py:462 msgid "Ignore Accent" msgstr "Akzente ignorieren" -#: .\cookbook\forms.py:453 +#: .\cookbook\forms.py:463 msgid "Partial Match" msgstr "Teilweise Übereinstimmung" -#: .\cookbook\forms.py:454 +#: .\cookbook\forms.py:464 msgid "Starts Wtih" msgstr "Beginnt mit" -#: .\cookbook\forms.py:455 +#: .\cookbook\forms.py:465 msgid "Fuzzy Search" msgstr "Unpräzise Suche" -#: .\cookbook\forms.py:456 +#: .\cookbook\forms.py:466 msgid "Full Text" msgstr "Volltext" +#: .\cookbook\forms.py:491 +msgid "" +"Users will see all items you add to your shopping list. They must add you " +"to see items on their list." +msgstr "" + +#: .\cookbook\forms.py:497 +msgid "" +"When adding a meal plan to the shopping list (manually or automatically), " +"include all related recipes." +msgstr "" + +#: .\cookbook\forms.py:498 +msgid "" +"When adding a meal plan to the shopping list (manually or automatically), " +"exclude ingredients that are on hand." +msgstr "" + +#: .\cookbook\forms.py:499 +msgid "Default number of hours to delay a shopping list entry." +msgstr "" + +#: .\cookbook\forms.py:500 +msgid "Filter shopping list to only include supermarket categories." +msgstr "" + +#: .\cookbook\forms.py:501 +msgid "Days of recent shopping list entries to display." +msgstr "" + +#: .\cookbook\forms.py:502 +msgid "Mark food 'On Hand' when checked off shopping list." +msgstr "" + +#: .\cookbook\forms.py:503 +msgid "Delimiter to use for CSV exports." +msgstr "" + +#: .\cookbook\forms.py:504 +msgid "Prefix to add when copying list to the clipboard." +msgstr "" + +#: .\cookbook\forms.py:508 +#, fuzzy +#| msgid "New Shopping List" +msgid "Share Shopping List" +msgstr "Neue Einkaufsliste" + +#: .\cookbook\forms.py:509 +msgid "Autosync" +msgstr "" + +#: .\cookbook\forms.py:510 +msgid "Auto Add Meal Plan" +msgstr "" + +#: .\cookbook\forms.py:511 +msgid "Exclude On Hand" +msgstr "" + +#: .\cookbook\forms.py:512 +msgid "Include Related" +msgstr "" + +#: .\cookbook\forms.py:513 +msgid "Default Delay Hours" +msgstr "" + +#: .\cookbook\forms.py:514 +#, fuzzy +#| msgid "Select Supermarket" +msgid "Filter to Supermarket" +msgstr "Supermarkt auswählen" + +#: .\cookbook\forms.py:515 +msgid "Recent Days" +msgstr "" + +#: .\cookbook\forms.py:516 +msgid "CSV Delimiter" +msgstr "" + +#: .\cookbook\forms.py:517 .\cookbook\templates\shopping_list.html:322 +msgid "List Prefix" +msgstr "Listenpräfix" + +#: .\cookbook\forms.py:518 +msgid "Auto On Hand" +msgstr "" + +#: .\cookbook\forms.py:528 +msgid "Reset Food Inheritance" +msgstr "" + +#: .\cookbook\forms.py:529 +msgid "Reset all food to inherit the fields configured." +msgstr "" + +#: .\cookbook\forms.py:541 +#, fuzzy +#| msgid "Food that should be replaced." +msgid "Fields on food that should be inherited by default." +msgstr "Zutat, die ersetzt werden soll." + +#: .\cookbook\forms.py:542 +#, fuzzy +#| msgid "Show recently viewed recipes on search page." +msgid "Show recipe counts on search filters" +msgstr "Zuletzt angeschaute Rezepte bei der Suche anzeigen." + #: .\cookbook\helper\AllAuthCustomAdapter.py:36 msgid "" "In order to prevent spam, the requested email was not send. Please wait a " @@ -379,19 +502,19 @@ msgstr "" "warte ein paar Minuten und versuche es erneut." #: .\cookbook\helper\permission_helper.py:136 -#: .\cookbook\helper\permission_helper.py:159 .\cookbook\views\views.py:149 +#: .\cookbook\helper\permission_helper.py:159 .\cookbook\views\views.py:148 msgid "You are not logged in and therefore cannot view this page!" msgstr "Du bist nicht angemeldet, daher kannst du diese Seite nicht sehen!" #: .\cookbook\helper\permission_helper.py:140 #: .\cookbook\helper\permission_helper.py:146 #: .\cookbook\helper\permission_helper.py:171 -#: .\cookbook\helper\permission_helper.py:216 -#: .\cookbook\helper\permission_helper.py:230 -#: .\cookbook\helper\permission_helper.py:241 -#: .\cookbook\helper\permission_helper.py:252 .\cookbook\views\data.py:47 -#: .\cookbook\views\views.py:160 .\cookbook\views\views.py:167 -#: .\cookbook\views\views.py:233 +#: .\cookbook\helper\permission_helper.py:219 +#: .\cookbook\helper\permission_helper.py:233 +#: .\cookbook\helper\permission_helper.py:244 +#: .\cookbook\helper\permission_helper.py:255 .\cookbook\views\data.py:47 +#: .\cookbook\views\views.py:159 .\cookbook\views\views.py:166 +#: .\cookbook\views\views.py:232 msgid "You do not have the required permissions to view this page!" msgstr "Du hast nicht die notwendigen Rechte um diese Seite zu sehen!" @@ -402,25 +525,26 @@ msgid "You cannot interact with this object as it is not owned by you!" msgstr "" "Du kannst mit diesem Objekt nicht interagieren, da es dir nicht gehört!" +#: .\cookbook\helper\recipe_search.py:473 +msgid "One of queryset or hash_key must be provided" +msgstr "" + +#: .\cookbook\helper\shopping_helper.py:54 +#, fuzzy +#| msgid "You must provide at least a recipe or a title." +msgid "You must supply a recipe or mealplan" +msgstr "Mindestens ein Rezept oder ein Titel müssen angegeben werden." + +#: .\cookbook\helper\shopping_helper.py:58 +msgid "You must supply a created_by" +msgstr "" + #: .\cookbook\helper\template_helper.py:61 #: .\cookbook\helper\template_helper.py:63 msgid "Could not parse template code." msgstr "Konnte den Template code nicht verarbeiten." -#: .\cookbook\integration\integration.py:126 -#: .\cookbook\templates\import.html:14 .\cookbook\templates\import.html:20 -#: .\cookbook\templates\import_response.html:7 -#: .\cookbook\templates\test.html:14 .\cookbook\templates\test.html:20 -#: .\cookbook\templates\url_import.html:27 -#: .\cookbook\templates\url_import.html:105 -#: .\cookbook\templates\url_import.html:127 -#: .\cookbook\templates\url_import.html:321 -#: .\cookbook\templates\url_import.html:609 .\cookbook\views\delete.py:89 -#: .\cookbook\views\edit.py:200 -msgid "Import" -msgstr "Importieren" - -#: .\cookbook\integration\integration.py:208 +#: .\cookbook\integration\integration.py:200 msgid "" "Importer expected a .zip file. Did you choose the correct importer type for " "your data ?" @@ -428,7 +552,7 @@ msgstr "" "Importer erwartet eine .zip Datei. Hast du den richtigen Importer-Typ für " "deine Daten ausgewählt?" -#: .\cookbook\integration\integration.py:211 +#: .\cookbook\integration\integration.py:203 msgid "" "An unexpected error occurred during the import. Please make sure you have " "uploaded a valid file." @@ -436,11 +560,11 @@ msgstr "" "Ein unerwarteter Fehler trat beim Importieren auf. Bitte stelle sicher, dass " "die hochgeladene Datei gültig ist." -#: .\cookbook\integration\integration.py:216 +#: .\cookbook\integration\integration.py:208 msgid "The following recipes were ignored because they already existed:" msgstr "Die folgenden Rezepte wurden ignoriert da sie bereits existieren:" -#: .\cookbook\integration\integration.py:220 +#: .\cookbook\integration\integration.py:212 #, python-format msgid "Imported %s recipes." msgstr "%s Rezepte importiert." @@ -453,32 +577,32 @@ msgstr "Notizen" msgid "Nutritional Information" msgstr "Nährwert Informationen" -#: .\cookbook\integration\paprika.py:53 .\cookbook\templates\url_import.html:40 +#: .\cookbook\integration\paprika.py:53 .\cookbook\templates\url_import.html:42 msgid "Source" msgstr "Quelle" -#: .\cookbook\integration\safron.py:23 -#: .\cookbook\templates\include\log_cooking.html:16 -#: .\cookbook\templates\url_import.html:228 -#: .\cookbook\templates\url_import.html:459 +#: .\cookbook\integration\saffron.py:23 +#: .\cookbook\templates\include\log_cooking.html:18 +#: .\cookbook\templates\url_import.html:231 +#: .\cookbook\templates\url_import.html:462 msgid "Servings" msgstr "Portionen" -#: .\cookbook\integration\safron.py:25 +#: .\cookbook\integration\saffron.py:25 msgid "Waiting time" msgstr "Wartezeit" -#: .\cookbook\integration\safron.py:27 +#: .\cookbook\integration\saffron.py:27 msgid "Preparation Time" msgstr "Vorbereitungszeit" -#: .\cookbook\integration\safron.py:29 .\cookbook\templates\base.html:78 +#: .\cookbook\integration\saffron.py:29 .\cookbook\templates\base.html:78 #: .\cookbook\templates\forms\ingredients.html:7 #: .\cookbook\templates\index.html:7 msgid "Cookbook" msgstr "Kochbuch" -#: .\cookbook\integration\safron.py:31 +#: .\cookbook\integration\saffron.py:31 msgid "Section" msgstr "Sektion" @@ -516,7 +640,7 @@ msgstr "Abendessen" msgid "Other" msgstr "Andere" -#: .\cookbook\models.py:150 +#: .\cookbook\models.py:246 msgid "" "Maximum file storage for space in MB. 0 for unlimited, -1 to disable file " "upload." @@ -524,99 +648,130 @@ msgstr "" "Maximale Datei-Speichergröße in MB. 0 für unbegrenzt, -1 um den Datei-Upload " "zu deaktivieren." -#: .\cookbook\models.py:202 .\cookbook\templates\search.html:7 -#: .\cookbook\templates\shopping_list.html:59 +#: .\cookbook\models.py:300 .\cookbook\templates\search.html:7 +#: .\cookbook\templates\shopping_list.html:53 msgid "Search" msgstr "Suchen" -#: .\cookbook\models.py:203 .\cookbook\templates\base.html:82 +#: .\cookbook\models.py:301 .\cookbook\templates\base.html:82 #: .\cookbook\templates\meal_plan.html:7 #: .\cookbook\templates\meal_plan_new.html:7 .\cookbook\views\delete.py:181 #: .\cookbook\views\edit.py:220 .\cookbook\views\new.py:184 msgid "Meal-Plan" msgstr "Essensplan" -#: .\cookbook\models.py:204 .\cookbook\templates\base.html:90 +#: .\cookbook\models.py:302 .\cookbook\templates\base.html:90 msgid "Books" msgstr "Bücher" -#: .\cookbook\models.py:212 +#: .\cookbook\models.py:310 msgid "Small" msgstr "Klein" -#: .\cookbook\models.py:212 +#: .\cookbook\models.py:310 msgid "Large" msgstr "Groß" -#: .\cookbook\models.py:212 .\cookbook\templates\generic\new_template.html:6 +#: .\cookbook\models.py:310 .\cookbook\templates\generic\new_template.html:6 #: .\cookbook\templates\generic\new_template.html:14 msgid "New" msgstr "Neu" -#: .\cookbook\models.py:396 +#: .\cookbook\models.py:512 msgid " is part of a recipe step and cannot be deleted" msgstr " ist Teil eines Rezepts und kann nicht gelöscht werden" -#: .\cookbook\models.py:441 .\cookbook\templates\url_import.html:42 +#: .\cookbook\models.py:586 .\cookbook\templates\url_import.html:44 msgid "Text" msgstr "Text" -#: .\cookbook\models.py:441 +#: .\cookbook\models.py:586 msgid "Time" msgstr "Zeit" -#: .\cookbook\models.py:441 .\cookbook\templates\url_import.html:44 +#: .\cookbook\models.py:586 .\cookbook\templates\url_import.html:46 msgid "File" msgstr "Datei" -#: .\cookbook\models.py:441 +#: .\cookbook\models.py:586 #: .\cookbook\templates\include\recipe_open_modal.html:7 #: .\cookbook\views\delete.py:39 .\cookbook\views\edit.py:260 #: .\cookbook\views\new.py:53 msgid "Recipe" msgstr "Rezept" -#: .\cookbook\models.py:871 .\cookbook\templates\search_info.html:28 +#: .\cookbook\models.py:1041 .\cookbook\templates\search_info.html:28 msgid "Simple" msgstr "Einfach" -#: .\cookbook\models.py:872 .\cookbook\templates\search_info.html:33 +#: .\cookbook\models.py:1042 .\cookbook\templates\search_info.html:33 msgid "Phrase" msgstr "Satz" -#: .\cookbook\models.py:873 .\cookbook\templates\search_info.html:38 +#: .\cookbook\models.py:1043 .\cookbook\templates\search_info.html:38 msgid "Web" msgstr "Web" -#: .\cookbook\models.py:874 .\cookbook\templates\search_info.html:47 +#: .\cookbook\models.py:1044 .\cookbook\templates\search_info.html:47 msgid "Raw" msgstr "Rohdaten" -#: .\cookbook\models.py:912 +#: .\cookbook\models.py:1082 msgid "Food Alias" msgstr "Lebensmittel Alias" -#: .\cookbook\models.py:912 +#: .\cookbook\models.py:1082 msgid "Unit Alias" msgstr "Einheiten Alias" -#: .\cookbook\models.py:912 +#: .\cookbook\models.py:1082 msgid "Keyword Alias" msgstr "Stichwort Alias" -#: .\cookbook\serializer.py:157 +#: .\cookbook\serializer.py:175 +msgid "A user is required" +msgstr "" + +#: .\cookbook\serializer.py:195 msgid "File uploads are not enabled for this Space." msgstr "Datei-Uploads sind in diesem Space nicht aktiviert." -#: .\cookbook\serializer.py:168 +#: .\cookbook\serializer.py:206 msgid "You have reached your file upload limit." msgstr "Du hast Dein Datei-Uploadlimit erreicht." +#: .\cookbook\serializer.py:962 +msgid "Existing shopping list to update" +msgstr "" + +#: .\cookbook\serializer.py:964 +msgid "" +"List of ingredient IDs from the recipe to add, if not provided all " +"ingredients will be added." +msgstr "" + +#: .\cookbook\serializer.py:965 +msgid "" +"Providing a list_recipe ID and servings of 0 will delete that shopping list." +msgstr "" + +#: .\cookbook\serializer.py:973 +msgid "Amount of food to add to the shopping list" +msgstr "" + +#: .\cookbook\serializer.py:974 +msgid "ID of unit to use for the shopping list" +msgstr "" + +#: .\cookbook\serializer.py:975 +msgid "When set to true will delete all food from active shopping lists." +msgstr "" + #: .\cookbook\tables.py:35 .\cookbook\templates\generic\edit_template.html:6 #: .\cookbook\templates\generic\edit_template.html:14 #: .\cookbook\templates\recipes_table.html:82 -#: .\cookbook\templates\shopping_list.html:40 -#: .\cookbook\templates\space.html:90 +#: .\cookbook\templates\shopping_list.html:37 +#: .\cookbook\templates\space.html:109 msgid "Edit" msgstr "Bearbeiten" @@ -762,27 +917,27 @@ msgstr "Anmelden" msgid "Sign In" msgstr "Einloggen" -#: .\cookbook\templates\account\login.html:32 +#: .\cookbook\templates\account\login.html:34 #: .\cookbook\templates\socialaccount\signup.html:8 #: .\cookbook\templates\socialaccount\signup.html:57 msgid "Sign Up" msgstr "Registrieren" -#: .\cookbook\templates\account\login.html:36 -#: .\cookbook\templates\account\login.html:37 +#: .\cookbook\templates\account\login.html:39 +#: .\cookbook\templates\account\login.html:41 #: .\cookbook\templates\account\password_reset.html:29 msgid "Reset My Password" msgstr "Passwort zurücksetzen" -#: .\cookbook\templates\account\login.html:37 +#: .\cookbook\templates\account\login.html:40 msgid "Lost your password?" msgstr "Passwort vergessen?" -#: .\cookbook\templates\account\login.html:48 +#: .\cookbook\templates\account\login.html:52 msgid "Social Login" msgstr "Social Login" -#: .\cookbook\templates\account\login.html:49 +#: .\cookbook\templates\account\login.html:53 msgid "You can use any of the following providers to sign in." msgstr "Du kannst jeden der folgenden Anbieter zum Einloggen verwenden." @@ -808,7 +963,7 @@ msgstr "Passwort ändern" #: .\cookbook\templates\account\password_change.html:12 #: .\cookbook\templates\account\password_set.html:12 -#: .\cookbook\templates\settings.html:69 +#: .\cookbook\templates\settings.html:76 msgid "Password" msgstr "Passwort" @@ -932,15 +1087,19 @@ msgstr "Einkaufsliste" msgid "Keyword" msgstr "Schlagwort" +#: .\cookbook\templates\base.html:125 .\cookbook\views\lists.py:114 +msgid "Foods" +msgstr "Lebensmittel" + #: .\cookbook\templates\base.html:137 #: .\cookbook\templates\forms\ingredients.html:24 -#: .\cookbook\templates\space.html:41 .\cookbook\templates\stats.html:26 -#: .\cookbook\views\lists.py:146 +#: .\cookbook\templates\space.html:47 .\cookbook\templates\stats.html:26 +#: .\cookbook\views\lists.py:131 msgid "Units" msgstr "Einheiten" #: .\cookbook\templates\base.html:151 -#: .\cookbook\templates\shopping_list.html:237 +#: .\cookbook\templates\shopping_list.html:208 #: .\cookbook\templates\supermarket.html:7 msgid "Supermarket" msgstr "Supermarkt" @@ -949,11 +1108,11 @@ msgstr "Supermarkt" msgid "Supermarket Category" msgstr "Supermarkt-Kategorie" -#: .\cookbook\templates\base.html:175 .\cookbook\views\lists.py:195 +#: .\cookbook\templates\base.html:175 .\cookbook\views\lists.py:180 msgid "Automations" msgstr "Automatisierungen" -#: .\cookbook\templates\base.html:189 .\cookbook\views\lists.py:215 +#: .\cookbook\templates\base.html:189 .\cookbook\views\lists.py:200 msgid "Files" msgstr "Dateien" @@ -968,7 +1127,7 @@ msgstr "Verlauf" #: .\cookbook\templates\base.html:228 .\cookbook\templates\export.html:14 #: .\cookbook\templates\export.html:20 -#: .\cookbook\templates\shopping_list.html:358 +#: .\cookbook\templates\shopping_list.html:310 #: .\cookbook\templates\test2.html:14 .\cookbook\templates\test2.html:20 msgid "Export" msgstr "Exportieren" @@ -978,19 +1137,19 @@ msgid "Import Recipe" msgstr "Rezept importieren" #: .\cookbook\templates\base.html:246 -#: .\cookbook\templates\shopping_list.html:195 -#: .\cookbook\templates\shopping_list.html:217 +#: .\cookbook\templates\shopping_list.html:165 +#: .\cookbook\templates\shopping_list.html:188 msgid "Create" msgstr "Erstellen" #: .\cookbook\templates\base.html:259 #: .\cookbook\templates\generic\list_template.html:14 -#: .\cookbook\templates\space.html:58 .\cookbook\templates\stats.html:43 +#: .\cookbook\templates\space.html:69 .\cookbook\templates\stats.html:43 msgid "External Recipes" msgstr "Externe Rezepte" -#: .\cookbook\templates\base.html:262 .\cookbook\templates\space.html:7 -#: .\cookbook\templates\space.html:19 +#: .\cookbook\templates\base.html:262 .\cookbook\templates\space.html:8 +#: .\cookbook\templates\space.html:20 .\cookbook\templates\space.html:150 msgid "Space Settings" msgstr "Space Einstellungen" @@ -1060,11 +1219,13 @@ msgstr "Der Pfad muss folgendes Format haben" #: .\cookbook\templates\forms\edit_import_recipe.html:14 #: .\cookbook\templates\generic\edit_template.html:23 #: .\cookbook\templates\generic\new_template.html:23 -#: .\cookbook\templates\include\log_cooking.html:28 -#: .\cookbook\templates\settings.html:63 .\cookbook\templates\settings.html:105 -#: .\cookbook\templates\settings.html:123 -#: .\cookbook\templates\settings.html:195 -#: .\cookbook\templates\shopping_list.html:360 +#: .\cookbook\templates\include\log_cooking.html:30 +#: .\cookbook\templates\settings.html:70 .\cookbook\templates\settings.html:112 +#: .\cookbook\templates\settings.html:130 +#: .\cookbook\templates\settings.html:202 +#: .\cookbook\templates\settings.html:213 +#: .\cookbook\templates\shopping_list.html:311 +#: .\cookbook\templates\space.html:155 msgid "Save" msgstr "Speichern" @@ -1178,15 +1339,20 @@ msgid "Delete original file" msgstr "Original löschen" #: .\cookbook\templates\generic\list_template.html:6 -#: .\cookbook\templates\generic\list_template.html:21 +#: .\cookbook\templates\generic\list_template.html:22 msgid "List" msgstr "Liste" -#: .\cookbook\templates\generic\list_template.html:34 +#: .\cookbook\templates\generic\list_template.html:33 +#: .\cookbook\templates\shopping_list.html:33 +msgid "Try the new shopping list" +msgstr "Neue Einkaufsliste ausprobieren" + +#: .\cookbook\templates\generic\list_template.html:45 msgid "Filter" msgstr "Filter" -#: .\cookbook\templates\generic\list_template.html:39 +#: .\cookbook\templates\generic\list_template.html:50 msgid "Import all" msgstr "Alle importieren" @@ -1212,19 +1378,31 @@ msgstr "Kochverlauf" msgid "Import Recipes" msgstr "Rezepte importieren" -#: .\cookbook\templates\include\log_cooking.html:7 +#: .\cookbook\templates\import.html:14 .\cookbook\templates\import.html:20 +#: .\cookbook\templates\import_response.html:7 +#: .\cookbook\templates\test.html:14 .\cookbook\templates\test.html:20 +#: .\cookbook\templates\url_import.html:29 +#: .\cookbook\templates\url_import.html:108 +#: .\cookbook\templates\url_import.html:130 +#: .\cookbook\templates\url_import.html:324 +#: .\cookbook\templates\url_import.html:618 .\cookbook\views\delete.py:89 +#: .\cookbook\views\edit.py:200 +msgid "Import" +msgstr "Importieren" + +#: .\cookbook\templates\include\log_cooking.html:9 msgid "Log Recipe Cooking" msgstr "Kochen protokollieren" -#: .\cookbook\templates\include\log_cooking.html:13 +#: .\cookbook\templates\include\log_cooking.html:15 msgid "All fields are optional and can be left empty." msgstr "Alle Felder sind optional und können leer gelassen werden." -#: .\cookbook\templates\include\log_cooking.html:19 +#: .\cookbook\templates\include\log_cooking.html:21 msgid "Rating" msgstr "Bewertung" -#: .\cookbook\templates\include\log_cooking.html:27 +#: .\cookbook\templates\include\log_cooking.html:29 #: .\cookbook\templates\include\recipe_open_modal.html:18 msgid "Close" msgstr "Schließen" @@ -1279,7 +1457,7 @@ msgstr "Suche zurücksetzen" msgid "Last viewed" msgstr "Zuletzt angesehen" -#: .\cookbook\templates\index.html:87 .\cookbook\templates\space.html:35 +#: .\cookbook\templates\index.html:87 .\cookbook\templates\space.html:37 #: .\cookbook\templates\stats.html:22 msgid "Recipes" msgstr "Rezepte" @@ -1449,7 +1627,7 @@ msgid "Created by" msgstr "Erstellt von" #: .\cookbook\templates\meal_plan_entry.html:20 -#: .\cookbook\templates\shopping_list.html:261 +#: .\cookbook\templates\shopping_list.html:232 msgid "Shared with" msgstr "Geteilt mit" @@ -1571,17 +1749,17 @@ msgstr "Kommentar" #: .\cookbook\templates\recipes_table.html:19 #: .\cookbook\templates\recipes_table.html:23 -#: .\cookbook\templates\url_import.html:444 +#: .\cookbook\templates\url_import.html:447 msgid "Recipe Image" msgstr "Rezeptbild" #: .\cookbook\templates\recipes_table.html:51 -#: .\cookbook\templates\url_import.html:449 +#: .\cookbook\templates\url_import.html:452 msgid "Preparation time ca." msgstr "Zubereitungszeit ca." #: .\cookbook\templates\recipes_table.html:57 -#: .\cookbook\templates\url_import.html:454 +#: .\cookbook\templates\url_import.html:457 msgid "Waiting time ca." msgstr "Wartezeit ca." @@ -1599,7 +1777,7 @@ msgstr "Rezept-Hauptseite" #: .\cookbook\templates\search_info.html:5 #: .\cookbook\templates\search_info.html:9 -#: .\cookbook\templates\settings.html:165 +#: .\cookbook\templates\settings.html:172 msgid "Search Settings" msgstr "Sucheinstellungen" @@ -1866,36 +2044,42 @@ msgstr "API-Einstellungen" msgid "Search-Settings" msgstr "Sucheinstellungen" -#: .\cookbook\templates\settings.html:58 +#: .\cookbook\templates\settings.html:56 +#, fuzzy +#| msgid "Search-Settings" +msgid "Shopping-Settings" +msgstr "Sucheinstellungen" + +#: .\cookbook\templates\settings.html:65 msgid "Name Settings" msgstr "Namen-Einstellungen" -#: .\cookbook\templates\settings.html:66 +#: .\cookbook\templates\settings.html:73 msgid "Account Settings" msgstr "Account-Einstellungen" -#: .\cookbook\templates\settings.html:68 +#: .\cookbook\templates\settings.html:75 msgid "Emails" msgstr "E-Mail Adressen" -#: .\cookbook\templates\settings.html:71 +#: .\cookbook\templates\settings.html:78 #: .\cookbook\templates\socialaccount\connections.html:11 msgid "Social" msgstr "Social" -#: .\cookbook\templates\settings.html:84 +#: .\cookbook\templates\settings.html:91 msgid "Language" msgstr "Sprache" -#: .\cookbook\templates\settings.html:114 +#: .\cookbook\templates\settings.html:121 msgid "Style" msgstr "Stil" -#: .\cookbook\templates\settings.html:135 +#: .\cookbook\templates\settings.html:142 msgid "API Token" msgstr "API-Token" -#: .\cookbook\templates\settings.html:136 +#: .\cookbook\templates\settings.html:143 msgid "" "You can use both basic authentication and token based authentication to " "access the REST API." @@ -1903,7 +2087,7 @@ msgstr "" "Sowohl Basic Authentication als auch tokenbasierte Authentifizierung können " "für die REST-API verwendet werden." -#: .\cookbook\templates\settings.html:153 +#: .\cookbook\templates\settings.html:160 msgid "" "Use the token as an Authorization header prefixed by the word token as shown " "in the following examples:" @@ -1911,17 +2095,17 @@ msgstr "" "Nutz den Token als Authorization-Header mit der Präfix \"Token\" wie in " "folgendem Beispiel:" -#: .\cookbook\templates\settings.html:155 +#: .\cookbook\templates\settings.html:162 msgid "or" msgstr "oder" -#: .\cookbook\templates\settings.html:166 +#: .\cookbook\templates\settings.html:173 msgid "" "There are many options to configure the search depending on your personal " "preferences." msgstr "Die Suche kann je nach Präferenz vielfältig Individualisiert werden." -#: .\cookbook\templates\settings.html:167 +#: .\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." @@ -1930,7 +2114,7 @@ msgstr "" "Meist erreichen die Standardeinstellungen oder eine der folgenden " "Suchprofile sehr gute Suchergebnisse." -#: .\cookbook\templates\settings.html:168 +#: .\cookbook\templates\settings.html:175 msgid "" "If you do want to configure the search you can read about the different " "options here." @@ -1938,11 +2122,11 @@ msgstr "" "Weitere Informationen zu den einzelnen Optionen sind hier zu finden." -#: .\cookbook\templates\settings.html:173 +#: .\cookbook\templates\settings.html:180 msgid "Fuzzy" msgstr "Unscharf" -#: .\cookbook\templates\settings.html:174 +#: .\cookbook\templates\settings.html:181 msgid "" "Find what you need even if your search or the recipe contains typos. Might " "return more results than needed to make sure you find what you are looking " @@ -1951,20 +2135,20 @@ msgstr "" "Liefert alle erwartbaren Suchergebnisse auch wenn Tippfehler im Suchbegriff " "sind. Kann jedoch mehr Ergebnisse als notwendig liefern." -#: .\cookbook\templates\settings.html:175 +#: .\cookbook\templates\settings.html:182 msgid "This is the default behavior" msgstr "Dies ist die Standardeinstellung" -#: .\cookbook\templates\settings.html:176 -#: .\cookbook\templates\settings.html:184 +#: .\cookbook\templates\settings.html:183 +#: .\cookbook\templates\settings.html:191 msgid "Apply" msgstr "Anwenden" -#: .\cookbook\templates\settings.html:181 +#: .\cookbook\templates\settings.html:188 msgid "Precise" msgstr "Präzise" -#: .\cookbook\templates\settings.html:182 +#: .\cookbook\templates\settings.html:189 msgid "" "Allows fine control over search results but might not return results if too " "many spelling mistakes are made." @@ -1972,10 +2156,16 @@ msgstr "" "Erlaubt eine feine Steuerung der Suchergebnisse, aber es könnten keine " "Ergebnisse geliefert werden, wenn zu viele Tippfehler gemacht wurden." -#: .\cookbook\templates\settings.html:183 +#: .\cookbook\templates\settings.html:190 msgid "Perfect for large Databases" msgstr "Ideal für große Datenbanken" +#: .\cookbook\templates\settings.html:207 +#, fuzzy +#| msgid "Shopping List" +msgid "Shopping Settings" +msgstr "Einkaufsliste" + #: .\cookbook\templates\setup.html:6 .\cookbook\templates\system.html:5 msgid "Cookbook Setup" msgstr "Kochbuch-Setup" @@ -1995,81 +2185,73 @@ msgstr "" msgid "Create Superuser account" msgstr "Administrator-Account Erstellen" -#: .\cookbook\templates\shopping_list.html:7 +#: .\cookbook\templates\shopping_list.html:8 #: .\cookbook\templates\shopping_list.html:29 -#: .\cookbook\templates\shopping_list.html:721 +#: .\cookbook\templates\shopping_list.html:663 msgid "Shopping List" msgstr "Einkaufsliste" -#: .\cookbook\templates\shopping_list.html:34 -msgid "Try the new shopping list" -msgstr "Neue Einkaufsliste ausprobieren" - -#: .\cookbook\templates\shopping_list.html:63 +#: .\cookbook\templates\shopping_list.html:55 msgid "Search Recipe" msgstr "Rezept suchen" -#: .\cookbook\templates\shopping_list.html:86 +#: .\cookbook\templates\shopping_list.html:72 msgid "Shopping Recipes" msgstr "Einkaufs-Rezepte" -#: .\cookbook\templates\shopping_list.html:90 +#: .\cookbook\templates\shopping_list.html:74 msgid "No recipes selected" msgstr "Keine Rezepte ausgewählt" -#: .\cookbook\templates\shopping_list.html:157 +#: .\cookbook\templates\shopping_list.html:131 msgid "Entry Mode" msgstr "Eintrags-Modus" -#: .\cookbook\templates\shopping_list.html:165 +#: .\cookbook\templates\shopping_list.html:139 msgid "Add Entry" msgstr "Eintrag hinzufügen" -#: .\cookbook\templates\shopping_list.html:181 +#: .\cookbook\templates\shopping_list.html:152 msgid "Amount" msgstr "Menge" -#: .\cookbook\templates\shopping_list.html:194 +#: .\cookbook\templates\shopping_list.html:164 msgid "Select Unit" msgstr "Einheit wählen" -#: .\cookbook\templates\shopping_list.html:196 -#: .\cookbook\templates\shopping_list.html:218 -#: .\cookbook\templates\shopping_list.html:248 -#: .\cookbook\templates\shopping_list.html:272 -#: .\cookbook\templates\url_import.html:500 -#: .\cookbook\templates\url_import.html:532 +#: .\cookbook\templates\shopping_list.html:166 +#: .\cookbook\templates\shopping_list.html:189 +#: .\cookbook\templates\shopping_list.html:219 +#: .\cookbook\templates\shopping_list.html:243 +#: .\cookbook\templates\url_import.html:505 +#: .\cookbook\templates\url_import.html:537 msgid "Select" msgstr "Auswählen" -#: .\cookbook\templates\shopping_list.html:216 +#: .\cookbook\templates\shopping_list.html:187 msgid "Select Food" msgstr "Zutat auswählen" -#: .\cookbook\templates\shopping_list.html:247 +#: .\cookbook\templates\shopping_list.html:218 msgid "Select Supermarket" msgstr "Supermarkt auswählen" -#: .\cookbook\templates\shopping_list.html:271 +#: .\cookbook\templates\shopping_list.html:242 msgid "Select User" msgstr "Nutzer auswählen" -#: .\cookbook\templates\shopping_list.html:290 +#: .\cookbook\templates\shopping_list.html:258 msgid "Finished" msgstr "Erledigt" -#: .\cookbook\templates\shopping_list.html:303 +#: .\cookbook\templates\shopping_list.html:267 msgid "You are offline, shopping list might not syncronize." msgstr "Du bist offline, die Einkaufsliste wird ggf. nicht synchronisiert." -#: .\cookbook\templates\shopping_list.html:368 +#: .\cookbook\templates\shopping_list.html:318 msgid "Copy/Export" msgstr "Kopieren/Exportieren" -#: .\cookbook\templates\shopping_list.html:372 -msgid "List Prefix" -msgstr "Listenpräfix" - #: .\cookbook\templates\socialaccount\connections.html:4 #: .\cookbook\templates\socialaccount\connections.html:15 msgid "Account Connections" @@ -2125,80 +2307,80 @@ msgstr "" msgid "Sign in using" msgstr "Einloggen mit" -#: .\cookbook\templates\space.html:23 +#: .\cookbook\templates\space.html:25 msgid "Space:" msgstr "Instanz:" -#: .\cookbook\templates\space.html:24 +#: .\cookbook\templates\space.html:26 msgid "Manage Subscription" msgstr "Tarif verwalten" -#: .\cookbook\templates\space.html:32 .\cookbook\templates\stats.html:19 +#: .\cookbook\templates\space.html:34 .\cookbook\templates\stats.html:19 msgid "Number of objects" msgstr "Anzahl an Objekten" -#: .\cookbook\templates\space.html:45 .\cookbook\templates\stats.html:30 +#: .\cookbook\templates\space.html:54 .\cookbook\templates\stats.html:30 msgid "Recipe Imports" msgstr "Importierte Rezepte" -#: .\cookbook\templates\space.html:53 .\cookbook\templates\stats.html:38 +#: .\cookbook\templates\space.html:62 .\cookbook\templates\stats.html:38 msgid "Objects stats" msgstr "Objekt-Statistiken" -#: .\cookbook\templates\space.html:56 .\cookbook\templates\stats.html:41 +#: .\cookbook\templates\space.html:65 .\cookbook\templates\stats.html:41 msgid "Recipes without Keywords" msgstr "Rezepte ohne Schlagwort" -#: .\cookbook\templates\space.html:60 .\cookbook\templates\stats.html:45 +#: .\cookbook\templates\space.html:73 .\cookbook\templates\stats.html:45 msgid "Internal Recipes" msgstr "Interne Rezepte" -#: .\cookbook\templates\space.html:73 +#: .\cookbook\templates\space.html:89 msgid "Members" msgstr "Mitglieder" -#: .\cookbook\templates\space.html:77 +#: .\cookbook\templates\space.html:95 msgid "Invite User" msgstr "Benutzer einladen" -#: .\cookbook\templates\space.html:88 +#: .\cookbook\templates\space.html:107 msgid "User" msgstr "Benutzer" -#: .\cookbook\templates\space.html:89 +#: .\cookbook\templates\space.html:108 msgid "Groups" msgstr "Gruppen" -#: .\cookbook\templates\space.html:105 +#: .\cookbook\templates\space.html:119 msgid "admin" msgstr "Admin" -#: .\cookbook\templates\space.html:106 +#: .\cookbook\templates\space.html:120 msgid "user" msgstr "Benutzer" -#: .\cookbook\templates\space.html:107 +#: .\cookbook\templates\space.html:121 msgid "guest" msgstr "Gast" -#: .\cookbook\templates\space.html:108 +#: .\cookbook\templates\space.html:122 msgid "remove" msgstr "Entfernen" -#: .\cookbook\templates\space.html:112 +#: .\cookbook\templates\space.html:126 msgid "Update" msgstr "Aktualisierung" -#: .\cookbook\templates\space.html:116 +#: .\cookbook\templates\space.html:130 msgid "You cannot edit yourself." msgstr "Du kannst dies nicht selbst bearbeiten." -#: .\cookbook\templates\space.html:123 +#: .\cookbook\templates\space.html:136 msgid "There are no members in your space yet!" msgstr "In diesem Space sind bisher noch keine Mitglieder!" -#: .\cookbook\templates\space.html:130 .\cookbook\templates\system.html:21 -#: .\cookbook\views\lists.py:100 +#: .\cookbook\templates\space.html:143 .\cookbook\templates\system.html:21 +#: .\cookbook\views\lists.py:85 msgid "Invite Links" msgstr "Einladungslinks" @@ -2337,112 +2519,112 @@ msgstr "" "Funktionen nur mit einer PostgreSQL-Datenbanken funktionieren.\n" " " -#: .\cookbook\templates\url_import.html:6 +#: .\cookbook\templates\url_import.html:8 msgid "URL Import" msgstr "URL-Import" -#: .\cookbook\templates\url_import.html:31 +#: .\cookbook\templates\url_import.html:33 msgid "Drag me to your bookmarks to import recipes from anywhere" msgstr "Ziehe mich in deine Lesezeichen, um Rezepte von überall zu importieren" -#: .\cookbook\templates\url_import.html:32 +#: .\cookbook\templates\url_import.html:34 msgid "Bookmark Me!" msgstr "Lesezeichen speichern!" -#: .\cookbook\templates\url_import.html:36 +#: .\cookbook\templates\url_import.html:38 msgid "URL" msgstr "URL" -#: .\cookbook\templates\url_import.html:38 +#: .\cookbook\templates\url_import.html:40 msgid "App" msgstr "Anwendung" -#: .\cookbook\templates\url_import.html:62 +#: .\cookbook\templates\url_import.html:64 msgid "Enter website URL" msgstr "Webseite-URL eingeben" -#: .\cookbook\templates\url_import.html:101 +#: .\cookbook\templates\url_import.html:104 msgid "Select recipe files to import or drop them here..." msgstr "Wähle Rezept-Dateien zum Importieren oder platziere sie hier..." -#: .\cookbook\templates\url_import.html:122 +#: .\cookbook\templates\url_import.html:125 msgid "Paste json or html source here to load recipe." msgstr "Füge JSON- oder HTML-Daten hier ein um das Rezept zu laden." -#: .\cookbook\templates\url_import.html:150 +#: .\cookbook\templates\url_import.html:153 msgid "Preview Recipe Data" msgstr "Rezept-Daten ansehen" -#: .\cookbook\templates\url_import.html:151 +#: .\cookbook\templates\url_import.html:154 msgid "Drag recipe attributes from the right into the appropriate box below." msgstr "Ziehe Rezepteigenschaften von Rechts in die entsprechende Box unten." -#: .\cookbook\templates\url_import.html:160 -#: .\cookbook\templates\url_import.html:177 -#: .\cookbook\templates\url_import.html:194 -#: .\cookbook\templates\url_import.html:213 -#: .\cookbook\templates\url_import.html:231 -#: .\cookbook\templates\url_import.html:246 -#: .\cookbook\templates\url_import.html:261 -#: .\cookbook\templates\url_import.html:277 -#: .\cookbook\templates\url_import.html:304 -#: .\cookbook\templates\url_import.html:355 +#: .\cookbook\templates\url_import.html:163 +#: .\cookbook\templates\url_import.html:180 +#: .\cookbook\templates\url_import.html:197 +#: .\cookbook\templates\url_import.html:216 +#: .\cookbook\templates\url_import.html:234 +#: .\cookbook\templates\url_import.html:249 +#: .\cookbook\templates\url_import.html:264 +#: .\cookbook\templates\url_import.html:280 +#: .\cookbook\templates\url_import.html:307 +#: .\cookbook\templates\url_import.html:358 msgid "Clear Contents" msgstr "Inhalte leeren" -#: .\cookbook\templates\url_import.html:162 +#: .\cookbook\templates\url_import.html:165 msgid "Text dragged here will be appended to the name." msgstr "Text welcher hierhin gezogen wird, wird an den Namen angehängt." -#: .\cookbook\templates\url_import.html:175 +#: .\cookbook\templates\url_import.html:178 msgid "Description" msgstr "Beschreibung" -#: .\cookbook\templates\url_import.html:179 +#: .\cookbook\templates\url_import.html:182 msgid "Text dragged here will be appended to the description." msgstr "Text welcher hierhin gezogen wird, wird an die Beschreibung angehängt." -#: .\cookbook\templates\url_import.html:196 +#: .\cookbook\templates\url_import.html:199 msgid "Keywords dragged here will be appended to current list" msgstr "" "Stichworte welche hierhin gezogen werden, werden zur aktuellen Liste " "hinzugefügt" -#: .\cookbook\templates\url_import.html:211 +#: .\cookbook\templates\url_import.html:214 msgid "Image" msgstr "Bild" -#: .\cookbook\templates\url_import.html:243 +#: .\cookbook\templates\url_import.html:246 msgid "Prep Time" msgstr "Vorbereitungszeit" -#: .\cookbook\templates\url_import.html:258 +#: .\cookbook\templates\url_import.html:261 msgid "Cook Time" msgstr "Kochzeit" -#: .\cookbook\templates\url_import.html:279 +#: .\cookbook\templates\url_import.html:282 msgid "Ingredients dragged here will be appended to current list." msgstr "" "Zutaten welche hierhin gezogen werden, werden zur aktuellen Liste " "hinzugefügt." -#: .\cookbook\templates\url_import.html:301 -#: .\cookbook\templates\url_import.html:572 +#: .\cookbook\templates\url_import.html:304 +#: .\cookbook\templates\url_import.html:579 msgid "Instructions" msgstr "Anleitung" -#: .\cookbook\templates\url_import.html:306 +#: .\cookbook\templates\url_import.html:309 msgid "" "Recipe instructions dragged here will be appended to current instructions." msgstr "" "Rezeptanweisungen welche hierhin gezogen werden, werden zu den aktuellen " "Anweisungen hinzugefügt." -#: .\cookbook\templates\url_import.html:329 +#: .\cookbook\templates\url_import.html:332 msgid "Discovered Attributes" msgstr "Entdeckte Attribute" -#: .\cookbook\templates\url_import.html:331 +#: .\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." @@ -2450,61 +2632,61 @@ msgstr "" "Ziehe Rezepteigenschaften von unten in das jeweilige Feld links. Klicke auf " "beliebige Elemente um dessen Eigenschaften anzuzeigen." -#: .\cookbook\templates\url_import.html:348 +#: .\cookbook\templates\url_import.html:351 msgid "Show Blank Field" msgstr "Leeres Feld anzeigen" -#: .\cookbook\templates\url_import.html:353 +#: .\cookbook\templates\url_import.html:356 msgid "Blank Field" msgstr "Leeres Feld" -#: .\cookbook\templates\url_import.html:357 +#: .\cookbook\templates\url_import.html:360 msgid "Items dragged to Blank Field will be appended." msgstr "Elemente die in ein leeres Feld gezogen werden, werden angefügt." -#: .\cookbook\templates\url_import.html:404 +#: .\cookbook\templates\url_import.html:407 msgid "Delete Text" msgstr "Text löschen" -#: .\cookbook\templates\url_import.html:417 +#: .\cookbook\templates\url_import.html:420 msgid "Delete image" msgstr "Bild löschen" -#: .\cookbook\templates\url_import.html:433 +#: .\cookbook\templates\url_import.html:436 msgid "Recipe Name" msgstr "Rezeptname" -#: .\cookbook\templates\url_import.html:437 +#: .\cookbook\templates\url_import.html:440 msgid "Recipe Description" msgstr "Rezept Beschreibung" -#: .\cookbook\templates\url_import.html:499 -#: .\cookbook\templates\url_import.html:531 -#: .\cookbook\templates\url_import.html:587 +#: .\cookbook\templates\url_import.html:504 +#: .\cookbook\templates\url_import.html:536 +#: .\cookbook\templates\url_import.html:596 msgid "Select one" msgstr "Auswählen" -#: .\cookbook\templates\url_import.html:547 +#: .\cookbook\templates\url_import.html:554 msgid "Note" msgstr "Notiz" -#: .\cookbook\templates\url_import.html:588 +#: .\cookbook\templates\url_import.html:597 msgid "Add Keyword" msgstr "Schlagwort hinzufügen" -#: .\cookbook\templates\url_import.html:601 +#: .\cookbook\templates\url_import.html:610 msgid "All Keywords" msgstr "Alle Schlagwörter" -#: .\cookbook\templates\url_import.html:604 +#: .\cookbook\templates\url_import.html:613 msgid "Import all keywords, not only the ones already existing." msgstr "Alle Schlagwörter importieren, nicht nur die bereits bestehenden." -#: .\cookbook\templates\url_import.html:631 +#: .\cookbook\templates\url_import.html:640 msgid "Information" msgstr "Information" -#: .\cookbook\templates\url_import.html:633 +#: .\cookbook\templates\url_import.html:642 msgid "" " Only websites containing ld+json or microdata information can currently\n" " be imported. Most big recipe pages " @@ -2519,131 +2701,220 @@ msgstr "" "importiert werden kann, sie aber strukturierte Daten aufweist, kann ein " "GitHub-Issue geöffnet werden." -#: .\cookbook\templates\url_import.html:641 +#: .\cookbook\templates\url_import.html:650 msgid "Google ld+json Info" msgstr "Google ld+json Informationen" -#: .\cookbook\templates\url_import.html:644 +#: .\cookbook\templates\url_import.html:653 msgid "GitHub Issues" msgstr "GitHub-Issues" -#: .\cookbook\templates\url_import.html:646 +#: .\cookbook\templates\url_import.html:655 msgid "Recipe Markup Specification" msgstr "Rezept-Markup-Spezifikation" -#: .\cookbook\views\api.py:83 .\cookbook\views\api.py:132 +#: .\cookbook\views\api.py:88 .\cookbook\views\api.py:170 msgid "Parameter updated_at incorrectly formatted" msgstr "Der Parameter updated_at ist falsch formatiert" -#: .\cookbook\views\api.py:152 +#: .\cookbook\views\api.py:190 .\cookbook\views\api.py:291 #, python-brace-format msgid "No {self.basename} with id {pk} exists" msgstr "Kein {self.basename} mit der ID {pk} existiert" -#: .\cookbook\views\api.py:156 +#: .\cookbook\views\api.py:194 msgid "Cannot merge with the same object!" msgstr "Zusammenführen mit selben Objekt nicht möglich!" -#: .\cookbook\views\api.py:163 +#: .\cookbook\views\api.py:201 #, python-brace-format msgid "No {self.basename} with id {target} exists" msgstr "Kein {self.basename} mit der ID {target} existiert" -#: .\cookbook\views\api.py:168 +#: .\cookbook\views\api.py:206 msgid "Cannot merge with child object!" msgstr "Zusammenführen mit untergeordnetem Objekt nicht möglich!" -#: .\cookbook\views\api.py:201 +#: .\cookbook\views\api.py:239 #, python-brace-format msgid "{source.name} was merged successfully with {target.name}" msgstr "{source.name} wurde erfolgreich mit {target.name} zusammengeführt" -#: .\cookbook\views\api.py:205 +#: .\cookbook\views\api.py:244 #, python-brace-format msgid "An error occurred attempting to merge {source.name} with {target.name}" msgstr "" "Beim zusammenführen von {source.name} mit {target.name} ist ein Fehler " "aufgetreten" -#: .\cookbook\views\api.py:249 -#, python-brace-format -msgid "No {self.basename} with id {child} exists" -msgstr "Kein {self.basename} mit ID {child} existiert" - -#: .\cookbook\views\api.py:258 +#: .\cookbook\views\api.py:300 #, python-brace-format msgid "{child.name} was moved successfully to the root." msgstr "{child.name} wurde erfolgreich zur Wurzel verschoben." -#: .\cookbook\views\api.py:261 .\cookbook\views\api.py:279 +#: .\cookbook\views\api.py:303 .\cookbook\views\api.py:321 msgid "An error occurred attempting to move " msgstr "Fehler aufgetreten beim verschieben von " -#: .\cookbook\views\api.py:264 +#: .\cookbook\views\api.py:306 msgid "Cannot move an object to itself!" msgstr "Ein Element kann nicht in sich selbst verschoben werden!" -#: .\cookbook\views\api.py:270 +#: .\cookbook\views\api.py:312 #, python-brace-format msgid "No {self.basename} with id {parent} exists" msgstr "Kein {self.basename} mit ID {parent} existiert" -#: .\cookbook\views\api.py:276 +#: .\cookbook\views\api.py:318 #, python-brace-format msgid "{child.name} was moved successfully to parent {parent.name}" msgstr "" "{child.name} wurde erfolgreich zum Überelement {parent.name} verschoben" -#: .\cookbook\views\api.py:723 .\cookbook\views\data.py:42 +#: .\cookbook\views\api.py:470 +#, python-brace-format +msgid "{obj.name} was removed from the shopping list." +msgstr "" + +#: .\cookbook\views\api.py:475 .\cookbook\views\api.py:726 +#, python-brace-format +msgid "{obj.name} was added to the shopping list." +msgstr "" + +#: .\cookbook\views\api.py:587 +msgid "ID of recipe a step is part of. For multiple repeat parameter." +msgstr "" + +#: .\cookbook\views\api.py:588 +msgid "Query string matched (fuzzy) against object name." +msgstr "" + +#: .\cookbook\views\api.py:631 +msgid "" +"Query string matched (fuzzy) against recipe name. In the future also " +"fulltext search." +msgstr "" + +#: .\cookbook\views\api.py:632 +msgid "ID of keyword a recipe should have. For multiple repeat parameter." +msgstr "" + +#: .\cookbook\views\api.py:633 +msgid "ID of food a recipe should have. For multiple repeat parameter." +msgstr "" + +#: .\cookbook\views\api.py:634 +msgid "ID of unit a recipe should have." +msgstr "" + +#: .\cookbook\views\api.py:635 +msgid "Rating a recipe should have. [0 - 5]" +msgstr "" + +#: .\cookbook\views\api.py:636 +msgid "ID of book a recipe should be in. For multiple repeat parameter." +msgstr "" + +#: .\cookbook\views\api.py:637 +msgid "" +"If recipe should have all (AND=false) or any (OR=true) of the " +"provided keywords." +msgstr "" + +#: .\cookbook\views\api.py:638 +msgid "" +"If recipe should have all (AND=false) or any (OR=true) of the " +"provided foods." +msgstr "" + +#: .\cookbook\views\api.py:639 +msgid "" +"If recipe should be in all (AND=false) or any (OR=true) of the " +"provided books." +msgstr "" + +#: .\cookbook\views\api.py:640 +msgid "If only internal recipes should be returned. [true/false]" +msgstr "" + +#: .\cookbook\views\api.py:641 +msgid "Returns the results in randomized order. [true/false]" +msgstr "" + +#: .\cookbook\views\api.py:642 +msgid "Returns new results first in search results. [true/false]" +msgstr "" + +#: .\cookbook\views\api.py:768 +msgid "" +"Returns the shopping list entry with a primary key of id. Multiple values " +"allowed." +msgstr "" + +#: .\cookbook\views\api.py:771 +msgid "" +"Filter shopping list entries on checked. [true, false, both, recent]
- recent includes unchecked items and recently completed items." +msgstr "" + +#: .\cookbook\views\api.py:773 +msgid "Returns the shopping list entries sorted by supermarket category order." +msgstr "" + +#: .\cookbook\views\api.py:922 .\cookbook\views\data.py:42 #: .\cookbook\views\edit.py:129 .\cookbook\views\new.py:95 msgid "This feature is not yet available in the hosted version of tandoor!" msgstr "Diese Funktion ist in dieser Version von Tandoor noch nicht verfügbar!" -#: .\cookbook\views\api.py:745 +#: .\cookbook\views\api.py:944 msgid "Sync successful!" msgstr "Synchronisation erfolgreich!" -#: .\cookbook\views\api.py:750 +#: .\cookbook\views\api.py:949 msgid "Error synchronizing with Storage" msgstr "Fehler beim Synchronisieren" -#: .\cookbook\views\api.py:828 +#: .\cookbook\views\api.py:1028 msgid "Nothing to do." msgstr "Nichts zu tun." -#: .\cookbook\views\api.py:843 +#: .\cookbook\views\api.py:1043 msgid "The requested site provided malformed data and cannot be read." msgstr "" "Die angefragte Seite hat ungültige Daten zurückgegeben oder die Daten " "konnten nicht verarbeitet werden." -#: .\cookbook\views\api.py:850 +#: .\cookbook\views\api.py:1050 msgid "The requested page could not be found." msgstr "Die angefragte Seite konnte nicht gefunden werden." -#: .\cookbook\views\api.py:859 +#: .\cookbook\views\api.py:1068 msgid "" "The requested site does not provide any recognized data format to import the " "recipe from." msgstr "" "Die angefragte Seite stellt keine bekannten Datenformate zur Verfügung." -#: .\cookbook\views\api.py:873 +#: .\cookbook\views\api.py:1082 +msgid "Connection Refused." +msgstr "" + +#: .\cookbook\views\api.py:1091 msgid "No useable data could be found." msgstr "Es konnten keine nutzbaren Daten gefunden werden." -#: .\cookbook\views\api.py:889 +#: .\cookbook\views\api.py:1107 msgid "I couldn't find anything to do." msgstr "Ich konnte nichts zu tun finden." #: .\cookbook\views\data.py:34 .\cookbook\views\data.py:129 -#: .\cookbook\views\edit.py:49 .\cookbook\views\import_export.py:73 +#: .\cookbook\views\edit.py:49 .\cookbook\views\import_export.py:80 #: .\cookbook\views\new.py:33 msgid "You have reached the maximum number of recipes for your space." msgstr "Du hast die maximale Anzahl an Rezepten für Deinen Space erreicht." #: .\cookbook\views\data.py:38 .\cookbook\views\data.py:133 -#: .\cookbook\views\edit.py:53 .\cookbook\views\import_export.py:77 +#: .\cookbook\views\edit.py:53 .\cookbook\views\import_export.py:84 #: .\cookbook\views\new.py:37 msgid "You have more users than allowed in your space." msgstr "Du hast mehr Benutzer in Deinem Space als erlaubt." @@ -2660,7 +2931,7 @@ msgstr[1] "" msgid "Monitor" msgstr "Überwachen" -#: .\cookbook\views\delete.py:125 .\cookbook\views\lists.py:86 +#: .\cookbook\views\delete.py:125 .\cookbook\views\lists.py:71 #: .\cookbook\views\new.py:101 msgid "Storage Backend" msgstr "Speicherquelle" @@ -2680,7 +2951,7 @@ msgstr "Rezeptbuch" msgid "Bookmarks" msgstr "Lesezeichen" -#: .\cookbook\views\delete.py:192 .\cookbook\views\new.py:235 +#: .\cookbook\views\delete.py:192 .\cookbook\views\new.py:238 msgid "Invite Link" msgstr "Einladungslink" @@ -2704,38 +2975,44 @@ msgstr "Änderungen gespeichert!" msgid "Error saving changes!" msgstr "Fehler beim Speichern der Daten!" -#: .\cookbook\views\import_export.py:99 +#: .\cookbook\views\import_export.py:106 msgid "Importing is not implemented for this provider" msgstr "Importieren ist für diesen Anbieter noch nicht implementiert" -#: .\cookbook\views\import_export.py:121 +#: .\cookbook\views\import_export.py:127 +msgid "" +"The PDF Exporter is not enabled on this instance as it is still in an " +"experimental state." +msgstr "" + +#: .\cookbook\views\import_export.py:132 msgid "Exporting is not implemented for this provider" msgstr "Exportieren ist für diesen Anbieter noch nicht implementiert" -#: .\cookbook\views\lists.py:26 +#: .\cookbook\views\lists.py:25 msgid "Import Log" msgstr "Importverlauf" -#: .\cookbook\views\lists.py:39 +#: .\cookbook\views\lists.py:38 msgid "Discovery" msgstr "Entdecken" -#: .\cookbook\views\lists.py:69 +#: .\cookbook\views\lists.py:54 msgid "Shopping Lists" msgstr "Einkaufslisten" -#: .\cookbook\views\lists.py:129 -msgid "Foods" -msgstr "Lebensmittel" - -#: .\cookbook\views\lists.py:163 +#: .\cookbook\views\lists.py:148 msgid "Supermarkets" msgstr "Supermärkte" -#: .\cookbook\views\lists.py:179 +#: .\cookbook\views\lists.py:164 msgid "Shopping Categories" msgstr "Einkaufskategorien" +#: .\cookbook\views\lists.py:217 +msgid "Steps" +msgstr "Schritte" + #: .\cookbook\views\lists.py:232 msgid "New Shopping List" msgstr "Neue Einkaufsliste" @@ -2748,49 +3025,49 @@ msgstr "Neues Rezept importiert!" msgid "There was an error importing this recipe!" msgstr "Beim Importieren des Rezeptes ist ein Fehler aufgetreten!" -#: .\cookbook\views\new.py:209 +#: .\cookbook\views\new.py:212 msgid "Hello" msgstr "Hallo" -#: .\cookbook\views\new.py:209 +#: .\cookbook\views\new.py:212 msgid "You have been invited by " msgstr "Du wurdest eingeladen von " -#: .\cookbook\views\new.py:210 +#: .\cookbook\views\new.py:213 msgid " to join their Tandoor Recipes space " msgstr " um deren Tandoor Recipes Instanz beizutreten " -#: .\cookbook\views\new.py:211 +#: .\cookbook\views\new.py:214 msgid "Click the following link to activate your account: " msgstr "Klicke auf den folgenden Link, um deinen Account zu aktivieren: " -#: .\cookbook\views\new.py:212 +#: .\cookbook\views\new.py:215 msgid "" "If the link does not work use the following code to manually join the space: " msgstr "" "Falls der Link nicht funktioniert, benutze den folgenden Code um dem Space " "manuell beizutreten: " -#: .\cookbook\views\new.py:213 +#: .\cookbook\views\new.py:216 msgid "The invitation is valid until " msgstr "Die Einladung ist gültig bis " -#: .\cookbook\views\new.py:214 +#: .\cookbook\views\new.py:217 msgid "" "Tandoor Recipes is an Open Source recipe manager. Check it out on GitHub " msgstr "" "Tandoor Recipes ist ein Open-Source Rezept-Manager. Mehr Informationen sind " "auf GitHub zu finden " -#: .\cookbook\views\new.py:217 +#: .\cookbook\views\new.py:220 msgid "Tandoor Recipes Invite" msgstr "Tandoor Recipes Einladung" -#: .\cookbook\views\new.py:224 +#: .\cookbook\views\new.py:227 msgid "Invite link successfully send to user." msgstr "Einladungslink erfolgreich an Benutzer gesendet." -#: .\cookbook\views\new.py:227 +#: .\cookbook\views\new.py:230 msgid "" "You have send to many emails, please share the link manually or wait a few " "hours." @@ -2798,13 +3075,13 @@ msgstr "" "Du hast zu viele Email gesendet. Bitte teile den Link manuell oder warte ein " "paar Stunden." -#: .\cookbook\views\new.py:229 +#: .\cookbook\views\new.py:232 msgid "Email to user could not be send, please share link manually." msgstr "" "Email konnte an den Benutzer nicht gesendet werden. Bitte teile den Link " "manuell." -#: .\cookbook\views\views.py:127 +#: .\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." @@ -2812,24 +3089,24 @@ msgstr "" "Du hast erfolgreich deinen eigenen Rezept-Space erstellt. Beginne, indem Du " "ein paar Rezepte hinzufügst oder weitere Leute einlädst." -#: .\cookbook\views\views.py:175 +#: .\cookbook\views\views.py:174 msgid "You do not have the required permissions to perform this action!" msgstr "" "Du hast nicht die notwendige Berechtigung, um diese Aktion durchzuführen!" -#: .\cookbook\views\views.py:186 +#: .\cookbook\views\views.py:185 msgid "Comment saved!" msgstr "Kommentar gespeichert!" -#: .\cookbook\views\views.py:277 +#: .\cookbook\views\views.py:276 msgid "This feature is not available in the demo version!" msgstr "Diese Funktion ist in der Demo-Version nicht verfügbar!" -#: .\cookbook\views\views.py:340 +#: .\cookbook\views\views.py:335 msgid "You must select at least one field to search!" msgstr "Es muss mindestens ein Feld ausgewählt sein!" -#: .\cookbook\views\views.py:345 +#: .\cookbook\views\views.py:340 msgid "" "To use this search method you must select at least one full text search " "field!" @@ -2837,11 +3114,11 @@ msgstr "" "Um diese Suchmethode zu verwenden muss mindestens ein Feld für die " "Volltextsuche ausgewählt sein!" -#: .\cookbook\views\views.py:349 +#: .\cookbook\views\views.py:344 msgid "Fuzzy search is not compatible with this search method!" msgstr "Die \"Ungenaue\" Suche ist mit diesem Suchtyp nicht kompatibel!" -#: .\cookbook\views\views.py:452 +#: .\cookbook\views\views.py:470 msgid "" "The setup page can only be used to create the first user! If you have " "forgotten your superuser credentials please consult the django documentation " @@ -2850,33 +3127,33 @@ msgstr "" "Die Setup-Seite kann nur für den ersten Nutzer verwendet werden. Zum " "Zurücksetzen von Passwörtern bitte der Django-Dokumentation folgen." -#: .\cookbook\views\views.py:459 +#: .\cookbook\views\views.py:477 msgid "Passwords dont match!" msgstr "Passwörter stimmen nicht überein!" -#: .\cookbook\views\views.py:475 +#: .\cookbook\views\views.py:493 msgid "User has been created, please login!" msgstr "Benutzer wurde erstellt, bitte einloggen!" -#: .\cookbook\views\views.py:491 +#: .\cookbook\views\views.py:509 msgid "Malformed Invite Link supplied!" msgstr "Fehlerhafter Einladungslink angegeben!" -#: .\cookbook\views\views.py:498 +#: .\cookbook\views\views.py:516 msgid "You are already member of a space and therefore cannot join this one." msgstr "" "Du bist bereits Mitglied eines Space, daher kannst du diesem Space nicht " "beitreten." -#: .\cookbook\views\views.py:509 +#: .\cookbook\views\views.py:527 msgid "Successfully joined space." msgstr "Space erfolgreich beigetreten." -#: .\cookbook\views\views.py:515 +#: .\cookbook\views\views.py:533 msgid "Invite Link not valid or already used!" msgstr "Einladungslink ungültig oder bereits genutzt!" -#: .\cookbook\views\views.py:579 +#: .\cookbook\views\views.py:614 msgid "" "Reporting share links is not enabled for this instance. Please notify the " "page administrator to report problems." @@ -2884,7 +3161,7 @@ msgstr "" "Das melden von Links ist in dieser Instanz nicht aktiviert. Bitte " "kontaktieren sie den Seitenadministrator um Probleme zu melden." -#: .\cookbook\views\views.py:585 +#: .\cookbook\views\views.py:620 msgid "" "Recipe sharing link has been disabled! For additional information please " "contact the page administrator." @@ -2892,6 +3169,10 @@ msgstr "" "Dieser Link wurde deaktiviert! Bitte kontaktieren sie den " "Seitenadministrator für weitere Informationen." +#, python-brace-format +#~ msgid "No {self.basename} with id {child} exists" +#~ msgstr "Kein {self.basename} mit ID {child} existiert" + #~ msgid "New Unit" #~ msgstr "Neue Einheit" @@ -2913,9 +3194,6 @@ msgstr "" #~ msgid "Old Food" #~ msgstr "Alte Zutat" -#~ msgid "Food that should be replaced." -#~ msgstr "Zutat, die ersetzt werden soll." - #~ msgid "New Entry" #~ msgstr "Neuer Eintrag" @@ -3163,9 +3441,6 @@ msgstr "" #~ msgid "Delete Recipe" #~ msgstr "Rezept löschen" -#~ msgid "Steps" -#~ msgstr "Schritte" - #~ msgid "Password Settings" #~ msgstr "Passwort-Einstellungen" diff --git a/cookbook/locale/en/LC_MESSAGES/django.po b/cookbook/locale/en/LC_MESSAGES/django.po index a54b3fd40c..49ddcb0b93 100644 --- a/cookbook/locale/en/LC_MESSAGES/django.po +++ b/cookbook/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-08 16:27+0100\n" +"POT-Creation-Date: 2022-01-18 14:52+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,105 +18,106 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: .\cookbook\filters.py:23 .\cookbook\templates\base.html:125 -#: .\cookbook\templates\forms\ingredients.html:34 -#: .\cookbook\templates\space.html:43 .\cookbook\templates\stats.html:28 -#: .\cookbook\templates\url_import.html:274 +#: .\cookbook\filters.py:23 .\cookbook\templates\forms\ingredients.html:34 +#: .\cookbook\templates\space.html:50 .\cookbook\templates\stats.html:28 +#: .\cookbook\templates\url_import.html:277 msgid "Ingredients" msgstr "" -#: .\cookbook\forms.py:54 +#: .\cookbook\forms.py:56 msgid "Default unit" msgstr "" -#: .\cookbook\forms.py:55 +#: .\cookbook\forms.py:57 msgid "Use fractions" msgstr "" -#: .\cookbook\forms.py:56 +#: .\cookbook\forms.py:58 msgid "Use KJ" msgstr "" -#: .\cookbook\forms.py:57 +#: .\cookbook\forms.py:59 msgid "Theme" msgstr "" -#: .\cookbook\forms.py:58 +#: .\cookbook\forms.py:60 msgid "Navbar color" msgstr "" -#: .\cookbook\forms.py:59 +#: .\cookbook\forms.py:61 msgid "Sticky navbar" msgstr "" -#: .\cookbook\forms.py:60 +#: .\cookbook\forms.py:62 msgid "Default page" msgstr "" -#: .\cookbook\forms.py:61 +#: .\cookbook\forms.py:63 msgid "Show recent recipes" msgstr "" -#: .\cookbook\forms.py:62 +#: .\cookbook\forms.py:64 msgid "Search style" msgstr "" -#: .\cookbook\forms.py:63 +#: .\cookbook\forms.py:65 msgid "Plan sharing" msgstr "" -#: .\cookbook\forms.py:64 +#: .\cookbook\forms.py:66 msgid "Ingredient decimal places" msgstr "" -#: .\cookbook\forms.py:65 +#: .\cookbook\forms.py:67 msgid "Shopping list auto sync period" msgstr "" -#: .\cookbook\forms.py:66 .\cookbook\templates\recipe_view.html:21 -#: .\cookbook\templates\space.html:62 .\cookbook\templates\stats.html:47 +#: .\cookbook\forms.py:68 .\cookbook\templates\recipe_view.html:21 +#: .\cookbook\templates\space.html:77 .\cookbook\templates\stats.html:47 msgid "Comments" msgstr "" -#: .\cookbook\forms.py:70 +#: .\cookbook\forms.py:72 msgid "" "Color of the top navigation bar. Not all colors work with all themes, just " "try them out!" msgstr "" -#: .\cookbook\forms.py:72 +#: .\cookbook\forms.py:74 msgid "Default Unit to be used when inserting a new ingredient into a recipe." msgstr "" -#: .\cookbook\forms.py:74 +#: .\cookbook\forms.py:76 msgid "" "Enables support for fractions in ingredient amounts (e.g. convert decimals " "to fractions automatically)" msgstr "" -#: .\cookbook\forms.py:76 +#: .\cookbook\forms.py:78 msgid "Display nutritional energy amounts in joules instead of calories" msgstr "" -#: .\cookbook\forms.py:78 -msgid "" -"Users with whom newly created meal plan/shopping list entries should be " -"shared by default." +#: .\cookbook\forms.py:79 +msgid "Users with whom newly created meal plans should be shared by default." msgstr "" #: .\cookbook\forms.py:80 +msgid "Users with whom to share shopping lists." +msgstr "" + +#: .\cookbook\forms.py:82 msgid "Show recently viewed recipes on search page." msgstr "" -#: .\cookbook\forms.py:81 +#: .\cookbook\forms.py:83 msgid "Number of decimals to round ingredients." msgstr "" -#: .\cookbook\forms.py:82 +#: .\cookbook\forms.py:84 msgid "If you want to be able to create and see comments underneath recipes." msgstr "" -#: .\cookbook\forms.py:84 +#: .\cookbook\forms.py:86 .\cookbook\forms.py:493 msgid "" "Setting to 0 will disable auto sync. When viewing a shopping list the list " "is updated every set seconds to sync changes someone else might have made. " @@ -124,200 +125,310 @@ msgid "" "mobile data. If lower than instance limit it is reset when saving." msgstr "" -#: .\cookbook\forms.py:87 +#: .\cookbook\forms.py:89 msgid "Makes the navbar stick to the top of the page." msgstr "" -#: .\cookbook\forms.py:103 +#: .\cookbook\forms.py:90 .\cookbook\forms.py:496 +msgid "Automatically add meal plan ingredients to shopping list." +msgstr "" + +#: .\cookbook\forms.py:91 +msgid "Exclude ingredients that are on hand." +msgstr "" + +#: .\cookbook\forms.py:108 msgid "" "Both fields are optional. If none are given the username will be displayed " "instead" msgstr "" -#: .\cookbook\forms.py:124 .\cookbook\forms.py:289 -#: .\cookbook\templates\url_import.html:158 +#: .\cookbook\forms.py:129 .\cookbook\forms.py:298 +#: .\cookbook\templates\url_import.html:161 msgid "Name" msgstr "" -#: .\cookbook\forms.py:125 .\cookbook\forms.py:290 -#: .\cookbook\templates\space.html:39 .\cookbook\templates\stats.html:24 -#: .\cookbook\templates\url_import.html:192 -#: .\cookbook\templates\url_import.html:578 .\cookbook\views\lists.py:112 +#: .\cookbook\forms.py:130 .\cookbook\forms.py:299 +#: .\cookbook\templates\space.html:44 .\cookbook\templates\stats.html:24 +#: .\cookbook\templates\url_import.html:195 +#: .\cookbook\templates\url_import.html:585 .\cookbook\views\lists.py:97 msgid "Keywords" msgstr "" -#: .\cookbook\forms.py:126 +#: .\cookbook\forms.py:131 msgid "Preparation time in minutes" msgstr "" -#: .\cookbook\forms.py:127 +#: .\cookbook\forms.py:132 msgid "Waiting time (cooking/baking) in minutes" msgstr "" -#: .\cookbook\forms.py:128 .\cookbook\forms.py:259 .\cookbook\forms.py:291 +#: .\cookbook\forms.py:133 .\cookbook\forms.py:267 .\cookbook\forms.py:300 msgid "Path" msgstr "" -#: .\cookbook\forms.py:129 +#: .\cookbook\forms.py:134 msgid "Storage UID" msgstr "" -#: .\cookbook\forms.py:157 +#: .\cookbook\forms.py:164 msgid "Default" msgstr "" -#: .\cookbook\forms.py:168 .\cookbook\templates\url_import.html:94 +#: .\cookbook\forms.py:175 .\cookbook\templates\url_import.html:97 msgid "" "To prevent duplicates recipes with the same name as existing ones are " "ignored. Check this box to import everything." msgstr "" -#: .\cookbook\forms.py:190 +#: .\cookbook\forms.py:197 msgid "Add your comment: " msgstr "" -#: .\cookbook\forms.py:205 +#: .\cookbook\forms.py:212 msgid "Leave empty for dropbox and enter app password for nextcloud." msgstr "" -#: .\cookbook\forms.py:212 +#: .\cookbook\forms.py:219 msgid "Leave empty for nextcloud and enter api token for dropbox." msgstr "" -#: .\cookbook\forms.py:221 +#: .\cookbook\forms.py:228 msgid "" "Leave empty for dropbox and enter only base url for nextcloud (/remote." "php/webdav/ is added automatically)" msgstr "" -#: .\cookbook\forms.py:258 .\cookbook\views\edit.py:166 +#: .\cookbook\forms.py:266 .\cookbook\views\edit.py:166 msgid "Storage" msgstr "" -#: .\cookbook\forms.py:260 +#: .\cookbook\forms.py:268 msgid "Active" msgstr "" -#: .\cookbook\forms.py:265 +#: .\cookbook\forms.py:274 msgid "Search String" msgstr "" -#: .\cookbook\forms.py:292 +#: .\cookbook\forms.py:301 msgid "File ID" msgstr "" -#: .\cookbook\forms.py:313 +#: .\cookbook\forms.py:323 msgid "You must provide at least a recipe or a title." msgstr "" -#: .\cookbook\forms.py:326 +#: .\cookbook\forms.py:336 msgid "You can list default users to share recipes with in the settings." msgstr "" -#: .\cookbook\forms.py:327 +#: .\cookbook\forms.py:337 msgid "" "You can use markdown to format this field. See the docs here" msgstr "" -#: .\cookbook\forms.py:353 +#: .\cookbook\forms.py:363 msgid "Maximum number of users for this space reached." msgstr "" -#: .\cookbook\forms.py:359 +#: .\cookbook\forms.py:369 msgid "Email address already taken!" msgstr "" -#: .\cookbook\forms.py:367 +#: .\cookbook\forms.py:377 msgid "" "An email address is not required but if present the invite link will be sent " "to the user." msgstr "" -#: .\cookbook\forms.py:382 +#: .\cookbook\forms.py:392 msgid "Name already taken." msgstr "" -#: .\cookbook\forms.py:393 +#: .\cookbook\forms.py:403 msgid "Accept Terms and Privacy" msgstr "" -#: .\cookbook\forms.py:425 +#: .\cookbook\forms.py:435 msgid "" "Determines how fuzzy a search is if it uses trigram similarity matching (e." "g. low values mean more typos are ignored)." msgstr "" -#: .\cookbook\forms.py:435 +#: .\cookbook\forms.py:445 msgid "" "Select type method of search. Click here for " "full desciption of choices." msgstr "" -#: .\cookbook\forms.py:436 +#: .\cookbook\forms.py:446 msgid "" "Use fuzzy matching on units, keywords and ingredients when editing and " "importing recipes." msgstr "" -#: .\cookbook\forms.py:438 +#: .\cookbook\forms.py:448 msgid "" "Fields to search ignoring accents. Selecting this option can improve or " "degrade search quality depending on language" msgstr "" -#: .\cookbook\forms.py:440 +#: .\cookbook\forms.py:450 msgid "" "Fields to search for partial matches. (e.g. searching for 'Pie' will return " "'pie' and 'piece' and 'soapie')" msgstr "" -#: .\cookbook\forms.py:442 +#: .\cookbook\forms.py:452 msgid "" "Fields to search for beginning of word matches. (e.g. searching for 'sa' " "will return 'salad' and 'sandwich')" msgstr "" -#: .\cookbook\forms.py:444 +#: .\cookbook\forms.py:454 msgid "" "Fields to 'fuzzy' search. (e.g. searching for 'recpie' will find 'recipe'.) " "Note: this option will conflict with 'web' and 'raw' methods of search." msgstr "" -#: .\cookbook\forms.py:446 +#: .\cookbook\forms.py:456 msgid "" "Fields to full text search. Note: 'web', 'phrase', and 'raw' search methods " "only function with fulltext fields." msgstr "" -#: .\cookbook\forms.py:450 +#: .\cookbook\forms.py:460 msgid "Search Method" msgstr "" -#: .\cookbook\forms.py:451 +#: .\cookbook\forms.py:461 msgid "Fuzzy Lookups" msgstr "" -#: .\cookbook\forms.py:452 +#: .\cookbook\forms.py:462 msgid "Ignore Accent" msgstr "" -#: .\cookbook\forms.py:453 +#: .\cookbook\forms.py:463 msgid "Partial Match" msgstr "" -#: .\cookbook\forms.py:454 +#: .\cookbook\forms.py:464 msgid "Starts Wtih" msgstr "" -#: .\cookbook\forms.py:455 +#: .\cookbook\forms.py:465 msgid "Fuzzy Search" msgstr "" -#: .\cookbook\forms.py:456 +#: .\cookbook\forms.py:466 msgid "Full Text" msgstr "" +#: .\cookbook\forms.py:491 +msgid "" +"Users will see all items you add to your shopping list. They must add you " +"to see items on their list." +msgstr "" + +#: .\cookbook\forms.py:497 +msgid "" +"When adding a meal plan to the shopping list (manually or automatically), " +"include all related recipes." +msgstr "" + +#: .\cookbook\forms.py:498 +msgid "" +"When adding a meal plan to the shopping list (manually or automatically), " +"exclude ingredients that are on hand." +msgstr "" + +#: .\cookbook\forms.py:499 +msgid "Default number of hours to delay a shopping list entry." +msgstr "" + +#: .\cookbook\forms.py:500 +msgid "Filter shopping list to only include supermarket categories." +msgstr "" + +#: .\cookbook\forms.py:501 +msgid "Days of recent shopping list entries to display." +msgstr "" + +#: .\cookbook\forms.py:502 +msgid "Mark food 'On Hand' when checked off shopping list." +msgstr "" + +#: .\cookbook\forms.py:503 +msgid "Delimiter to use for CSV exports." +msgstr "" + +#: .\cookbook\forms.py:504 +msgid "Prefix to add when copying list to the clipboard." +msgstr "" + +#: .\cookbook\forms.py:508 +msgid "Share Shopping List" +msgstr "" + +#: .\cookbook\forms.py:509 +msgid "Autosync" +msgstr "" + +#: .\cookbook\forms.py:510 +msgid "Auto Add Meal Plan" +msgstr "" + +#: .\cookbook\forms.py:511 +msgid "Exclude On Hand" +msgstr "" + +#: .\cookbook\forms.py:512 +msgid "Include Related" +msgstr "" + +#: .\cookbook\forms.py:513 +msgid "Default Delay Hours" +msgstr "" + +#: .\cookbook\forms.py:514 +msgid "Filter to Supermarket" +msgstr "" + +#: .\cookbook\forms.py:515 +msgid "Recent Days" +msgstr "" + +#: .\cookbook\forms.py:516 +msgid "CSV Delimiter" +msgstr "" + +#: .\cookbook\forms.py:517 .\cookbook\templates\shopping_list.html:322 +msgid "List Prefix" +msgstr "" + +#: .\cookbook\forms.py:518 +msgid "Auto On Hand" +msgstr "" + +#: .\cookbook\forms.py:528 +msgid "Reset Food Inheritance" +msgstr "" + +#: .\cookbook\forms.py:529 +msgid "Reset all food to inherit the fields configured." +msgstr "" + +#: .\cookbook\forms.py:541 +msgid "Fields on food that should be inherited by default." +msgstr "" + +#: .\cookbook\forms.py:542 +msgid "Show recipe counts on search filters" +msgstr "" + #: .\cookbook\helper\AllAuthCustomAdapter.py:36 msgid "" "In order to prevent spam, the requested email was not send. Please wait a " @@ -325,19 +436,19 @@ msgid "" msgstr "" #: .\cookbook\helper\permission_helper.py:136 -#: .\cookbook\helper\permission_helper.py:159 .\cookbook\views\views.py:149 +#: .\cookbook\helper\permission_helper.py:159 .\cookbook\views\views.py:148 msgid "You are not logged in and therefore cannot view this page!" msgstr "" #: .\cookbook\helper\permission_helper.py:140 #: .\cookbook\helper\permission_helper.py:146 #: .\cookbook\helper\permission_helper.py:171 -#: .\cookbook\helper\permission_helper.py:216 -#: .\cookbook\helper\permission_helper.py:230 -#: .\cookbook\helper\permission_helper.py:241 -#: .\cookbook\helper\permission_helper.py:252 .\cookbook\views\data.py:47 -#: .\cookbook\views\views.py:160 .\cookbook\views\views.py:167 -#: .\cookbook\views\views.py:233 +#: .\cookbook\helper\permission_helper.py:219 +#: .\cookbook\helper\permission_helper.py:233 +#: .\cookbook\helper\permission_helper.py:244 +#: .\cookbook\helper\permission_helper.py:255 .\cookbook\views\data.py:47 +#: .\cookbook\views\views.py:159 .\cookbook\views\views.py:166 +#: .\cookbook\views\views.py:232 msgid "You do not have the required permissions to view this page!" msgstr "" @@ -347,41 +458,40 @@ msgstr "" msgid "You cannot interact with this object as it is not owned by you!" msgstr "" +#: .\cookbook\helper\recipe_search.py:473 +msgid "One of queryset or hash_key must be provided" +msgstr "" + +#: .\cookbook\helper\shopping_helper.py:54 +msgid "You must supply a recipe or mealplan" +msgstr "" + +#: .\cookbook\helper\shopping_helper.py:58 +msgid "You must supply a created_by" +msgstr "" + #: .\cookbook\helper\template_helper.py:61 #: .\cookbook\helper\template_helper.py:63 msgid "Could not parse template code." msgstr "" -#: .\cookbook\integration\integration.py:126 -#: .\cookbook\templates\import.html:14 .\cookbook\templates\import.html:20 -#: .\cookbook\templates\import_response.html:7 -#: .\cookbook\templates\test.html:14 .\cookbook\templates\test.html:20 -#: .\cookbook\templates\url_import.html:27 -#: .\cookbook\templates\url_import.html:105 -#: .\cookbook\templates\url_import.html:127 -#: .\cookbook\templates\url_import.html:321 -#: .\cookbook\templates\url_import.html:609 .\cookbook\views\delete.py:89 -#: .\cookbook\views\edit.py:200 -msgid "Import" -msgstr "" - -#: .\cookbook\integration\integration.py:208 +#: .\cookbook\integration\integration.py:200 msgid "" "Importer expected a .zip file. Did you choose the correct importer type for " "your data ?" msgstr "" -#: .\cookbook\integration\integration.py:211 +#: .\cookbook\integration\integration.py:203 msgid "" "An unexpected error occurred during the import. Please make sure you have " "uploaded a valid file." msgstr "" -#: .\cookbook\integration\integration.py:216 +#: .\cookbook\integration\integration.py:208 msgid "The following recipes were ignored because they already existed:" msgstr "" -#: .\cookbook\integration\integration.py:220 +#: .\cookbook\integration\integration.py:212 #, python-format msgid "Imported %s recipes." msgstr "" @@ -394,32 +504,32 @@ msgstr "" msgid "Nutritional Information" msgstr "" -#: .\cookbook\integration\paprika.py:53 .\cookbook\templates\url_import.html:40 +#: .\cookbook\integration\paprika.py:53 .\cookbook\templates\url_import.html:42 msgid "Source" msgstr "" -#: .\cookbook\integration\safron.py:23 -#: .\cookbook\templates\include\log_cooking.html:16 -#: .\cookbook\templates\url_import.html:228 -#: .\cookbook\templates\url_import.html:459 +#: .\cookbook\integration\saffron.py:23 +#: .\cookbook\templates\include\log_cooking.html:18 +#: .\cookbook\templates\url_import.html:231 +#: .\cookbook\templates\url_import.html:462 msgid "Servings" msgstr "" -#: .\cookbook\integration\safron.py:25 +#: .\cookbook\integration\saffron.py:25 msgid "Waiting time" msgstr "" -#: .\cookbook\integration\safron.py:27 +#: .\cookbook\integration\saffron.py:27 msgid "Preparation Time" msgstr "" -#: .\cookbook\integration\safron.py:29 .\cookbook\templates\base.html:78 +#: .\cookbook\integration\saffron.py:29 .\cookbook\templates\base.html:78 #: .\cookbook\templates\forms\ingredients.html:7 #: .\cookbook\templates\index.html:7 msgid "Cookbook" msgstr "" -#: .\cookbook\integration\safron.py:31 +#: .\cookbook\integration\saffron.py:31 msgid "Section" msgstr "" @@ -455,105 +565,136 @@ msgstr "" msgid "Other" msgstr "" -#: .\cookbook\models.py:150 +#: .\cookbook\models.py:246 msgid "" "Maximum file storage for space in MB. 0 for unlimited, -1 to disable file " "upload." msgstr "" -#: .\cookbook\models.py:202 .\cookbook\templates\search.html:7 -#: .\cookbook\templates\shopping_list.html:59 +#: .\cookbook\models.py:300 .\cookbook\templates\search.html:7 +#: .\cookbook\templates\shopping_list.html:53 msgid "Search" msgstr "" -#: .\cookbook\models.py:203 .\cookbook\templates\base.html:82 +#: .\cookbook\models.py:301 .\cookbook\templates\base.html:82 #: .\cookbook\templates\meal_plan.html:7 #: .\cookbook\templates\meal_plan_new.html:7 .\cookbook\views\delete.py:181 #: .\cookbook\views\edit.py:220 .\cookbook\views\new.py:184 msgid "Meal-Plan" msgstr "" -#: .\cookbook\models.py:204 .\cookbook\templates\base.html:90 +#: .\cookbook\models.py:302 .\cookbook\templates\base.html:90 msgid "Books" msgstr "" -#: .\cookbook\models.py:212 +#: .\cookbook\models.py:310 msgid "Small" msgstr "" -#: .\cookbook\models.py:212 +#: .\cookbook\models.py:310 msgid "Large" msgstr "" -#: .\cookbook\models.py:212 .\cookbook\templates\generic\new_template.html:6 +#: .\cookbook\models.py:310 .\cookbook\templates\generic\new_template.html:6 #: .\cookbook\templates\generic\new_template.html:14 msgid "New" msgstr "" -#: .\cookbook\models.py:396 +#: .\cookbook\models.py:512 msgid " is part of a recipe step and cannot be deleted" msgstr "" -#: .\cookbook\models.py:441 .\cookbook\templates\url_import.html:42 +#: .\cookbook\models.py:586 .\cookbook\templates\url_import.html:44 msgid "Text" msgstr "" -#: .\cookbook\models.py:441 +#: .\cookbook\models.py:586 msgid "Time" msgstr "" -#: .\cookbook\models.py:441 .\cookbook\templates\url_import.html:44 +#: .\cookbook\models.py:586 .\cookbook\templates\url_import.html:46 msgid "File" msgstr "" -#: .\cookbook\models.py:441 +#: .\cookbook\models.py:586 #: .\cookbook\templates\include\recipe_open_modal.html:7 #: .\cookbook\views\delete.py:39 .\cookbook\views\edit.py:260 #: .\cookbook\views\new.py:53 msgid "Recipe" msgstr "" -#: .\cookbook\models.py:871 .\cookbook\templates\search_info.html:28 +#: .\cookbook\models.py:1041 .\cookbook\templates\search_info.html:28 msgid "Simple" msgstr "" -#: .\cookbook\models.py:872 .\cookbook\templates\search_info.html:33 +#: .\cookbook\models.py:1042 .\cookbook\templates\search_info.html:33 msgid "Phrase" msgstr "" -#: .\cookbook\models.py:873 .\cookbook\templates\search_info.html:38 +#: .\cookbook\models.py:1043 .\cookbook\templates\search_info.html:38 msgid "Web" msgstr "" -#: .\cookbook\models.py:874 .\cookbook\templates\search_info.html:47 +#: .\cookbook\models.py:1044 .\cookbook\templates\search_info.html:47 msgid "Raw" msgstr "" -#: .\cookbook\models.py:912 +#: .\cookbook\models.py:1082 msgid "Food Alias" msgstr "" -#: .\cookbook\models.py:912 +#: .\cookbook\models.py:1082 msgid "Unit Alias" msgstr "" -#: .\cookbook\models.py:912 +#: .\cookbook\models.py:1082 msgid "Keyword Alias" msgstr "" -#: .\cookbook\serializer.py:157 +#: .\cookbook\serializer.py:175 +msgid "A user is required" +msgstr "" + +#: .\cookbook\serializer.py:195 msgid "File uploads are not enabled for this Space." msgstr "" -#: .\cookbook\serializer.py:168 +#: .\cookbook\serializer.py:206 msgid "You have reached your file upload limit." msgstr "" +#: .\cookbook\serializer.py:962 +msgid "Existing shopping list to update" +msgstr "" + +#: .\cookbook\serializer.py:964 +msgid "" +"List of ingredient IDs from the recipe to add, if not provided all " +"ingredients will be added." +msgstr "" + +#: .\cookbook\serializer.py:965 +msgid "" +"Providing a list_recipe ID and servings of 0 will delete that shopping list." +msgstr "" + +#: .\cookbook\serializer.py:973 +msgid "Amount of food to add to the shopping list" +msgstr "" + +#: .\cookbook\serializer.py:974 +msgid "ID of unit to use for the shopping list" +msgstr "" + +#: .\cookbook\serializer.py:975 +msgid "When set to true will delete all food from active shopping lists." +msgstr "" + #: .\cookbook\tables.py:35 .\cookbook\templates\generic\edit_template.html:6 #: .\cookbook\templates\generic\edit_template.html:14 #: .\cookbook\templates\recipes_table.html:82 -#: .\cookbook\templates\shopping_list.html:40 -#: .\cookbook\templates\space.html:90 +#: .\cookbook\templates\shopping_list.html:37 +#: .\cookbook\templates\space.html:109 msgid "Edit" msgstr "" @@ -689,27 +830,27 @@ msgstr "" msgid "Sign In" msgstr "" -#: .\cookbook\templates\account\login.html:32 +#: .\cookbook\templates\account\login.html:34 #: .\cookbook\templates\socialaccount\signup.html:8 #: .\cookbook\templates\socialaccount\signup.html:57 msgid "Sign Up" msgstr "" -#: .\cookbook\templates\account\login.html:36 -#: .\cookbook\templates\account\login.html:37 +#: .\cookbook\templates\account\login.html:39 +#: .\cookbook\templates\account\login.html:41 #: .\cookbook\templates\account\password_reset.html:29 msgid "Reset My Password" msgstr "" -#: .\cookbook\templates\account\login.html:37 +#: .\cookbook\templates\account\login.html:40 msgid "Lost your password?" msgstr "" -#: .\cookbook\templates\account\login.html:48 +#: .\cookbook\templates\account\login.html:52 msgid "Social Login" msgstr "" -#: .\cookbook\templates\account\login.html:49 +#: .\cookbook\templates\account\login.html:53 msgid "You can use any of the following providers to sign in." msgstr "" @@ -735,7 +876,7 @@ msgstr "" #: .\cookbook\templates\account\password_change.html:12 #: .\cookbook\templates\account\password_set.html:12 -#: .\cookbook\templates\settings.html:69 +#: .\cookbook\templates\settings.html:76 msgid "Password" msgstr "" @@ -852,15 +993,19 @@ msgstr "" msgid "Keyword" msgstr "" +#: .\cookbook\templates\base.html:125 .\cookbook\views\lists.py:114 +msgid "Foods" +msgstr "" + #: .\cookbook\templates\base.html:137 #: .\cookbook\templates\forms\ingredients.html:24 -#: .\cookbook\templates\space.html:41 .\cookbook\templates\stats.html:26 -#: .\cookbook\views\lists.py:146 +#: .\cookbook\templates\space.html:47 .\cookbook\templates\stats.html:26 +#: .\cookbook\views\lists.py:131 msgid "Units" msgstr "" #: .\cookbook\templates\base.html:151 -#: .\cookbook\templates\shopping_list.html:237 +#: .\cookbook\templates\shopping_list.html:208 #: .\cookbook\templates\supermarket.html:7 msgid "Supermarket" msgstr "" @@ -869,11 +1014,11 @@ msgstr "" msgid "Supermarket Category" msgstr "" -#: .\cookbook\templates\base.html:175 .\cookbook\views\lists.py:195 +#: .\cookbook\templates\base.html:175 .\cookbook\views\lists.py:180 msgid "Automations" msgstr "" -#: .\cookbook\templates\base.html:189 .\cookbook\views\lists.py:215 +#: .\cookbook\templates\base.html:189 .\cookbook\views\lists.py:200 msgid "Files" msgstr "" @@ -888,7 +1033,7 @@ msgstr "" #: .\cookbook\templates\base.html:228 .\cookbook\templates\export.html:14 #: .\cookbook\templates\export.html:20 -#: .\cookbook\templates\shopping_list.html:358 +#: .\cookbook\templates\shopping_list.html:310 #: .\cookbook\templates\test2.html:14 .\cookbook\templates\test2.html:20 msgid "Export" msgstr "" @@ -898,19 +1043,19 @@ msgid "Import Recipe" msgstr "" #: .\cookbook\templates\base.html:246 -#: .\cookbook\templates\shopping_list.html:195 -#: .\cookbook\templates\shopping_list.html:217 +#: .\cookbook\templates\shopping_list.html:165 +#: .\cookbook\templates\shopping_list.html:188 msgid "Create" msgstr "" #: .\cookbook\templates\base.html:259 #: .\cookbook\templates\generic\list_template.html:14 -#: .\cookbook\templates\space.html:58 .\cookbook\templates\stats.html:43 +#: .\cookbook\templates\space.html:69 .\cookbook\templates\stats.html:43 msgid "External Recipes" msgstr "" -#: .\cookbook\templates\base.html:262 .\cookbook\templates\space.html:7 -#: .\cookbook\templates\space.html:19 +#: .\cookbook\templates\base.html:262 .\cookbook\templates\space.html:8 +#: .\cookbook\templates\space.html:20 .\cookbook\templates\space.html:150 msgid "Space Settings" msgstr "" @@ -976,11 +1121,13 @@ msgstr "" #: .\cookbook\templates\forms\edit_import_recipe.html:14 #: .\cookbook\templates\generic\edit_template.html:23 #: .\cookbook\templates\generic\new_template.html:23 -#: .\cookbook\templates\include\log_cooking.html:28 -#: .\cookbook\templates\settings.html:63 .\cookbook\templates\settings.html:105 -#: .\cookbook\templates\settings.html:123 -#: .\cookbook\templates\settings.html:195 -#: .\cookbook\templates\shopping_list.html:360 +#: .\cookbook\templates\include\log_cooking.html:30 +#: .\cookbook\templates\settings.html:70 .\cookbook\templates\settings.html:112 +#: .\cookbook\templates\settings.html:130 +#: .\cookbook\templates\settings.html:202 +#: .\cookbook\templates\settings.html:213 +#: .\cookbook\templates\shopping_list.html:311 +#: .\cookbook\templates\space.html:155 msgid "Save" msgstr "" @@ -1082,15 +1229,20 @@ msgid "Delete original file" msgstr "" #: .\cookbook\templates\generic\list_template.html:6 -#: .\cookbook\templates\generic\list_template.html:21 +#: .\cookbook\templates\generic\list_template.html:22 msgid "List" msgstr "" -#: .\cookbook\templates\generic\list_template.html:34 +#: .\cookbook\templates\generic\list_template.html:33 +#: .\cookbook\templates\shopping_list.html:33 +msgid "Try the new shopping list" +msgstr "" + +#: .\cookbook\templates\generic\list_template.html:45 msgid "Filter" msgstr "" -#: .\cookbook\templates\generic\list_template.html:39 +#: .\cookbook\templates\generic\list_template.html:50 msgid "Import all" msgstr "" @@ -1116,19 +1268,31 @@ msgstr "" msgid "Import Recipes" msgstr "" -#: .\cookbook\templates\include\log_cooking.html:7 +#: .\cookbook\templates\import.html:14 .\cookbook\templates\import.html:20 +#: .\cookbook\templates\import_response.html:7 +#: .\cookbook\templates\test.html:14 .\cookbook\templates\test.html:20 +#: .\cookbook\templates\url_import.html:29 +#: .\cookbook\templates\url_import.html:108 +#: .\cookbook\templates\url_import.html:130 +#: .\cookbook\templates\url_import.html:324 +#: .\cookbook\templates\url_import.html:618 .\cookbook\views\delete.py:89 +#: .\cookbook\views\edit.py:200 +msgid "Import" +msgstr "" + +#: .\cookbook\templates\include\log_cooking.html:9 msgid "Log Recipe Cooking" msgstr "" -#: .\cookbook\templates\include\log_cooking.html:13 +#: .\cookbook\templates\include\log_cooking.html:15 msgid "All fields are optional and can be left empty." msgstr "" -#: .\cookbook\templates\include\log_cooking.html:19 +#: .\cookbook\templates\include\log_cooking.html:21 msgid "Rating" msgstr "" -#: .\cookbook\templates\include\log_cooking.html:27 +#: .\cookbook\templates\include\log_cooking.html:29 #: .\cookbook\templates\include\recipe_open_modal.html:18 msgid "Close" msgstr "" @@ -1174,7 +1338,7 @@ msgstr "" msgid "Last viewed" msgstr "" -#: .\cookbook\templates\index.html:87 .\cookbook\templates\space.html:35 +#: .\cookbook\templates\index.html:87 .\cookbook\templates\space.html:37 #: .\cookbook\templates\stats.html:22 msgid "Recipes" msgstr "" @@ -1327,7 +1491,7 @@ msgid "Created by" msgstr "" #: .\cookbook\templates\meal_plan_entry.html:20 -#: .\cookbook\templates\shopping_list.html:261 +#: .\cookbook\templates\shopping_list.html:232 msgid "Shared with" msgstr "" @@ -1438,17 +1602,17 @@ msgstr "" #: .\cookbook\templates\recipes_table.html:19 #: .\cookbook\templates\recipes_table.html:23 -#: .\cookbook\templates\url_import.html:444 +#: .\cookbook\templates\url_import.html:447 msgid "Recipe Image" msgstr "" #: .\cookbook\templates\recipes_table.html:51 -#: .\cookbook\templates\url_import.html:449 +#: .\cookbook\templates\url_import.html:452 msgid "Preparation time ca." msgstr "" #: .\cookbook\templates\recipes_table.html:57 -#: .\cookbook\templates\url_import.html:454 +#: .\cookbook\templates\url_import.html:457 msgid "Waiting time ca." msgstr "" @@ -1466,7 +1630,7 @@ msgstr "" #: .\cookbook\templates\search_info.html:5 #: .\cookbook\templates\search_info.html:9 -#: .\cookbook\templates\settings.html:165 +#: .\cookbook\templates\settings.html:172 msgid "Search Settings" msgstr "" @@ -1637,103 +1801,111 @@ msgstr "" msgid "Search-Settings" msgstr "" -#: .\cookbook\templates\settings.html:58 +#: .\cookbook\templates\settings.html:56 +msgid "Shopping-Settings" +msgstr "" + +#: .\cookbook\templates\settings.html:65 msgid "Name Settings" msgstr "" -#: .\cookbook\templates\settings.html:66 +#: .\cookbook\templates\settings.html:73 msgid "Account Settings" msgstr "" -#: .\cookbook\templates\settings.html:68 +#: .\cookbook\templates\settings.html:75 msgid "Emails" msgstr "" -#: .\cookbook\templates\settings.html:71 +#: .\cookbook\templates\settings.html:78 #: .\cookbook\templates\socialaccount\connections.html:11 msgid "Social" msgstr "" -#: .\cookbook\templates\settings.html:84 +#: .\cookbook\templates\settings.html:91 msgid "Language" msgstr "" -#: .\cookbook\templates\settings.html:114 +#: .\cookbook\templates\settings.html:121 msgid "Style" msgstr "" -#: .\cookbook\templates\settings.html:135 +#: .\cookbook\templates\settings.html:142 msgid "API Token" msgstr "" -#: .\cookbook\templates\settings.html:136 +#: .\cookbook\templates\settings.html:143 msgid "" "You can use both basic authentication and token based authentication to " "access the REST API." msgstr "" -#: .\cookbook\templates\settings.html:153 +#: .\cookbook\templates\settings.html:160 msgid "" "Use the token as an Authorization header prefixed by the word token as shown " "in the following examples:" msgstr "" -#: .\cookbook\templates\settings.html:155 +#: .\cookbook\templates\settings.html:162 msgid "or" msgstr "" -#: .\cookbook\templates\settings.html:166 +#: .\cookbook\templates\settings.html:173 msgid "" "There are many options to configure the search depending on your personal " "preferences." msgstr "" -#: .\cookbook\templates\settings.html:167 +#: .\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 "" -#: .\cookbook\templates\settings.html:168 +#: .\cookbook\templates\settings.html:175 msgid "" "If you do want to configure the search you can read about the different " "options here." msgstr "" -#: .\cookbook\templates\settings.html:173 +#: .\cookbook\templates\settings.html:180 msgid "Fuzzy" msgstr "" -#: .\cookbook\templates\settings.html:174 +#: .\cookbook\templates\settings.html:181 msgid "" "Find what you need even if your search or the recipe contains typos. Might " "return more results than needed to make sure you find what you are looking " "for." msgstr "" -#: .\cookbook\templates\settings.html:175 +#: .\cookbook\templates\settings.html:182 msgid "This is the default behavior" msgstr "" -#: .\cookbook\templates\settings.html:176 -#: .\cookbook\templates\settings.html:184 +#: .\cookbook\templates\settings.html:183 +#: .\cookbook\templates\settings.html:191 msgid "Apply" msgstr "" -#: .\cookbook\templates\settings.html:181 +#: .\cookbook\templates\settings.html:188 msgid "Precise" msgstr "" -#: .\cookbook\templates\settings.html:182 +#: .\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 "" -#: .\cookbook\templates\settings.html:183 +#: .\cookbook\templates\settings.html:190 msgid "Perfect for large Databases" msgstr "" +#: .\cookbook\templates\settings.html:207 +msgid "Shopping Settings" +msgstr "" + #: .\cookbook\templates\setup.html:6 .\cookbook\templates\system.html:5 msgid "Cookbook Setup" msgstr "" @@ -1751,81 +1923,73 @@ msgstr "" msgid "Create Superuser account" msgstr "" -#: .\cookbook\templates\shopping_list.html:7 +#: .\cookbook\templates\shopping_list.html:8 #: .\cookbook\templates\shopping_list.html:29 -#: .\cookbook\templates\shopping_list.html:721 +#: .\cookbook\templates\shopping_list.html:663 msgid "Shopping List" msgstr "" -#: .\cookbook\templates\shopping_list.html:34 -msgid "Try the new shopping list" -msgstr "" - -#: .\cookbook\templates\shopping_list.html:63 +#: .\cookbook\templates\shopping_list.html:55 msgid "Search Recipe" msgstr "" -#: .\cookbook\templates\shopping_list.html:86 +#: .\cookbook\templates\shopping_list.html:72 msgid "Shopping Recipes" msgstr "" -#: .\cookbook\templates\shopping_list.html:90 +#: .\cookbook\templates\shopping_list.html:74 msgid "No recipes selected" msgstr "" -#: .\cookbook\templates\shopping_list.html:157 +#: .\cookbook\templates\shopping_list.html:131 msgid "Entry Mode" msgstr "" -#: .\cookbook\templates\shopping_list.html:165 +#: .\cookbook\templates\shopping_list.html:139 msgid "Add Entry" msgstr "" -#: .\cookbook\templates\shopping_list.html:181 +#: .\cookbook\templates\shopping_list.html:152 msgid "Amount" msgstr "" -#: .\cookbook\templates\shopping_list.html:194 +#: .\cookbook\templates\shopping_list.html:164 msgid "Select Unit" msgstr "" -#: .\cookbook\templates\shopping_list.html:196 -#: .\cookbook\templates\shopping_list.html:218 -#: .\cookbook\templates\shopping_list.html:248 -#: .\cookbook\templates\shopping_list.html:272 -#: .\cookbook\templates\url_import.html:500 -#: .\cookbook\templates\url_import.html:532 +#: .\cookbook\templates\shopping_list.html:166 +#: .\cookbook\templates\shopping_list.html:189 +#: .\cookbook\templates\shopping_list.html:219 +#: .\cookbook\templates\shopping_list.html:243 +#: .\cookbook\templates\url_import.html:505 +#: .\cookbook\templates\url_import.html:537 msgid "Select" msgstr "" -#: .\cookbook\templates\shopping_list.html:216 +#: .\cookbook\templates\shopping_list.html:187 msgid "Select Food" msgstr "" -#: .\cookbook\templates\shopping_list.html:247 +#: .\cookbook\templates\shopping_list.html:218 msgid "Select Supermarket" msgstr "" -#: .\cookbook\templates\shopping_list.html:271 +#: .\cookbook\templates\shopping_list.html:242 msgid "Select User" msgstr "" -#: .\cookbook\templates\shopping_list.html:290 +#: .\cookbook\templates\shopping_list.html:258 msgid "Finished" msgstr "" -#: .\cookbook\templates\shopping_list.html:303 +#: .\cookbook\templates\shopping_list.html:267 msgid "You are offline, shopping list might not syncronize." msgstr "" -#: .\cookbook\templates\shopping_list.html:368 +#: .\cookbook\templates\shopping_list.html:318 msgid "Copy/Export" msgstr "" -#: .\cookbook\templates\shopping_list.html:372 -msgid "List Prefix" -msgstr "" - #: .\cookbook\templates\socialaccount\connections.html:4 #: .\cookbook\templates\socialaccount\connections.html:15 msgid "Account Connections" @@ -1875,80 +2039,80 @@ msgstr "" msgid "Sign in using" msgstr "" -#: .\cookbook\templates\space.html:23 +#: .\cookbook\templates\space.html:25 msgid "Space:" msgstr "" -#: .\cookbook\templates\space.html:24 +#: .\cookbook\templates\space.html:26 msgid "Manage Subscription" msgstr "" -#: .\cookbook\templates\space.html:32 .\cookbook\templates\stats.html:19 +#: .\cookbook\templates\space.html:34 .\cookbook\templates\stats.html:19 msgid "Number of objects" msgstr "" -#: .\cookbook\templates\space.html:45 .\cookbook\templates\stats.html:30 +#: .\cookbook\templates\space.html:54 .\cookbook\templates\stats.html:30 msgid "Recipe Imports" msgstr "" -#: .\cookbook\templates\space.html:53 .\cookbook\templates\stats.html:38 +#: .\cookbook\templates\space.html:62 .\cookbook\templates\stats.html:38 msgid "Objects stats" msgstr "" -#: .\cookbook\templates\space.html:56 .\cookbook\templates\stats.html:41 +#: .\cookbook\templates\space.html:65 .\cookbook\templates\stats.html:41 msgid "Recipes without Keywords" msgstr "" -#: .\cookbook\templates\space.html:60 .\cookbook\templates\stats.html:45 +#: .\cookbook\templates\space.html:73 .\cookbook\templates\stats.html:45 msgid "Internal Recipes" msgstr "" -#: .\cookbook\templates\space.html:73 +#: .\cookbook\templates\space.html:89 msgid "Members" msgstr "" -#: .\cookbook\templates\space.html:77 +#: .\cookbook\templates\space.html:95 msgid "Invite User" msgstr "" -#: .\cookbook\templates\space.html:88 +#: .\cookbook\templates\space.html:107 msgid "User" msgstr "" -#: .\cookbook\templates\space.html:89 +#: .\cookbook\templates\space.html:108 msgid "Groups" msgstr "" -#: .\cookbook\templates\space.html:105 +#: .\cookbook\templates\space.html:119 msgid "admin" msgstr "" -#: .\cookbook\templates\space.html:106 +#: .\cookbook\templates\space.html:120 msgid "user" msgstr "" -#: .\cookbook\templates\space.html:107 +#: .\cookbook\templates\space.html:121 msgid "guest" msgstr "" -#: .\cookbook\templates\space.html:108 +#: .\cookbook\templates\space.html:122 msgid "remove" msgstr "" -#: .\cookbook\templates\space.html:112 +#: .\cookbook\templates\space.html:126 msgid "Update" msgstr "" -#: .\cookbook\templates\space.html:116 +#: .\cookbook\templates\space.html:130 msgid "You cannot edit yourself." msgstr "" -#: .\cookbook\templates\space.html:123 +#: .\cookbook\templates\space.html:136 msgid "There are no members in your space yet!" msgstr "" -#: .\cookbook\templates\space.html:130 .\cookbook\templates\system.html:21 -#: .\cookbook\views\lists.py:100 +#: .\cookbook\templates\space.html:143 .\cookbook\templates\system.html:21 +#: .\cookbook\views\lists.py:85 msgid "Invite Links" msgstr "" @@ -2057,166 +2221,166 @@ msgid "" " " msgstr "" -#: .\cookbook\templates\url_import.html:6 +#: .\cookbook\templates\url_import.html:8 msgid "URL Import" msgstr "" -#: .\cookbook\templates\url_import.html:31 +#: .\cookbook\templates\url_import.html:33 msgid "Drag me to your bookmarks to import recipes from anywhere" msgstr "" -#: .\cookbook\templates\url_import.html:32 +#: .\cookbook\templates\url_import.html:34 msgid "Bookmark Me!" msgstr "" -#: .\cookbook\templates\url_import.html:36 +#: .\cookbook\templates\url_import.html:38 msgid "URL" msgstr "" -#: .\cookbook\templates\url_import.html:38 +#: .\cookbook\templates\url_import.html:40 msgid "App" msgstr "" -#: .\cookbook\templates\url_import.html:62 +#: .\cookbook\templates\url_import.html:64 msgid "Enter website URL" msgstr "" -#: .\cookbook\templates\url_import.html:101 +#: .\cookbook\templates\url_import.html:104 msgid "Select recipe files to import or drop them here..." msgstr "" -#: .\cookbook\templates\url_import.html:122 +#: .\cookbook\templates\url_import.html:125 msgid "Paste json or html source here to load recipe." msgstr "" -#: .\cookbook\templates\url_import.html:150 +#: .\cookbook\templates\url_import.html:153 msgid "Preview Recipe Data" msgstr "" -#: .\cookbook\templates\url_import.html:151 +#: .\cookbook\templates\url_import.html:154 msgid "Drag recipe attributes from the right into the appropriate box below." msgstr "" -#: .\cookbook\templates\url_import.html:160 -#: .\cookbook\templates\url_import.html:177 -#: .\cookbook\templates\url_import.html:194 -#: .\cookbook\templates\url_import.html:213 -#: .\cookbook\templates\url_import.html:231 -#: .\cookbook\templates\url_import.html:246 -#: .\cookbook\templates\url_import.html:261 -#: .\cookbook\templates\url_import.html:277 -#: .\cookbook\templates\url_import.html:304 -#: .\cookbook\templates\url_import.html:355 +#: .\cookbook\templates\url_import.html:163 +#: .\cookbook\templates\url_import.html:180 +#: .\cookbook\templates\url_import.html:197 +#: .\cookbook\templates\url_import.html:216 +#: .\cookbook\templates\url_import.html:234 +#: .\cookbook\templates\url_import.html:249 +#: .\cookbook\templates\url_import.html:264 +#: .\cookbook\templates\url_import.html:280 +#: .\cookbook\templates\url_import.html:307 +#: .\cookbook\templates\url_import.html:358 msgid "Clear Contents" msgstr "" -#: .\cookbook\templates\url_import.html:162 +#: .\cookbook\templates\url_import.html:165 msgid "Text dragged here will be appended to the name." msgstr "" -#: .\cookbook\templates\url_import.html:175 +#: .\cookbook\templates\url_import.html:178 msgid "Description" msgstr "" -#: .\cookbook\templates\url_import.html:179 +#: .\cookbook\templates\url_import.html:182 msgid "Text dragged here will be appended to the description." msgstr "" -#: .\cookbook\templates\url_import.html:196 +#: .\cookbook\templates\url_import.html:199 msgid "Keywords dragged here will be appended to current list" msgstr "" -#: .\cookbook\templates\url_import.html:211 +#: .\cookbook\templates\url_import.html:214 msgid "Image" msgstr "" -#: .\cookbook\templates\url_import.html:243 +#: .\cookbook\templates\url_import.html:246 msgid "Prep Time" msgstr "" -#: .\cookbook\templates\url_import.html:258 +#: .\cookbook\templates\url_import.html:261 msgid "Cook Time" msgstr "" -#: .\cookbook\templates\url_import.html:279 +#: .\cookbook\templates\url_import.html:282 msgid "Ingredients dragged here will be appended to current list." msgstr "" -#: .\cookbook\templates\url_import.html:301 -#: .\cookbook\templates\url_import.html:572 +#: .\cookbook\templates\url_import.html:304 +#: .\cookbook\templates\url_import.html:579 msgid "Instructions" msgstr "" -#: .\cookbook\templates\url_import.html:306 +#: .\cookbook\templates\url_import.html:309 msgid "" "Recipe instructions dragged here will be appended to current instructions." msgstr "" -#: .\cookbook\templates\url_import.html:329 +#: .\cookbook\templates\url_import.html:332 msgid "Discovered Attributes" msgstr "" -#: .\cookbook\templates\url_import.html:331 +#: .\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 "" -#: .\cookbook\templates\url_import.html:348 +#: .\cookbook\templates\url_import.html:351 msgid "Show Blank Field" msgstr "" -#: .\cookbook\templates\url_import.html:353 +#: .\cookbook\templates\url_import.html:356 msgid "Blank Field" msgstr "" -#: .\cookbook\templates\url_import.html:357 +#: .\cookbook\templates\url_import.html:360 msgid "Items dragged to Blank Field will be appended." msgstr "" -#: .\cookbook\templates\url_import.html:404 +#: .\cookbook\templates\url_import.html:407 msgid "Delete Text" msgstr "" -#: .\cookbook\templates\url_import.html:417 +#: .\cookbook\templates\url_import.html:420 msgid "Delete image" msgstr "" -#: .\cookbook\templates\url_import.html:433 +#: .\cookbook\templates\url_import.html:436 msgid "Recipe Name" msgstr "" -#: .\cookbook\templates\url_import.html:437 +#: .\cookbook\templates\url_import.html:440 msgid "Recipe Description" msgstr "" -#: .\cookbook\templates\url_import.html:499 -#: .\cookbook\templates\url_import.html:531 -#: .\cookbook\templates\url_import.html:587 +#: .\cookbook\templates\url_import.html:504 +#: .\cookbook\templates\url_import.html:536 +#: .\cookbook\templates\url_import.html:596 msgid "Select one" msgstr "" -#: .\cookbook\templates\url_import.html:547 +#: .\cookbook\templates\url_import.html:554 msgid "Note" msgstr "" -#: .\cookbook\templates\url_import.html:588 +#: .\cookbook\templates\url_import.html:597 msgid "Add Keyword" msgstr "" -#: .\cookbook\templates\url_import.html:601 +#: .\cookbook\templates\url_import.html:610 msgid "All Keywords" msgstr "" -#: .\cookbook\templates\url_import.html:604 +#: .\cookbook\templates\url_import.html:613 msgid "Import all keywords, not only the ones already existing." msgstr "" -#: .\cookbook\templates\url_import.html:631 +#: .\cookbook\templates\url_import.html:640 msgid "Information" msgstr "" -#: .\cookbook\templates\url_import.html:633 +#: .\cookbook\templates\url_import.html:642 msgid "" " Only websites containing ld+json or microdata information can currently\n" " be imported. Most big recipe pages " @@ -2227,125 +2391,214 @@ msgid "" " github issues." msgstr "" -#: .\cookbook\templates\url_import.html:641 +#: .\cookbook\templates\url_import.html:650 msgid "Google ld+json Info" msgstr "" -#: .\cookbook\templates\url_import.html:644 +#: .\cookbook\templates\url_import.html:653 msgid "GitHub Issues" msgstr "" -#: .\cookbook\templates\url_import.html:646 +#: .\cookbook\templates\url_import.html:655 msgid "Recipe Markup Specification" msgstr "" -#: .\cookbook\views\api.py:83 .\cookbook\views\api.py:132 +#: .\cookbook\views\api.py:88 .\cookbook\views\api.py:170 msgid "Parameter updated_at incorrectly formatted" msgstr "" -#: .\cookbook\views\api.py:152 +#: .\cookbook\views\api.py:190 .\cookbook\views\api.py:291 #, python-brace-format msgid "No {self.basename} with id {pk} exists" msgstr "" -#: .\cookbook\views\api.py:156 +#: .\cookbook\views\api.py:194 msgid "Cannot merge with the same object!" msgstr "" -#: .\cookbook\views\api.py:163 +#: .\cookbook\views\api.py:201 #, python-brace-format msgid "No {self.basename} with id {target} exists" msgstr "" -#: .\cookbook\views\api.py:168 +#: .\cookbook\views\api.py:206 msgid "Cannot merge with child object!" msgstr "" -#: .\cookbook\views\api.py:201 +#: .\cookbook\views\api.py:239 #, python-brace-format msgid "{source.name} was merged successfully with {target.name}" msgstr "" -#: .\cookbook\views\api.py:205 +#: .\cookbook\views\api.py:244 #, python-brace-format msgid "An error occurred attempting to merge {source.name} with {target.name}" msgstr "" -#: .\cookbook\views\api.py:249 -#, python-brace-format -msgid "No {self.basename} with id {child} exists" -msgstr "" - -#: .\cookbook\views\api.py:258 +#: .\cookbook\views\api.py:300 #, python-brace-format msgid "{child.name} was moved successfully to the root." msgstr "" -#: .\cookbook\views\api.py:261 .\cookbook\views\api.py:279 +#: .\cookbook\views\api.py:303 .\cookbook\views\api.py:321 msgid "An error occurred attempting to move " msgstr "" -#: .\cookbook\views\api.py:264 +#: .\cookbook\views\api.py:306 msgid "Cannot move an object to itself!" msgstr "" -#: .\cookbook\views\api.py:270 +#: .\cookbook\views\api.py:312 #, python-brace-format msgid "No {self.basename} with id {parent} exists" msgstr "" -#: .\cookbook\views\api.py:276 +#: .\cookbook\views\api.py:318 #, python-brace-format msgid "{child.name} was moved successfully to parent {parent.name}" msgstr "" -#: .\cookbook\views\api.py:723 .\cookbook\views\data.py:42 +#: .\cookbook\views\api.py:470 +#, python-brace-format +msgid "{obj.name} was removed from the shopping list." +msgstr "" + +#: .\cookbook\views\api.py:475 .\cookbook\views\api.py:726 +#, python-brace-format +msgid "{obj.name} was added to the shopping list." +msgstr "" + +#: .\cookbook\views\api.py:587 +msgid "ID of recipe a step is part of. For multiple repeat parameter." +msgstr "" + +#: .\cookbook\views\api.py:588 +msgid "Query string matched (fuzzy) against object name." +msgstr "" + +#: .\cookbook\views\api.py:631 +msgid "" +"Query string matched (fuzzy) against recipe name. In the future also " +"fulltext search." +msgstr "" + +#: .\cookbook\views\api.py:632 +msgid "ID of keyword a recipe should have. For multiple repeat parameter." +msgstr "" + +#: .\cookbook\views\api.py:633 +msgid "ID of food a recipe should have. For multiple repeat parameter." +msgstr "" + +#: .\cookbook\views\api.py:634 +msgid "ID of unit a recipe should have." +msgstr "" + +#: .\cookbook\views\api.py:635 +msgid "Rating a recipe should have. [0 - 5]" +msgstr "" + +#: .\cookbook\views\api.py:636 +msgid "ID of book a recipe should be in. For multiple repeat parameter." +msgstr "" + +#: .\cookbook\views\api.py:637 +msgid "" +"If recipe should have all (AND=false) or any (OR=true) of the " +"provided keywords." +msgstr "" + +#: .\cookbook\views\api.py:638 +msgid "" +"If recipe should have all (AND=false) or any (OR=true) of the " +"provided foods." +msgstr "" + +#: .\cookbook\views\api.py:639 +msgid "" +"If recipe should be in all (AND=false) or any (OR=true) of the " +"provided books." +msgstr "" + +#: .\cookbook\views\api.py:640 +msgid "If only internal recipes should be returned. [true/false]" +msgstr "" + +#: .\cookbook\views\api.py:641 +msgid "Returns the results in randomized order. [true/false]" +msgstr "" + +#: .\cookbook\views\api.py:642 +msgid "Returns new results first in search results. [true/false]" +msgstr "" + +#: .\cookbook\views\api.py:768 +msgid "" +"Returns the shopping list entry with a primary key of id. Multiple values " +"allowed." +msgstr "" + +#: .\cookbook\views\api.py:771 +msgid "" +"Filter shopping list entries on checked. [true, false, both, recent]
- recent includes unchecked items and recently completed items." +msgstr "" + +#: .\cookbook\views\api.py:773 +msgid "Returns the shopping list entries sorted by supermarket category order." +msgstr "" + +#: .\cookbook\views\api.py:922 .\cookbook\views\data.py:42 #: .\cookbook\views\edit.py:129 .\cookbook\views\new.py:95 msgid "This feature is not yet available in the hosted version of tandoor!" msgstr "" -#: .\cookbook\views\api.py:745 +#: .\cookbook\views\api.py:944 msgid "Sync successful!" msgstr "" -#: .\cookbook\views\api.py:750 +#: .\cookbook\views\api.py:949 msgid "Error synchronizing with Storage" msgstr "" -#: .\cookbook\views\api.py:828 +#: .\cookbook\views\api.py:1028 msgid "Nothing to do." msgstr "" -#: .\cookbook\views\api.py:843 +#: .\cookbook\views\api.py:1043 msgid "The requested site provided malformed data and cannot be read." msgstr "" -#: .\cookbook\views\api.py:850 +#: .\cookbook\views\api.py:1050 msgid "The requested page could not be found." msgstr "" -#: .\cookbook\views\api.py:859 +#: .\cookbook\views\api.py:1068 msgid "" "The requested site does not provide any recognized data format to import the " "recipe from." msgstr "" -#: .\cookbook\views\api.py:873 +#: .\cookbook\views\api.py:1082 +msgid "Connection Refused." +msgstr "" + +#: .\cookbook\views\api.py:1091 msgid "No useable data could be found." msgstr "" -#: .\cookbook\views\api.py:889 +#: .\cookbook\views\api.py:1107 msgid "I couldn't find anything to do." msgstr "" #: .\cookbook\views\data.py:34 .\cookbook\views\data.py:129 -#: .\cookbook\views\edit.py:49 .\cookbook\views\import_export.py:73 +#: .\cookbook\views\edit.py:49 .\cookbook\views\import_export.py:80 #: .\cookbook\views\new.py:33 msgid "You have reached the maximum number of recipes for your space." msgstr "" #: .\cookbook\views\data.py:38 .\cookbook\views\data.py:133 -#: .\cookbook\views\edit.py:53 .\cookbook\views\import_export.py:77 +#: .\cookbook\views\edit.py:53 .\cookbook\views\import_export.py:84 #: .\cookbook\views\new.py:37 msgid "You have more users than allowed in your space." msgstr "" @@ -2361,7 +2614,7 @@ msgstr[1] "" msgid "Monitor" msgstr "" -#: .\cookbook\views\delete.py:125 .\cookbook\views\lists.py:86 +#: .\cookbook\views\delete.py:125 .\cookbook\views\lists.py:71 #: .\cookbook\views\new.py:101 msgid "Storage Backend" msgstr "" @@ -2379,7 +2632,7 @@ msgstr "" msgid "Bookmarks" msgstr "" -#: .\cookbook\views\delete.py:192 .\cookbook\views\new.py:235 +#: .\cookbook\views\delete.py:192 .\cookbook\views\new.py:238 msgid "Invite Link" msgstr "" @@ -2403,38 +2656,44 @@ msgstr "" msgid "Error saving changes!" msgstr "" -#: .\cookbook\views\import_export.py:99 +#: .\cookbook\views\import_export.py:106 msgid "Importing is not implemented for this provider" msgstr "" -#: .\cookbook\views\import_export.py:121 +#: .\cookbook\views\import_export.py:127 +msgid "" +"The PDF Exporter is not enabled on this instance as it is still in an " +"experimental state." +msgstr "" + +#: .\cookbook\views\import_export.py:132 msgid "Exporting is not implemented for this provider" msgstr "" -#: .\cookbook\views\lists.py:26 +#: .\cookbook\views\lists.py:25 msgid "Import Log" msgstr "" -#: .\cookbook\views\lists.py:39 +#: .\cookbook\views\lists.py:38 msgid "Discovery" msgstr "" -#: .\cookbook\views\lists.py:69 +#: .\cookbook\views\lists.py:54 msgid "Shopping Lists" msgstr "" -#: .\cookbook\views\lists.py:129 -msgid "Foods" -msgstr "" - -#: .\cookbook\views\lists.py:163 +#: .\cookbook\views\lists.py:148 msgid "Supermarkets" msgstr "" -#: .\cookbook\views\lists.py:179 +#: .\cookbook\views\lists.py:164 msgid "Shopping Categories" msgstr "" +#: .\cookbook\views\lists.py:217 +msgid "Steps" +msgstr "" + #: .\cookbook\views\lists.py:232 msgid "New Shopping List" msgstr "" @@ -2447,124 +2706,124 @@ msgstr "" msgid "There was an error importing this recipe!" msgstr "" -#: .\cookbook\views\new.py:209 +#: .\cookbook\views\new.py:212 msgid "Hello" msgstr "" -#: .\cookbook\views\new.py:209 +#: .\cookbook\views\new.py:212 msgid "You have been invited by " msgstr "" -#: .\cookbook\views\new.py:210 +#: .\cookbook\views\new.py:213 msgid " to join their Tandoor Recipes space " msgstr "" -#: .\cookbook\views\new.py:211 +#: .\cookbook\views\new.py:214 msgid "Click the following link to activate your account: " msgstr "" -#: .\cookbook\views\new.py:212 +#: .\cookbook\views\new.py:215 msgid "" "If the link does not work use the following code to manually join the space: " msgstr "" -#: .\cookbook\views\new.py:213 +#: .\cookbook\views\new.py:216 msgid "The invitation is valid until " msgstr "" -#: .\cookbook\views\new.py:214 +#: .\cookbook\views\new.py:217 msgid "" "Tandoor Recipes is an Open Source recipe manager. Check it out on GitHub " msgstr "" -#: .\cookbook\views\new.py:217 +#: .\cookbook\views\new.py:220 msgid "Tandoor Recipes Invite" msgstr "" -#: .\cookbook\views\new.py:224 +#: .\cookbook\views\new.py:227 msgid "Invite link successfully send to user." msgstr "" -#: .\cookbook\views\new.py:227 +#: .\cookbook\views\new.py:230 msgid "" "You have send to many emails, please share the link manually or wait a few " "hours." msgstr "" -#: .\cookbook\views\new.py:229 +#: .\cookbook\views\new.py:232 msgid "Email to user could not be send, please share link manually." msgstr "" -#: .\cookbook\views\views.py:127 +#: .\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 "" -#: .\cookbook\views\views.py:175 +#: .\cookbook\views\views.py:174 msgid "You do not have the required permissions to perform this action!" msgstr "" -#: .\cookbook\views\views.py:186 +#: .\cookbook\views\views.py:185 msgid "Comment saved!" msgstr "" -#: .\cookbook\views\views.py:277 +#: .\cookbook\views\views.py:276 msgid "This feature is not available in the demo version!" msgstr "" -#: .\cookbook\views\views.py:340 +#: .\cookbook\views\views.py:335 msgid "You must select at least one field to search!" msgstr "" -#: .\cookbook\views\views.py:345 +#: .\cookbook\views\views.py:340 msgid "" "To use this search method you must select at least one full text search " "field!" msgstr "" -#: .\cookbook\views\views.py:349 +#: .\cookbook\views\views.py:344 msgid "Fuzzy search is not compatible with this search method!" msgstr "" -#: .\cookbook\views\views.py:452 +#: .\cookbook\views\views.py:470 msgid "" "The setup page can only be used to create the first user! If you have " "forgotten your superuser credentials please consult the django documentation " "on how to reset passwords." msgstr "" -#: .\cookbook\views\views.py:459 +#: .\cookbook\views\views.py:477 msgid "Passwords dont match!" msgstr "" -#: .\cookbook\views\views.py:475 +#: .\cookbook\views\views.py:493 msgid "User has been created, please login!" msgstr "" -#: .\cookbook\views\views.py:491 +#: .\cookbook\views\views.py:509 msgid "Malformed Invite Link supplied!" msgstr "" -#: .\cookbook\views\views.py:498 +#: .\cookbook\views\views.py:516 msgid "You are already member of a space and therefore cannot join this one." msgstr "" -#: .\cookbook\views\views.py:509 +#: .\cookbook\views\views.py:527 msgid "Successfully joined space." msgstr "" -#: .\cookbook\views\views.py:515 +#: .\cookbook\views\views.py:533 msgid "Invite Link not valid or already used!" msgstr "" -#: .\cookbook\views\views.py:579 +#: .\cookbook\views\views.py:614 msgid "" "Reporting share links is not enabled for this instance. Please notify the " "page administrator to report problems." msgstr "" -#: .\cookbook\views\views.py:585 +#: .\cookbook\views\views.py:620 msgid "" "Recipe sharing link has been disabled! For additional information please " "contact the page administrator." diff --git a/cookbook/locale/es/LC_MESSAGES/django.mo b/cookbook/locale/es/LC_MESSAGES/django.mo index 18e2bb5347..53aed057f8 100644 Binary files a/cookbook/locale/es/LC_MESSAGES/django.mo and b/cookbook/locale/es/LC_MESSAGES/django.mo differ diff --git a/cookbook/locale/es/LC_MESSAGES/django.po b/cookbook/locale/es/LC_MESSAGES/django.po index 003ab66aa2..46d87bbc09 100644 --- a/cookbook/locale/es/LC_MESSAGES/django.po +++ b/cookbook/locale/es/LC_MESSAGES/django.po @@ -14,7 +14,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-08 16:27+0100\n" +"POT-Creation-Date: 2022-01-18 14:52+0100\n" "PO-Revision-Date: 2020-06-02 19:28+0000\n" "Last-Translator: Miguel Canteras , 2021\n" "Language-Team: Spanish (https://www.transifex.com/django-recipes/" @@ -25,81 +25,80 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: .\cookbook\filters.py:23 .\cookbook\templates\base.html:125 -#: .\cookbook\templates\forms\ingredients.html:34 -#: .\cookbook\templates\space.html:43 .\cookbook\templates\stats.html:28 -#: .\cookbook\templates\url_import.html:274 +#: .\cookbook\filters.py:23 .\cookbook\templates\forms\ingredients.html:34 +#: .\cookbook\templates\space.html:50 .\cookbook\templates\stats.html:28 +#: .\cookbook\templates\url_import.html:277 msgid "Ingredients" msgstr "Ingredientes" -#: .\cookbook\forms.py:54 +#: .\cookbook\forms.py:56 #, fuzzy #| msgid "Default" msgid "Default unit" msgstr "Por defecto" -#: .\cookbook\forms.py:55 +#: .\cookbook\forms.py:57 #, fuzzy #| msgid "System Information" msgid "Use fractions" msgstr "Información del Sistema" -#: .\cookbook\forms.py:56 +#: .\cookbook\forms.py:58 msgid "Use KJ" msgstr "" -#: .\cookbook\forms.py:57 +#: .\cookbook\forms.py:59 msgid "Theme" msgstr "" -#: .\cookbook\forms.py:58 +#: .\cookbook\forms.py:60 msgid "Navbar color" msgstr "" -#: .\cookbook\forms.py:59 +#: .\cookbook\forms.py:61 msgid "Sticky navbar" msgstr "" -#: .\cookbook\forms.py:60 +#: .\cookbook\forms.py:62 #, fuzzy #| msgid "Default" msgid "Default page" msgstr "Por defecto" -#: .\cookbook\forms.py:61 +#: .\cookbook\forms.py:63 #, fuzzy #| msgid "Shopping Recipes" msgid "Show recent recipes" msgstr "Recetas en el carro de la compra" -#: .\cookbook\forms.py:62 +#: .\cookbook\forms.py:64 #, fuzzy #| msgid "Search" msgid "Search style" msgstr "Buscar" -#: .\cookbook\forms.py:63 +#: .\cookbook\forms.py:65 msgid "Plan sharing" msgstr "" -#: .\cookbook\forms.py:64 +#: .\cookbook\forms.py:66 #, fuzzy #| msgid "Ingredients" msgid "Ingredient decimal places" msgstr "Ingredientes" -#: .\cookbook\forms.py:65 +#: .\cookbook\forms.py:67 #, fuzzy #| msgid "Shopping list currently empty" msgid "Shopping list auto sync period" msgstr "Lista de la compra vacía" -#: .\cookbook\forms.py:66 .\cookbook\templates\recipe_view.html:21 -#: .\cookbook\templates\space.html:62 .\cookbook\templates\stats.html:47 +#: .\cookbook\forms.py:68 .\cookbook\templates\recipe_view.html:21 +#: .\cookbook\templates\space.html:77 .\cookbook\templates\stats.html:47 msgid "Comments" msgstr "Comentarios" -#: .\cookbook\forms.py:70 +#: .\cookbook\forms.py:72 msgid "" "Color of the top navigation bar. Not all colors work with all themes, just " "try them out!" @@ -107,13 +106,13 @@ msgstr "" "Color de la barra de navegación superior. No todos los colores funcionan con " "todos los temas, ¡pruébalos!" -#: .\cookbook\forms.py:72 +#: .\cookbook\forms.py:74 msgid "Default Unit to be used when inserting a new ingredient into a recipe." msgstr "" "Unidad predeterminada que se utilizará al insertar un nuevo ingrediente en " "una receta." -#: .\cookbook\forms.py:74 +#: .\cookbook\forms.py:76 msgid "" "Enables support for fractions in ingredient amounts (e.g. convert decimals " "to fractions automatically)" @@ -121,31 +120,39 @@ msgstr "" "Permite utilizar fracciones en cantidades de ingredientes (e.g. convierte " "los decimales en fracciones automáticamente)" -#: .\cookbook\forms.py:76 +#: .\cookbook\forms.py:78 msgid "Display nutritional energy amounts in joules instead of calories" msgstr "" -#: .\cookbook\forms.py:78 -msgid "" -"Users with whom newly created meal plan/shopping list entries should be " -"shared by default." +#: .\cookbook\forms.py:79 +#, fuzzy +#| msgid "" +#| "Users with whom newly created meal plan/shopping list entries should be " +#| "shared by default." +msgid "Users with whom newly created meal plans should be shared by default." msgstr "" "Usuarios con los que las entradas recién creadas del plan de comida/lista de " "la compra deben compartirse de forma predeterminada." #: .\cookbook\forms.py:80 +#, fuzzy +#| msgid "Open Shopping List" +msgid "Users with whom to share shopping lists." +msgstr "Abrir Lista de la Compra" + +#: .\cookbook\forms.py:82 msgid "Show recently viewed recipes on search page." msgstr "Muestra recetas vistas recientemente en la página de búsqueda." -#: .\cookbook\forms.py:81 +#: .\cookbook\forms.py:83 msgid "Number of decimals to round ingredients." msgstr "Número de decimales para redondear los ingredientes." -#: .\cookbook\forms.py:82 +#: .\cookbook\forms.py:84 msgid "If you want to be able to create and see comments underneath recipes." msgstr "Si desea poder crear y ver comentarios debajo de las recetas." -#: .\cookbook\forms.py:84 +#: .\cookbook\forms.py:86 .\cookbook\forms.py:493 msgid "" "Setting to 0 will disable auto sync. When viewing a shopping list the list " "is updated every set seconds to sync changes someone else might have made. " @@ -159,11 +166,19 @@ msgstr "" "valor establecido es inferior al límite de la instancia, este se " "restablecerá al guardar." -#: .\cookbook\forms.py:87 +#: .\cookbook\forms.py:89 msgid "Makes the navbar stick to the top of the page." msgstr "Hace la barra de navegación fija en la parte superior de la página." -#: .\cookbook\forms.py:103 +#: .\cookbook\forms.py:90 .\cookbook\forms.py:496 +msgid "Automatically add meal plan ingredients to shopping list." +msgstr "" + +#: .\cookbook\forms.py:91 +msgid "Exclude ingredients that are on hand." +msgstr "" + +#: .\cookbook\forms.py:108 msgid "" "Both fields are optional. If none are given the username will be displayed " "instead" @@ -175,60 +190,60 @@ msgstr "" " \n" " " -#: .\cookbook\forms.py:124 .\cookbook\forms.py:289 -#: .\cookbook\templates\url_import.html:158 +#: .\cookbook\forms.py:129 .\cookbook\forms.py:298 +#: .\cookbook\templates\url_import.html:161 msgid "Name" msgstr "Nombre" -#: .\cookbook\forms.py:125 .\cookbook\forms.py:290 -#: .\cookbook\templates\space.html:39 .\cookbook\templates\stats.html:24 -#: .\cookbook\templates\url_import.html:192 -#: .\cookbook\templates\url_import.html:578 .\cookbook\views\lists.py:112 +#: .\cookbook\forms.py:130 .\cookbook\forms.py:299 +#: .\cookbook\templates\space.html:44 .\cookbook\templates\stats.html:24 +#: .\cookbook\templates\url_import.html:195 +#: .\cookbook\templates\url_import.html:585 .\cookbook\views\lists.py:97 msgid "Keywords" msgstr "Palabras clave" -#: .\cookbook\forms.py:126 +#: .\cookbook\forms.py:131 msgid "Preparation time in minutes" msgstr "Tiempo de preparación en minutos" -#: .\cookbook\forms.py:127 +#: .\cookbook\forms.py:132 msgid "Waiting time (cooking/baking) in minutes" msgstr "Tiempo de espera (cocinar/hornear) en minutos" -#: .\cookbook\forms.py:128 .\cookbook\forms.py:259 .\cookbook\forms.py:291 +#: .\cookbook\forms.py:133 .\cookbook\forms.py:267 .\cookbook\forms.py:300 msgid "Path" msgstr "Ruta" -#: .\cookbook\forms.py:129 +#: .\cookbook\forms.py:134 msgid "Storage UID" msgstr "UID de almacenamiento" -#: .\cookbook\forms.py:157 +#: .\cookbook\forms.py:164 msgid "Default" msgstr "Por defecto" -#: .\cookbook\forms.py:168 .\cookbook\templates\url_import.html:94 +#: .\cookbook\forms.py:175 .\cookbook\templates\url_import.html:97 msgid "" "To prevent duplicates recipes with the same name as existing ones are " "ignored. Check this box to import everything." msgstr "" -#: .\cookbook\forms.py:190 +#: .\cookbook\forms.py:197 msgid "Add your comment: " msgstr "Añada su comentario:" -#: .\cookbook\forms.py:205 +#: .\cookbook\forms.py:212 msgid "Leave empty for dropbox and enter app password for nextcloud." msgstr "" "Déjelo vacío para Dropbox e ingrese la contraseña de la aplicación para " "nextcloud." -#: .\cookbook\forms.py:212 +#: .\cookbook\forms.py:219 msgid "Leave empty for nextcloud and enter api token for dropbox." msgstr "" "Déjelo en blanco para nextcloud e ingrese el token de api para dropbox." -#: .\cookbook\forms.py:221 +#: .\cookbook\forms.py:228 msgid "" "Leave empty for dropbox and enter only base url for nextcloud (/remote." "php/webdav/ is added automatically)" @@ -236,33 +251,33 @@ msgstr "" "Dejar vació para Dropbox e introducir sólo la URL base para Nextcloud " "(/remote.php/webdav/ se añade automáticamente)" -#: .\cookbook\forms.py:258 .\cookbook\views\edit.py:166 +#: .\cookbook\forms.py:266 .\cookbook\views\edit.py:166 msgid "Storage" msgstr "Almacenamiento" -#: .\cookbook\forms.py:260 +#: .\cookbook\forms.py:268 msgid "Active" msgstr "" -#: .\cookbook\forms.py:265 +#: .\cookbook\forms.py:274 msgid "Search String" msgstr "Cadena de búsqueda" -#: .\cookbook\forms.py:292 +#: .\cookbook\forms.py:301 msgid "File ID" msgstr "ID de Fichero" -#: .\cookbook\forms.py:313 +#: .\cookbook\forms.py:323 msgid "You must provide at least a recipe or a title." msgstr "Debe proporcionar al menos una receta o un título." -#: .\cookbook\forms.py:326 +#: .\cookbook\forms.py:336 msgid "You can list default users to share recipes with in the settings." msgstr "" "Puede enumerar los usuarios predeterminados con los que compartir recetas en " "la configuración." -#: .\cookbook\forms.py:327 +#: .\cookbook\forms.py:337 msgid "" "You can use markdown to format this field. See the docs here" @@ -270,110 +285,220 @@ msgstr "" "Puede utilizar Markdown para formatear este campo. Vea la documentación aqui" -#: .\cookbook\forms.py:353 +#: .\cookbook\forms.py:363 msgid "Maximum number of users for this space reached." msgstr "" -#: .\cookbook\forms.py:359 +#: .\cookbook\forms.py:369 msgid "Email address already taken!" msgstr "" -#: .\cookbook\forms.py:367 +#: .\cookbook\forms.py:377 msgid "" "An email address is not required but if present the invite link will be sent " "to the user." msgstr "" -#: .\cookbook\forms.py:382 +#: .\cookbook\forms.py:392 msgid "Name already taken." msgstr "" -#: .\cookbook\forms.py:393 +#: .\cookbook\forms.py:403 msgid "Accept Terms and Privacy" msgstr "" -#: .\cookbook\forms.py:425 +#: .\cookbook\forms.py:435 msgid "" "Determines how fuzzy a search is if it uses trigram similarity matching (e." "g. low values mean more typos are ignored)." msgstr "" -#: .\cookbook\forms.py:435 +#: .\cookbook\forms.py:445 msgid "" "Select type method of search. Click here for " "full desciption of choices." msgstr "" -#: .\cookbook\forms.py:436 +#: .\cookbook\forms.py:446 msgid "" "Use fuzzy matching on units, keywords and ingredients when editing and " "importing recipes." msgstr "" -#: .\cookbook\forms.py:438 +#: .\cookbook\forms.py:448 msgid "" "Fields to search ignoring accents. Selecting this option can improve or " "degrade search quality depending on language" msgstr "" -#: .\cookbook\forms.py:440 +#: .\cookbook\forms.py:450 msgid "" "Fields to search for partial matches. (e.g. searching for 'Pie' will return " "'pie' and 'piece' and 'soapie')" msgstr "" -#: .\cookbook\forms.py:442 +#: .\cookbook\forms.py:452 msgid "" "Fields to search for beginning of word matches. (e.g. searching for 'sa' " "will return 'salad' and 'sandwich')" msgstr "" -#: .\cookbook\forms.py:444 +#: .\cookbook\forms.py:454 msgid "" "Fields to 'fuzzy' search. (e.g. searching for 'recpie' will find 'recipe'.) " "Note: this option will conflict with 'web' and 'raw' methods of search." msgstr "" -#: .\cookbook\forms.py:446 +#: .\cookbook\forms.py:456 msgid "" "Fields to full text search. Note: 'web', 'phrase', and 'raw' search methods " "only function with fulltext fields." msgstr "" -#: .\cookbook\forms.py:450 +#: .\cookbook\forms.py:460 #, fuzzy #| msgid "Search" msgid "Search Method" msgstr "Buscar" -#: .\cookbook\forms.py:451 +#: .\cookbook\forms.py:461 msgid "Fuzzy Lookups" msgstr "" -#: .\cookbook\forms.py:452 +#: .\cookbook\forms.py:462 msgid "Ignore Accent" msgstr "" -#: .\cookbook\forms.py:453 +#: .\cookbook\forms.py:463 msgid "Partial Match" msgstr "" -#: .\cookbook\forms.py:454 +#: .\cookbook\forms.py:464 msgid "Starts Wtih" msgstr "" -#: .\cookbook\forms.py:455 +#: .\cookbook\forms.py:465 #, fuzzy #| msgid "Search" msgid "Fuzzy Search" msgstr "Buscar" -#: .\cookbook\forms.py:456 +#: .\cookbook\forms.py:466 #, fuzzy #| msgid "Text" msgid "Full Text" msgstr "Texto" +#: .\cookbook\forms.py:491 +msgid "" +"Users will see all items you add to your shopping list. They must add you " +"to see items on their list." +msgstr "" + +#: .\cookbook\forms.py:497 +msgid "" +"When adding a meal plan to the shopping list (manually or automatically), " +"include all related recipes." +msgstr "" + +#: .\cookbook\forms.py:498 +msgid "" +"When adding a meal plan to the shopping list (manually or automatically), " +"exclude ingredients that are on hand." +msgstr "" + +#: .\cookbook\forms.py:499 +msgid "Default number of hours to delay a shopping list entry." +msgstr "" + +#: .\cookbook\forms.py:500 +msgid "Filter shopping list to only include supermarket categories." +msgstr "" + +#: .\cookbook\forms.py:501 +msgid "Days of recent shopping list entries to display." +msgstr "" + +#: .\cookbook\forms.py:502 +msgid "Mark food 'On Hand' when checked off shopping list." +msgstr "" + +#: .\cookbook\forms.py:503 +msgid "Delimiter to use for CSV exports." +msgstr "" + +#: .\cookbook\forms.py:504 +msgid "Prefix to add when copying list to the clipboard." +msgstr "" + +#: .\cookbook\forms.py:508 +#, fuzzy +#| msgid "Shopping List" +msgid "Share Shopping List" +msgstr "Lista de la Compra" + +#: .\cookbook\forms.py:509 +msgid "Autosync" +msgstr "" + +#: .\cookbook\forms.py:510 +msgid "Auto Add Meal Plan" +msgstr "" + +#: .\cookbook\forms.py:511 +msgid "Exclude On Hand" +msgstr "" + +#: .\cookbook\forms.py:512 +msgid "Include Related" +msgstr "" + +#: .\cookbook\forms.py:513 +msgid "Default Delay Hours" +msgstr "" + +#: .\cookbook\forms.py:514 +#, fuzzy +#| msgid "Select Supermarket" +msgid "Filter to Supermarket" +msgstr "Seleccionar supermercado" + +#: .\cookbook\forms.py:515 +msgid "Recent Days" +msgstr "" + +#: .\cookbook\forms.py:516 +msgid "CSV Delimiter" +msgstr "" + +#: .\cookbook\forms.py:517 .\cookbook\templates\shopping_list.html:322 +msgid "List Prefix" +msgstr "Prefijo de la lista" + +#: .\cookbook\forms.py:518 +msgid "Auto On Hand" +msgstr "" + +#: .\cookbook\forms.py:528 +msgid "Reset Food Inheritance" +msgstr "" + +#: .\cookbook\forms.py:529 +msgid "Reset all food to inherit the fields configured." +msgstr "" + +#: .\cookbook\forms.py:541 +#, fuzzy +#| msgid "Food that should be replaced." +msgid "Fields on food that should be inherited by default." +msgstr "Alimento que se va a reemplazar." + +#: .\cookbook\forms.py:542 +#, fuzzy +#| msgid "Show recently viewed recipes on search page." +msgid "Show recipe counts on search filters" +msgstr "Muestra recetas vistas recientemente en la página de búsqueda." + #: .\cookbook\helper\AllAuthCustomAdapter.py:36 msgid "" "In order to prevent spam, the requested email was not send. Please wait a " @@ -381,19 +506,19 @@ msgid "" msgstr "" #: .\cookbook\helper\permission_helper.py:136 -#: .\cookbook\helper\permission_helper.py:159 .\cookbook\views\views.py:149 +#: .\cookbook\helper\permission_helper.py:159 .\cookbook\views\views.py:148 msgid "You are not logged in and therefore cannot view this page!" msgstr "¡No ha iniciado sesión y por lo tanto no puede ver esta página!" #: .\cookbook\helper\permission_helper.py:140 #: .\cookbook\helper\permission_helper.py:146 #: .\cookbook\helper\permission_helper.py:171 -#: .\cookbook\helper\permission_helper.py:216 -#: .\cookbook\helper\permission_helper.py:230 -#: .\cookbook\helper\permission_helper.py:241 -#: .\cookbook\helper\permission_helper.py:252 .\cookbook\views\data.py:47 -#: .\cookbook\views\views.py:160 .\cookbook\views\views.py:167 -#: .\cookbook\views\views.py:233 +#: .\cookbook\helper\permission_helper.py:219 +#: .\cookbook\helper\permission_helper.py:233 +#: .\cookbook\helper\permission_helper.py:244 +#: .\cookbook\helper\permission_helper.py:255 .\cookbook\views\data.py:47 +#: .\cookbook\views\views.py:159 .\cookbook\views\views.py:166 +#: .\cookbook\views\views.py:232 msgid "You do not have the required permissions to view this page!" msgstr "¡No tienes los permisos necesarios para ver esta página!" @@ -403,25 +528,26 @@ msgstr "¡No tienes los permisos necesarios para ver esta página!" msgid "You cannot interact with this object as it is not owned by you!" msgstr "¡No puede interactuar con este objeto ya que no es de tu propiedad!" +#: .\cookbook\helper\recipe_search.py:473 +msgid "One of queryset or hash_key must be provided" +msgstr "" + +#: .\cookbook\helper\shopping_helper.py:54 +#, fuzzy +#| msgid "You must provide at least a recipe or a title." +msgid "You must supply a recipe or mealplan" +msgstr "Debe proporcionar al menos una receta o un título." + +#: .\cookbook\helper\shopping_helper.py:58 +msgid "You must supply a created_by" +msgstr "" + #: .\cookbook\helper\template_helper.py:61 #: .\cookbook\helper\template_helper.py:63 msgid "Could not parse template code." msgstr "" -#: .\cookbook\integration\integration.py:126 -#: .\cookbook\templates\import.html:14 .\cookbook\templates\import.html:20 -#: .\cookbook\templates\import_response.html:7 -#: .\cookbook\templates\test.html:14 .\cookbook\templates\test.html:20 -#: .\cookbook\templates\url_import.html:27 -#: .\cookbook\templates\url_import.html:105 -#: .\cookbook\templates\url_import.html:127 -#: .\cookbook\templates\url_import.html:321 -#: .\cookbook\templates\url_import.html:609 .\cookbook\views\delete.py:89 -#: .\cookbook\views\edit.py:200 -msgid "Import" -msgstr "Importar" - -#: .\cookbook\integration\integration.py:208 +#: .\cookbook\integration\integration.py:200 msgid "" "Importer expected a .zip file. Did you choose the correct importer type for " "your data ?" @@ -429,17 +555,17 @@ msgstr "" "El importador esperaba un fichero.zip. ¿Has escogido el tipo de importador " "correcto para tus datos?" -#: .\cookbook\integration\integration.py:211 +#: .\cookbook\integration\integration.py:203 msgid "" "An unexpected error occurred during the import. Please make sure you have " "uploaded a valid file." msgstr "" -#: .\cookbook\integration\integration.py:216 +#: .\cookbook\integration\integration.py:208 msgid "The following recipes were ignored because they already existed:" msgstr "" -#: .\cookbook\integration\integration.py:220 +#: .\cookbook\integration\integration.py:212 #, fuzzy, python-format #| msgid "Imported new recipe!" msgid "Imported %s recipes." @@ -457,32 +583,32 @@ msgstr "Nota" msgid "Nutritional Information" msgstr "Información" -#: .\cookbook\integration\paprika.py:53 .\cookbook\templates\url_import.html:40 +#: .\cookbook\integration\paprika.py:53 .\cookbook\templates\url_import.html:42 msgid "Source" msgstr "" -#: .\cookbook\integration\safron.py:23 -#: .\cookbook\templates\include\log_cooking.html:16 -#: .\cookbook\templates\url_import.html:228 -#: .\cookbook\templates\url_import.html:459 +#: .\cookbook\integration\saffron.py:23 +#: .\cookbook\templates\include\log_cooking.html:18 +#: .\cookbook\templates\url_import.html:231 +#: .\cookbook\templates\url_import.html:462 msgid "Servings" msgstr "Raciones" -#: .\cookbook\integration\safron.py:25 +#: .\cookbook\integration\saffron.py:25 msgid "Waiting time" msgstr "Tiempo de espera" -#: .\cookbook\integration\safron.py:27 +#: .\cookbook\integration\saffron.py:27 msgid "Preparation Time" msgstr "Tiempo de Preparación" -#: .\cookbook\integration\safron.py:29 .\cookbook\templates\base.html:78 +#: .\cookbook\integration\saffron.py:29 .\cookbook\templates\base.html:78 #: .\cookbook\templates\forms\ingredients.html:7 #: .\cookbook\templates\index.html:7 msgid "Cookbook" msgstr "Libro de cocina" -#: .\cookbook\integration\safron.py:31 +#: .\cookbook\integration\saffron.py:31 msgid "Section" msgstr "Sección" @@ -518,113 +644,144 @@ msgstr "Cena" msgid "Other" msgstr "Otro" -#: .\cookbook\models.py:150 +#: .\cookbook\models.py:246 msgid "" "Maximum file storage for space in MB. 0 for unlimited, -1 to disable file " "upload." msgstr "" -#: .\cookbook\models.py:202 .\cookbook\templates\search.html:7 -#: .\cookbook\templates\shopping_list.html:59 +#: .\cookbook\models.py:300 .\cookbook\templates\search.html:7 +#: .\cookbook\templates\shopping_list.html:53 msgid "Search" msgstr "Buscar" -#: .\cookbook\models.py:203 .\cookbook\templates\base.html:82 +#: .\cookbook\models.py:301 .\cookbook\templates\base.html:82 #: .\cookbook\templates\meal_plan.html:7 #: .\cookbook\templates\meal_plan_new.html:7 .\cookbook\views\delete.py:181 #: .\cookbook\views\edit.py:220 .\cookbook\views\new.py:184 msgid "Meal-Plan" msgstr "Régimen de comidas" -#: .\cookbook\models.py:204 .\cookbook\templates\base.html:90 +#: .\cookbook\models.py:302 .\cookbook\templates\base.html:90 msgid "Books" msgstr "Libros" -#: .\cookbook\models.py:212 +#: .\cookbook\models.py:310 msgid "Small" msgstr "Pequeño" -#: .\cookbook\models.py:212 +#: .\cookbook\models.py:310 msgid "Large" msgstr "Grande" -#: .\cookbook\models.py:212 .\cookbook\templates\generic\new_template.html:6 +#: .\cookbook\models.py:310 .\cookbook\templates\generic\new_template.html:6 #: .\cookbook\templates\generic\new_template.html:14 msgid "New" msgstr "Nuevo" -#: .\cookbook\models.py:396 +#: .\cookbook\models.py:512 msgid " is part of a recipe step and cannot be deleted" msgstr "" -#: .\cookbook\models.py:441 .\cookbook\templates\url_import.html:42 +#: .\cookbook\models.py:586 .\cookbook\templates\url_import.html:44 msgid "Text" msgstr "Texto" -#: .\cookbook\models.py:441 +#: .\cookbook\models.py:586 msgid "Time" msgstr "Tiempo" -#: .\cookbook\models.py:441 .\cookbook\templates\url_import.html:44 +#: .\cookbook\models.py:586 .\cookbook\templates\url_import.html:46 #, fuzzy #| msgid "File ID" msgid "File" msgstr "ID de Fichero" -#: .\cookbook\models.py:441 +#: .\cookbook\models.py:586 #: .\cookbook\templates\include\recipe_open_modal.html:7 #: .\cookbook\views\delete.py:39 .\cookbook\views\edit.py:260 #: .\cookbook\views\new.py:53 msgid "Recipe" msgstr "Receta" -#: .\cookbook\models.py:871 .\cookbook\templates\search_info.html:28 +#: .\cookbook\models.py:1041 .\cookbook\templates\search_info.html:28 msgid "Simple" msgstr "" -#: .\cookbook\models.py:872 .\cookbook\templates\search_info.html:33 +#: .\cookbook\models.py:1042 .\cookbook\templates\search_info.html:33 msgid "Phrase" msgstr "" -#: .\cookbook\models.py:873 .\cookbook\templates\search_info.html:38 +#: .\cookbook\models.py:1043 .\cookbook\templates\search_info.html:38 msgid "Web" msgstr "" -#: .\cookbook\models.py:874 .\cookbook\templates\search_info.html:47 +#: .\cookbook\models.py:1044 .\cookbook\templates\search_info.html:47 msgid "Raw" msgstr "" -#: .\cookbook\models.py:912 +#: .\cookbook\models.py:1082 #, fuzzy #| msgid "Food" msgid "Food Alias" msgstr "Comida" -#: .\cookbook\models.py:912 +#: .\cookbook\models.py:1082 #, fuzzy #| msgid "Units" msgid "Unit Alias" msgstr "Unidades" -#: .\cookbook\models.py:912 +#: .\cookbook\models.py:1082 #, fuzzy #| msgid "Keywords" msgid "Keyword Alias" msgstr "Palabras clave" -#: .\cookbook\serializer.py:157 +#: .\cookbook\serializer.py:175 +msgid "A user is required" +msgstr "" + +#: .\cookbook\serializer.py:195 msgid "File uploads are not enabled for this Space." msgstr "" -#: .\cookbook\serializer.py:168 +#: .\cookbook\serializer.py:206 msgid "You have reached your file upload limit." msgstr "" +#: .\cookbook\serializer.py:962 +msgid "Existing shopping list to update" +msgstr "" + +#: .\cookbook\serializer.py:964 +msgid "" +"List of ingredient IDs from the recipe to add, if not provided all " +"ingredients will be added." +msgstr "" + +#: .\cookbook\serializer.py:965 +msgid "" +"Providing a list_recipe ID and servings of 0 will delete that shopping list." +msgstr "" + +#: .\cookbook\serializer.py:973 +msgid "Amount of food to add to the shopping list" +msgstr "" + +#: .\cookbook\serializer.py:974 +msgid "ID of unit to use for the shopping list" +msgstr "" + +#: .\cookbook\serializer.py:975 +msgid "When set to true will delete all food from active shopping lists." +msgstr "" + #: .\cookbook\tables.py:35 .\cookbook\templates\generic\edit_template.html:6 #: .\cookbook\templates\generic\edit_template.html:14 #: .\cookbook\templates\recipes_table.html:82 -#: .\cookbook\templates\shopping_list.html:40 -#: .\cookbook\templates\space.html:90 +#: .\cookbook\templates\shopping_list.html:37 +#: .\cookbook\templates\space.html:109 msgid "Edit" msgstr "Editar" @@ -764,7 +921,7 @@ msgstr "Iniciar sesión" msgid "Sign In" msgstr "Iniciar sesión" -#: .\cookbook\templates\account\login.html:32 +#: .\cookbook\templates\account\login.html:34 #: .\cookbook\templates\socialaccount\signup.html:8 #: .\cookbook\templates\socialaccount\signup.html:57 #, fuzzy @@ -772,21 +929,21 @@ msgstr "Iniciar sesión" msgid "Sign Up" msgstr "Iniciar sesión" -#: .\cookbook\templates\account\login.html:36 -#: .\cookbook\templates\account\login.html:37 +#: .\cookbook\templates\account\login.html:39 +#: .\cookbook\templates\account\login.html:41 #: .\cookbook\templates\account\password_reset.html:29 msgid "Reset My Password" msgstr "" -#: .\cookbook\templates\account\login.html:37 +#: .\cookbook\templates\account\login.html:40 msgid "Lost your password?" msgstr "" -#: .\cookbook\templates\account\login.html:48 +#: .\cookbook\templates\account\login.html:52 msgid "Social Login" msgstr "Inicio de sesión social" -#: .\cookbook\templates\account\login.html:49 +#: .\cookbook\templates\account\login.html:53 msgid "You can use any of the following providers to sign in." msgstr "" "Puedes usar cualquiera de los siguientes proveedores de inicio de sesión." @@ -815,7 +972,7 @@ msgstr "¡Cambios guardados!" #: .\cookbook\templates\account\password_change.html:12 #: .\cookbook\templates\account\password_set.html:12 -#: .\cookbook\templates\settings.html:69 +#: .\cookbook\templates\settings.html:76 #, fuzzy #| msgid "Password Reset" msgid "Password" @@ -944,15 +1101,21 @@ msgstr "Compras" msgid "Keyword" msgstr "Palabra clave" +#: .\cookbook\templates\base.html:125 .\cookbook\views\lists.py:114 +#, fuzzy +#| msgid "Food" +msgid "Foods" +msgstr "Comida" + #: .\cookbook\templates\base.html:137 #: .\cookbook\templates\forms\ingredients.html:24 -#: .\cookbook\templates\space.html:41 .\cookbook\templates\stats.html:26 -#: .\cookbook\views\lists.py:146 +#: .\cookbook\templates\space.html:47 .\cookbook\templates\stats.html:26 +#: .\cookbook\views\lists.py:131 msgid "Units" msgstr "Unidades" #: .\cookbook\templates\base.html:151 -#: .\cookbook\templates\shopping_list.html:237 +#: .\cookbook\templates\shopping_list.html:208 #: .\cookbook\templates\supermarket.html:7 msgid "Supermarket" msgstr "Supermercado" @@ -963,13 +1126,13 @@ msgstr "Supermercado" msgid "Supermarket Category" msgstr "Supermercado" -#: .\cookbook\templates\base.html:175 .\cookbook\views\lists.py:195 +#: .\cookbook\templates\base.html:175 .\cookbook\views\lists.py:180 #, fuzzy #| msgid "Information" msgid "Automations" msgstr "Información" -#: .\cookbook\templates\base.html:189 .\cookbook\views\lists.py:215 +#: .\cookbook\templates\base.html:189 .\cookbook\views\lists.py:200 #, fuzzy #| msgid "File ID" msgid "Files" @@ -986,7 +1149,7 @@ msgstr "Historial" #: .\cookbook\templates\base.html:228 .\cookbook\templates\export.html:14 #: .\cookbook\templates\export.html:20 -#: .\cookbook\templates\shopping_list.html:358 +#: .\cookbook\templates\shopping_list.html:310 #: .\cookbook\templates\test2.html:14 .\cookbook\templates\test2.html:20 msgid "Export" msgstr "Exportar" @@ -996,19 +1159,19 @@ msgid "Import Recipe" msgstr "Importar receta" #: .\cookbook\templates\base.html:246 -#: .\cookbook\templates\shopping_list.html:195 -#: .\cookbook\templates\shopping_list.html:217 +#: .\cookbook\templates\shopping_list.html:165 +#: .\cookbook\templates\shopping_list.html:188 msgid "Create" msgstr "Crear" #: .\cookbook\templates\base.html:259 #: .\cookbook\templates\generic\list_template.html:14 -#: .\cookbook\templates\space.html:58 .\cookbook\templates\stats.html:43 +#: .\cookbook\templates\space.html:69 .\cookbook\templates\stats.html:43 msgid "External Recipes" msgstr "Recetas Externas" -#: .\cookbook\templates\base.html:262 .\cookbook\templates\space.html:7 -#: .\cookbook\templates\space.html:19 +#: .\cookbook\templates\base.html:262 .\cookbook\templates\space.html:8 +#: .\cookbook\templates\space.html:20 .\cookbook\templates\space.html:150 #, fuzzy #| msgid "Settings" msgid "Space Settings" @@ -1080,11 +1243,13 @@ msgstr "La ruta debe tener el siguiente formato" #: .\cookbook\templates\forms\edit_import_recipe.html:14 #: .\cookbook\templates\generic\edit_template.html:23 #: .\cookbook\templates\generic\new_template.html:23 -#: .\cookbook\templates\include\log_cooking.html:28 -#: .\cookbook\templates\settings.html:63 .\cookbook\templates\settings.html:105 -#: .\cookbook\templates\settings.html:123 -#: .\cookbook\templates\settings.html:195 -#: .\cookbook\templates\shopping_list.html:360 +#: .\cookbook\templates\include\log_cooking.html:30 +#: .\cookbook\templates\settings.html:70 .\cookbook\templates\settings.html:112 +#: .\cookbook\templates\settings.html:130 +#: .\cookbook\templates\settings.html:202 +#: .\cookbook\templates\settings.html:213 +#: .\cookbook\templates\shopping_list.html:311 +#: .\cookbook\templates\space.html:155 msgid "Save" msgstr "Guardar" @@ -1199,15 +1364,22 @@ msgid "Delete original file" msgstr "Eliminar archivo original" #: .\cookbook\templates\generic\list_template.html:6 -#: .\cookbook\templates\generic\list_template.html:21 +#: .\cookbook\templates\generic\list_template.html:22 msgid "List" msgstr "Lista" -#: .\cookbook\templates\generic\list_template.html:34 +#: .\cookbook\templates\generic\list_template.html:33 +#: .\cookbook\templates\shopping_list.html:33 +#, fuzzy +#| msgid "Open Shopping List" +msgid "Try the new shopping list" +msgstr "Abrir Lista de la Compra" + +#: .\cookbook\templates\generic\list_template.html:45 msgid "Filter" msgstr "Filtro" -#: .\cookbook\templates\generic\list_template.html:39 +#: .\cookbook\templates\generic\list_template.html:50 msgid "Import all" msgstr "Importar todo" @@ -1233,19 +1405,31 @@ msgstr "Registro de cocina" msgid "Import Recipes" msgstr "Importar recetas" -#: .\cookbook\templates\include\log_cooking.html:7 +#: .\cookbook\templates\import.html:14 .\cookbook\templates\import.html:20 +#: .\cookbook\templates\import_response.html:7 +#: .\cookbook\templates\test.html:14 .\cookbook\templates\test.html:20 +#: .\cookbook\templates\url_import.html:29 +#: .\cookbook\templates\url_import.html:108 +#: .\cookbook\templates\url_import.html:130 +#: .\cookbook\templates\url_import.html:324 +#: .\cookbook\templates\url_import.html:618 .\cookbook\views\delete.py:89 +#: .\cookbook\views\edit.py:200 +msgid "Import" +msgstr "Importar" + +#: .\cookbook\templates\include\log_cooking.html:9 msgid "Log Recipe Cooking" msgstr "Registrar receta cocinada" -#: .\cookbook\templates\include\log_cooking.html:13 +#: .\cookbook\templates\include\log_cooking.html:15 msgid "All fields are optional and can be left empty." msgstr "Todos los campos son opcionales y pueden dejarse vacíos." -#: .\cookbook\templates\include\log_cooking.html:19 +#: .\cookbook\templates\include\log_cooking.html:21 msgid "Rating" msgstr "Calificación" -#: .\cookbook\templates\include\log_cooking.html:27 +#: .\cookbook\templates\include\log_cooking.html:29 #: .\cookbook\templates\include\recipe_open_modal.html:18 msgid "Close" msgstr "Cerrar" @@ -1300,7 +1484,7 @@ msgstr "Restablecer búsqueda" msgid "Last viewed" msgstr "Visto por última vez" -#: .\cookbook\templates\index.html:87 .\cookbook\templates\space.html:35 +#: .\cookbook\templates\index.html:87 .\cookbook\templates\space.html:37 #: .\cookbook\templates\stats.html:22 msgid "Recipes" msgstr "Recetas" @@ -1471,7 +1655,7 @@ msgid "Created by" msgstr "Creado por" #: .\cookbook\templates\meal_plan_entry.html:20 -#: .\cookbook\templates\shopping_list.html:261 +#: .\cookbook\templates\shopping_list.html:232 msgid "Shared with" msgstr "Compartido con" @@ -1597,17 +1781,17 @@ msgstr "Comentario" #: .\cookbook\templates\recipes_table.html:19 #: .\cookbook\templates\recipes_table.html:23 -#: .\cookbook\templates\url_import.html:444 +#: .\cookbook\templates\url_import.html:447 msgid "Recipe Image" msgstr "Imagen de la receta" #: .\cookbook\templates\recipes_table.html:51 -#: .\cookbook\templates\url_import.html:449 +#: .\cookbook\templates\url_import.html:452 msgid "Preparation time ca." msgstr "Tiempo de preparación ca." #: .\cookbook\templates\recipes_table.html:57 -#: .\cookbook\templates\url_import.html:454 +#: .\cookbook\templates\url_import.html:457 msgid "Waiting time ca." msgstr "Tiempo de espera ca." @@ -1625,7 +1809,7 @@ msgstr "Página de inicio" #: .\cookbook\templates\search_info.html:5 #: .\cookbook\templates\search_info.html:9 -#: .\cookbook\templates\settings.html:165 +#: .\cookbook\templates\settings.html:172 #, fuzzy #| msgid "Search String" msgid "Search Settings" @@ -1808,44 +1992,50 @@ msgstr "Opciones" msgid "Search-Settings" msgstr "Cadena de búsqueda" -#: .\cookbook\templates\settings.html:58 +#: .\cookbook\templates\settings.html:56 +#, fuzzy +#| msgid "Search String" +msgid "Shopping-Settings" +msgstr "Cadena de búsqueda" + +#: .\cookbook\templates\settings.html:65 #, fuzzy #| msgid "Settings" msgid "Name Settings" msgstr "Opciones" -#: .\cookbook\templates\settings.html:66 +#: .\cookbook\templates\settings.html:73 #, fuzzy #| msgid "Account Connections" msgid "Account Settings" msgstr "Conexiones de la cuenta" -#: .\cookbook\templates\settings.html:68 +#: .\cookbook\templates\settings.html:75 #, fuzzy #| msgid "Settings" msgid "Emails" msgstr "Opciones" -#: .\cookbook\templates\settings.html:71 +#: .\cookbook\templates\settings.html:78 #: .\cookbook\templates\socialaccount\connections.html:11 #, fuzzy #| msgid "Social Login" msgid "Social" msgstr "Inicio de sesión social" -#: .\cookbook\templates\settings.html:84 +#: .\cookbook\templates\settings.html:91 msgid "Language" msgstr "Idioma" -#: .\cookbook\templates\settings.html:114 +#: .\cookbook\templates\settings.html:121 msgid "Style" msgstr "Estilo" -#: .\cookbook\templates\settings.html:135 +#: .\cookbook\templates\settings.html:142 msgid "API Token" msgstr "Token API" -#: .\cookbook\templates\settings.html:136 +#: .\cookbook\templates\settings.html:143 msgid "" "You can use both basic authentication and token based authentication to " "access the REST API." @@ -1853,7 +2043,7 @@ msgstr "" "Puedes utilizar tanto la autenticación básica como la autenticación basada " "en tokens para acceder a la API REST." -#: .\cookbook\templates\settings.html:153 +#: .\cookbook\templates\settings.html:160 msgid "" "Use the token as an Authorization header prefixed by the word token as shown " "in the following examples:" @@ -1861,62 +2051,68 @@ msgstr "" "Utilice el token como cabecera de autorización usando como prefijo la " "palabra token, tal y como se muestra en los siguientes ejemplos:" -#: .\cookbook\templates\settings.html:155 +#: .\cookbook\templates\settings.html:162 msgid "or" msgstr "o" -#: .\cookbook\templates\settings.html:166 +#: .\cookbook\templates\settings.html:173 msgid "" "There are many options to configure the search depending on your personal " "preferences." msgstr "" -#: .\cookbook\templates\settings.html:167 +#: .\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 "" -#: .\cookbook\templates\settings.html:168 +#: .\cookbook\templates\settings.html:175 msgid "" "If you do want to configure the search you can read about the different " "options here." msgstr "" -#: .\cookbook\templates\settings.html:173 +#: .\cookbook\templates\settings.html:180 msgid "Fuzzy" msgstr "" -#: .\cookbook\templates\settings.html:174 +#: .\cookbook\templates\settings.html:181 msgid "" "Find what you need even if your search or the recipe contains typos. Might " "return more results than needed to make sure you find what you are looking " "for." msgstr "" -#: .\cookbook\templates\settings.html:175 +#: .\cookbook\templates\settings.html:182 msgid "This is the default behavior" msgstr "" -#: .\cookbook\templates\settings.html:176 -#: .\cookbook\templates\settings.html:184 +#: .\cookbook\templates\settings.html:183 +#: .\cookbook\templates\settings.html:191 msgid "Apply" msgstr "" -#: .\cookbook\templates\settings.html:181 +#: .\cookbook\templates\settings.html:188 msgid "Precise" msgstr "" -#: .\cookbook\templates\settings.html:182 +#: .\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 "" -#: .\cookbook\templates\settings.html:183 +#: .\cookbook\templates\settings.html:190 msgid "Perfect for large Databases" msgstr "" +#: .\cookbook\templates\settings.html:207 +#, fuzzy +#| msgid "Shopping List" +msgid "Shopping Settings" +msgstr "Lista de la Compra" + #: .\cookbook\templates\setup.html:6 .\cookbook\templates\system.html:5 msgid "Cookbook Setup" msgstr "Configuración del libro de recetas" @@ -1936,83 +2132,73 @@ msgstr "" msgid "Create Superuser account" msgstr "Crear cuenta de Superusuario" -#: .\cookbook\templates\shopping_list.html:7 +#: .\cookbook\templates\shopping_list.html:8 #: .\cookbook\templates\shopping_list.html:29 -#: .\cookbook\templates\shopping_list.html:721 +#: .\cookbook\templates\shopping_list.html:663 msgid "Shopping List" msgstr "Lista de la Compra" -#: .\cookbook\templates\shopping_list.html:34 -#, fuzzy -#| msgid "Open Shopping List" -msgid "Try the new shopping list" -msgstr "Abrir Lista de la Compra" - -#: .\cookbook\templates\shopping_list.html:63 +#: .\cookbook\templates\shopping_list.html:55 msgid "Search Recipe" msgstr "Buscar Receta" -#: .\cookbook\templates\shopping_list.html:86 +#: .\cookbook\templates\shopping_list.html:72 msgid "Shopping Recipes" msgstr "Recetas en el carro de la compra" -#: .\cookbook\templates\shopping_list.html:90 +#: .\cookbook\templates\shopping_list.html:74 msgid "No recipes selected" msgstr "No hay recetas seleccionadas" -#: .\cookbook\templates\shopping_list.html:157 +#: .\cookbook\templates\shopping_list.html:131 msgid "Entry Mode" msgstr "Modo de entrada" -#: .\cookbook\templates\shopping_list.html:165 +#: .\cookbook\templates\shopping_list.html:139 msgid "Add Entry" msgstr "Añadir entrada" -#: .\cookbook\templates\shopping_list.html:181 +#: .\cookbook\templates\shopping_list.html:152 msgid "Amount" msgstr "Cantidad" -#: .\cookbook\templates\shopping_list.html:194 +#: .\cookbook\templates\shopping_list.html:164 msgid "Select Unit" msgstr "Seleccionar unidad" -#: .\cookbook\templates\shopping_list.html:196 -#: .\cookbook\templates\shopping_list.html:218 -#: .\cookbook\templates\shopping_list.html:248 -#: .\cookbook\templates\shopping_list.html:272 -#: .\cookbook\templates\url_import.html:500 -#: .\cookbook\templates\url_import.html:532 +#: .\cookbook\templates\shopping_list.html:166 +#: .\cookbook\templates\shopping_list.html:189 +#: .\cookbook\templates\shopping_list.html:219 +#: .\cookbook\templates\shopping_list.html:243 +#: .\cookbook\templates\url_import.html:505 +#: .\cookbook\templates\url_import.html:537 msgid "Select" msgstr "Seleccionar" -#: .\cookbook\templates\shopping_list.html:216 +#: .\cookbook\templates\shopping_list.html:187 msgid "Select Food" msgstr "Seleccionar Alimento" -#: .\cookbook\templates\shopping_list.html:247 +#: .\cookbook\templates\shopping_list.html:218 msgid "Select Supermarket" msgstr "Seleccionar supermercado" -#: .\cookbook\templates\shopping_list.html:271 +#: .\cookbook\templates\shopping_list.html:242 msgid "Select User" msgstr "Seleccionar Usuario" -#: .\cookbook\templates\shopping_list.html:290 +#: .\cookbook\templates\shopping_list.html:258 msgid "Finished" msgstr "Completada" -#: .\cookbook\templates\shopping_list.html:303 +#: .\cookbook\templates\shopping_list.html:267 msgid "You are offline, shopping list might not syncronize." msgstr "Estás desconectado, la lista de la compra no se sincronizará." -#: .\cookbook\templates\shopping_list.html:368 +#: .\cookbook\templates\shopping_list.html:318 msgid "Copy/Export" msgstr "Copiar/Exportar" -#: .\cookbook\templates\shopping_list.html:372 -msgid "List Prefix" -msgstr "Prefijo de la lista" - #: .\cookbook\templates\socialaccount\connections.html:4 #: .\cookbook\templates\socialaccount\connections.html:15 msgid "Account Connections" @@ -2068,92 +2254,92 @@ msgstr "" msgid "Sign in using" msgstr "Iniciar sesión" -#: .\cookbook\templates\space.html:23 +#: .\cookbook\templates\space.html:25 msgid "Space:" msgstr "" -#: .\cookbook\templates\space.html:24 +#: .\cookbook\templates\space.html:26 #, fuzzy #| msgid "Description" msgid "Manage Subscription" msgstr "Descripción" -#: .\cookbook\templates\space.html:32 .\cookbook\templates\stats.html:19 +#: .\cookbook\templates\space.html:34 .\cookbook\templates\stats.html:19 msgid "Number of objects" msgstr "Número de objetos" -#: .\cookbook\templates\space.html:45 .\cookbook\templates\stats.html:30 +#: .\cookbook\templates\space.html:54 .\cookbook\templates\stats.html:30 msgid "Recipe Imports" msgstr "Recetas importadas" -#: .\cookbook\templates\space.html:53 .\cookbook\templates\stats.html:38 +#: .\cookbook\templates\space.html:62 .\cookbook\templates\stats.html:38 msgid "Objects stats" msgstr "Estadísticas de objetos" -#: .\cookbook\templates\space.html:56 .\cookbook\templates\stats.html:41 +#: .\cookbook\templates\space.html:65 .\cookbook\templates\stats.html:41 msgid "Recipes without Keywords" msgstr "Recetas sin palabras clave" -#: .\cookbook\templates\space.html:60 .\cookbook\templates\stats.html:45 +#: .\cookbook\templates\space.html:73 .\cookbook\templates\stats.html:45 msgid "Internal Recipes" msgstr "Recetas Internas" -#: .\cookbook\templates\space.html:73 +#: .\cookbook\templates\space.html:89 msgid "Members" msgstr "" -#: .\cookbook\templates\space.html:77 +#: .\cookbook\templates\space.html:95 #, fuzzy #| msgid "Invite Links" msgid "Invite User" msgstr "Enlaces de Invitación" -#: .\cookbook\templates\space.html:88 +#: .\cookbook\templates\space.html:107 msgid "User" msgstr "" -#: .\cookbook\templates\space.html:89 +#: .\cookbook\templates\space.html:108 msgid "Groups" msgstr "" -#: .\cookbook\templates\space.html:105 +#: .\cookbook\templates\space.html:119 #, fuzzy #| msgid "Admin" msgid "admin" msgstr "Administrador" -#: .\cookbook\templates\space.html:106 +#: .\cookbook\templates\space.html:120 msgid "user" msgstr "" -#: .\cookbook\templates\space.html:107 +#: .\cookbook\templates\space.html:121 msgid "guest" msgstr "" -#: .\cookbook\templates\space.html:108 +#: .\cookbook\templates\space.html:122 #, fuzzy #| msgid "Remove" msgid "remove" msgstr "Eliminar" -#: .\cookbook\templates\space.html:112 +#: .\cookbook\templates\space.html:126 msgid "Update" msgstr "" -#: .\cookbook\templates\space.html:116 +#: .\cookbook\templates\space.html:130 #, fuzzy #| msgid "You cannot edit this storage!" msgid "You cannot edit yourself." msgstr "¡No puede editar este almacenamiento!" -#: .\cookbook\templates\space.html:123 +#: .\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 "Todavía no hay recetas en este libro." -#: .\cookbook\templates\space.html:130 .\cookbook\templates\system.html:21 -#: .\cookbook\views\lists.py:100 +#: .\cookbook\templates\space.html:143 .\cookbook\templates\system.html:21 +#: .\cookbook\views\lists.py:85 msgid "Invite Links" msgstr "Enlaces de Invitación" @@ -2297,186 +2483,186 @@ msgstr "" " características sólo funcionan con bases de datos Postgres.\n" " " -#: .\cookbook\templates\url_import.html:6 +#: .\cookbook\templates\url_import.html:8 msgid "URL Import" msgstr "Importar URL" -#: .\cookbook\templates\url_import.html:31 +#: .\cookbook\templates\url_import.html:33 msgid "Drag me to your bookmarks to import recipes from anywhere" msgstr "" -#: .\cookbook\templates\url_import.html:32 +#: .\cookbook\templates\url_import.html:34 #, fuzzy #| msgid "Bookmark saved!" msgid "Bookmark Me!" msgstr "¡Marcador guardado!" -#: .\cookbook\templates\url_import.html:36 +#: .\cookbook\templates\url_import.html:38 msgid "URL" msgstr "" -#: .\cookbook\templates\url_import.html:38 +#: .\cookbook\templates\url_import.html:40 msgid "App" msgstr "" -#: .\cookbook\templates\url_import.html:62 +#: .\cookbook\templates\url_import.html:64 msgid "Enter website URL" msgstr "Introduce la URL del sitio web" -#: .\cookbook\templates\url_import.html:101 +#: .\cookbook\templates\url_import.html:104 msgid "Select recipe files to import or drop them here..." msgstr "" -#: .\cookbook\templates\url_import.html:122 +#: .\cookbook\templates\url_import.html:125 msgid "Paste json or html source here to load recipe." msgstr "" -#: .\cookbook\templates\url_import.html:150 +#: .\cookbook\templates\url_import.html:153 #, fuzzy #| msgid "View Recipe" msgid "Preview Recipe Data" msgstr "Ver la receta" -#: .\cookbook\templates\url_import.html:151 +#: .\cookbook\templates\url_import.html:154 msgid "Drag recipe attributes from the right into the appropriate box below." msgstr "" -#: .\cookbook\templates\url_import.html:160 -#: .\cookbook\templates\url_import.html:177 -#: .\cookbook\templates\url_import.html:194 -#: .\cookbook\templates\url_import.html:213 -#: .\cookbook\templates\url_import.html:231 -#: .\cookbook\templates\url_import.html:246 -#: .\cookbook\templates\url_import.html:261 -#: .\cookbook\templates\url_import.html:277 -#: .\cookbook\templates\url_import.html:304 -#: .\cookbook\templates\url_import.html:355 +#: .\cookbook\templates\url_import.html:163 +#: .\cookbook\templates\url_import.html:180 +#: .\cookbook\templates\url_import.html:197 +#: .\cookbook\templates\url_import.html:216 +#: .\cookbook\templates\url_import.html:234 +#: .\cookbook\templates\url_import.html:249 +#: .\cookbook\templates\url_import.html:264 +#: .\cookbook\templates\url_import.html:280 +#: .\cookbook\templates\url_import.html:307 +#: .\cookbook\templates\url_import.html:358 msgid "Clear Contents" msgstr "" -#: .\cookbook\templates\url_import.html:162 +#: .\cookbook\templates\url_import.html:165 msgid "Text dragged here will be appended to the name." msgstr "" -#: .\cookbook\templates\url_import.html:175 +#: .\cookbook\templates\url_import.html:178 msgid "Description" msgstr "Descripción" -#: .\cookbook\templates\url_import.html:179 +#: .\cookbook\templates\url_import.html:182 msgid "Text dragged here will be appended to the description." msgstr "" -#: .\cookbook\templates\url_import.html:196 +#: .\cookbook\templates\url_import.html:199 msgid "Keywords dragged here will be appended to current list" msgstr "" -#: .\cookbook\templates\url_import.html:211 +#: .\cookbook\templates\url_import.html:214 msgid "Image" msgstr "" -#: .\cookbook\templates\url_import.html:243 +#: .\cookbook\templates\url_import.html:246 #, fuzzy #| msgid "Preparation Time" msgid "Prep Time" msgstr "Tiempo de Preparación" -#: .\cookbook\templates\url_import.html:258 +#: .\cookbook\templates\url_import.html:261 #, fuzzy #| msgid "Time" msgid "Cook Time" msgstr "Tiempo" -#: .\cookbook\templates\url_import.html:279 +#: .\cookbook\templates\url_import.html:282 msgid "Ingredients dragged here will be appended to current list." msgstr "" -#: .\cookbook\templates\url_import.html:301 -#: .\cookbook\templates\url_import.html:572 +#: .\cookbook\templates\url_import.html:304 +#: .\cookbook\templates\url_import.html:579 msgid "Instructions" msgstr "Instrucciones" -#: .\cookbook\templates\url_import.html:306 +#: .\cookbook\templates\url_import.html:309 msgid "" "Recipe instructions dragged here will be appended to current instructions." msgstr "" -#: .\cookbook\templates\url_import.html:329 +#: .\cookbook\templates\url_import.html:332 #, fuzzy #| msgid "Discovered Recipes" msgid "Discovered Attributes" msgstr "Recetas Descubiertas" -#: .\cookbook\templates\url_import.html:331 +#: .\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 "" -#: .\cookbook\templates\url_import.html:348 +#: .\cookbook\templates\url_import.html:351 #, fuzzy #| msgid "Show as header" msgid "Show Blank Field" msgstr "Mostrar como encabezado" -#: .\cookbook\templates\url_import.html:353 +#: .\cookbook\templates\url_import.html:356 msgid "Blank Field" msgstr "" -#: .\cookbook\templates\url_import.html:357 +#: .\cookbook\templates\url_import.html:360 msgid "Items dragged to Blank Field will be appended." msgstr "" -#: .\cookbook\templates\url_import.html:404 +#: .\cookbook\templates\url_import.html:407 #, fuzzy #| msgid "Delete Step" msgid "Delete Text" msgstr "Eliminar paso" -#: .\cookbook\templates\url_import.html:417 +#: .\cookbook\templates\url_import.html:420 #, fuzzy #| msgid "Delete Recipe" msgid "Delete image" msgstr "Eliminar receta" -#: .\cookbook\templates\url_import.html:433 +#: .\cookbook\templates\url_import.html:436 msgid "Recipe Name" msgstr "Nombre de la Receta" -#: .\cookbook\templates\url_import.html:437 +#: .\cookbook\templates\url_import.html:440 #, fuzzy #| msgid "Description" msgid "Recipe Description" msgstr "Descripción" -#: .\cookbook\templates\url_import.html:499 -#: .\cookbook\templates\url_import.html:531 -#: .\cookbook\templates\url_import.html:587 +#: .\cookbook\templates\url_import.html:504 +#: .\cookbook\templates\url_import.html:536 +#: .\cookbook\templates\url_import.html:596 msgid "Select one" msgstr "Seleccione uno" -#: .\cookbook\templates\url_import.html:547 +#: .\cookbook\templates\url_import.html:554 msgid "Note" msgstr "Nota" -#: .\cookbook\templates\url_import.html:588 +#: .\cookbook\templates\url_import.html:597 #, fuzzy #| msgid "All Keywords" msgid "Add Keyword" msgstr "Todas las palabras clave." -#: .\cookbook\templates\url_import.html:601 +#: .\cookbook\templates\url_import.html:610 msgid "All Keywords" msgstr "Todas las palabras clave." -#: .\cookbook\templates\url_import.html:604 +#: .\cookbook\templates\url_import.html:613 msgid "Import all keywords, not only the ones already existing." msgstr "Importar todas las palabras clave, no solo las ya existentes." -#: .\cookbook\templates\url_import.html:631 +#: .\cookbook\templates\url_import.html:640 msgid "Information" msgstr "Información" -#: .\cookbook\templates\url_import.html:633 +#: .\cookbook\templates\url_import.html:642 msgid "" " Only websites containing ld+json or microdata information can currently\n" " be imported. Most big recipe pages " @@ -2495,112 +2681,197 @@ msgstr "" "no dudes en poner un ejemplo en las\n" " propuestas de GitHub." -#: .\cookbook\templates\url_import.html:641 +#: .\cookbook\templates\url_import.html:650 msgid "Google ld+json Info" msgstr "Información de Google ld+json" -#: .\cookbook\templates\url_import.html:644 +#: .\cookbook\templates\url_import.html:653 msgid "GitHub Issues" msgstr "Propuestas de GitHub" -#: .\cookbook\templates\url_import.html:646 +#: .\cookbook\templates\url_import.html:655 msgid "Recipe Markup Specification" msgstr "Especificación de anotaciones de la receta" -#: .\cookbook\views\api.py:83 .\cookbook\views\api.py:132 +#: .\cookbook\views\api.py:88 .\cookbook\views\api.py:170 #, fuzzy #| msgid "Parameter filter_list incorrectly formatted" msgid "Parameter updated_at incorrectly formatted" msgstr "Parámetro filter_list formateado incorrectamente" -#: .\cookbook\views\api.py:152 +#: .\cookbook\views\api.py:190 .\cookbook\views\api.py:291 #, python-brace-format msgid "No {self.basename} with id {pk} exists" msgstr "" -#: .\cookbook\views\api.py:156 +#: .\cookbook\views\api.py:194 msgid "Cannot merge with the same object!" msgstr "¡No se puede unir con el mismo objeto!" -#: .\cookbook\views\api.py:163 +#: .\cookbook\views\api.py:201 #, python-brace-format msgid "No {self.basename} with id {target} exists" msgstr "" -#: .\cookbook\views\api.py:168 +#: .\cookbook\views\api.py:206 #, fuzzy #| msgid "Cannot merge with the same object!" msgid "Cannot merge with child object!" msgstr "¡No se puede unir con el mismo objeto!" -#: .\cookbook\views\api.py:201 +#: .\cookbook\views\api.py:239 #, python-brace-format msgid "{source.name} was merged successfully with {target.name}" msgstr "" -#: .\cookbook\views\api.py:205 +#: .\cookbook\views\api.py:244 #, python-brace-format msgid "An error occurred attempting to merge {source.name} with {target.name}" msgstr "" -#: .\cookbook\views\api.py:249 -#, python-brace-format -msgid "No {self.basename} with id {child} exists" -msgstr "" - -#: .\cookbook\views\api.py:258 +#: .\cookbook\views\api.py:300 #, python-brace-format msgid "{child.name} was moved successfully to the root." msgstr "" -#: .\cookbook\views\api.py:261 .\cookbook\views\api.py:279 +#: .\cookbook\views\api.py:303 .\cookbook\views\api.py:321 msgid "An error occurred attempting to move " msgstr "" -#: .\cookbook\views\api.py:264 +#: .\cookbook\views\api.py:306 msgid "Cannot move an object to itself!" msgstr "" -#: .\cookbook\views\api.py:270 +#: .\cookbook\views\api.py:312 #, python-brace-format msgid "No {self.basename} with id {parent} exists" msgstr "" -#: .\cookbook\views\api.py:276 +#: .\cookbook\views\api.py:318 #, python-brace-format msgid "{child.name} was moved successfully to parent {parent.name}" msgstr "" -#: .\cookbook\views\api.py:723 .\cookbook\views\data.py:42 +#: .\cookbook\views\api.py:470 +#, python-brace-format +msgid "{obj.name} was removed from the shopping list." +msgstr "" + +#: .\cookbook\views\api.py:475 .\cookbook\views\api.py:726 +#, python-brace-format +msgid "{obj.name} was added to the shopping list." +msgstr "" + +#: .\cookbook\views\api.py:587 +msgid "ID of recipe a step is part of. For multiple repeat parameter." +msgstr "" + +#: .\cookbook\views\api.py:588 +msgid "Query string matched (fuzzy) against object name." +msgstr "" + +#: .\cookbook\views\api.py:631 +msgid "" +"Query string matched (fuzzy) against recipe name. In the future also " +"fulltext search." +msgstr "" + +#: .\cookbook\views\api.py:632 +msgid "ID of keyword a recipe should have. For multiple repeat parameter." +msgstr "" + +#: .\cookbook\views\api.py:633 +msgid "ID of food a recipe should have. For multiple repeat parameter." +msgstr "" + +#: .\cookbook\views\api.py:634 +msgid "ID of unit a recipe should have." +msgstr "" + +#: .\cookbook\views\api.py:635 +msgid "Rating a recipe should have. [0 - 5]" +msgstr "" + +#: .\cookbook\views\api.py:636 +msgid "ID of book a recipe should be in. For multiple repeat parameter." +msgstr "" + +#: .\cookbook\views\api.py:637 +msgid "" +"If recipe should have all (AND=false) or any (OR=true) of the " +"provided keywords." +msgstr "" + +#: .\cookbook\views\api.py:638 +msgid "" +"If recipe should have all (AND=false) or any (OR=true) of the " +"provided foods." +msgstr "" + +#: .\cookbook\views\api.py:639 +msgid "" +"If recipe should be in all (AND=false) or any (OR=true) of the " +"provided books." +msgstr "" + +#: .\cookbook\views\api.py:640 +msgid "If only internal recipes should be returned. [true/false]" +msgstr "" + +#: .\cookbook\views\api.py:641 +msgid "Returns the results in randomized order. [true/false]" +msgstr "" + +#: .\cookbook\views\api.py:642 +msgid "Returns new results first in search results. [true/false]" +msgstr "" + +#: .\cookbook\views\api.py:768 +msgid "" +"Returns the shopping list entry with a primary key of id. Multiple values " +"allowed." +msgstr "" + +#: .\cookbook\views\api.py:771 +msgid "" +"Filter shopping list entries on checked. [true, false, both, recent]
- recent includes unchecked items and recently completed items." +msgstr "" + +#: .\cookbook\views\api.py:773 +msgid "Returns the shopping list entries sorted by supermarket category order." +msgstr "" + +#: .\cookbook\views\api.py:922 .\cookbook\views\data.py:42 #: .\cookbook\views\edit.py:129 .\cookbook\views\new.py:95 #, fuzzy #| msgid "This feature is not available in the demo version!" msgid "This feature is not yet available in the hosted version of tandoor!" msgstr "¡Esta funcionalidad no está disponible en la versión demo!" -#: .\cookbook\views\api.py:745 +#: .\cookbook\views\api.py:944 msgid "Sync successful!" msgstr "¡Sincronización exitosa!" -#: .\cookbook\views\api.py:750 +#: .\cookbook\views\api.py:949 msgid "Error synchronizing with Storage" msgstr "Error de sincronización con el almacenamiento" -#: .\cookbook\views\api.py:828 +#: .\cookbook\views\api.py:1028 msgid "Nothing to do." msgstr "" -#: .\cookbook\views\api.py:843 +#: .\cookbook\views\api.py:1043 msgid "The requested site provided malformed data and cannot be read." msgstr "" "El sitio solicitado proporcionó datos con formato incorrecto y no se puede " "leer." -#: .\cookbook\views\api.py:850 +#: .\cookbook\views\api.py:1050 msgid "The requested page could not be found." msgstr "La página solicitada no pudo ser encontrada." -#: .\cookbook\views\api.py:859 +#: .\cookbook\views\api.py:1068 msgid "" "The requested site does not provide any recognized data format to import the " "recipe from." @@ -2608,24 +2879,28 @@ msgstr "" "El sitio solicitado no proporciona ningún formato de datos reconocido para " "importar la receta." -#: .\cookbook\views\api.py:873 +#: .\cookbook\views\api.py:1082 +msgid "Connection Refused." +msgstr "" + +#: .\cookbook\views\api.py:1091 #, fuzzy #| msgid "The requested page could not be found." msgid "No useable data could be found." msgstr "La página solicitada no pudo ser encontrada." -#: .\cookbook\views\api.py:889 +#: .\cookbook\views\api.py:1107 msgid "I couldn't find anything to do." msgstr "" #: .\cookbook\views\data.py:34 .\cookbook\views\data.py:129 -#: .\cookbook\views\edit.py:49 .\cookbook\views\import_export.py:73 +#: .\cookbook\views\edit.py:49 .\cookbook\views\import_export.py:80 #: .\cookbook\views\new.py:33 msgid "You have reached the maximum number of recipes for your space." msgstr "" #: .\cookbook\views\data.py:38 .\cookbook\views\data.py:133 -#: .\cookbook\views\edit.py:53 .\cookbook\views\import_export.py:77 +#: .\cookbook\views\edit.py:53 .\cookbook\views\import_export.py:84 #: .\cookbook\views\new.py:37 msgid "You have more users than allowed in your space." msgstr "" @@ -2641,7 +2916,7 @@ msgstr[1] "Edición masiva realizada. %(count)d Recetas fueron actualizadas." msgid "Monitor" msgstr "Monitor" -#: .\cookbook\views\delete.py:125 .\cookbook\views\lists.py:86 +#: .\cookbook\views\delete.py:125 .\cookbook\views\lists.py:71 #: .\cookbook\views\new.py:101 msgid "Storage Backend" msgstr "Backend de Almacenamiento" @@ -2661,7 +2936,7 @@ msgstr "Libro de recetas" msgid "Bookmarks" msgstr "Marcadores" -#: .\cookbook\views\delete.py:192 .\cookbook\views\new.py:235 +#: .\cookbook\views\delete.py:192 .\cookbook\views\new.py:238 msgid "Invite Link" msgstr "Enlace de invitación" @@ -2685,44 +2960,48 @@ msgstr "¡Cambios guardados!" msgid "Error saving changes!" msgstr "¡Error al guardar los cambios!" -#: .\cookbook\views\import_export.py:99 +#: .\cookbook\views\import_export.py:106 msgid "Importing is not implemented for this provider" msgstr "La importación no está implementada para este proveedor" -#: .\cookbook\views\import_export.py:121 +#: .\cookbook\views\import_export.py:127 +msgid "" +"The PDF Exporter is not enabled on this instance as it is still in an " +"experimental state." +msgstr "" + +#: .\cookbook\views\import_export.py:132 msgid "Exporting is not implemented for this provider" msgstr "La exportación no está implementada para este proveedor" -#: .\cookbook\views\lists.py:26 +#: .\cookbook\views\lists.py:25 msgid "Import Log" msgstr "Importar registro" -#: .\cookbook\views\lists.py:39 +#: .\cookbook\views\lists.py:38 msgid "Discovery" msgstr "Descubrimiento" -#: .\cookbook\views\lists.py:69 +#: .\cookbook\views\lists.py:54 msgid "Shopping Lists" msgstr "Listas de la compra" -#: .\cookbook\views\lists.py:129 -#, fuzzy -#| msgid "Food" -msgid "Foods" -msgstr "Comida" - -#: .\cookbook\views\lists.py:163 +#: .\cookbook\views\lists.py:148 #, fuzzy #| msgid "Supermarket" msgid "Supermarkets" msgstr "Supermercado" -#: .\cookbook\views\lists.py:179 +#: .\cookbook\views\lists.py:164 #, fuzzy #| msgid "Shopping Recipes" msgid "Shopping Categories" msgstr "Recetas en el carro de la compra" +#: .\cookbook\views\lists.py:217 +msgid "Steps" +msgstr "Pasos" + #: .\cookbook\views\lists.py:232 #, fuzzy #| msgid "Shopping List" @@ -2737,87 +3016,87 @@ msgstr "¡Nueva receta importada!" msgid "There was an error importing this recipe!" msgstr "¡Hubo un error al importar esta receta!" -#: .\cookbook\views\new.py:209 +#: .\cookbook\views\new.py:212 msgid "Hello" msgstr "" -#: .\cookbook\views\new.py:209 +#: .\cookbook\views\new.py:212 msgid "You have been invited by " msgstr "" -#: .\cookbook\views\new.py:210 +#: .\cookbook\views\new.py:213 msgid " to join their Tandoor Recipes space " msgstr "" -#: .\cookbook\views\new.py:211 +#: .\cookbook\views\new.py:214 msgid "Click the following link to activate your account: " msgstr "" -#: .\cookbook\views\new.py:212 +#: .\cookbook\views\new.py:215 msgid "" "If the link does not work use the following code to manually join the space: " msgstr "" -#: .\cookbook\views\new.py:213 +#: .\cookbook\views\new.py:216 msgid "The invitation is valid until " msgstr "" -#: .\cookbook\views\new.py:214 +#: .\cookbook\views\new.py:217 msgid "" "Tandoor Recipes is an Open Source recipe manager. Check it out on GitHub " msgstr "" -#: .\cookbook\views\new.py:217 +#: .\cookbook\views\new.py:220 msgid "Tandoor Recipes Invite" msgstr "" -#: .\cookbook\views\new.py:224 +#: .\cookbook\views\new.py:227 msgid "Invite link successfully send to user." msgstr "" -#: .\cookbook\views\new.py:227 +#: .\cookbook\views\new.py:230 msgid "" "You have send to many emails, please share the link manually or wait a few " "hours." msgstr "" -#: .\cookbook\views\new.py:229 +#: .\cookbook\views\new.py:232 msgid "Email to user could not be send, please share link manually." msgstr "" -#: .\cookbook\views\views.py:127 +#: .\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 "" -#: .\cookbook\views\views.py:175 +#: .\cookbook\views\views.py:174 msgid "You do not have the required permissions to perform this action!" msgstr "¡No tienes los permisos necesarios para realizar esta acción!" -#: .\cookbook\views\views.py:186 +#: .\cookbook\views\views.py:185 msgid "Comment saved!" msgstr "¡Comentario guardado!" -#: .\cookbook\views\views.py:277 +#: .\cookbook\views\views.py:276 msgid "This feature is not available in the demo version!" msgstr "¡Esta funcionalidad no está disponible en la versión demo!" -#: .\cookbook\views\views.py:340 +#: .\cookbook\views\views.py:335 msgid "You must select at least one field to search!" msgstr "" -#: .\cookbook\views\views.py:345 +#: .\cookbook\views\views.py:340 msgid "" "To use this search method you must select at least one full text search " "field!" msgstr "" -#: .\cookbook\views\views.py:349 +#: .\cookbook\views\views.py:344 msgid "Fuzzy search is not compatible with this search method!" msgstr "" -#: .\cookbook\views\views.py:452 +#: .\cookbook\views\views.py:470 msgid "" "The setup page can only be used to create the first user! If you have " "forgotten your superuser credentials please consult the django documentation " @@ -2827,39 +3106,39 @@ msgstr "" "usuario. Si has olvidado tus credenciales de superusuario, por favor " "consulta la documentación de django sobre cómo restablecer las contraseñas." -#: .\cookbook\views\views.py:459 +#: .\cookbook\views\views.py:477 msgid "Passwords dont match!" msgstr "¡Las contraseñas no coinciden!" -#: .\cookbook\views\views.py:475 +#: .\cookbook\views\views.py:493 msgid "User has been created, please login!" msgstr "El usuario ha sido creado, ¡inicie sesión!" -#: .\cookbook\views\views.py:491 +#: .\cookbook\views\views.py:509 msgid "Malformed Invite Link supplied!" msgstr "¡Se proporcionó un enlace de invitación con formato incorrecto!" -#: .\cookbook\views\views.py:498 +#: .\cookbook\views\views.py:516 #, 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 ha iniciado sesión y por lo tanto no puede ver esta página!" -#: .\cookbook\views\views.py:509 +#: .\cookbook\views\views.py:527 msgid "Successfully joined space." msgstr "" -#: .\cookbook\views\views.py:515 +#: .\cookbook\views\views.py:533 msgid "Invite Link not valid or already used!" msgstr "¡El enlace de invitación no es válido o ya se ha utilizado!" -#: .\cookbook\views\views.py:579 +#: .\cookbook\views\views.py:614 msgid "" "Reporting share links is not enabled for this instance. Please notify the " "page administrator to report problems." msgstr "" -#: .\cookbook\views\views.py:585 +#: .\cookbook\views\views.py:620 msgid "" "Recipe sharing link has been disabled! For additional information please " "contact the page administrator." @@ -2886,9 +3165,6 @@ msgstr "" #~ msgid "Old Food" #~ msgstr "Antiguo alimento" -#~ msgid "Food that should be replaced." -#~ msgstr "Alimento que se va a reemplazar." - #~ msgid "New Entry" #~ msgstr "Nueva entrada" @@ -3147,9 +3423,6 @@ msgstr "" #~ msgid "Delete Recipe" #~ msgstr "Eliminar receta" -#~ msgid "Steps" -#~ msgstr "Pasos" - #, fuzzy #~| msgid "Password Reset" #~ msgid "Password Settings" diff --git a/cookbook/locale/fr/LC_MESSAGES/django.mo b/cookbook/locale/fr/LC_MESSAGES/django.mo index 96ff5081fd..d2accc62ac 100644 Binary files a/cookbook/locale/fr/LC_MESSAGES/django.mo and b/cookbook/locale/fr/LC_MESSAGES/django.mo differ diff --git a/cookbook/locale/fr/LC_MESSAGES/django.po b/cookbook/locale/fr/LC_MESSAGES/django.po index 01c314c7a8..42bc4c54d0 100644 --- a/cookbook/locale/fr/LC_MESSAGES/django.po +++ b/cookbook/locale/fr/LC_MESSAGES/django.po @@ -13,9 +13,9 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-08 16:27+0100\n" -"PO-Revision-Date: 2021-11-04 09:06+0000\n" -"Last-Translator: FrenchAnon \n" +"POT-Creation-Date: 2022-01-18 14:52+0100\n" +"PO-Revision-Date: 2022-01-16 07:06+0000\n" +"Last-Translator: Josselin du PLESSIS \n" "Language-Team: French \n" "Language: fr\n" @@ -25,81 +25,66 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 4.8\n" -#: .\cookbook\filters.py:23 .\cookbook\templates\base.html:125 -#: .\cookbook\templates\forms\ingredients.html:34 -#: .\cookbook\templates\space.html:43 .\cookbook\templates\stats.html:28 -#: .\cookbook\templates\url_import.html:274 +#: .\cookbook\filters.py:23 .\cookbook\templates\forms\ingredients.html:34 +#: .\cookbook\templates\space.html:50 .\cookbook\templates\stats.html:28 +#: .\cookbook\templates\url_import.html:277 msgid "Ingredients" msgstr "Ingrédients" -#: .\cookbook\forms.py:54 -#, fuzzy -#| msgid "Default" +#: .\cookbook\forms.py:56 msgid "Default unit" -msgstr "Par défaut" +msgstr "Unité par défaut" -#: .\cookbook\forms.py:55 -#, fuzzy -#| msgid "System Information" +#: .\cookbook\forms.py:57 msgid "Use fractions" -msgstr "Informations système" +msgstr "Utiliser les fractions" -#: .\cookbook\forms.py:56 +#: .\cookbook\forms.py:58 msgid "Use KJ" -msgstr "" +msgstr "Utiliser les kJ" -#: .\cookbook\forms.py:57 +#: .\cookbook\forms.py:59 msgid "Theme" -msgstr "" +msgstr "Thème" -#: .\cookbook\forms.py:58 +#: .\cookbook\forms.py:60 msgid "Navbar color" -msgstr "" +msgstr "Couleur de la barre de navigation" -#: .\cookbook\forms.py:59 +#: .\cookbook\forms.py:61 msgid "Sticky navbar" -msgstr "" +msgstr "Barre de navigation permanente" -#: .\cookbook\forms.py:60 -#, fuzzy -#| msgid "Default" +#: .\cookbook\forms.py:62 msgid "Default page" -msgstr "Par défaut" +msgstr "Page par défaut" -#: .\cookbook\forms.py:61 -#, fuzzy -#| msgid "Shopping Recipes" +#: .\cookbook\forms.py:63 msgid "Show recent recipes" -msgstr "Recettes dans le panier" +msgstr "Montrer les recettes récentes" -#: .\cookbook\forms.py:62 -#, fuzzy -#| msgid "Search" +#: .\cookbook\forms.py:64 msgid "Search style" msgstr "Rechercher" -#: .\cookbook\forms.py:63 +#: .\cookbook\forms.py:65 msgid "Plan sharing" -msgstr "" +msgstr "Partage du planificateur" -#: .\cookbook\forms.py:64 -#, fuzzy -#| msgid "Ingredients" +#: .\cookbook\forms.py:66 msgid "Ingredient decimal places" -msgstr "Ingrédients" +msgstr "Nombre de décimales pour les ingrédients" -#: .\cookbook\forms.py:65 -#, fuzzy -#| msgid "Shopping list currently empty" +#: .\cookbook\forms.py:67 msgid "Shopping list auto sync period" -msgstr "La liste de courses est actuellement vide" +msgstr "Période de synchro automatique de la liste de courses" -#: .\cookbook\forms.py:66 .\cookbook\templates\recipe_view.html:21 -#: .\cookbook\templates\space.html:62 .\cookbook\templates\stats.html:47 +#: .\cookbook\forms.py:68 .\cookbook\templates\recipe_view.html:21 +#: .\cookbook\templates\space.html:77 .\cookbook\templates\stats.html:47 msgid "Comments" msgstr "Commentaires" -#: .\cookbook\forms.py:70 +#: .\cookbook\forms.py:72 msgid "" "Color of the top navigation bar. Not all colors work with all themes, just " "try them out!" @@ -107,13 +92,13 @@ msgstr "" "La couleur de la barre de navigation du haut. Toutes les couleurs ne " "marchent pas avec tous les thèmes, essayez-les !" -#: .\cookbook\forms.py:72 +#: .\cookbook\forms.py:74 msgid "Default Unit to be used when inserting a new ingredient into a recipe." msgstr "" "L'unité par défaut utilisée lors de l'ajout d'un nouvel ingrédient dans une " "recette." -#: .\cookbook\forms.py:74 +#: .\cookbook\forms.py:76 msgid "" "Enables support for fractions in ingredient amounts (e.g. convert decimals " "to fractions automatically)" @@ -121,33 +106,43 @@ msgstr "" "Autorise l'usage des fractions dans les quantités des ingrédients (convertit " "les décimales en fractions automatiquement)" -#: .\cookbook\forms.py:76 +#: .\cookbook\forms.py:78 msgid "Display nutritional energy amounts in joules instead of calories" msgstr "" +"Afficher les quantités d'énergie nutritionnelle en joules plutôt qu'en " +"calories" -#: .\cookbook\forms.py:78 -msgid "" -"Users with whom newly created meal plan/shopping list entries should be " -"shared by default." +#: .\cookbook\forms.py:79 +#, fuzzy +#| msgid "" +#| "Users with whom newly created meal plan/shopping list entries should be " +#| "shared by default." +msgid "Users with whom newly created meal plans should be shared by default." msgstr "" "Utilisateurs avec lesquels les listes de courses et plans de repas " "nouvellement créés seront partagés par défaut." #: .\cookbook\forms.py:80 +#, fuzzy +#| msgid "Try the new shopping list" +msgid "Users with whom to share shopping lists." +msgstr "Essayer la nouvelle liste de courses" + +#: .\cookbook\forms.py:82 msgid "Show recently viewed recipes on search page." msgstr "Afficher les recettes récemment consultées sur la page de recherche." -#: .\cookbook\forms.py:81 +#: .\cookbook\forms.py:83 msgid "Number of decimals to round ingredients." msgstr "Nombre de décimales pour arrondir les ingrédients." -#: .\cookbook\forms.py:82 +#: .\cookbook\forms.py:84 msgid "If you want to be able to create and see comments underneath recipes." msgstr "" "Si vous souhaitez pouvoir créer et consulter des commentaires en-dessous des " "recettes." -#: .\cookbook\forms.py:84 +#: .\cookbook\forms.py:86 .\cookbook\forms.py:493 msgid "" "Setting to 0 will disable auto sync. When viewing a shopping list the list " "is updated every set seconds to sync changes someone else might have made. " @@ -161,11 +156,19 @@ msgstr "" "données mobiles. Si la valeur est plus petite que les limites de l'instance, " "le paramètre sera réinitialisé." -#: .\cookbook\forms.py:87 +#: .\cookbook\forms.py:89 msgid "Makes the navbar stick to the top of the page." msgstr "Épingler la barre de navigation en haut de la page." -#: .\cookbook\forms.py:103 +#: .\cookbook\forms.py:90 .\cookbook\forms.py:496 +msgid "Automatically add meal plan ingredients to shopping list." +msgstr "" + +#: .\cookbook\forms.py:91 +msgid "Exclude ingredients that are on hand." +msgstr "" + +#: .\cookbook\forms.py:108 msgid "" "Both fields are optional. If none are given the username will be displayed " "instead" @@ -173,39 +176,39 @@ msgstr "" "Les deux champs sont facultatifs. Si aucun n'est rempli, le nom " "d'utilisateur sera affiché à la place" -#: .\cookbook\forms.py:124 .\cookbook\forms.py:289 -#: .\cookbook\templates\url_import.html:158 +#: .\cookbook\forms.py:129 .\cookbook\forms.py:298 +#: .\cookbook\templates\url_import.html:161 msgid "Name" msgstr "Nom" -#: .\cookbook\forms.py:125 .\cookbook\forms.py:290 -#: .\cookbook\templates\space.html:39 .\cookbook\templates\stats.html:24 -#: .\cookbook\templates\url_import.html:192 -#: .\cookbook\templates\url_import.html:578 .\cookbook\views\lists.py:112 +#: .\cookbook\forms.py:130 .\cookbook\forms.py:299 +#: .\cookbook\templates\space.html:44 .\cookbook\templates\stats.html:24 +#: .\cookbook\templates\url_import.html:195 +#: .\cookbook\templates\url_import.html:585 .\cookbook\views\lists.py:97 msgid "Keywords" msgstr "Mots-clés" -#: .\cookbook\forms.py:126 +#: .\cookbook\forms.py:131 msgid "Preparation time in minutes" msgstr "Le temps de préparation en minutes" -#: .\cookbook\forms.py:127 +#: .\cookbook\forms.py:132 msgid "Waiting time (cooking/baking) in minutes" msgstr "Temps d'attente (pose/cuisson) en minutes" -#: .\cookbook\forms.py:128 .\cookbook\forms.py:259 .\cookbook\forms.py:291 +#: .\cookbook\forms.py:133 .\cookbook\forms.py:267 .\cookbook\forms.py:300 msgid "Path" msgstr "Chemin" -#: .\cookbook\forms.py:129 +#: .\cookbook\forms.py:134 msgid "Storage UID" msgstr "UID de stockage" -#: .\cookbook\forms.py:157 +#: .\cookbook\forms.py:164 msgid "Default" msgstr "Par défaut" -#: .\cookbook\forms.py:168 .\cookbook\templates\url_import.html:94 +#: .\cookbook\forms.py:175 .\cookbook\templates\url_import.html:97 msgid "" "To prevent duplicates recipes with the same name as existing ones are " "ignored. Check this box to import everything." @@ -213,22 +216,22 @@ msgstr "" "Pour éviter les doublons, les recettes de même nom seront ignorées. Cocher " "cette case pour tout importer." -#: .\cookbook\forms.py:190 +#: .\cookbook\forms.py:197 msgid "Add your comment: " msgstr "Ajoutez votre commentaire : " -#: .\cookbook\forms.py:205 +#: .\cookbook\forms.py:212 msgid "Leave empty for dropbox and enter app password for nextcloud." msgstr "" "Laissez vide pour Dropbox et renseigner votre mot de passe d'application " "pour Nextcloud." -#: .\cookbook\forms.py:212 +#: .\cookbook\forms.py:219 msgid "Leave empty for nextcloud and enter api token for dropbox." msgstr "" "Laissez vide pour Nextcloud et renseignez vote jeton d'API pour Dropbox." -#: .\cookbook\forms.py:221 +#: .\cookbook\forms.py:228 msgid "" "Leave empty for dropbox and enter only base url for nextcloud (/remote." "php/webdav/ is added automatically)" @@ -236,33 +239,33 @@ msgstr "" "Laisser vide pour Dropbox et saisissez seulement l'URL de base pour " "Nextcloud (/remote.php/webdav/ est ajouté automatiquement)" -#: .\cookbook\forms.py:258 .\cookbook\views\edit.py:166 +#: .\cookbook\forms.py:266 .\cookbook\views\edit.py:166 msgid "Storage" msgstr "Stockage" -#: .\cookbook\forms.py:260 +#: .\cookbook\forms.py:268 msgid "Active" -msgstr "" +msgstr "Actif" -#: .\cookbook\forms.py:265 +#: .\cookbook\forms.py:274 msgid "Search String" msgstr "Texte recherché" -#: .\cookbook\forms.py:292 +#: .\cookbook\forms.py:301 msgid "File ID" msgstr "ID du fichier" -#: .\cookbook\forms.py:313 +#: .\cookbook\forms.py:323 msgid "You must provide at least a recipe or a title." msgstr "Vous devez au moins fournir une recette ou un titre." -#: .\cookbook\forms.py:326 +#: .\cookbook\forms.py:336 msgid "You can list default users to share recipes with in the settings." msgstr "" "Vous pouvez lister les utilisateurs par défaut avec qui partager des " "recettes dans les paramètres." -#: .\cookbook\forms.py:327 +#: .\cookbook\forms.py:337 msgid "" "You can use markdown to format this field. See the docs here" @@ -270,115 +273,236 @@ msgstr "" "Vous pouvez utiliser du markdown pour mettre en forme ce champ. Voir la documentation ici" -#: .\cookbook\forms.py:353 +#: .\cookbook\forms.py:363 msgid "Maximum number of users for this space reached." msgstr "Nombre maximum d'utilisateurs atteint pour ce groupe." -#: .\cookbook\forms.py:359 +#: .\cookbook\forms.py:369 msgid "Email address already taken!" msgstr "Adresse mail déjà utilisée !" -#: .\cookbook\forms.py:367 -#, fuzzy -#| msgid "" -#| "An email address is not required but if present the invite link will be " -#| "send to the user." +#: .\cookbook\forms.py:377 msgid "" "An email address is not required but if present the invite link will be sent " "to the user." msgstr "" -"Une adresse mail n'est pas requise mais le lien d'invitation sera envoyé à " -"l'utilisateur si elle est présente." +"Une adresse mail n'est pas requise mais si elle présente, le lien " +"d'invitation sera envoyé à l'utilisateur." -#: .\cookbook\forms.py:382 +#: .\cookbook\forms.py:392 msgid "Name already taken." msgstr "Nom déjà pris." -#: .\cookbook\forms.py:393 +#: .\cookbook\forms.py:403 msgid "Accept Terms and Privacy" msgstr "Accepter les conditions d'utilisation" -#: .\cookbook\forms.py:425 +#: .\cookbook\forms.py:435 msgid "" "Determines how fuzzy a search is if it uses trigram similarity matching (e." "g. low values mean more typos are ignored)." msgstr "" +"Détermine le degré de flou d'une recherche si elle utilise la correspondance " +"par similarité de trigrammes (par exemple, des valeurs faibles signifient " +"que davantage de fautes de frappe sont ignorées)." -#: .\cookbook\forms.py:435 +#: .\cookbook\forms.py:445 msgid "" "Select type method of search. Click here for " "full desciption of choices." msgstr "" +"Sélectionner la méthode de recherche. Cliquer ici pour une description complète des choix." -#: .\cookbook\forms.py:436 +#: .\cookbook\forms.py:446 msgid "" "Use fuzzy matching on units, keywords and ingredients when editing and " "importing recipes." msgstr "" +"Utilisez la correspondance floue sur les unités, les mots-clés et les " +"ingrédients lors de l'édition et de l'importation de recettes." -#: .\cookbook\forms.py:438 +#: .\cookbook\forms.py:448 msgid "" "Fields to search ignoring accents. Selecting this option can improve or " "degrade search quality depending on language" msgstr "" +"Champs à rechercher en ignorant les accents. La sélection de cette option " +"peut améliorer ou dégrader la qualité de la recherche en fonction de la " +"langue." -#: .\cookbook\forms.py:440 +#: .\cookbook\forms.py:450 msgid "" "Fields to search for partial matches. (e.g. searching for 'Pie' will return " "'pie' and 'piece' and 'soapie')" msgstr "" +"Champs à rechercher pour les correspondances partielles. (par exemple, la " +"recherche de \"Tarte\" renverra \"tarte\", \"tartelette\" et \"tartes\")" -#: .\cookbook\forms.py:442 +#: .\cookbook\forms.py:452 msgid "" "Fields to search for beginning of word matches. (e.g. searching for 'sa' " "will return 'salad' and 'sandwich')" msgstr "" +"Champs permettant de rechercher les correspondances de début de mot (par " +"exemple, si vous recherchez \"sa\", vous obtiendrez \"salade\" et \"sandwich" +"\")." -#: .\cookbook\forms.py:444 +#: .\cookbook\forms.py:454 msgid "" "Fields to 'fuzzy' search. (e.g. searching for 'recpie' will find 'recipe'.) " "Note: this option will conflict with 'web' and 'raw' methods of search." msgstr "" +"Champs pour la recherche \"floue\" (par exemple, si vous recherchez \"rectte" +"\", vous trouverez \"recette\".) Remarque : cette option est incompatible " +"avec les méthodes de recherche \"web\" et \"brute\"." -#: .\cookbook\forms.py:446 +#: .\cookbook\forms.py:456 msgid "" "Fields to full text search. Note: 'web', 'phrase', and 'raw' search methods " "only function with fulltext fields." msgstr "" +"Champs de recherche en texte intégral. Remarque : les méthodes de recherche " +"\"web\", \"phrase\" et \"raw\" ne fonctionnent qu'avec des champs en texte " +"intégral." -#: .\cookbook\forms.py:450 -#, fuzzy -#| msgid "Search" +#: .\cookbook\forms.py:460 msgid "Search Method" -msgstr "Rechercher" +msgstr "Méthode de recherche" -#: .\cookbook\forms.py:451 +#: .\cookbook\forms.py:461 msgid "Fuzzy Lookups" -msgstr "" +msgstr "Recherches floues" -#: .\cookbook\forms.py:452 +#: .\cookbook\forms.py:462 msgid "Ignore Accent" -msgstr "" +msgstr "Ignorer les accents" -#: .\cookbook\forms.py:453 +#: .\cookbook\forms.py:463 msgid "Partial Match" msgstr "correspondance partielle" -#: .\cookbook\forms.py:454 +#: .\cookbook\forms.py:464 msgid "Starts Wtih" msgstr "Commence par" -#: .\cookbook\forms.py:455 -#, fuzzy -#| msgid "Search" +#: .\cookbook\forms.py:465 msgid "Fuzzy Search" -msgstr "Rechercher" +msgstr "Recherche floue" -#: .\cookbook\forms.py:456 -#, fuzzy -#| msgid "Text" +#: .\cookbook\forms.py:466 msgid "Full Text" -msgstr "Texte" +msgstr "Plein texte" + +#: .\cookbook\forms.py:491 +msgid "" +"Users will see all items you add to your shopping list. They must add you " +"to see items on their list." +msgstr "" + +#: .\cookbook\forms.py:497 +msgid "" +"When adding a meal plan to the shopping list (manually or automatically), " +"include all related recipes." +msgstr "" + +#: .\cookbook\forms.py:498 +msgid "" +"When adding a meal plan to the shopping list (manually or automatically), " +"exclude ingredients that are on hand." +msgstr "" + +#: .\cookbook\forms.py:499 +msgid "Default number of hours to delay a shopping list entry." +msgstr "" + +#: .\cookbook\forms.py:500 +msgid "Filter shopping list to only include supermarket categories." +msgstr "" + +#: .\cookbook\forms.py:501 +msgid "Days of recent shopping list entries to display." +msgstr "" + +#: .\cookbook\forms.py:502 +msgid "Mark food 'On Hand' when checked off shopping list." +msgstr "" + +#: .\cookbook\forms.py:503 +msgid "Delimiter to use for CSV exports." +msgstr "" + +#: .\cookbook\forms.py:504 +msgid "Prefix to add when copying list to the clipboard." +msgstr "" + +#: .\cookbook\forms.py:508 +#, fuzzy +#| msgid "New Shopping List" +msgid "Share Shopping List" +msgstr "Nouvelle liste de courses" + +#: .\cookbook\forms.py:509 +msgid "Autosync" +msgstr "" + +#: .\cookbook\forms.py:510 +msgid "Auto Add Meal Plan" +msgstr "" + +#: .\cookbook\forms.py:511 +msgid "Exclude On Hand" +msgstr "" + +#: .\cookbook\forms.py:512 +msgid "Include Related" +msgstr "" + +#: .\cookbook\forms.py:513 +msgid "Default Delay Hours" +msgstr "" + +#: .\cookbook\forms.py:514 +#, fuzzy +#| msgid "Select Supermarket" +msgid "Filter to Supermarket" +msgstr "Sélectionner un supermarché" + +#: .\cookbook\forms.py:515 +msgid "Recent Days" +msgstr "" + +#: .\cookbook\forms.py:516 +msgid "CSV Delimiter" +msgstr "" + +#: .\cookbook\forms.py:517 .\cookbook\templates\shopping_list.html:322 +msgid "List Prefix" +msgstr "Préfixe de la liste" + +#: .\cookbook\forms.py:518 +msgid "Auto On Hand" +msgstr "" + +#: .\cookbook\forms.py:528 +msgid "Reset Food Inheritance" +msgstr "" + +#: .\cookbook\forms.py:529 +msgid "Reset all food to inherit the fields configured." +msgstr "" + +#: .\cookbook\forms.py:541 +#, fuzzy +#| msgid "Food that should be replaced." +msgid "Fields on food that should be inherited by default." +msgstr "Aliment qui devrait être remplacé." + +#: .\cookbook\forms.py:542 +#, fuzzy +#| msgid "Show recently viewed recipes on search page." +msgid "Show recipe counts on search filters" +msgstr "Afficher les recettes récemment consultées sur la page de recherche." #: .\cookbook\helper\AllAuthCustomAdapter.py:36 msgid "" @@ -389,19 +513,19 @@ msgstr "" "minutes et réessayez." #: .\cookbook\helper\permission_helper.py:136 -#: .\cookbook\helper\permission_helper.py:159 .\cookbook\views\views.py:149 +#: .\cookbook\helper\permission_helper.py:159 .\cookbook\views\views.py:148 msgid "You are not logged in and therefore cannot view this page!" msgstr "Vous n'êtes pas connecté et ne pouvez donc pas afficher cette page !" #: .\cookbook\helper\permission_helper.py:140 #: .\cookbook\helper\permission_helper.py:146 #: .\cookbook\helper\permission_helper.py:171 -#: .\cookbook\helper\permission_helper.py:216 -#: .\cookbook\helper\permission_helper.py:230 -#: .\cookbook\helper\permission_helper.py:241 -#: .\cookbook\helper\permission_helper.py:252 .\cookbook\views\data.py:47 -#: .\cookbook\views\views.py:160 .\cookbook\views\views.py:167 -#: .\cookbook\views\views.py:233 +#: .\cookbook\helper\permission_helper.py:219 +#: .\cookbook\helper\permission_helper.py:233 +#: .\cookbook\helper\permission_helper.py:244 +#: .\cookbook\helper\permission_helper.py:255 .\cookbook\views\data.py:47 +#: .\cookbook\views\views.py:159 .\cookbook\views\views.py:166 +#: .\cookbook\views\views.py:232 msgid "You do not have the required permissions to view this page!" msgstr "Vous n'avez pas les droits suffisants pour afficher cette page !" @@ -413,25 +537,26 @@ msgstr "" "Vous ne pouvez pas interagir avec cet objet car il appartient à un autre " "utilisateur !" +#: .\cookbook\helper\recipe_search.py:473 +msgid "One of queryset or hash_key must be provided" +msgstr "" + +#: .\cookbook\helper\shopping_helper.py:54 +#, fuzzy +#| msgid "You must provide at least a recipe or a title." +msgid "You must supply a recipe or mealplan" +msgstr "Vous devez au moins fournir une recette ou un titre." + +#: .\cookbook\helper\shopping_helper.py:58 +msgid "You must supply a created_by" +msgstr "" + #: .\cookbook\helper\template_helper.py:61 #: .\cookbook\helper\template_helper.py:63 msgid "Could not parse template code." msgstr "Le code du modèle n'a pas pu être analysé." -#: .\cookbook\integration\integration.py:126 -#: .\cookbook\templates\import.html:14 .\cookbook\templates\import.html:20 -#: .\cookbook\templates\import_response.html:7 -#: .\cookbook\templates\test.html:14 .\cookbook\templates\test.html:20 -#: .\cookbook\templates\url_import.html:27 -#: .\cookbook\templates\url_import.html:105 -#: .\cookbook\templates\url_import.html:127 -#: .\cookbook\templates\url_import.html:321 -#: .\cookbook\templates\url_import.html:609 .\cookbook\views\delete.py:89 -#: .\cookbook\views\edit.py:200 -msgid "Import" -msgstr "Importer" - -#: .\cookbook\integration\integration.py:208 +#: .\cookbook\integration\integration.py:200 msgid "" "Importer expected a .zip file. Did you choose the correct importer type for " "your data ?" @@ -439,7 +564,7 @@ msgstr "" "Un fichier .zip était attendu à l'importation. Avez-vous choisi le bon " "format pour vos données ?" -#: .\cookbook\integration\integration.py:211 +#: .\cookbook\integration\integration.py:203 msgid "" "An unexpected error occurred during the import. Please make sure you have " "uploaded a valid file." @@ -447,11 +572,11 @@ msgstr "" "Une erreur imprévue est survenue durant l'importation. Vérifiez que vous " "avez téléverser un fichier valide." -#: .\cookbook\integration\integration.py:216 +#: .\cookbook\integration\integration.py:208 msgid "The following recipes were ignored because they already existed:" msgstr "Les recettes suivantes ont été ignorées car elles existaient déjà :" -#: .\cookbook\integration\integration.py:220 +#: .\cookbook\integration\integration.py:212 #, python-format msgid "Imported %s recipes." msgstr "%s recettes importées." @@ -464,50 +589,52 @@ msgstr "Notes" msgid "Nutritional Information" msgstr "Informations nutritionnelles" -#: .\cookbook\integration\paprika.py:53 .\cookbook\templates\url_import.html:40 +#: .\cookbook\integration\paprika.py:53 .\cookbook\templates\url_import.html:42 msgid "Source" msgstr "Source" -#: .\cookbook\integration\safron.py:23 -#: .\cookbook\templates\include\log_cooking.html:16 -#: .\cookbook\templates\url_import.html:228 -#: .\cookbook\templates\url_import.html:459 +#: .\cookbook\integration\saffron.py:23 +#: .\cookbook\templates\include\log_cooking.html:18 +#: .\cookbook\templates\url_import.html:231 +#: .\cookbook\templates\url_import.html:462 msgid "Servings" msgstr "Portions" -#: .\cookbook\integration\safron.py:25 +#: .\cookbook\integration\saffron.py:25 msgid "Waiting time" msgstr "Temps d'attente" -#: .\cookbook\integration\safron.py:27 +#: .\cookbook\integration\saffron.py:27 msgid "Preparation Time" msgstr "Temps de préparation" -#: .\cookbook\integration\safron.py:29 .\cookbook\templates\base.html:78 +#: .\cookbook\integration\saffron.py:29 .\cookbook\templates\base.html:78 #: .\cookbook\templates\forms\ingredients.html:7 #: .\cookbook\templates\index.html:7 msgid "Cookbook" msgstr "Livre de recettes" -#: .\cookbook\integration\safron.py:31 +#: .\cookbook\integration\saffron.py:31 msgid "Section" msgstr "Rubrique" #: .\cookbook\management\commands\rebuildindex.py:14 msgid "Rebuilds full text search index on Recipe" -msgstr "" +msgstr "Reconstruction de l'index de recherche plein texte de Tandoor" #: .\cookbook\management\commands\rebuildindex.py:18 msgid "Only Postgress databases use full text search, no index to rebuild" msgstr "" +"Seules les bases de données Postgres utilisent la recherche en texte " +"intégral, sans index à reconstruire" #: .\cookbook\management\commands\rebuildindex.py:29 msgid "Recipe index rebuild complete." -msgstr "" +msgstr "La reconstruction de l'index des recettes est terminée." #: .\cookbook\management\commands\rebuildindex.py:31 msgid "Recipe index rebuild failed." -msgstr "" +msgstr "La reconstruction de l'index des recettes a échoué." #: .\cookbook\migrations\0047_auto_20200602_1133.py:14 msgid "Breakfast" @@ -525,7 +652,7 @@ msgstr "Dîner" msgid "Other" msgstr "Autre" -#: .\cookbook\models.py:150 +#: .\cookbook\models.py:246 msgid "" "Maximum file storage for space in MB. 0 for unlimited, -1 to disable file " "upload." @@ -533,105 +660,130 @@ msgstr "" "Le stockage maximal de fichiers pour ce groupe en Mo. Mettre 0 pour ne pas " "avoir de limite et -1 pour empêcher le téléversement de fichiers." -#: .\cookbook\models.py:202 .\cookbook\templates\search.html:7 -#: .\cookbook\templates\shopping_list.html:59 +#: .\cookbook\models.py:300 .\cookbook\templates\search.html:7 +#: .\cookbook\templates\shopping_list.html:53 msgid "Search" msgstr "Rechercher" -#: .\cookbook\models.py:203 .\cookbook\templates\base.html:82 +#: .\cookbook\models.py:301 .\cookbook\templates\base.html:82 #: .\cookbook\templates\meal_plan.html:7 #: .\cookbook\templates\meal_plan_new.html:7 .\cookbook\views\delete.py:181 #: .\cookbook\views\edit.py:220 .\cookbook\views\new.py:184 msgid "Meal-Plan" msgstr "Menu de la semaine" -#: .\cookbook\models.py:204 .\cookbook\templates\base.html:90 +#: .\cookbook\models.py:302 .\cookbook\templates\base.html:90 msgid "Books" msgstr "Livres" -#: .\cookbook\models.py:212 +#: .\cookbook\models.py:310 msgid "Small" msgstr "Petit" -#: .\cookbook\models.py:212 +#: .\cookbook\models.py:310 msgid "Large" msgstr "Grand" -#: .\cookbook\models.py:212 .\cookbook\templates\generic\new_template.html:6 +#: .\cookbook\models.py:310 .\cookbook\templates\generic\new_template.html:6 #: .\cookbook\templates\generic\new_template.html:14 msgid "New" -msgstr "Nouveau/Nouvelle" +msgstr "Nouveau" -#: .\cookbook\models.py:396 +#: .\cookbook\models.py:512 msgid " is part of a recipe step and cannot be deleted" -msgstr "" +msgstr " fait partie d'une étape de la recette et ne peut être supprimé" -#: .\cookbook\models.py:441 .\cookbook\templates\url_import.html:42 +#: .\cookbook\models.py:586 .\cookbook\templates\url_import.html:44 msgid "Text" msgstr "Texte" -#: .\cookbook\models.py:441 +#: .\cookbook\models.py:586 msgid "Time" msgstr "Temps" -#: .\cookbook\models.py:441 .\cookbook\templates\url_import.html:44 +#: .\cookbook\models.py:586 .\cookbook\templates\url_import.html:46 msgid "File" msgstr "Fichier" -#: .\cookbook\models.py:441 +#: .\cookbook\models.py:586 #: .\cookbook\templates\include\recipe_open_modal.html:7 #: .\cookbook\views\delete.py:39 .\cookbook\views\edit.py:260 #: .\cookbook\views\new.py:53 msgid "Recipe" msgstr "Recette" -#: .\cookbook\models.py:871 .\cookbook\templates\search_info.html:28 +#: .\cookbook\models.py:1041 .\cookbook\templates\search_info.html:28 msgid "Simple" -msgstr "" +msgstr "Simple" -#: .\cookbook\models.py:872 .\cookbook\templates\search_info.html:33 +#: .\cookbook\models.py:1042 .\cookbook\templates\search_info.html:33 msgid "Phrase" -msgstr "" +msgstr "Phrase" -#: .\cookbook\models.py:873 .\cookbook\templates\search_info.html:38 +#: .\cookbook\models.py:1043 .\cookbook\templates\search_info.html:38 msgid "Web" -msgstr "" +msgstr "Internet" -#: .\cookbook\models.py:874 .\cookbook\templates\search_info.html:47 +#: .\cookbook\models.py:1044 .\cookbook\templates\search_info.html:47 msgid "Raw" -msgstr "" +msgstr "Brut" -#: .\cookbook\models.py:912 -#, fuzzy -#| msgid "Food" +#: .\cookbook\models.py:1082 msgid "Food Alias" -msgstr "Aliment" +msgstr "Ingrédient équivalent" -#: .\cookbook\models.py:912 -#, fuzzy -#| msgid "Units" +#: .\cookbook\models.py:1082 msgid "Unit Alias" -msgstr "Unités" +msgstr "Unité" -#: .\cookbook\models.py:912 -#, fuzzy -#| msgid "Keywords" +#: .\cookbook\models.py:1082 msgid "Keyword Alias" -msgstr "Mots-clés" +msgstr "Alias de mot-clé" -#: .\cookbook\serializer.py:157 +#: .\cookbook\serializer.py:175 +msgid "A user is required" +msgstr "" + +#: .\cookbook\serializer.py:195 msgid "File uploads are not enabled for this Space." msgstr "Le téléversement de fichiers n'est pas autorisé pour ce groupe." -#: .\cookbook\serializer.py:168 +#: .\cookbook\serializer.py:206 msgid "You have reached your file upload limit." msgstr "Vous avez atteint votre limite de téléversement de fichiers." +#: .\cookbook\serializer.py:962 +msgid "Existing shopping list to update" +msgstr "" + +#: .\cookbook\serializer.py:964 +msgid "" +"List of ingredient IDs from the recipe to add, if not provided all " +"ingredients will be added." +msgstr "" + +#: .\cookbook\serializer.py:965 +msgid "" +"Providing a list_recipe ID and servings of 0 will delete that shopping list." +msgstr "" + +#: .\cookbook\serializer.py:973 +msgid "Amount of food to add to the shopping list" +msgstr "" + +#: .\cookbook\serializer.py:974 +msgid "ID of unit to use for the shopping list" +msgstr "" + +#: .\cookbook\serializer.py:975 +msgid "When set to true will delete all food from active shopping lists." +msgstr "" + #: .\cookbook\tables.py:35 .\cookbook\templates\generic\edit_template.html:6 #: .\cookbook\templates\generic\edit_template.html:14 #: .\cookbook\templates\recipes_table.html:82 -#: .\cookbook\templates\shopping_list.html:40 -#: .\cookbook\templates\space.html:90 +#: .\cookbook\templates\shopping_list.html:37 +#: .\cookbook\templates\space.html:109 msgid "Edit" msgstr "Modifier" @@ -744,7 +896,8 @@ msgid "" "for user %(user_display)s\n" " ." msgstr "" -"Confirmez que est une adresse mail de " +"Confirmez SVP que\n" +" est une adresse mail de " "l'utilisateur %(user_display)s." #: .\cookbook\templates\account\email_confirm.html:22 @@ -759,8 +912,9 @@ msgid "" " issue a new e-mail confirmation " "request." msgstr "" -"Ce lien de confirmation par mail est expiré ou invalide. Veuillez demander une nouvelle vérification par mail." +"Ce lien de confirmation reçu par mail est expiré ou invalide. Veuillez\n" +" demander une nouvelle vérification " +"par mail." #: .\cookbook\templates\account\login.html:8 .\cookbook\templates\base.html:289 msgid "Login" @@ -773,27 +927,27 @@ msgstr "Connexion" msgid "Sign In" msgstr "Connexion" -#: .\cookbook\templates\account\login.html:32 +#: .\cookbook\templates\account\login.html:34 #: .\cookbook\templates\socialaccount\signup.html:8 #: .\cookbook\templates\socialaccount\signup.html:57 msgid "Sign Up" msgstr "S'inscrire" -#: .\cookbook\templates\account\login.html:36 -#: .\cookbook\templates\account\login.html:37 +#: .\cookbook\templates\account\login.html:39 +#: .\cookbook\templates\account\login.html:41 #: .\cookbook\templates\account\password_reset.html:29 msgid "Reset My Password" msgstr "Réinitialiser le mot de passe" -#: .\cookbook\templates\account\login.html:37 +#: .\cookbook\templates\account\login.html:40 msgid "Lost your password?" msgstr "Mot de passe perdu ?" -#: .\cookbook\templates\account\login.html:48 +#: .\cookbook\templates\account\login.html:52 msgid "Social Login" msgstr "Connexion par réseau social" -#: .\cookbook\templates\account\login.html:49 +#: .\cookbook\templates\account\login.html:53 msgid "You can use any of the following providers to sign in." msgstr "Vous pouvez utiliser les comptes suivants pour vous connecter." @@ -819,7 +973,7 @@ msgstr "Modifier le mot de passe" #: .\cookbook\templates\account\password_change.html:12 #: .\cookbook\templates\account\password_set.html:12 -#: .\cookbook\templates\settings.html:69 +#: .\cookbook\templates\settings.html:76 msgid "Password" msgstr "Mot de passe" @@ -856,10 +1010,8 @@ msgstr "" "minutes à suivre." #: .\cookbook\templates\account\password_reset_from_key.html:13 -#, fuzzy -#| msgid "API Token" msgid "Bad Token" -msgstr "Jeton API" +msgstr "Mauvais jeton" #: .\cookbook\templates\account\password_reset_from_key.html:25 #, python-format @@ -869,17 +1021,19 @@ msgid "" " Please request a new " "password reset." msgstr "" +"Le lien de changement du mot de passe est invalide, probablement parce qu'il " +"a déjà été utilisé.\n" +" Merci de demander un nouveau changement de mot de passe." #: .\cookbook\templates\account\password_reset_from_key.html:33 -#, fuzzy -#| msgid "Change Password" msgid "change password" -msgstr "Modifier le mot de passe" +msgstr "modifier le mot de passe" #: .\cookbook\templates\account\password_reset_from_key.html:36 #: .\cookbook\templates\account\password_reset_from_key_done.html:19 msgid "Your password is now changed." -msgstr "" +msgstr "Votre mot de passe a été changé." #: .\cookbook\templates\account\password_set.html:6 #: .\cookbook\templates\account\password_set.html:16 @@ -945,32 +1099,32 @@ msgstr "Courses" msgid "Keyword" msgstr "Mot-clé" +#: .\cookbook\templates\base.html:125 .\cookbook\views\lists.py:114 +msgid "Foods" +msgstr "Aliments" + #: .\cookbook\templates\base.html:137 #: .\cookbook\templates\forms\ingredients.html:24 -#: .\cookbook\templates\space.html:41 .\cookbook\templates\stats.html:26 -#: .\cookbook\views\lists.py:146 +#: .\cookbook\templates\space.html:47 .\cookbook\templates\stats.html:26 +#: .\cookbook\views\lists.py:131 msgid "Units" msgstr "Unités" #: .\cookbook\templates\base.html:151 -#: .\cookbook\templates\shopping_list.html:237 +#: .\cookbook\templates\shopping_list.html:208 #: .\cookbook\templates\supermarket.html:7 msgid "Supermarket" msgstr "Supermarché" #: .\cookbook\templates\base.html:163 -#, fuzzy -#| msgid "Supermarket" msgid "Supermarket Category" -msgstr "Supermarché" +msgstr "Catégorie Supermarché" -#: .\cookbook\templates\base.html:175 .\cookbook\views\lists.py:195 -#, fuzzy -#| msgid "Information" +#: .\cookbook\templates\base.html:175 .\cookbook\views\lists.py:180 msgid "Automations" -msgstr "Information" +msgstr "Automatisations" -#: .\cookbook\templates\base.html:189 .\cookbook\views\lists.py:215 +#: .\cookbook\templates\base.html:189 .\cookbook\views\lists.py:200 msgid "Files" msgstr "Fichiers" @@ -985,7 +1139,7 @@ msgstr "Historique" #: .\cookbook\templates\base.html:228 .\cookbook\templates\export.html:14 #: .\cookbook\templates\export.html:20 -#: .\cookbook\templates\shopping_list.html:358 +#: .\cookbook\templates\shopping_list.html:310 #: .\cookbook\templates\test2.html:14 .\cookbook\templates\test2.html:20 msgid "Export" msgstr "Exporter" @@ -995,19 +1149,19 @@ msgid "Import Recipe" msgstr "Importer une recette" #: .\cookbook\templates\base.html:246 -#: .\cookbook\templates\shopping_list.html:195 -#: .\cookbook\templates\shopping_list.html:217 +#: .\cookbook\templates\shopping_list.html:165 +#: .\cookbook\templates\shopping_list.html:188 msgid "Create" msgstr "Créer" #: .\cookbook\templates\base.html:259 #: .\cookbook\templates\generic\list_template.html:14 -#: .\cookbook\templates\space.html:58 .\cookbook\templates\stats.html:43 +#: .\cookbook\templates\space.html:69 .\cookbook\templates\stats.html:43 msgid "External Recipes" msgstr "Recettes externes" -#: .\cookbook\templates\base.html:262 .\cookbook\templates\space.html:7 -#: .\cookbook\templates\space.html:19 +#: .\cookbook\templates\base.html:262 .\cookbook\templates\space.html:8 +#: .\cookbook\templates\space.html:20 .\cookbook\templates\space.html:150 msgid "Space Settings" msgstr "Paramètres de groupe" @@ -1029,7 +1183,7 @@ msgstr "GitHub" #: .\cookbook\templates\base.html:277 msgid "Translate Tandoor" -msgstr "" +msgstr "Traduire Tandoor" #: .\cookbook\templates\base.html:281 msgid "API Browser" @@ -1075,35 +1229,31 @@ msgstr "Le chemin doit être au format suivant" #: .\cookbook\templates\forms\edit_import_recipe.html:14 #: .\cookbook\templates\generic\edit_template.html:23 #: .\cookbook\templates\generic\new_template.html:23 -#: .\cookbook\templates\include\log_cooking.html:28 -#: .\cookbook\templates\settings.html:63 .\cookbook\templates\settings.html:105 -#: .\cookbook\templates\settings.html:123 -#: .\cookbook\templates\settings.html:195 -#: .\cookbook\templates\shopping_list.html:360 +#: .\cookbook\templates\include\log_cooking.html:30 +#: .\cookbook\templates\settings.html:70 .\cookbook\templates\settings.html:112 +#: .\cookbook\templates\settings.html:130 +#: .\cookbook\templates\settings.html:202 +#: .\cookbook\templates\settings.html:213 +#: .\cookbook\templates\shopping_list.html:311 +#: .\cookbook\templates\space.html:155 msgid "Save" msgstr "Sauvegarder" #: .\cookbook\templates\batch\monitor.html:21 -#, fuzzy -#| msgid "Manage Email Settings" msgid "Manage External Storage" -msgstr "Gérer les paramètres de mails" +msgstr "Gérer le stockage externe" #: .\cookbook\templates\batch\monitor.html:28 msgid "Sync Now!" msgstr "Lancer la synchro !" #: .\cookbook\templates\batch\monitor.html:29 -#, fuzzy -#| msgid "Shopping Recipes" msgid "Show Recipes" msgstr "Recettes dans le panier" #: .\cookbook\templates\batch\monitor.html:30 -#, fuzzy -#| msgid "Show Links" msgid "Show Log" -msgstr "Afficher les liens" +msgstr "Afficher le journal" #: .\cookbook\templates\batch\waiting.html:4 #: .\cookbook\templates\batch\waiting.html:10 @@ -1152,8 +1302,8 @@ msgstr "" "\n" " Le formulaire suivant est utile lorsqu'il y a des doublons dans les " "unités ou les ingrédients.\n" -"Il fusionne deux unités ou ingrédients et met à jour toutes les recettes les " -"utilisant.\n" +" Il fusionne deux unités ou ingrédients et met à jour toutes les " +"recettes les utilisant.\n" " " #: .\cookbook\templates\forms\ingredients.html:26 @@ -1176,15 +1326,15 @@ msgstr "Êtes-vous certain de vouloir supprimer %(title)s : %(object)s " #: .\cookbook\templates\generic\delete_template.html:26 msgid "Protected" -msgstr "" +msgstr "Protégé" #: .\cookbook\templates\generic\delete_template.html:41 msgid "Cascade" -msgstr "" +msgstr "Cascade" #: .\cookbook\templates\generic\delete_template.html:72 msgid "Cancel" -msgstr "" +msgstr "Annuler" #: .\cookbook\templates\generic\edit_template.html:32 msgid "View" @@ -1195,15 +1345,20 @@ msgid "Delete original file" msgstr "Supprimer le fichier original" #: .\cookbook\templates\generic\list_template.html:6 -#: .\cookbook\templates\generic\list_template.html:21 +#: .\cookbook\templates\generic\list_template.html:22 msgid "List" msgstr "Liste" -#: .\cookbook\templates\generic\list_template.html:34 +#: .\cookbook\templates\generic\list_template.html:33 +#: .\cookbook\templates\shopping_list.html:33 +msgid "Try the new shopping list" +msgstr "Essayer la nouvelle liste de courses" + +#: .\cookbook\templates\generic\list_template.html:45 msgid "Filter" msgstr "Filtre" -#: .\cookbook\templates\generic\list_template.html:39 +#: .\cookbook\templates\generic\list_template.html:50 msgid "Import all" msgstr "Tout importer" @@ -1229,19 +1384,31 @@ msgstr "Historique de cuisine" msgid "Import Recipes" msgstr "Importer des recettes" -#: .\cookbook\templates\include\log_cooking.html:7 +#: .\cookbook\templates\import.html:14 .\cookbook\templates\import.html:20 +#: .\cookbook\templates\import_response.html:7 +#: .\cookbook\templates\test.html:14 .\cookbook\templates\test.html:20 +#: .\cookbook\templates\url_import.html:29 +#: .\cookbook\templates\url_import.html:108 +#: .\cookbook\templates\url_import.html:130 +#: .\cookbook\templates\url_import.html:324 +#: .\cookbook\templates\url_import.html:618 .\cookbook\views\delete.py:89 +#: .\cookbook\views\edit.py:200 +msgid "Import" +msgstr "Importer" + +#: .\cookbook\templates\include\log_cooking.html:9 msgid "Log Recipe Cooking" msgstr "Marquer la recette comme cuisinée" -#: .\cookbook\templates\include\log_cooking.html:13 +#: .\cookbook\templates\include\log_cooking.html:15 msgid "All fields are optional and can be left empty." msgstr "Tous les champs sont facultatifs et peuvent être laissés vides." -#: .\cookbook\templates\include\log_cooking.html:19 +#: .\cookbook\templates\include\log_cooking.html:21 msgid "Rating" msgstr "Note" -#: .\cookbook\templates\include\log_cooking.html:27 +#: .\cookbook\templates\include\log_cooking.html:29 #: .\cookbook\templates\include\recipe_open_modal.html:18 msgid "Close" msgstr "Fermer" @@ -1269,9 +1436,9 @@ msgstr "" "\n" " Les champs Mot de passe et Token sont stockés en texte " "brutdans la base de données.\n" -"C'est nécessaire car ils sont utilisés pour faire des requêtes API, mais " -"cela accroît le risque que quelqu'un les vole.
\n" -"Pour limiter les risques, des tokens ou comptes avec un accès limité " +" C'est nécessaire car ils sont utilisés pour faire des requêtes API, " +"mais cela accroît le risque que quelqu'un les vole.
\n" +" Pour limiter les risques, des tokens ou comptes avec un accès limité " "devraient être utilisés.\n" " " @@ -1295,7 +1462,7 @@ msgstr "Réinitialiser la recherche" msgid "Last viewed" msgstr "Dernières recettes vues" -#: .\cookbook\templates\index.html:87 .\cookbook\templates\space.html:35 +#: .\cookbook\templates\index.html:87 .\cookbook\templates\space.html:37 #: .\cookbook\templates\stats.html:22 msgid "Recipes" msgstr "Recettes" @@ -1327,13 +1494,14 @@ msgstr "" "\n" " Markdown est un langage de balisage léger utilisé pour formatter du " "texte facilement.\n" -"Ce site utilise la bibliothèque Python Markdown pour convertir votre texte en un " -"joli format HTML. Sa documentation complète est consultable ici.\n" -"Une documentation incomplète mais probablement suffisante se trouve plus " -"bas.\n" +" Ce site utilise la bibliothèque Python Markdown \n" +" pour convertir votre texte en un joli format HTML. Sa documentation " +"complète est consultable\n" +" ici.\n" +" Une documentation incomplète mais probablement suffisante se trouve " +"plus bas.\n" " " #: .\cookbook\templates\markdown_info.html:25 @@ -1469,7 +1637,7 @@ msgid "Created by" msgstr "Créé par" #: .\cookbook\templates\meal_plan_entry.html:20 -#: .\cookbook\templates\shopping_list.html:261 +#: .\cookbook\templates\shopping_list.html:232 msgid "Shared with" msgstr "Partagé avec" @@ -1592,17 +1760,17 @@ msgstr "Commentaire" #: .\cookbook\templates\recipes_table.html:19 #: .\cookbook\templates\recipes_table.html:23 -#: .\cookbook\templates\url_import.html:444 +#: .\cookbook\templates\url_import.html:447 msgid "Recipe Image" msgstr "Image de la recette" #: .\cookbook\templates\recipes_table.html:51 -#: .\cookbook\templates\url_import.html:449 +#: .\cookbook\templates\url_import.html:452 msgid "Preparation time ca." msgstr "Temps moyen de préparation" #: .\cookbook\templates\recipes_table.html:57 -#: .\cookbook\templates\url_import.html:454 +#: .\cookbook\templates\url_import.html:457 msgid "Waiting time ca." msgstr "Temps moyen d'attente" @@ -1620,11 +1788,9 @@ msgstr "Page d'accueil" #: .\cookbook\templates\search_info.html:5 #: .\cookbook\templates\search_info.html:9 -#: .\cookbook\templates\settings.html:165 -#, fuzzy -#| msgid "Search String" +#: .\cookbook\templates\settings.html:172 msgid "Search Settings" -msgstr "Texte recherché" +msgstr "Paramètres de recherche" #: .\cookbook\templates\search_info.html:10 msgid "" @@ -1637,12 +1803,19 @@ msgid "" "only available if you are using Postgres for your database.\n" " " msgstr "" +"\n" +" La création d'une expérience de recherche optimale est complexe et " +"dépend fortement de votre configuration personnelle. \n" +" La modification de l'un des paramètres de recherche peut avoir un " +"impact significatif sur la vitesse et la qualité des résultats.\n" +" Les configurations Méthodes de recherche, Trigrammes et Recherche " +"texte intégral ne sont disponibles que si vous utilisez Postgres comme base " +"de données.\n" +" " #: .\cookbook\templates\search_info.html:19 -#, fuzzy -#| msgid "Search" msgid "Search Methods" -msgstr "Rechercher" +msgstr "Méthodes de recherche" #: .\cookbook\templates\search_info.html:23 msgid "" @@ -1658,6 +1831,18 @@ msgid "" "html#TEXTSEARCH-PARSING-QUERIES>Postgresql's website.\n" " " msgstr "" +" \n" +" Les recherches en texte intégral tentent de normaliser les mots " +"fournis pour qu'ils correspondent aux variantes courantes. Par exemple : " +"\"forked\", \"forking\", \"forks\" seront tous normalisés en \"fork\".\n" +" Il existe plusieurs méthodes, décrites ci-dessous, qui " +"permettent de contrôler la façon dont la recherche doit réagir lorsque " +"plusieurs mots sont recherchés.\n" +" Des détails techniques complets sur leur fonctionnement peuvent " +"être consultés sur le site Postgresql's website.\n" +" " #: .\cookbook\templates\search_info.html:29 msgid "" @@ -1669,6 +1854,14 @@ msgid "" "selected for a full text search.\n" " " msgstr "" +" \n" +" Les recherches simples ignorent la ponctuation et les mots " +"courants tels que \"le\", \"a\", \"et\", et traiteront les mots séparés " +"comme il se doit.\n" +" Si vous recherchez \"pomme ou farine\", vous obtiendrez toutes " +"les recettes qui contiennent à la fois \"pomme\" et \"farine\" dans les " +"champs sélectionnés pour la recherche en texte intégral.\n" +" " #: .\cookbook\templates\search_info.html:34 msgid "" @@ -1680,6 +1873,13 @@ msgid "" "been selected for a full text search.\n" " " msgstr "" +" \n" +" Les recherches de phrases ignorent la ponctuation, mais " +"recherchent tous les mots dans l'ordre exact indiqué.\n" +" La recherche de \"pomme ou farine\" ne donnera que les recettes " +"qui contiennent l'expression exacte \"pomme ou farine\" dans l'un des champs " +"sélectionnés pour la recherche en texte intégral.\n" +" " #: .\cookbook\templates\search_info.html:39 msgid "" @@ -1699,6 +1899,24 @@ msgid "" "recipe that has the word 'butter' in any field included.\n" " " msgstr "" +" \n" +" Les recherches sur le Web simulent la fonctionnalité que l'on " +"trouve sur de nombreux sites de recherche sur le Web qui prennent en charge " +"une syntaxe spéciale.\n" +" En plaçant des guillemets autour de plusieurs mots, ces derniers " +"seront convertis en une phrase.\n" +" Le terme \"ou\" signifie que l'on recherche le mot (ou " +"l'expression) qui précède immédiatement \"ou\" OU le mot (ou l'expression) " +"qui suit immédiatement.\n" +" Le signe \"-\" indique que la recherche porte sur des recettes " +"qui ne comprennent pas le mot (ou la phrase) qui suit immédiatement. \n" +" Par exemple, si vous recherchez \"tarte aux pommes\" ou cerise -" +"beurre, vous obtiendrez toutes les recettes contenant l'expression \"tarte " +"aux pommes\" ou le mot \"cerise\". \n" +" dans tous les champs inclus dans la recherche en texte intégral, " +"mais exclure toute recette comportant le mot \"beurre\" dans tous les champs " +"inclus.\n" +" " #: .\cookbook\templates\search_info.html:48 msgid "" @@ -1707,6 +1925,11 @@ msgid "" "operators such as '|', '&' and '()'\n" " " msgstr "" +" \n" +" La recherche brute est similaire à la recherche sur le Web, mais " +"elle prend en compte les opérateurs de ponctuation tels que \"|\", \"&\" et " +"\"()\".\n" +" " #: .\cookbook\templates\search_info.html:59 msgid "" @@ -1722,12 +1945,21 @@ msgid "" "methods.\n" " " msgstr "" +" \n" +" Une autre approche de la recherche qui nécessite également " +"Postgresql est la recherche floue ou la similarité des trigrammes. Un " +"trigramme est un groupe de trois caractères consécutifs.\n" +" Par exemple, la recherche de \"apple\" créera x trigrammes \"app" +"\", \"ppl\", \"ple\" et créera un score de la proximité des mots avec les " +"trigrammes générés.\n" +" L'un des avantages de la recherche par trigamme est qu'une " +"recherche sur \"sandwich\" permet de trouver des mots mal orthographiés tels " +"que \"sandwhich\", qui ne seraient pas détectés par d'autres méthodes.\n" +" " #: .\cookbook\templates\search_info.html:69 -#, fuzzy -#| msgid "Search Recipe" msgid "Search Fields" -msgstr "Rechercher une recette" +msgstr "Champs de recherche" #: .\cookbook\templates\search_info.html:73 msgid "" @@ -1763,12 +1995,46 @@ msgid "" "full text results, it does match the trigram results.\n" " " msgstr "" +" \n" +" Unaccent est un cas particulier car il permet de rechercher un " +"champ \"non accentué\" pour chaque style de recherche qui tente d'ignorer " +"les valeurs accentuées. \n" +" Par exemple, si vous activez l'option \"non accentué\" pour \"Nom" +"\", toute recherche (commence par, contient, trigramme) tentera d'ignorer " +"les caractères accentués.\n" +" \n" +" Pour les autres options, vous pouvez activer la recherche sur un " +"ou tous les champs et ils seront combinés ensemble avec un 'OR' présumé.\n" +" Par exemple, si vous activez l'option \"Nom\" pour l'option " +"\"Commence par\", \"Nom\" et \"Description\" pour l'option \"Correspondance " +"partielle\" et \"Ingrédients\" et \"Mots-clés\" pour l'option \"Recherche " +"complète\".\n" +" et que vous recherchez \"pomme\", vous obtiendrez les recettes " +"qui ont.. :\n" +" - un nom de recette qui commence par \"pomme\".\n" +" - OU un nom de recette qui contient 'pomme'.\n" +" - OU une description de recette qui contient 'pomme'.\n" +" - OU une recette qui aura une correspondance de recherche en " +"texte intégral ('pomme' ou 'pommes') dans les ingrédients\n" +" - OU une recette qui aura une correspondance de recherche en " +"texte intégral dans les mots-clés.\n" +"\n" +" La combinaison d'un trop grand nombre de champs dans un trop " +"grand nombre de types de recherche peut avoir un impact négatif sur les " +"performances, créer des résultats en double ou renvoyer des résultats " +"inattendus.\n" +" Par exemple, l'activation de la recherche floue ou des " +"correspondances partielles interfère avec les méthodes de recherche sur le " +"Web. \n" +" La recherche de \"apple -pie\" à l'aide d'une recherche floue et " +"d'une recherche en texte intégral donnera la recette de la tarte aux " +"pommes. Bien qu'elle ne soit pas incluse dans les résultats du texte " +"intégral, elle correspond aux résultats de la recherche par trigramme.\n" +" " #: .\cookbook\templates\search_info.html:95 -#, fuzzy -#| msgid "Search" msgid "Search Index" -msgstr "Rechercher" +msgstr "Index de recherche" #: .\cookbook\templates\search_info.html:99 msgid "" @@ -1782,6 +2048,17 @@ msgid "" "the management command 'python manage.py rebuildindex'\n" " " msgstr "" +" \n" +" La recherche par trigramme et la recherche en texte intégral " +"reposent toutes deux sur les index de la base de données pour fonctionner " +"efficacement. \n" +" Vous pouvez reconstruire les index de tous les champs dans la " +"page d'administration des recettes, en sélectionnant toutes les recettes et " +"en exécutant la commande \"rebuild index for selected recipes\".\n" +" Vous pouvez également reconstruire les index en ligne de " +"commande en exécutant la commande de gestion \"python manage.py rebuildindex" +"\".\n" +" " #: .\cookbook\templates\settings.html:28 msgid "Account" @@ -1796,41 +2073,45 @@ msgid "API-Settings" msgstr "Paramètres d'API" #: .\cookbook\templates\settings.html:49 -#, fuzzy -#| msgid "Search String" msgid "Search-Settings" -msgstr "Texte recherché" +msgstr "Paramètres de recherche" + +#: .\cookbook\templates\settings.html:56 +#, fuzzy +#| msgid "Search-Settings" +msgid "Shopping-Settings" +msgstr "Paramètres de recherche" -#: .\cookbook\templates\settings.html:58 +#: .\cookbook\templates\settings.html:65 msgid "Name Settings" msgstr "Paramètres de noms" -#: .\cookbook\templates\settings.html:66 +#: .\cookbook\templates\settings.html:73 msgid "Account Settings" msgstr "Paramètres de compte" -#: .\cookbook\templates\settings.html:68 +#: .\cookbook\templates\settings.html:75 msgid "Emails" msgstr "Adresses mail" -#: .\cookbook\templates\settings.html:71 +#: .\cookbook\templates\settings.html:78 #: .\cookbook\templates\socialaccount\connections.html:11 msgid "Social" msgstr "Réseaux sociaux" -#: .\cookbook\templates\settings.html:84 +#: .\cookbook\templates\settings.html:91 msgid "Language" msgstr "Langue" -#: .\cookbook\templates\settings.html:114 +#: .\cookbook\templates\settings.html:121 msgid "Style" msgstr "Style" -#: .\cookbook\templates\settings.html:135 +#: .\cookbook\templates\settings.html:142 msgid "API Token" msgstr "Jeton API" -#: .\cookbook\templates\settings.html:136 +#: .\cookbook\templates\settings.html:143 msgid "" "You can use both basic authentication and token based authentication to " "access the REST API." @@ -1838,7 +2119,7 @@ msgstr "" "Vous pouvez utiliser à la fois l'authentification classique et " "l'authentification par jeton pour accéder à l'API REST." -#: .\cookbook\templates\settings.html:153 +#: .\cookbook\templates\settings.html:160 msgid "" "Use the token as an Authorization header prefixed by the word token as shown " "in the following examples:" @@ -1846,61 +2127,79 @@ msgstr "" "Utilisez le jeton dans l'entête d'autorisation préfixé par le mot \"token\" " "comme indiqué dans les exemples suivants :" -#: .\cookbook\templates\settings.html:155 +#: .\cookbook\templates\settings.html:162 msgid "or" msgstr "ou" -#: .\cookbook\templates\settings.html:166 +#: .\cookbook\templates\settings.html:173 msgid "" "There are many options to configure the search depending on your personal " "preferences." msgstr "" +"Il existe de nombreuses options pour configurer la recherche en fonction de " +"vos préférences personnelles." -#: .\cookbook\templates\settings.html:167 +#: .\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 "" +"En général, vous n'avez pas besoin de configurer l'un d'entre eux et " +"pouvez simplement vous en tenir à la valeur par défaut ou à l'un des " +"préréglages suivants." -#: .\cookbook\templates\settings.html:168 +#: .\cookbook\templates\settings.html:175 msgid "" "If you do want to configure the search you can read about the different " "options here." msgstr "" +"Si vous souhaitez configurer la recherche, vous pouvez consulter les " +"différentes options ici." -#: .\cookbook\templates\settings.html:173 +#: .\cookbook\templates\settings.html:180 msgid "Fuzzy" -msgstr "" +msgstr "Flou" -#: .\cookbook\templates\settings.html:174 +#: .\cookbook\templates\settings.html:181 msgid "" "Find what you need even if your search or the recipe contains typos. Might " "return more results than needed to make sure you find what you are looking " "for." msgstr "" +"Trouvez ce dont vous avez besoin même si votre recherche ou la recette " +"contient des fautes de frappe. Il se peut que vous obteniez plus de " +"résultats que nécessaire pour être sûr de trouver ce que vous cherchez." -#: .\cookbook\templates\settings.html:175 +#: .\cookbook\templates\settings.html:182 msgid "This is the default behavior" -msgstr "" +msgstr "C'est le comportement par défaut" -#: .\cookbook\templates\settings.html:176 -#: .\cookbook\templates\settings.html:184 +#: .\cookbook\templates\settings.html:183 +#: .\cookbook\templates\settings.html:191 msgid "Apply" -msgstr "" +msgstr "Appliquer" -#: .\cookbook\templates\settings.html:181 +#: .\cookbook\templates\settings.html:188 msgid "Precise" -msgstr "" +msgstr "Préciser" -#: .\cookbook\templates\settings.html:182 +#: .\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 contrôle fin des résultats de la recherche mais peut ne pas donner " +"de résultats si trop de fautes d'orthographe sont commises." -#: .\cookbook\templates\settings.html:183 +#: .\cookbook\templates\settings.html:190 msgid "Perfect for large Databases" -msgstr "" +msgstr "Parfait pour les grandes bases de données" + +#: .\cookbook\templates\settings.html:207 +#, fuzzy +#| msgid "Shopping List" +msgid "Shopping Settings" +msgstr "Liste de courses" #: .\cookbook\templates\setup.html:6 .\cookbook\templates\system.html:5 msgid "Cookbook Setup" @@ -1921,83 +2220,73 @@ msgstr "" msgid "Create Superuser account" msgstr "Créer un compte superutilisateur" -#: .\cookbook\templates\shopping_list.html:7 +#: .\cookbook\templates\shopping_list.html:8 #: .\cookbook\templates\shopping_list.html:29 -#: .\cookbook\templates\shopping_list.html:721 +#: .\cookbook\templates\shopping_list.html:663 msgid "Shopping List" msgstr "Liste de courses" -#: .\cookbook\templates\shopping_list.html:34 -#, fuzzy -#| msgid "Open Shopping List" -msgid "Try the new shopping list" -msgstr "Ouvrir la liste de courses" - -#: .\cookbook\templates\shopping_list.html:63 +#: .\cookbook\templates\shopping_list.html:55 msgid "Search Recipe" msgstr "Rechercher une recette" -#: .\cookbook\templates\shopping_list.html:86 +#: .\cookbook\templates\shopping_list.html:72 msgid "Shopping Recipes" msgstr "Recettes dans le panier" -#: .\cookbook\templates\shopping_list.html:90 +#: .\cookbook\templates\shopping_list.html:74 msgid "No recipes selected" msgstr "Pas de recettes sélectionnées" -#: .\cookbook\templates\shopping_list.html:157 +#: .\cookbook\templates\shopping_list.html:131 msgid "Entry Mode" msgstr "Mode d'ajout" -#: .\cookbook\templates\shopping_list.html:165 +#: .\cookbook\templates\shopping_list.html:139 msgid "Add Entry" msgstr "Ajouter une entrée" -#: .\cookbook\templates\shopping_list.html:181 +#: .\cookbook\templates\shopping_list.html:152 msgid "Amount" msgstr "Quantité" -#: .\cookbook\templates\shopping_list.html:194 +#: .\cookbook\templates\shopping_list.html:164 msgid "Select Unit" msgstr "Sélectionnez l'unité" -#: .\cookbook\templates\shopping_list.html:196 -#: .\cookbook\templates\shopping_list.html:218 -#: .\cookbook\templates\shopping_list.html:248 -#: .\cookbook\templates\shopping_list.html:272 -#: .\cookbook\templates\url_import.html:500 -#: .\cookbook\templates\url_import.html:532 +#: .\cookbook\templates\shopping_list.html:166 +#: .\cookbook\templates\shopping_list.html:189 +#: .\cookbook\templates\shopping_list.html:219 +#: .\cookbook\templates\shopping_list.html:243 +#: .\cookbook\templates\url_import.html:505 +#: .\cookbook\templates\url_import.html:537 msgid "Select" msgstr "Sélectionner" -#: .\cookbook\templates\shopping_list.html:216 +#: .\cookbook\templates\shopping_list.html:187 msgid "Select Food" msgstr "Sélectionnez l'aliment" -#: .\cookbook\templates\shopping_list.html:247 +#: .\cookbook\templates\shopping_list.html:218 msgid "Select Supermarket" msgstr "Sélectionner un supermarché" -#: .\cookbook\templates\shopping_list.html:271 +#: .\cookbook\templates\shopping_list.html:242 msgid "Select User" msgstr "Sélectionnez un utilisateur" -#: .\cookbook\templates\shopping_list.html:290 +#: .\cookbook\templates\shopping_list.html:258 msgid "Finished" msgstr "Terminé" -#: .\cookbook\templates\shopping_list.html:303 +#: .\cookbook\templates\shopping_list.html:267 msgid "You are offline, shopping list might not syncronize." msgstr "Vous êtes hors-ligne, la liste de courses n'est pas synchronisée." -#: .\cookbook\templates\shopping_list.html:368 +#: .\cookbook\templates\shopping_list.html:318 msgid "Copy/Export" msgstr "Copier/exporter" -#: .\cookbook\templates\shopping_list.html:372 -msgid "List Prefix" -msgstr "Préfixe de la liste" - #: .\cookbook\templates\socialaccount\connections.html:4 #: .\cookbook\templates\socialaccount\connections.html:15 msgid "Account Connections" @@ -2008,8 +2297,8 @@ msgid "" "You can sign in to your account using any of the following third party\n" " accounts:" msgstr "" -"Vous pouvez vous connecter à votre compte en utilisant un des comptes tiers " -"suivants :" +"Vous pouvez vous connecter à votre compte en utilisant un des \n" +" comptes tiers suivants :" #: .\cookbook\templates\socialaccount\connections.html:52 msgid "" @@ -2033,8 +2322,9 @@ msgid "" " %(provider_name)s account to login to\n" " %(site_name)s. As a final step, please complete the following form:" msgstr "" -"Vous êtes sur le point d'utiliser votre compte %(provider_name)s pour vous " -"connecter à %(site_name)s. Pour finaliser la requête, veuillez compléter le " +"Vous êtes sur le point d'utiliser\n" +" votre compte %(provider_name)s pour vous connecter à\n" +" %(site_name)s. Pour finaliser la requête, veuillez compléter le " "formulaire suivant :" #: .\cookbook\templates\socialaccount\snippets\provider_list.html:23 @@ -2054,80 +2344,80 @@ msgstr "" msgid "Sign in using" msgstr "Se connecter avec" -#: .\cookbook\templates\space.html:23 +#: .\cookbook\templates\space.html:25 msgid "Space:" msgstr "Groupe :" -#: .\cookbook\templates\space.html:24 +#: .\cookbook\templates\space.html:26 msgid "Manage Subscription" msgstr "Gérer l'abonnement" -#: .\cookbook\templates\space.html:32 .\cookbook\templates\stats.html:19 +#: .\cookbook\templates\space.html:34 .\cookbook\templates\stats.html:19 msgid "Number of objects" msgstr "Nombre d'objets" -#: .\cookbook\templates\space.html:45 .\cookbook\templates\stats.html:30 +#: .\cookbook\templates\space.html:54 .\cookbook\templates\stats.html:30 msgid "Recipe Imports" msgstr "Recettes importées" -#: .\cookbook\templates\space.html:53 .\cookbook\templates\stats.html:38 +#: .\cookbook\templates\space.html:62 .\cookbook\templates\stats.html:38 msgid "Objects stats" msgstr "Stats d'objets" -#: .\cookbook\templates\space.html:56 .\cookbook\templates\stats.html:41 +#: .\cookbook\templates\space.html:65 .\cookbook\templates\stats.html:41 msgid "Recipes without Keywords" msgstr "Recettes sans mots-clés" -#: .\cookbook\templates\space.html:60 .\cookbook\templates\stats.html:45 +#: .\cookbook\templates\space.html:73 .\cookbook\templates\stats.html:45 msgid "Internal Recipes" msgstr "Recettes internes" -#: .\cookbook\templates\space.html:73 +#: .\cookbook\templates\space.html:89 msgid "Members" msgstr "Membres" -#: .\cookbook\templates\space.html:77 +#: .\cookbook\templates\space.html:95 msgid "Invite User" msgstr "Inviter un utilisateur" -#: .\cookbook\templates\space.html:88 +#: .\cookbook\templates\space.html:107 msgid "User" msgstr "Utilisateurs" -#: .\cookbook\templates\space.html:89 +#: .\cookbook\templates\space.html:108 msgid "Groups" msgstr "Groupes" -#: .\cookbook\templates\space.html:105 +#: .\cookbook\templates\space.html:119 msgid "admin" msgstr "administrateur" -#: .\cookbook\templates\space.html:106 +#: .\cookbook\templates\space.html:120 msgid "user" msgstr "utilisateur" -#: .\cookbook\templates\space.html:107 +#: .\cookbook\templates\space.html:121 msgid "guest" msgstr "invité" -#: .\cookbook\templates\space.html:108 +#: .\cookbook\templates\space.html:122 msgid "remove" msgstr "supprimer" -#: .\cookbook\templates\space.html:112 +#: .\cookbook\templates\space.html:126 msgid "Update" msgstr "Mettre à jour" -#: .\cookbook\templates\space.html:116 +#: .\cookbook\templates\space.html:130 msgid "You cannot edit yourself." msgstr "Vous ne pouvez pas modifier cela vous-même." -#: .\cookbook\templates\space.html:123 +#: .\cookbook\templates\space.html:136 msgid "There are no members in your space yet!" msgstr "Il n'y a pas encore de membres dans votre groupe !" -#: .\cookbook\templates\space.html:130 .\cookbook\templates\system.html:21 -#: .\cookbook\views\lists.py:100 +#: .\cookbook\templates\space.html:143 .\cookbook\templates\system.html:21 +#: .\cookbook\views\lists.py:85 msgid "Invite Links" msgstr "Liens d'invitation" @@ -2190,8 +2480,9 @@ msgid "" msgstr "" "Publier les médias directement avec gunicorn/python n'est pas recommandé !\n" -"Veuillez suivre les étapes décrites ici pour mettre à jour votre installation.\n" +" Veuillez suivre les étapes décrites ici \n" +" pour mettre à jour votre installation.\n" " " #: .\cookbook\templates\system.html:57 .\cookbook\templates\system.html:73 @@ -2216,10 +2507,12 @@ msgid "" " " msgstr "" "\n" -" Vous n'avez pas de SECRET_KEY configurée dans votre " -"fichier.env. Django utilise par défaut la clé standard fournie " -"avec l'application qui est connue publiquement et non sécurisée ! Veuillez " -"définir SECRET_KEY dans le fichier.env\n" +" Vous n'avez pas de SECRET_KEY configuré dans votre " +"fichier.env. Django utilise par défaut\n" +" la clé standard fournie avec l'application qui est connue " +"publiquement et non sécurisée ! \n" +" Veuillez définir SECRET_KEY dans le fichier." +"env\n" " " #: .\cookbook\templates\system.html:78 @@ -2238,8 +2531,9 @@ msgid "" msgstr "" "\n" " Cette application est toujours en mode debug. Ce n'est sûrement " -"pas nécessaire. Désactivez le mode debug en définissant DEBUG=0 " -"dans le fichier .env.\n" +"pas nécessaire. Désactivez le mode debug\n" +" en définissant DEBUG=0 dans le fichier .env.\n" " " #: .\cookbook\templates\system.html:93 @@ -2260,115 +2554,116 @@ msgid "" msgstr "" "\n" " Cette application ne tourne pas sur une base de données " -"Postgres. Ce n'est pas grave mais déconseillé car certaines fonctionnalités " -"ne fonctionnent qu'avec une base de données Postgres.\n" +"Postgres. Ce n'est pas grave mais déconseillé\n" +" car certaines fonctionnalités ne fonctionnent qu'avec une base " +"de données Postgres.\n" " " -#: .\cookbook\templates\url_import.html:6 +#: .\cookbook\templates\url_import.html:8 msgid "URL Import" msgstr "Import URL" -#: .\cookbook\templates\url_import.html:31 +#: .\cookbook\templates\url_import.html:33 msgid "Drag me to your bookmarks to import recipes from anywhere" msgstr "" "Glissez-moi vers vos favoris pour importer des recettes de n'importe où" -#: .\cookbook\templates\url_import.html:32 +#: .\cookbook\templates\url_import.html:34 msgid "Bookmark Me!" msgstr "Mettez-moi en favori !" -#: .\cookbook\templates\url_import.html:36 +#: .\cookbook\templates\url_import.html:38 msgid "URL" -msgstr "" +msgstr "URL" -#: .\cookbook\templates\url_import.html:38 +#: .\cookbook\templates\url_import.html:40 msgid "App" -msgstr "" +msgstr "App" -#: .\cookbook\templates\url_import.html:62 +#: .\cookbook\templates\url_import.html:64 msgid "Enter website URL" msgstr "Saisissez l'URL du site web" -#: .\cookbook\templates\url_import.html:101 +#: .\cookbook\templates\url_import.html:104 msgid "Select recipe files to import or drop them here..." msgstr "Sélectionnez des fichiers de recettes à importer ou glissez-les ici…" -#: .\cookbook\templates\url_import.html:122 +#: .\cookbook\templates\url_import.html:125 msgid "Paste json or html source here to load recipe." msgstr "Collez une source json ou html pour charger la recette." -#: .\cookbook\templates\url_import.html:150 +#: .\cookbook\templates\url_import.html:153 msgid "Preview Recipe Data" msgstr "Prévisualiser les informations de la recette" -#: .\cookbook\templates\url_import.html:151 +#: .\cookbook\templates\url_import.html:154 msgid "Drag recipe attributes from the right into the appropriate box below." msgstr "" "Glissez les attributs de la recette depuis la droite dans la boîte " "appropriée ci-dessous." -#: .\cookbook\templates\url_import.html:160 -#: .\cookbook\templates\url_import.html:177 -#: .\cookbook\templates\url_import.html:194 -#: .\cookbook\templates\url_import.html:213 -#: .\cookbook\templates\url_import.html:231 -#: .\cookbook\templates\url_import.html:246 -#: .\cookbook\templates\url_import.html:261 -#: .\cookbook\templates\url_import.html:277 -#: .\cookbook\templates\url_import.html:304 -#: .\cookbook\templates\url_import.html:355 +#: .\cookbook\templates\url_import.html:163 +#: .\cookbook\templates\url_import.html:180 +#: .\cookbook\templates\url_import.html:197 +#: .\cookbook\templates\url_import.html:216 +#: .\cookbook\templates\url_import.html:234 +#: .\cookbook\templates\url_import.html:249 +#: .\cookbook\templates\url_import.html:264 +#: .\cookbook\templates\url_import.html:280 +#: .\cookbook\templates\url_import.html:307 +#: .\cookbook\templates\url_import.html:358 msgid "Clear Contents" msgstr "Effacer le contenu" -#: .\cookbook\templates\url_import.html:162 +#: .\cookbook\templates\url_import.html:165 msgid "Text dragged here will be appended to the name." msgstr "Le texte glissé ici sera ajouté au nom." -#: .\cookbook\templates\url_import.html:175 +#: .\cookbook\templates\url_import.html:178 msgid "Description" msgstr "Description" -#: .\cookbook\templates\url_import.html:179 +#: .\cookbook\templates\url_import.html:182 msgid "Text dragged here will be appended to the description." msgstr "Le texte glissé ici sera ajouté à la description." -#: .\cookbook\templates\url_import.html:196 +#: .\cookbook\templates\url_import.html:199 msgid "Keywords dragged here will be appended to current list" msgstr "Les mots-clés ajoutés ici seront ajoutés à la liste actuelle" -#: .\cookbook\templates\url_import.html:211 +#: .\cookbook\templates\url_import.html:214 msgid "Image" msgstr "Image" -#: .\cookbook\templates\url_import.html:243 +#: .\cookbook\templates\url_import.html:246 msgid "Prep Time" msgstr "Temps de préparation" -#: .\cookbook\templates\url_import.html:258 +#: .\cookbook\templates\url_import.html:261 msgid "Cook Time" msgstr "Temps de cuisson" -#: .\cookbook\templates\url_import.html:279 +#: .\cookbook\templates\url_import.html:282 msgid "Ingredients dragged here will be appended to current list." msgstr "Les ingrédients glissés ici seront ajoutés à la liste actuelle." -#: .\cookbook\templates\url_import.html:301 -#: .\cookbook\templates\url_import.html:572 +#: .\cookbook\templates\url_import.html:304 +#: .\cookbook\templates\url_import.html:579 msgid "Instructions" msgstr "Instructions" -#: .\cookbook\templates\url_import.html:306 +#: .\cookbook\templates\url_import.html:309 msgid "" "Recipe instructions dragged here will be appended to current instructions." msgstr "" "Les instructions de recette glissés ici seront ajoutés aux instructions " "actuelles." -#: .\cookbook\templates\url_import.html:329 +#: .\cookbook\templates\url_import.html:332 msgid "Discovered Attributes" msgstr "Attributs découverts" -#: .\cookbook\templates\url_import.html:331 +#: .\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." @@ -2376,61 +2671,61 @@ msgstr "" "Glissez les attributs de recettes d'en-dessous vers la boîte appropriée à " "gauche. Cliquez sur un nœud pour voir toutes ses propriétés." -#: .\cookbook\templates\url_import.html:348 +#: .\cookbook\templates\url_import.html:351 msgid "Show Blank Field" msgstr "Afficher un champ vierge" -#: .\cookbook\templates\url_import.html:353 +#: .\cookbook\templates\url_import.html:356 msgid "Blank Field" msgstr "Champ vierge" -#: .\cookbook\templates\url_import.html:357 +#: .\cookbook\templates\url_import.html:360 msgid "Items dragged to Blank Field will be appended." msgstr "Les objets glissés dans le champ vierge seront ajoutés." -#: .\cookbook\templates\url_import.html:404 +#: .\cookbook\templates\url_import.html:407 msgid "Delete Text" msgstr "Supprimer le texte" -#: .\cookbook\templates\url_import.html:417 +#: .\cookbook\templates\url_import.html:420 msgid "Delete image" msgstr "Supprimer l'image" -#: .\cookbook\templates\url_import.html:433 +#: .\cookbook\templates\url_import.html:436 msgid "Recipe Name" msgstr "Nom de la recette" -#: .\cookbook\templates\url_import.html:437 +#: .\cookbook\templates\url_import.html:440 msgid "Recipe Description" msgstr "Description de la recette" -#: .\cookbook\templates\url_import.html:499 -#: .\cookbook\templates\url_import.html:531 -#: .\cookbook\templates\url_import.html:587 +#: .\cookbook\templates\url_import.html:504 +#: .\cookbook\templates\url_import.html:536 +#: .\cookbook\templates\url_import.html:596 msgid "Select one" msgstr "Faites votre choix" -#: .\cookbook\templates\url_import.html:547 +#: .\cookbook\templates\url_import.html:554 msgid "Note" msgstr "Notes" -#: .\cookbook\templates\url_import.html:588 +#: .\cookbook\templates\url_import.html:597 msgid "Add Keyword" msgstr "Ajouter un mot-clé" -#: .\cookbook\templates\url_import.html:601 +#: .\cookbook\templates\url_import.html:610 msgid "All Keywords" msgstr "Tous les mots-clés" -#: .\cookbook\templates\url_import.html:604 +#: .\cookbook\templates\url_import.html:613 msgid "Import all keywords, not only the ones already existing." msgstr "Importer tous les mots-clés, pas uniquement ceux déjà existant." -#: .\cookbook\templates\url_import.html:631 +#: .\cookbook\templates\url_import.html:640 msgid "Information" msgstr "Information" -#: .\cookbook\templates\url_import.html:633 +#: .\cookbook\templates\url_import.html:642 msgid "" " Only websites containing ld+json or microdata information can currently\n" " be imported. Most big recipe pages " @@ -2440,115 +2735,202 @@ msgid "" "data feel free to post an example in the\n" " github issues." msgstr "" -" Seuls les sites webs contenant des données ld+json ou microdatas peuvent " -"actuellement être importés.\n" -"C'est le cas de la plupart des grands sites web. Si votre site ne peut pas " -"être importé alors qu'il est censé disposer\n" +" Seuls les sites webs contenant des données ld+json ou microdatas peuvent\n" +" actuellement être importés.\n" +" C'est le cas de la plupart des " +"grands sites web. Si votre site ne peut pas être importé\n" +" alors qu'il est censé disposer " "de données correctement structurées,\n" -"n'hésitez pas à publier un exemple dans un ticket sur GitHub." +" n'hésitez pas à publier un " +"exemple dans un ticket sur GitHub." -#: .\cookbook\templates\url_import.html:641 +#: .\cookbook\templates\url_import.html:650 msgid "Google ld+json Info" msgstr "Informations Google ld+json" -#: .\cookbook\templates\url_import.html:644 +#: .\cookbook\templates\url_import.html:653 msgid "GitHub Issues" msgstr "Ticket GitHub" -#: .\cookbook\templates\url_import.html:646 +#: .\cookbook\templates\url_import.html:655 msgid "Recipe Markup Specification" msgstr "Spécification Recipe Markup" -#: .\cookbook\views\api.py:83 .\cookbook\views\api.py:132 +#: .\cookbook\views\api.py:88 .\cookbook\views\api.py:170 msgid "Parameter updated_at incorrectly formatted" msgstr "Le paramètre « update_at » n'est pas correctement formatté" -#: .\cookbook\views\api.py:152 +#: .\cookbook\views\api.py:190 .\cookbook\views\api.py:291 #, python-brace-format msgid "No {self.basename} with id {pk} exists" -msgstr "" +msgstr "Il n'existe pas de {self.basename} avec l'identifiant {pk}" -#: .\cookbook\views\api.py:156 +#: .\cookbook\views\api.py:194 msgid "Cannot merge with the same object!" msgstr "Un objet ne peut être fusionné avec lui-même !" -#: .\cookbook\views\api.py:163 +#: .\cookbook\views\api.py:201 #, python-brace-format msgid "No {self.basename} with id {target} exists" -msgstr "" +msgstr "Il n'existe pas de {self.basename} avec l'id {target}" -#: .\cookbook\views\api.py:168 -#, fuzzy -#| msgid "Cannot merge with the same object!" +#: .\cookbook\views\api.py:206 msgid "Cannot merge with child object!" -msgstr "Un objet ne peut être fusionné avec lui-même !" +msgstr "Impossible de fusionner avec l'objet enfant !" -#: .\cookbook\views\api.py:201 +#: .\cookbook\views\api.py:239 #, python-brace-format msgid "{source.name} was merged successfully with {target.name}" -msgstr "" +msgstr "{source.name} a été fusionné avec succès avec {target.name}" -#: .\cookbook\views\api.py:205 +#: .\cookbook\views\api.py:244 #, python-brace-format msgid "An error occurred attempting to merge {source.name} with {target.name}" msgstr "" +"Une erreur s'est produite lors de la tentative de fusion de {source.name} " +"avec {target.name}" -#: .\cookbook\views\api.py:249 -#, python-brace-format -msgid "No {self.basename} with id {child} exists" -msgstr "" - -#: .\cookbook\views\api.py:258 +#: .\cookbook\views\api.py:300 #, python-brace-format msgid "{child.name} was moved successfully to the root." -msgstr "" +msgstr "{child.name} a été déplacé avec succès vers la racine." -#: .\cookbook\views\api.py:261 .\cookbook\views\api.py:279 +#: .\cookbook\views\api.py:303 .\cookbook\views\api.py:321 msgid "An error occurred attempting to move " -msgstr "" +msgstr "Une erreur s'est produite en essayant de déplacer " -#: .\cookbook\views\api.py:264 +#: .\cookbook\views\api.py:306 msgid "Cannot move an object to itself!" -msgstr "" +msgstr "Impossible de déplacer un objet vers lui-même !" -#: .\cookbook\views\api.py:270 +#: .\cookbook\views\api.py:312 #, python-brace-format msgid "No {self.basename} with id {parent} exists" -msgstr "" +msgstr "Il n'existe pas de {self.basename} avec l'id {parent}" -#: .\cookbook\views\api.py:276 +#: .\cookbook\views\api.py:318 #, python-brace-format msgid "{child.name} was moved successfully to parent {parent.name}" +msgstr "{child.name} a été déplacé avec succès vers le parent {parent.name}" + +#: .\cookbook\views\api.py:470 +#, python-brace-format +msgid "{obj.name} was removed from the shopping list." +msgstr "" + +#: .\cookbook\views\api.py:475 .\cookbook\views\api.py:726 +#, python-brace-format +msgid "{obj.name} was added to the shopping list." +msgstr "" + +#: .\cookbook\views\api.py:587 +msgid "ID of recipe a step is part of. For multiple repeat parameter." +msgstr "" + +#: .\cookbook\views\api.py:588 +msgid "Query string matched (fuzzy) against object name." +msgstr "" + +#: .\cookbook\views\api.py:631 +msgid "" +"Query string matched (fuzzy) against recipe name. In the future also " +"fulltext search." +msgstr "" + +#: .\cookbook\views\api.py:632 +msgid "ID of keyword a recipe should have. For multiple repeat parameter." +msgstr "" + +#: .\cookbook\views\api.py:633 +msgid "ID of food a recipe should have. For multiple repeat parameter." +msgstr "" + +#: .\cookbook\views\api.py:634 +msgid "ID of unit a recipe should have." +msgstr "" + +#: .\cookbook\views\api.py:635 +msgid "Rating a recipe should have. [0 - 5]" +msgstr "" + +#: .\cookbook\views\api.py:636 +msgid "ID of book a recipe should be in. For multiple repeat parameter." +msgstr "" + +#: .\cookbook\views\api.py:637 +msgid "" +"If recipe should have all (AND=false) or any (OR=true) of the " +"provided keywords." +msgstr "" + +#: .\cookbook\views\api.py:638 +msgid "" +"If recipe should have all (AND=false) or any (OR=true) of the " +"provided foods." +msgstr "" + +#: .\cookbook\views\api.py:639 +msgid "" +"If recipe should be in all (AND=false) or any (OR=true) of the " +"provided books." +msgstr "" + +#: .\cookbook\views\api.py:640 +msgid "If only internal recipes should be returned. [true/false]" +msgstr "" + +#: .\cookbook\views\api.py:641 +msgid "Returns the results in randomized order. [true/false]" msgstr "" -#: .\cookbook\views\api.py:723 .\cookbook\views\data.py:42 +#: .\cookbook\views\api.py:642 +msgid "Returns new results first in search results. [true/false]" +msgstr "" + +#: .\cookbook\views\api.py:768 +msgid "" +"Returns the shopping list entry with a primary key of id. Multiple values " +"allowed." +msgstr "" + +#: .\cookbook\views\api.py:771 +msgid "" +"Filter shopping list entries on checked. [true, false, both, recent]
- recent includes unchecked items and recently completed items." +msgstr "" + +#: .\cookbook\views\api.py:773 +msgid "Returns the shopping list entries sorted by supermarket category order." +msgstr "" + +#: .\cookbook\views\api.py:922 .\cookbook\views\data.py:42 #: .\cookbook\views\edit.py:129 .\cookbook\views\new.py:95 -#, fuzzy -#| msgid "This feature is not available in the demo version!" msgid "This feature is not yet available in the hosted version of tandoor!" -msgstr "Cette fonctionnalité n'est pas disponible dans la version d'essai !" +msgstr "" +"Cette fonctionnalité n'est pas encore disponible dans la version hébergée de " +"Tandoor !" -#: .\cookbook\views\api.py:745 +#: .\cookbook\views\api.py:944 msgid "Sync successful!" msgstr "Synchro réussie !" -#: .\cookbook\views\api.py:750 +#: .\cookbook\views\api.py:949 msgid "Error synchronizing with Storage" msgstr "Erreur lors de la synchronisation avec le stockage" -#: .\cookbook\views\api.py:828 +#: .\cookbook\views\api.py:1028 msgid "Nothing to do." msgstr "Rien à faire." -#: .\cookbook\views\api.py:843 +#: .\cookbook\views\api.py:1043 msgid "The requested site provided malformed data and cannot be read." msgstr "Le site web a renvoyé des données malformées et ne peut être lu." -#: .\cookbook\views\api.py:850 +#: .\cookbook\views\api.py:1050 msgid "The requested page could not be found." msgstr "La page souhaitée n'a pas été trouvée." -#: .\cookbook\views\api.py:859 +#: .\cookbook\views\api.py:1068 msgid "" "The requested site does not provide any recognized data format to import the " "recipe from." @@ -2556,22 +2938,26 @@ msgstr "" "Le site web est dans un format qui ne permet pas d'importer automatiquement " "la recette." -#: .\cookbook\views\api.py:873 +#: .\cookbook\views\api.py:1082 +msgid "Connection Refused." +msgstr "" + +#: .\cookbook\views\api.py:1091 msgid "No useable data could be found." msgstr "Aucune information utilisable n'a été trouvée." -#: .\cookbook\views\api.py:889 +#: .\cookbook\views\api.py:1107 msgid "I couldn't find anything to do." msgstr "Je n'ai rien trouvé à faire." #: .\cookbook\views\data.py:34 .\cookbook\views\data.py:129 -#: .\cookbook\views\edit.py:49 .\cookbook\views\import_export.py:73 +#: .\cookbook\views\edit.py:49 .\cookbook\views\import_export.py:80 #: .\cookbook\views\new.py:33 msgid "You have reached the maximum number of recipes for your space." msgstr "Vous avez atteint le nombre maximum de recettes pour votre groupe." #: .\cookbook\views\data.py:38 .\cookbook\views\data.py:133 -#: .\cookbook\views\edit.py:53 .\cookbook\views\import_export.py:77 +#: .\cookbook\views\edit.py:53 .\cookbook\views\import_export.py:84 #: .\cookbook\views\new.py:37 msgid "You have more users than allowed in your space." msgstr "Vous avez plus d'utilisateurs qu'autorisés dans votre groupe." @@ -2589,7 +2975,7 @@ msgstr[1] "" msgid "Monitor" msgstr "Surveiller" -#: .\cookbook\views\delete.py:125 .\cookbook\views\lists.py:86 +#: .\cookbook\views\delete.py:125 .\cookbook\views\lists.py:71 #: .\cookbook\views\new.py:101 msgid "Storage Backend" msgstr "Espace de stockage" @@ -2609,7 +2995,7 @@ msgstr "Livre de recettes" msgid "Bookmarks" msgstr "Favoris" -#: .\cookbook\views\delete.py:192 .\cookbook\views\new.py:235 +#: .\cookbook\views\delete.py:192 .\cookbook\views\new.py:238 msgid "Invite Link" msgstr "Lien d'invitation" @@ -2634,49 +3020,47 @@ msgstr "Modifications sauvegardées !" msgid "Error saving changes!" msgstr "Erreur lors de la sauvegarde des modifications !" -#: .\cookbook\views\import_export.py:99 +#: .\cookbook\views\import_export.py:106 msgid "Importing is not implemented for this provider" msgstr "L'importation n'est pas implémentée pour ce fournisseur" -#: .\cookbook\views\import_export.py:121 +#: .\cookbook\views\import_export.py:127 +msgid "" +"The PDF Exporter is not enabled on this instance as it is still in an " +"experimental state." +msgstr "" + +#: .\cookbook\views\import_export.py:132 msgid "Exporting is not implemented for this provider" msgstr "L'exportation n'est pas implémentée pour ce fournisseur" -#: .\cookbook\views\lists.py:26 +#: .\cookbook\views\lists.py:25 msgid "Import Log" msgstr "Historique d'import" -#: .\cookbook\views\lists.py:39 +#: .\cookbook\views\lists.py:38 msgid "Discovery" msgstr "Découverte" -#: .\cookbook\views\lists.py:69 +#: .\cookbook\views\lists.py:54 msgid "Shopping Lists" msgstr "Listes de course" -#: .\cookbook\views\lists.py:129 -#, fuzzy -#| msgid "Food" -msgid "Foods" -msgstr "Aliment" - -#: .\cookbook\views\lists.py:163 -#, fuzzy -#| msgid "Supermarket" +#: .\cookbook\views\lists.py:148 msgid "Supermarkets" -msgstr "Supermarché" +msgstr "Supermarchés" -#: .\cookbook\views\lists.py:179 -#, fuzzy -#| msgid "Shopping Recipes" +#: .\cookbook\views\lists.py:164 msgid "Shopping Categories" -msgstr "Recettes dans le panier" +msgstr "Catégories de courses" + +#: .\cookbook\views\lists.py:217 +msgid "Steps" +msgstr "Étapes" #: .\cookbook\views\lists.py:232 -#, fuzzy -#| msgid "Shopping List" msgid "New Shopping List" -msgstr "Liste de courses" +msgstr "Nouvelle liste de courses" #: .\cookbook\views\new.py:126 msgid "Imported new recipe!" @@ -2686,49 +3070,49 @@ msgstr "Nouvelle recette importée !" msgid "There was an error importing this recipe!" msgstr "Une erreur s\\\\'est produite lors de l\\\\'import de cette recette !" -#: .\cookbook\views\new.py:209 +#: .\cookbook\views\new.py:212 msgid "Hello" msgstr "Bonjour" -#: .\cookbook\views\new.py:209 +#: .\cookbook\views\new.py:212 msgid "You have been invited by " msgstr "Vous avez été invité par " -#: .\cookbook\views\new.py:210 +#: .\cookbook\views\new.py:213 msgid " to join their Tandoor Recipes space " msgstr " pour rejoindre leur groupe Tandoor Recipes " -#: .\cookbook\views\new.py:211 +#: .\cookbook\views\new.py:214 msgid "Click the following link to activate your account: " msgstr "Cliquez le lien suivant pour activer votre compte : " -#: .\cookbook\views\new.py:212 +#: .\cookbook\views\new.py:215 msgid "" "If the link does not work use the following code to manually join the space: " msgstr "" "Si le lien ne fonctionne pas, utilisez le code suivant manuellement pour " "rejoindre le groupe : " -#: .\cookbook\views\new.py:213 +#: .\cookbook\views\new.py:216 msgid "The invitation is valid until " msgstr "L'invitation est valide jusqu'au " -#: .\cookbook\views\new.py:214 +#: .\cookbook\views\new.py:217 msgid "" "Tandoor Recipes is an Open Source recipe manager. Check it out on GitHub " msgstr "" "Tandoor Recipes sont un gestionnaire de recettes open source. Venez-voir " "notre Github " -#: .\cookbook\views\new.py:217 +#: .\cookbook\views\new.py:220 msgid "Tandoor Recipes Invite" msgstr "Invitation Tandoor Recipes" -#: .\cookbook\views\new.py:224 +#: .\cookbook\views\new.py:227 msgid "Invite link successfully send to user." msgstr "Le lien d'invitation a été correctement envoyé à l'utilisateur." -#: .\cookbook\views\new.py:227 +#: .\cookbook\views\new.py:230 msgid "" "You have send to many emails, please share the link manually or wait a few " "hours." @@ -2736,13 +3120,13 @@ msgstr "" "Vous avez envoyé trop de mails, partagez le lien manuellement ou attendez " "quelques heures." -#: .\cookbook\views\new.py:229 +#: .\cookbook\views\new.py:232 msgid "Email to user could not be send, please share link manually." msgstr "" "Le mail n'a pas pu être envoyé à l'utilisateur, veuillez envoyer le lien " "manuellement." -#: .\cookbook\views\views.py:127 +#: .\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." @@ -2751,33 +3135,37 @@ msgstr "" "Commencez à ajoutez des recettes ou invitez d'autres personnes à vous " "rejoindre." -#: .\cookbook\views\views.py:175 +#: .\cookbook\views\views.py:174 msgid "You do not have the required permissions to perform this action!" msgstr "Vous n'avez pas la permission d'effectuer cette action !" -#: .\cookbook\views\views.py:186 +#: .\cookbook\views\views.py:185 msgid "Comment saved!" msgstr "Commentaire enregistré !" -#: .\cookbook\views\views.py:277 +#: .\cookbook\views\views.py:276 msgid "This feature is not available in the demo version!" msgstr "Cette fonctionnalité n'est pas disponible dans la version d'essai !" -#: .\cookbook\views\views.py:340 +#: .\cookbook\views\views.py:335 msgid "You must select at least one field to search!" msgstr "" +"Vous devez sélectionner au moins un champ pour effectuer une recherche !" -#: .\cookbook\views\views.py:345 +#: .\cookbook\views\views.py:340 msgid "" "To use this search method you must select at least one full text search " "field!" msgstr "" +"Pour utiliser cette méthode de recherche, vous devez sélectionner au moins " +"un champ de recherche en texte intégral !" -#: .\cookbook\views\views.py:349 +#: .\cookbook\views\views.py:344 msgid "Fuzzy search is not compatible with this search method!" msgstr "" +"La recherche floue n'est pas compatible avec cette méthode de recherche !" -#: .\cookbook\views\views.py:452 +#: .\cookbook\views\views.py:470 msgid "" "The setup page can only be used to create the first user! If you have " "forgotten your superuser credentials please consult the django documentation " @@ -2788,32 +3176,32 @@ msgstr "" "utilisateur, counsultez la documentation Django pour savoir comment " "réinitialiser le mot de passe." -#: .\cookbook\views\views.py:459 +#: .\cookbook\views\views.py:477 msgid "Passwords dont match!" msgstr "Les mots de passe ne correspondent pas !" -#: .\cookbook\views\views.py:475 +#: .\cookbook\views\views.py:493 msgid "User has been created, please login!" msgstr "L'utilisateur a été créé, veuillez vous connecter !" -#: .\cookbook\views\views.py:491 +#: .\cookbook\views\views.py:509 msgid "Malformed Invite Link supplied!" msgstr "Le lien d'invitation fourni est mal formé !" -#: .\cookbook\views\views.py:498 +#: .\cookbook\views\views.py:516 msgid "You are already member of a space and therefore cannot join this one." msgstr "" "Vous êtes déjà membre d'un groupe, ainsi, vous ne pouvez rejoindre celui-ci." -#: .\cookbook\views\views.py:509 +#: .\cookbook\views\views.py:527 msgid "Successfully joined space." msgstr "Vous avez bien rejoint le groupe." -#: .\cookbook\views\views.py:515 +#: .\cookbook\views\views.py:533 msgid "Invite Link not valid or already used!" msgstr "Le lien d'invitation est invalide ou déjà utilisé !" -#: .\cookbook\views\views.py:579 +#: .\cookbook\views\views.py:614 msgid "" "Reporting share links is not enabled for this instance. Please notify the " "page administrator to report problems." @@ -2821,7 +3209,7 @@ msgstr "" "Le signalement de liens partagés n'est pas autorisé pour cette installation. " "Veuillez contacter l'administrateur de la page pour signaler le problème." -#: .\cookbook\views\views.py:585 +#: .\cookbook\views\views.py:620 msgid "" "Recipe sharing link has been disabled! For additional information please " "contact the page administrator." @@ -2829,6 +3217,10 @@ msgstr "" "Les liens partagés de recettes ont été désactivés ! Pour plus " "d'informations, veuillez contacter l'administrateur de la page." +#, python-brace-format +#~ msgid "No {self.basename} with id {child} exists" +#~ msgstr "Il n'existe pas de {self.basename} avec l'id {child}" + #~ msgid "New Unit" #~ msgstr "Nouvelle unité" @@ -2850,9 +3242,6 @@ msgstr "" #~ msgid "Old Food" #~ msgstr "Ancien aliment" -#~ msgid "Food that should be replaced." -#~ msgstr "Aliment qui devrait être remplacé." - #~ msgid "New Entry" #~ msgstr "Nouvelle ligne" @@ -3095,9 +3484,6 @@ msgstr "" #~ msgid "Delete Recipe" #~ msgstr "Supprimer la recette" -#~ msgid "Steps" -#~ msgstr "Étapes" - #~ msgid "Password Settings" #~ msgstr "Paramètres de mots de passe" diff --git a/cookbook/locale/hu_HU/LC_MESSAGES/django.po b/cookbook/locale/hu_HU/LC_MESSAGES/django.po index e72c36c9e1..a0486f1529 100644 --- a/cookbook/locale/hu_HU/LC_MESSAGES/django.po +++ b/cookbook/locale/hu_HU/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-08 16:27+0100\n" +"POT-Creation-Date: 2022-01-18 14:52+0100\n" "PO-Revision-Date: 2020-06-02 19:28+0000\n" "Last-Translator: igazka , 2020\n" "Language-Team: Hungarian (Hungary) (https://www.transifex.com/django-recipes/" @@ -22,69 +22,68 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: .\cookbook\filters.py:23 .\cookbook\templates\base.html:125 -#: .\cookbook\templates\forms\ingredients.html:34 -#: .\cookbook\templates\space.html:43 .\cookbook\templates\stats.html:28 -#: .\cookbook\templates\url_import.html:274 +#: .\cookbook\filters.py:23 .\cookbook\templates\forms\ingredients.html:34 +#: .\cookbook\templates\space.html:50 .\cookbook\templates\stats.html:28 +#: .\cookbook\templates\url_import.html:277 msgid "Ingredients" msgstr "Hozzávalók" -#: .\cookbook\forms.py:54 +#: .\cookbook\forms.py:56 msgid "Default unit" msgstr "" -#: .\cookbook\forms.py:55 +#: .\cookbook\forms.py:57 msgid "Use fractions" msgstr "" -#: .\cookbook\forms.py:56 +#: .\cookbook\forms.py:58 msgid "Use KJ" msgstr "" -#: .\cookbook\forms.py:57 +#: .\cookbook\forms.py:59 msgid "Theme" msgstr "" -#: .\cookbook\forms.py:58 +#: .\cookbook\forms.py:60 msgid "Navbar color" msgstr "" -#: .\cookbook\forms.py:59 +#: .\cookbook\forms.py:61 msgid "Sticky navbar" msgstr "" -#: .\cookbook\forms.py:60 +#: .\cookbook\forms.py:62 msgid "Default page" msgstr "" -#: .\cookbook\forms.py:61 +#: .\cookbook\forms.py:63 msgid "Show recent recipes" msgstr "" -#: .\cookbook\forms.py:62 +#: .\cookbook\forms.py:64 msgid "Search style" msgstr "" -#: .\cookbook\forms.py:63 +#: .\cookbook\forms.py:65 msgid "Plan sharing" msgstr "" -#: .\cookbook\forms.py:64 +#: .\cookbook\forms.py:66 #, fuzzy #| msgid "Ingredients" msgid "Ingredient decimal places" msgstr "Hozzávalók" -#: .\cookbook\forms.py:65 +#: .\cookbook\forms.py:67 msgid "Shopping list auto sync period" msgstr "" -#: .\cookbook\forms.py:66 .\cookbook\templates\recipe_view.html:21 -#: .\cookbook\templates\space.html:62 .\cookbook\templates\stats.html:47 +#: .\cookbook\forms.py:68 .\cookbook\templates\recipe_view.html:21 +#: .\cookbook\templates\space.html:77 .\cookbook\templates\stats.html:47 msgid "Comments" msgstr "" -#: .\cookbook\forms.py:70 +#: .\cookbook\forms.py:72 msgid "" "Color of the top navigation bar. Not all colors work with all themes, just " "try them out!" @@ -92,12 +91,12 @@ msgstr "" "A felső navigációs sáv színe. Nem minden szín működik minden témával. " "Próbáld ki őket! " -#: .\cookbook\forms.py:72 +#: .\cookbook\forms.py:74 msgid "Default Unit to be used when inserting a new ingredient into a recipe." msgstr "" "Az alapértelmezett mértékegység, új hozzávaló receptbe való beillesztésekor." -#: .\cookbook\forms.py:74 +#: .\cookbook\forms.py:76 msgid "" "Enables support for fractions in ingredient amounts (e.g. convert decimals " "to fractions automatically)" @@ -105,29 +104,31 @@ msgstr "" "Lehetővé teszi az összetevők mennyiségében a törtrészek használatát (pl. A " "tizedesjegyek automatikus törtrészekké alakítása)" -#: .\cookbook\forms.py:76 +#: .\cookbook\forms.py:78 msgid "Display nutritional energy amounts in joules instead of calories" msgstr "" -#: .\cookbook\forms.py:78 -msgid "" -"Users with whom newly created meal plan/shopping list entries should be " -"shared by default." +#: .\cookbook\forms.py:79 +msgid "Users with whom newly created meal plans should be shared by default." msgstr "" #: .\cookbook\forms.py:80 +msgid "Users with whom to share shopping lists." +msgstr "" + +#: .\cookbook\forms.py:82 msgid "Show recently viewed recipes on search page." msgstr "" -#: .\cookbook\forms.py:81 +#: .\cookbook\forms.py:83 msgid "Number of decimals to round ingredients." msgstr "" -#: .\cookbook\forms.py:82 +#: .\cookbook\forms.py:84 msgid "If you want to be able to create and see comments underneath recipes." msgstr "" -#: .\cookbook\forms.py:84 +#: .\cookbook\forms.py:86 .\cookbook\forms.py:493 msgid "" "Setting to 0 will disable auto sync. When viewing a shopping list the list " "is updated every set seconds to sync changes someone else might have made. " @@ -135,202 +136,312 @@ msgid "" "mobile data. If lower than instance limit it is reset when saving." msgstr "" -#: .\cookbook\forms.py:87 +#: .\cookbook\forms.py:89 msgid "Makes the navbar stick to the top of the page." msgstr "" -#: .\cookbook\forms.py:103 +#: .\cookbook\forms.py:90 .\cookbook\forms.py:496 +msgid "Automatically add meal plan ingredients to shopping list." +msgstr "" + +#: .\cookbook\forms.py:91 +msgid "Exclude ingredients that are on hand." +msgstr "" + +#: .\cookbook\forms.py:108 msgid "" "Both fields are optional. If none are given the username will be displayed " "instead" msgstr "" -#: .\cookbook\forms.py:124 .\cookbook\forms.py:289 -#: .\cookbook\templates\url_import.html:158 +#: .\cookbook\forms.py:129 .\cookbook\forms.py:298 +#: .\cookbook\templates\url_import.html:161 msgid "Name" msgstr "Név" -#: .\cookbook\forms.py:125 .\cookbook\forms.py:290 -#: .\cookbook\templates\space.html:39 .\cookbook\templates\stats.html:24 -#: .\cookbook\templates\url_import.html:192 -#: .\cookbook\templates\url_import.html:578 .\cookbook\views\lists.py:112 +#: .\cookbook\forms.py:130 .\cookbook\forms.py:299 +#: .\cookbook\templates\space.html:44 .\cookbook\templates\stats.html:24 +#: .\cookbook\templates\url_import.html:195 +#: .\cookbook\templates\url_import.html:585 .\cookbook\views\lists.py:97 msgid "Keywords" msgstr "Kulcsszavak" -#: .\cookbook\forms.py:126 +#: .\cookbook\forms.py:131 msgid "Preparation time in minutes" msgstr "Előkészítési idő percben" -#: .\cookbook\forms.py:127 +#: .\cookbook\forms.py:132 msgid "Waiting time (cooking/baking) in minutes" msgstr "Várakozási idő (sütés/főzés) percben" -#: .\cookbook\forms.py:128 .\cookbook\forms.py:259 .\cookbook\forms.py:291 +#: .\cookbook\forms.py:133 .\cookbook\forms.py:267 .\cookbook\forms.py:300 msgid "Path" msgstr "Elérési útvonal" -#: .\cookbook\forms.py:129 +#: .\cookbook\forms.py:134 msgid "Storage UID" msgstr "Tárhely UID" -#: .\cookbook\forms.py:157 +#: .\cookbook\forms.py:164 msgid "Default" msgstr "" -#: .\cookbook\forms.py:168 .\cookbook\templates\url_import.html:94 +#: .\cookbook\forms.py:175 .\cookbook\templates\url_import.html:97 msgid "" "To prevent duplicates recipes with the same name as existing ones are " "ignored. Check this box to import everything." msgstr "" -#: .\cookbook\forms.py:190 +#: .\cookbook\forms.py:197 msgid "Add your comment: " msgstr "Add hozzá a kommented:" -#: .\cookbook\forms.py:205 +#: .\cookbook\forms.py:212 msgid "Leave empty for dropbox and enter app password for nextcloud." msgstr "" -#: .\cookbook\forms.py:212 +#: .\cookbook\forms.py:219 msgid "Leave empty for nextcloud and enter api token for dropbox." msgstr "" -#: .\cookbook\forms.py:221 +#: .\cookbook\forms.py:228 msgid "" "Leave empty for dropbox and enter only base url for nextcloud (/remote." "php/webdav/ is added automatically)" msgstr "" -#: .\cookbook\forms.py:258 .\cookbook\views\edit.py:166 +#: .\cookbook\forms.py:266 .\cookbook\views\edit.py:166 msgid "Storage" msgstr "" -#: .\cookbook\forms.py:260 +#: .\cookbook\forms.py:268 msgid "Active" msgstr "" -#: .\cookbook\forms.py:265 +#: .\cookbook\forms.py:274 msgid "Search String" msgstr "" -#: .\cookbook\forms.py:292 +#: .\cookbook\forms.py:301 msgid "File ID" msgstr "Fájl ID:" -#: .\cookbook\forms.py:313 +#: .\cookbook\forms.py:323 msgid "You must provide at least a recipe or a title." msgstr "" -#: .\cookbook\forms.py:326 +#: .\cookbook\forms.py:336 msgid "You can list default users to share recipes with in the settings." msgstr "" -#: .\cookbook\forms.py:327 +#: .\cookbook\forms.py:337 msgid "" "You can use markdown to format this field. See the docs here" msgstr "" -#: .\cookbook\forms.py:353 +#: .\cookbook\forms.py:363 msgid "Maximum number of users for this space reached." msgstr "" -#: .\cookbook\forms.py:359 +#: .\cookbook\forms.py:369 msgid "Email address already taken!" msgstr "" -#: .\cookbook\forms.py:367 +#: .\cookbook\forms.py:377 msgid "" "An email address is not required but if present the invite link will be sent " "to the user." msgstr "" -#: .\cookbook\forms.py:382 +#: .\cookbook\forms.py:392 msgid "Name already taken." msgstr "" -#: .\cookbook\forms.py:393 +#: .\cookbook\forms.py:403 msgid "Accept Terms and Privacy" msgstr "" -#: .\cookbook\forms.py:425 +#: .\cookbook\forms.py:435 msgid "" "Determines how fuzzy a search is if it uses trigram similarity matching (e." "g. low values mean more typos are ignored)." msgstr "" -#: .\cookbook\forms.py:435 +#: .\cookbook\forms.py:445 msgid "" "Select type method of search. Click here for " "full desciption of choices." msgstr "" -#: .\cookbook\forms.py:436 +#: .\cookbook\forms.py:446 msgid "" "Use fuzzy matching on units, keywords and ingredients when editing and " "importing recipes." msgstr "" -#: .\cookbook\forms.py:438 +#: .\cookbook\forms.py:448 msgid "" "Fields to search ignoring accents. Selecting this option can improve or " "degrade search quality depending on language" msgstr "" -#: .\cookbook\forms.py:440 +#: .\cookbook\forms.py:450 msgid "" "Fields to search for partial matches. (e.g. searching for 'Pie' will return " "'pie' and 'piece' and 'soapie')" msgstr "" -#: .\cookbook\forms.py:442 +#: .\cookbook\forms.py:452 msgid "" "Fields to search for beginning of word matches. (e.g. searching for 'sa' " "will return 'salad' and 'sandwich')" msgstr "" -#: .\cookbook\forms.py:444 +#: .\cookbook\forms.py:454 msgid "" "Fields to 'fuzzy' search. (e.g. searching for 'recpie' will find 'recipe'.) " "Note: this option will conflict with 'web' and 'raw' methods of search." msgstr "" -#: .\cookbook\forms.py:446 +#: .\cookbook\forms.py:456 msgid "" "Fields to full text search. Note: 'web', 'phrase', and 'raw' search methods " "only function with fulltext fields." msgstr "" -#: .\cookbook\forms.py:450 +#: .\cookbook\forms.py:460 msgid "Search Method" msgstr "" -#: .\cookbook\forms.py:451 +#: .\cookbook\forms.py:461 msgid "Fuzzy Lookups" msgstr "" -#: .\cookbook\forms.py:452 +#: .\cookbook\forms.py:462 msgid "Ignore Accent" msgstr "" -#: .\cookbook\forms.py:453 +#: .\cookbook\forms.py:463 msgid "Partial Match" msgstr "" -#: .\cookbook\forms.py:454 +#: .\cookbook\forms.py:464 msgid "Starts Wtih" msgstr "" -#: .\cookbook\forms.py:455 +#: .\cookbook\forms.py:465 msgid "Fuzzy Search" msgstr "" -#: .\cookbook\forms.py:456 +#: .\cookbook\forms.py:466 #, fuzzy #| msgid "Text" msgid "Full Text" msgstr "Szöveg" +#: .\cookbook\forms.py:491 +msgid "" +"Users will see all items you add to your shopping list. They must add you " +"to see items on their list." +msgstr "" + +#: .\cookbook\forms.py:497 +msgid "" +"When adding a meal plan to the shopping list (manually or automatically), " +"include all related recipes." +msgstr "" + +#: .\cookbook\forms.py:498 +msgid "" +"When adding a meal plan to the shopping list (manually or automatically), " +"exclude ingredients that are on hand." +msgstr "" + +#: .\cookbook\forms.py:499 +msgid "Default number of hours to delay a shopping list entry." +msgstr "" + +#: .\cookbook\forms.py:500 +msgid "Filter shopping list to only include supermarket categories." +msgstr "" + +#: .\cookbook\forms.py:501 +msgid "Days of recent shopping list entries to display." +msgstr "" + +#: .\cookbook\forms.py:502 +msgid "Mark food 'On Hand' when checked off shopping list." +msgstr "" + +#: .\cookbook\forms.py:503 +msgid "Delimiter to use for CSV exports." +msgstr "" + +#: .\cookbook\forms.py:504 +msgid "Prefix to add when copying list to the clipboard." +msgstr "" + +#: .\cookbook\forms.py:508 +msgid "Share Shopping List" +msgstr "" + +#: .\cookbook\forms.py:509 +msgid "Autosync" +msgstr "" + +#: .\cookbook\forms.py:510 +msgid "Auto Add Meal Plan" +msgstr "" + +#: .\cookbook\forms.py:511 +msgid "Exclude On Hand" +msgstr "" + +#: .\cookbook\forms.py:512 +msgid "Include Related" +msgstr "" + +#: .\cookbook\forms.py:513 +msgid "Default Delay Hours" +msgstr "" + +#: .\cookbook\forms.py:514 +msgid "Filter to Supermarket" +msgstr "" + +#: .\cookbook\forms.py:515 +msgid "Recent Days" +msgstr "" + +#: .\cookbook\forms.py:516 +msgid "CSV Delimiter" +msgstr "" + +#: .\cookbook\forms.py:517 .\cookbook\templates\shopping_list.html:322 +msgid "List Prefix" +msgstr "" + +#: .\cookbook\forms.py:518 +msgid "Auto On Hand" +msgstr "" + +#: .\cookbook\forms.py:528 +msgid "Reset Food Inheritance" +msgstr "" + +#: .\cookbook\forms.py:529 +msgid "Reset all food to inherit the fields configured." +msgstr "" + +#: .\cookbook\forms.py:541 +msgid "Fields on food that should be inherited by default." +msgstr "" + +#: .\cookbook\forms.py:542 +msgid "Show recipe counts on search filters" +msgstr "" + #: .\cookbook\helper\AllAuthCustomAdapter.py:36 msgid "" "In order to prevent spam, the requested email was not send. Please wait a " @@ -338,19 +449,19 @@ msgid "" msgstr "" #: .\cookbook\helper\permission_helper.py:136 -#: .\cookbook\helper\permission_helper.py:159 .\cookbook\views\views.py:149 +#: .\cookbook\helper\permission_helper.py:159 .\cookbook\views\views.py:148 msgid "You are not logged in and therefore cannot view this page!" msgstr "" #: .\cookbook\helper\permission_helper.py:140 #: .\cookbook\helper\permission_helper.py:146 #: .\cookbook\helper\permission_helper.py:171 -#: .\cookbook\helper\permission_helper.py:216 -#: .\cookbook\helper\permission_helper.py:230 -#: .\cookbook\helper\permission_helper.py:241 -#: .\cookbook\helper\permission_helper.py:252 .\cookbook\views\data.py:47 -#: .\cookbook\views\views.py:160 .\cookbook\views\views.py:167 -#: .\cookbook\views\views.py:233 +#: .\cookbook\helper\permission_helper.py:219 +#: .\cookbook\helper\permission_helper.py:233 +#: .\cookbook\helper\permission_helper.py:244 +#: .\cookbook\helper\permission_helper.py:255 .\cookbook\views\data.py:47 +#: .\cookbook\views\views.py:159 .\cookbook\views\views.py:166 +#: .\cookbook\views\views.py:232 msgid "You do not have the required permissions to view this page!" msgstr "" @@ -360,41 +471,40 @@ msgstr "" msgid "You cannot interact with this object as it is not owned by you!" msgstr "" +#: .\cookbook\helper\recipe_search.py:473 +msgid "One of queryset or hash_key must be provided" +msgstr "" + +#: .\cookbook\helper\shopping_helper.py:54 +msgid "You must supply a recipe or mealplan" +msgstr "" + +#: .\cookbook\helper\shopping_helper.py:58 +msgid "You must supply a created_by" +msgstr "" + #: .\cookbook\helper\template_helper.py:61 #: .\cookbook\helper\template_helper.py:63 msgid "Could not parse template code." msgstr "" -#: .\cookbook\integration\integration.py:126 -#: .\cookbook\templates\import.html:14 .\cookbook\templates\import.html:20 -#: .\cookbook\templates\import_response.html:7 -#: .\cookbook\templates\test.html:14 .\cookbook\templates\test.html:20 -#: .\cookbook\templates\url_import.html:27 -#: .\cookbook\templates\url_import.html:105 -#: .\cookbook\templates\url_import.html:127 -#: .\cookbook\templates\url_import.html:321 -#: .\cookbook\templates\url_import.html:609 .\cookbook\views\delete.py:89 -#: .\cookbook\views\edit.py:200 -msgid "Import" -msgstr "" - -#: .\cookbook\integration\integration.py:208 +#: .\cookbook\integration\integration.py:200 msgid "" "Importer expected a .zip file. Did you choose the correct importer type for " "your data ?" msgstr "" -#: .\cookbook\integration\integration.py:211 +#: .\cookbook\integration\integration.py:203 msgid "" "An unexpected error occurred during the import. Please make sure you have " "uploaded a valid file." msgstr "" -#: .\cookbook\integration\integration.py:216 +#: .\cookbook\integration\integration.py:208 msgid "The following recipes were ignored because they already existed:" msgstr "" -#: .\cookbook\integration\integration.py:220 +#: .\cookbook\integration\integration.py:212 #, python-format msgid "Imported %s recipes." msgstr "" @@ -407,32 +517,32 @@ msgstr "" msgid "Nutritional Information" msgstr "" -#: .\cookbook\integration\paprika.py:53 .\cookbook\templates\url_import.html:40 +#: .\cookbook\integration\paprika.py:53 .\cookbook\templates\url_import.html:42 msgid "Source" msgstr "" -#: .\cookbook\integration\safron.py:23 -#: .\cookbook\templates\include\log_cooking.html:16 -#: .\cookbook\templates\url_import.html:228 -#: .\cookbook\templates\url_import.html:459 +#: .\cookbook\integration\saffron.py:23 +#: .\cookbook\templates\include\log_cooking.html:18 +#: .\cookbook\templates\url_import.html:231 +#: .\cookbook\templates\url_import.html:462 msgid "Servings" msgstr "" -#: .\cookbook\integration\safron.py:25 +#: .\cookbook\integration\saffron.py:25 msgid "Waiting time" msgstr "" -#: .\cookbook\integration\safron.py:27 +#: .\cookbook\integration\saffron.py:27 msgid "Preparation Time" msgstr "" -#: .\cookbook\integration\safron.py:29 .\cookbook\templates\base.html:78 +#: .\cookbook\integration\saffron.py:29 .\cookbook\templates\base.html:78 #: .\cookbook\templates\forms\ingredients.html:7 #: .\cookbook\templates\index.html:7 msgid "Cookbook" msgstr "" -#: .\cookbook\integration\safron.py:31 +#: .\cookbook\integration\saffron.py:31 msgid "Section" msgstr "" @@ -468,111 +578,142 @@ msgstr "Vacsora" msgid "Other" msgstr "" -#: .\cookbook\models.py:150 +#: .\cookbook\models.py:246 msgid "" "Maximum file storage for space in MB. 0 for unlimited, -1 to disable file " "upload." msgstr "" -#: .\cookbook\models.py:202 .\cookbook\templates\search.html:7 -#: .\cookbook\templates\shopping_list.html:59 +#: .\cookbook\models.py:300 .\cookbook\templates\search.html:7 +#: .\cookbook\templates\shopping_list.html:53 msgid "Search" msgstr "" -#: .\cookbook\models.py:203 .\cookbook\templates\base.html:82 +#: .\cookbook\models.py:301 .\cookbook\templates\base.html:82 #: .\cookbook\templates\meal_plan.html:7 #: .\cookbook\templates\meal_plan_new.html:7 .\cookbook\views\delete.py:181 #: .\cookbook\views\edit.py:220 .\cookbook\views\new.py:184 msgid "Meal-Plan" msgstr "" -#: .\cookbook\models.py:204 .\cookbook\templates\base.html:90 +#: .\cookbook\models.py:302 .\cookbook\templates\base.html:90 msgid "Books" msgstr "" -#: .\cookbook\models.py:212 +#: .\cookbook\models.py:310 msgid "Small" msgstr "" -#: .\cookbook\models.py:212 +#: .\cookbook\models.py:310 msgid "Large" msgstr "" -#: .\cookbook\models.py:212 .\cookbook\templates\generic\new_template.html:6 +#: .\cookbook\models.py:310 .\cookbook\templates\generic\new_template.html:6 #: .\cookbook\templates\generic\new_template.html:14 msgid "New" msgstr "" -#: .\cookbook\models.py:396 +#: .\cookbook\models.py:512 msgid " is part of a recipe step and cannot be deleted" msgstr "" -#: .\cookbook\models.py:441 .\cookbook\templates\url_import.html:42 +#: .\cookbook\models.py:586 .\cookbook\templates\url_import.html:44 msgid "Text" msgstr "Szöveg" -#: .\cookbook\models.py:441 +#: .\cookbook\models.py:586 msgid "Time" msgstr "" -#: .\cookbook\models.py:441 .\cookbook\templates\url_import.html:44 +#: .\cookbook\models.py:586 .\cookbook\templates\url_import.html:46 #, fuzzy #| msgid "File ID" msgid "File" msgstr "Fájl ID:" -#: .\cookbook\models.py:441 +#: .\cookbook\models.py:586 #: .\cookbook\templates\include\recipe_open_modal.html:7 #: .\cookbook\views\delete.py:39 .\cookbook\views\edit.py:260 #: .\cookbook\views\new.py:53 msgid "Recipe" msgstr "" -#: .\cookbook\models.py:871 .\cookbook\templates\search_info.html:28 +#: .\cookbook\models.py:1041 .\cookbook\templates\search_info.html:28 msgid "Simple" msgstr "" -#: .\cookbook\models.py:872 .\cookbook\templates\search_info.html:33 +#: .\cookbook\models.py:1042 .\cookbook\templates\search_info.html:33 msgid "Phrase" msgstr "" -#: .\cookbook\models.py:873 .\cookbook\templates\search_info.html:38 +#: .\cookbook\models.py:1043 .\cookbook\templates\search_info.html:38 msgid "Web" msgstr "" -#: .\cookbook\models.py:874 .\cookbook\templates\search_info.html:47 +#: .\cookbook\models.py:1044 .\cookbook\templates\search_info.html:47 msgid "Raw" msgstr "" -#: .\cookbook\models.py:912 +#: .\cookbook\models.py:1082 #, fuzzy #| msgid "New Food" msgid "Food Alias" msgstr "Új Étel" -#: .\cookbook\models.py:912 +#: .\cookbook\models.py:1082 msgid "Unit Alias" msgstr "" -#: .\cookbook\models.py:912 +#: .\cookbook\models.py:1082 #, fuzzy #| msgid "Keywords" msgid "Keyword Alias" msgstr "Kulcsszavak" -#: .\cookbook\serializer.py:157 +#: .\cookbook\serializer.py:175 +msgid "A user is required" +msgstr "" + +#: .\cookbook\serializer.py:195 msgid "File uploads are not enabled for this Space." msgstr "" -#: .\cookbook\serializer.py:168 +#: .\cookbook\serializer.py:206 msgid "You have reached your file upload limit." msgstr "" +#: .\cookbook\serializer.py:962 +msgid "Existing shopping list to update" +msgstr "" + +#: .\cookbook\serializer.py:964 +msgid "" +"List of ingredient IDs from the recipe to add, if not provided all " +"ingredients will be added." +msgstr "" + +#: .\cookbook\serializer.py:965 +msgid "" +"Providing a list_recipe ID and servings of 0 will delete that shopping list." +msgstr "" + +#: .\cookbook\serializer.py:973 +msgid "Amount of food to add to the shopping list" +msgstr "" + +#: .\cookbook\serializer.py:974 +msgid "ID of unit to use for the shopping list" +msgstr "" + +#: .\cookbook\serializer.py:975 +msgid "When set to true will delete all food from active shopping lists." +msgstr "" + #: .\cookbook\tables.py:35 .\cookbook\templates\generic\edit_template.html:6 #: .\cookbook\templates\generic\edit_template.html:14 #: .\cookbook\templates\recipes_table.html:82 -#: .\cookbook\templates\shopping_list.html:40 -#: .\cookbook\templates\space.html:90 +#: .\cookbook\templates\shopping_list.html:37 +#: .\cookbook\templates\space.html:109 msgid "Edit" msgstr "" @@ -708,27 +849,27 @@ msgstr "" msgid "Sign In" msgstr "" -#: .\cookbook\templates\account\login.html:32 +#: .\cookbook\templates\account\login.html:34 #: .\cookbook\templates\socialaccount\signup.html:8 #: .\cookbook\templates\socialaccount\signup.html:57 msgid "Sign Up" msgstr "" -#: .\cookbook\templates\account\login.html:36 -#: .\cookbook\templates\account\login.html:37 +#: .\cookbook\templates\account\login.html:39 +#: .\cookbook\templates\account\login.html:41 #: .\cookbook\templates\account\password_reset.html:29 msgid "Reset My Password" msgstr "" -#: .\cookbook\templates\account\login.html:37 +#: .\cookbook\templates\account\login.html:40 msgid "Lost your password?" msgstr "" -#: .\cookbook\templates\account\login.html:48 +#: .\cookbook\templates\account\login.html:52 msgid "Social Login" msgstr "" -#: .\cookbook\templates\account\login.html:49 +#: .\cookbook\templates\account\login.html:53 msgid "You can use any of the following providers to sign in." msgstr "" @@ -754,7 +895,7 @@ msgstr "" #: .\cookbook\templates\account\password_change.html:12 #: .\cookbook\templates\account\password_set.html:12 -#: .\cookbook\templates\settings.html:69 +#: .\cookbook\templates\settings.html:76 msgid "Password" msgstr "" @@ -871,15 +1012,21 @@ msgstr "" msgid "Keyword" msgstr "" +#: .\cookbook\templates\base.html:125 .\cookbook\views\lists.py:114 +#, fuzzy +#| msgid "New Food" +msgid "Foods" +msgstr "Új Étel" + #: .\cookbook\templates\base.html:137 #: .\cookbook\templates\forms\ingredients.html:24 -#: .\cookbook\templates\space.html:41 .\cookbook\templates\stats.html:26 -#: .\cookbook\views\lists.py:146 +#: .\cookbook\templates\space.html:47 .\cookbook\templates\stats.html:26 +#: .\cookbook\views\lists.py:131 msgid "Units" msgstr "" #: .\cookbook\templates\base.html:151 -#: .\cookbook\templates\shopping_list.html:237 +#: .\cookbook\templates\shopping_list.html:208 #: .\cookbook\templates\supermarket.html:7 msgid "Supermarket" msgstr "" @@ -888,11 +1035,11 @@ msgstr "" msgid "Supermarket Category" msgstr "" -#: .\cookbook\templates\base.html:175 .\cookbook\views\lists.py:195 +#: .\cookbook\templates\base.html:175 .\cookbook\views\lists.py:180 msgid "Automations" msgstr "" -#: .\cookbook\templates\base.html:189 .\cookbook\views\lists.py:215 +#: .\cookbook\templates\base.html:189 .\cookbook\views\lists.py:200 #, fuzzy #| msgid "File ID" msgid "Files" @@ -909,7 +1056,7 @@ msgstr "" #: .\cookbook\templates\base.html:228 .\cookbook\templates\export.html:14 #: .\cookbook\templates\export.html:20 -#: .\cookbook\templates\shopping_list.html:358 +#: .\cookbook\templates\shopping_list.html:310 #: .\cookbook\templates\test2.html:14 .\cookbook\templates\test2.html:20 msgid "Export" msgstr "" @@ -919,19 +1066,19 @@ msgid "Import Recipe" msgstr "" #: .\cookbook\templates\base.html:246 -#: .\cookbook\templates\shopping_list.html:195 -#: .\cookbook\templates\shopping_list.html:217 +#: .\cookbook\templates\shopping_list.html:165 +#: .\cookbook\templates\shopping_list.html:188 msgid "Create" msgstr "" #: .\cookbook\templates\base.html:259 #: .\cookbook\templates\generic\list_template.html:14 -#: .\cookbook\templates\space.html:58 .\cookbook\templates\stats.html:43 +#: .\cookbook\templates\space.html:69 .\cookbook\templates\stats.html:43 msgid "External Recipes" msgstr "" -#: .\cookbook\templates\base.html:262 .\cookbook\templates\space.html:7 -#: .\cookbook\templates\space.html:19 +#: .\cookbook\templates\base.html:262 .\cookbook\templates\space.html:8 +#: .\cookbook\templates\space.html:20 .\cookbook\templates\space.html:150 msgid "Space Settings" msgstr "" @@ -997,11 +1144,13 @@ msgstr "" #: .\cookbook\templates\forms\edit_import_recipe.html:14 #: .\cookbook\templates\generic\edit_template.html:23 #: .\cookbook\templates\generic\new_template.html:23 -#: .\cookbook\templates\include\log_cooking.html:28 -#: .\cookbook\templates\settings.html:63 .\cookbook\templates\settings.html:105 -#: .\cookbook\templates\settings.html:123 -#: .\cookbook\templates\settings.html:195 -#: .\cookbook\templates\shopping_list.html:360 +#: .\cookbook\templates\include\log_cooking.html:30 +#: .\cookbook\templates\settings.html:70 .\cookbook\templates\settings.html:112 +#: .\cookbook\templates\settings.html:130 +#: .\cookbook\templates\settings.html:202 +#: .\cookbook\templates\settings.html:213 +#: .\cookbook\templates\shopping_list.html:311 +#: .\cookbook\templates\space.html:155 msgid "Save" msgstr "" @@ -1103,15 +1252,20 @@ msgid "Delete original file" msgstr "" #: .\cookbook\templates\generic\list_template.html:6 -#: .\cookbook\templates\generic\list_template.html:21 +#: .\cookbook\templates\generic\list_template.html:22 msgid "List" msgstr "" -#: .\cookbook\templates\generic\list_template.html:34 +#: .\cookbook\templates\generic\list_template.html:33 +#: .\cookbook\templates\shopping_list.html:33 +msgid "Try the new shopping list" +msgstr "" + +#: .\cookbook\templates\generic\list_template.html:45 msgid "Filter" msgstr "" -#: .\cookbook\templates\generic\list_template.html:39 +#: .\cookbook\templates\generic\list_template.html:50 msgid "Import all" msgstr "" @@ -1137,19 +1291,31 @@ msgstr "" msgid "Import Recipes" msgstr "" -#: .\cookbook\templates\include\log_cooking.html:7 +#: .\cookbook\templates\import.html:14 .\cookbook\templates\import.html:20 +#: .\cookbook\templates\import_response.html:7 +#: .\cookbook\templates\test.html:14 .\cookbook\templates\test.html:20 +#: .\cookbook\templates\url_import.html:29 +#: .\cookbook\templates\url_import.html:108 +#: .\cookbook\templates\url_import.html:130 +#: .\cookbook\templates\url_import.html:324 +#: .\cookbook\templates\url_import.html:618 .\cookbook\views\delete.py:89 +#: .\cookbook\views\edit.py:200 +msgid "Import" +msgstr "" + +#: .\cookbook\templates\include\log_cooking.html:9 msgid "Log Recipe Cooking" msgstr "" -#: .\cookbook\templates\include\log_cooking.html:13 +#: .\cookbook\templates\include\log_cooking.html:15 msgid "All fields are optional and can be left empty." msgstr "" -#: .\cookbook\templates\include\log_cooking.html:19 +#: .\cookbook\templates\include\log_cooking.html:21 msgid "Rating" msgstr "" -#: .\cookbook\templates\include\log_cooking.html:27 +#: .\cookbook\templates\include\log_cooking.html:29 #: .\cookbook\templates\include\recipe_open_modal.html:18 msgid "Close" msgstr "" @@ -1195,7 +1361,7 @@ msgstr "" msgid "Last viewed" msgstr "" -#: .\cookbook\templates\index.html:87 .\cookbook\templates\space.html:35 +#: .\cookbook\templates\index.html:87 .\cookbook\templates\space.html:37 #: .\cookbook\templates\stats.html:22 msgid "Recipes" msgstr "" @@ -1348,7 +1514,7 @@ msgid "Created by" msgstr "" #: .\cookbook\templates\meal_plan_entry.html:20 -#: .\cookbook\templates\shopping_list.html:261 +#: .\cookbook\templates\shopping_list.html:232 msgid "Shared with" msgstr "" @@ -1459,17 +1625,17 @@ msgstr "" #: .\cookbook\templates\recipes_table.html:19 #: .\cookbook\templates\recipes_table.html:23 -#: .\cookbook\templates\url_import.html:444 +#: .\cookbook\templates\url_import.html:447 msgid "Recipe Image" msgstr "" #: .\cookbook\templates\recipes_table.html:51 -#: .\cookbook\templates\url_import.html:449 +#: .\cookbook\templates\url_import.html:452 msgid "Preparation time ca." msgstr "" #: .\cookbook\templates\recipes_table.html:57 -#: .\cookbook\templates\url_import.html:454 +#: .\cookbook\templates\url_import.html:457 msgid "Waiting time ca." msgstr "" @@ -1487,7 +1653,7 @@ msgstr "" #: .\cookbook\templates\search_info.html:5 #: .\cookbook\templates\search_info.html:9 -#: .\cookbook\templates\settings.html:165 +#: .\cookbook\templates\settings.html:172 msgid "Search Settings" msgstr "" @@ -1658,103 +1824,111 @@ msgstr "" msgid "Search-Settings" msgstr "" -#: .\cookbook\templates\settings.html:58 +#: .\cookbook\templates\settings.html:56 +msgid "Shopping-Settings" +msgstr "" + +#: .\cookbook\templates\settings.html:65 msgid "Name Settings" msgstr "" -#: .\cookbook\templates\settings.html:66 +#: .\cookbook\templates\settings.html:73 msgid "Account Settings" msgstr "" -#: .\cookbook\templates\settings.html:68 +#: .\cookbook\templates\settings.html:75 msgid "Emails" msgstr "" -#: .\cookbook\templates\settings.html:71 +#: .\cookbook\templates\settings.html:78 #: .\cookbook\templates\socialaccount\connections.html:11 msgid "Social" msgstr "" -#: .\cookbook\templates\settings.html:84 +#: .\cookbook\templates\settings.html:91 msgid "Language" msgstr "" -#: .\cookbook\templates\settings.html:114 +#: .\cookbook\templates\settings.html:121 msgid "Style" msgstr "" -#: .\cookbook\templates\settings.html:135 +#: .\cookbook\templates\settings.html:142 msgid "API Token" msgstr "" -#: .\cookbook\templates\settings.html:136 +#: .\cookbook\templates\settings.html:143 msgid "" "You can use both basic authentication and token based authentication to " "access the REST API." msgstr "" -#: .\cookbook\templates\settings.html:153 +#: .\cookbook\templates\settings.html:160 msgid "" "Use the token as an Authorization header prefixed by the word token as shown " "in the following examples:" msgstr "" -#: .\cookbook\templates\settings.html:155 +#: .\cookbook\templates\settings.html:162 msgid "or" msgstr "" -#: .\cookbook\templates\settings.html:166 +#: .\cookbook\templates\settings.html:173 msgid "" "There are many options to configure the search depending on your personal " "preferences." msgstr "" -#: .\cookbook\templates\settings.html:167 +#: .\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 "" -#: .\cookbook\templates\settings.html:168 +#: .\cookbook\templates\settings.html:175 msgid "" "If you do want to configure the search you can read about the different " "options here." msgstr "" -#: .\cookbook\templates\settings.html:173 +#: .\cookbook\templates\settings.html:180 msgid "Fuzzy" msgstr "" -#: .\cookbook\templates\settings.html:174 +#: .\cookbook\templates\settings.html:181 msgid "" "Find what you need even if your search or the recipe contains typos. Might " "return more results than needed to make sure you find what you are looking " "for." msgstr "" -#: .\cookbook\templates\settings.html:175 +#: .\cookbook\templates\settings.html:182 msgid "This is the default behavior" msgstr "" -#: .\cookbook\templates\settings.html:176 -#: .\cookbook\templates\settings.html:184 +#: .\cookbook\templates\settings.html:183 +#: .\cookbook\templates\settings.html:191 msgid "Apply" msgstr "" -#: .\cookbook\templates\settings.html:181 +#: .\cookbook\templates\settings.html:188 msgid "Precise" msgstr "" -#: .\cookbook\templates\settings.html:182 +#: .\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 "" -#: .\cookbook\templates\settings.html:183 +#: .\cookbook\templates\settings.html:190 msgid "Perfect for large Databases" msgstr "" +#: .\cookbook\templates\settings.html:207 +msgid "Shopping Settings" +msgstr "" + #: .\cookbook\templates\setup.html:6 .\cookbook\templates\system.html:5 msgid "Cookbook Setup" msgstr "" @@ -1772,81 +1946,73 @@ msgstr "" msgid "Create Superuser account" msgstr "" -#: .\cookbook\templates\shopping_list.html:7 +#: .\cookbook\templates\shopping_list.html:8 #: .\cookbook\templates\shopping_list.html:29 -#: .\cookbook\templates\shopping_list.html:721 +#: .\cookbook\templates\shopping_list.html:663 msgid "Shopping List" msgstr "" -#: .\cookbook\templates\shopping_list.html:34 -msgid "Try the new shopping list" -msgstr "" - -#: .\cookbook\templates\shopping_list.html:63 +#: .\cookbook\templates\shopping_list.html:55 msgid "Search Recipe" msgstr "" -#: .\cookbook\templates\shopping_list.html:86 +#: .\cookbook\templates\shopping_list.html:72 msgid "Shopping Recipes" msgstr "" -#: .\cookbook\templates\shopping_list.html:90 +#: .\cookbook\templates\shopping_list.html:74 msgid "No recipes selected" msgstr "" -#: .\cookbook\templates\shopping_list.html:157 +#: .\cookbook\templates\shopping_list.html:131 msgid "Entry Mode" msgstr "" -#: .\cookbook\templates\shopping_list.html:165 +#: .\cookbook\templates\shopping_list.html:139 msgid "Add Entry" msgstr "" -#: .\cookbook\templates\shopping_list.html:181 +#: .\cookbook\templates\shopping_list.html:152 msgid "Amount" msgstr "" -#: .\cookbook\templates\shopping_list.html:194 +#: .\cookbook\templates\shopping_list.html:164 msgid "Select Unit" msgstr "" -#: .\cookbook\templates\shopping_list.html:196 -#: .\cookbook\templates\shopping_list.html:218 -#: .\cookbook\templates\shopping_list.html:248 -#: .\cookbook\templates\shopping_list.html:272 -#: .\cookbook\templates\url_import.html:500 -#: .\cookbook\templates\url_import.html:532 +#: .\cookbook\templates\shopping_list.html:166 +#: .\cookbook\templates\shopping_list.html:189 +#: .\cookbook\templates\shopping_list.html:219 +#: .\cookbook\templates\shopping_list.html:243 +#: .\cookbook\templates\url_import.html:505 +#: .\cookbook\templates\url_import.html:537 msgid "Select" msgstr "" -#: .\cookbook\templates\shopping_list.html:216 +#: .\cookbook\templates\shopping_list.html:187 msgid "Select Food" msgstr "" -#: .\cookbook\templates\shopping_list.html:247 +#: .\cookbook\templates\shopping_list.html:218 msgid "Select Supermarket" msgstr "" -#: .\cookbook\templates\shopping_list.html:271 +#: .\cookbook\templates\shopping_list.html:242 msgid "Select User" msgstr "" -#: .\cookbook\templates\shopping_list.html:290 +#: .\cookbook\templates\shopping_list.html:258 msgid "Finished" msgstr "" -#: .\cookbook\templates\shopping_list.html:303 +#: .\cookbook\templates\shopping_list.html:267 msgid "You are offline, shopping list might not syncronize." msgstr "" -#: .\cookbook\templates\shopping_list.html:368 +#: .\cookbook\templates\shopping_list.html:318 msgid "Copy/Export" msgstr "" -#: .\cookbook\templates\shopping_list.html:372 -msgid "List Prefix" -msgstr "" - #: .\cookbook\templates\socialaccount\connections.html:4 #: .\cookbook\templates\socialaccount\connections.html:15 msgid "Account Connections" @@ -1896,80 +2062,80 @@ msgstr "" msgid "Sign in using" msgstr "" -#: .\cookbook\templates\space.html:23 +#: .\cookbook\templates\space.html:25 msgid "Space:" msgstr "" -#: .\cookbook\templates\space.html:24 +#: .\cookbook\templates\space.html:26 msgid "Manage Subscription" msgstr "" -#: .\cookbook\templates\space.html:32 .\cookbook\templates\stats.html:19 +#: .\cookbook\templates\space.html:34 .\cookbook\templates\stats.html:19 msgid "Number of objects" msgstr "" -#: .\cookbook\templates\space.html:45 .\cookbook\templates\stats.html:30 +#: .\cookbook\templates\space.html:54 .\cookbook\templates\stats.html:30 msgid "Recipe Imports" msgstr "" -#: .\cookbook\templates\space.html:53 .\cookbook\templates\stats.html:38 +#: .\cookbook\templates\space.html:62 .\cookbook\templates\stats.html:38 msgid "Objects stats" msgstr "" -#: .\cookbook\templates\space.html:56 .\cookbook\templates\stats.html:41 +#: .\cookbook\templates\space.html:65 .\cookbook\templates\stats.html:41 msgid "Recipes without Keywords" msgstr "" -#: .\cookbook\templates\space.html:60 .\cookbook\templates\stats.html:45 +#: .\cookbook\templates\space.html:73 .\cookbook\templates\stats.html:45 msgid "Internal Recipes" msgstr "" -#: .\cookbook\templates\space.html:73 +#: .\cookbook\templates\space.html:89 msgid "Members" msgstr "" -#: .\cookbook\templates\space.html:77 +#: .\cookbook\templates\space.html:95 msgid "Invite User" msgstr "" -#: .\cookbook\templates\space.html:88 +#: .\cookbook\templates\space.html:107 msgid "User" msgstr "" -#: .\cookbook\templates\space.html:89 +#: .\cookbook\templates\space.html:108 msgid "Groups" msgstr "" -#: .\cookbook\templates\space.html:105 +#: .\cookbook\templates\space.html:119 msgid "admin" msgstr "" -#: .\cookbook\templates\space.html:106 +#: .\cookbook\templates\space.html:120 msgid "user" msgstr "" -#: .\cookbook\templates\space.html:107 +#: .\cookbook\templates\space.html:121 msgid "guest" msgstr "" -#: .\cookbook\templates\space.html:108 +#: .\cookbook\templates\space.html:122 msgid "remove" msgstr "" -#: .\cookbook\templates\space.html:112 +#: .\cookbook\templates\space.html:126 msgid "Update" msgstr "" -#: .\cookbook\templates\space.html:116 +#: .\cookbook\templates\space.html:130 msgid "You cannot edit yourself." msgstr "" -#: .\cookbook\templates\space.html:123 +#: .\cookbook\templates\space.html:136 msgid "There are no members in your space yet!" msgstr "" -#: .\cookbook\templates\space.html:130 .\cookbook\templates\system.html:21 -#: .\cookbook\views\lists.py:100 +#: .\cookbook\templates\space.html:143 .\cookbook\templates\system.html:21 +#: .\cookbook\views\lists.py:85 msgid "Invite Links" msgstr "" @@ -2078,168 +2244,168 @@ msgid "" " " msgstr "" -#: .\cookbook\templates\url_import.html:6 +#: .\cookbook\templates\url_import.html:8 msgid "URL Import" msgstr "" -#: .\cookbook\templates\url_import.html:31 +#: .\cookbook\templates\url_import.html:33 msgid "Drag me to your bookmarks to import recipes from anywhere" msgstr "" -#: .\cookbook\templates\url_import.html:32 +#: .\cookbook\templates\url_import.html:34 msgid "Bookmark Me!" msgstr "" -#: .\cookbook\templates\url_import.html:36 +#: .\cookbook\templates\url_import.html:38 msgid "URL" msgstr "" -#: .\cookbook\templates\url_import.html:38 +#: .\cookbook\templates\url_import.html:40 msgid "App" msgstr "" -#: .\cookbook\templates\url_import.html:62 +#: .\cookbook\templates\url_import.html:64 msgid "Enter website URL" msgstr "" -#: .\cookbook\templates\url_import.html:101 +#: .\cookbook\templates\url_import.html:104 msgid "Select recipe files to import or drop them here..." msgstr "" -#: .\cookbook\templates\url_import.html:122 +#: .\cookbook\templates\url_import.html:125 msgid "Paste json or html source here to load recipe." msgstr "" -#: .\cookbook\templates\url_import.html:150 +#: .\cookbook\templates\url_import.html:153 msgid "Preview Recipe Data" msgstr "" -#: .\cookbook\templates\url_import.html:151 +#: .\cookbook\templates\url_import.html:154 msgid "Drag recipe attributes from the right into the appropriate box below." msgstr "" -#: .\cookbook\templates\url_import.html:160 -#: .\cookbook\templates\url_import.html:177 -#: .\cookbook\templates\url_import.html:194 -#: .\cookbook\templates\url_import.html:213 -#: .\cookbook\templates\url_import.html:231 -#: .\cookbook\templates\url_import.html:246 -#: .\cookbook\templates\url_import.html:261 -#: .\cookbook\templates\url_import.html:277 -#: .\cookbook\templates\url_import.html:304 -#: .\cookbook\templates\url_import.html:355 +#: .\cookbook\templates\url_import.html:163 +#: .\cookbook\templates\url_import.html:180 +#: .\cookbook\templates\url_import.html:197 +#: .\cookbook\templates\url_import.html:216 +#: .\cookbook\templates\url_import.html:234 +#: .\cookbook\templates\url_import.html:249 +#: .\cookbook\templates\url_import.html:264 +#: .\cookbook\templates\url_import.html:280 +#: .\cookbook\templates\url_import.html:307 +#: .\cookbook\templates\url_import.html:358 msgid "Clear Contents" msgstr "" -#: .\cookbook\templates\url_import.html:162 +#: .\cookbook\templates\url_import.html:165 msgid "Text dragged here will be appended to the name." msgstr "" -#: .\cookbook\templates\url_import.html:175 +#: .\cookbook\templates\url_import.html:178 msgid "Description" msgstr "" -#: .\cookbook\templates\url_import.html:179 +#: .\cookbook\templates\url_import.html:182 msgid "Text dragged here will be appended to the description." msgstr "" -#: .\cookbook\templates\url_import.html:196 +#: .\cookbook\templates\url_import.html:199 msgid "Keywords dragged here will be appended to current list" msgstr "" -#: .\cookbook\templates\url_import.html:211 +#: .\cookbook\templates\url_import.html:214 msgid "Image" msgstr "" -#: .\cookbook\templates\url_import.html:243 +#: .\cookbook\templates\url_import.html:246 msgid "Prep Time" msgstr "" -#: .\cookbook\templates\url_import.html:258 +#: .\cookbook\templates\url_import.html:261 msgid "Cook Time" msgstr "" -#: .\cookbook\templates\url_import.html:279 +#: .\cookbook\templates\url_import.html:282 msgid "Ingredients dragged here will be appended to current list." msgstr "" -#: .\cookbook\templates\url_import.html:301 -#: .\cookbook\templates\url_import.html:572 +#: .\cookbook\templates\url_import.html:304 +#: .\cookbook\templates\url_import.html:579 msgid "Instructions" msgstr "" -#: .\cookbook\templates\url_import.html:306 +#: .\cookbook\templates\url_import.html:309 msgid "" "Recipe instructions dragged here will be appended to current instructions." msgstr "" -#: .\cookbook\templates\url_import.html:329 +#: .\cookbook\templates\url_import.html:332 msgid "Discovered Attributes" msgstr "" -#: .\cookbook\templates\url_import.html:331 +#: .\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 "" -#: .\cookbook\templates\url_import.html:348 +#: .\cookbook\templates\url_import.html:351 msgid "Show Blank Field" msgstr "" -#: .\cookbook\templates\url_import.html:353 +#: .\cookbook\templates\url_import.html:356 msgid "Blank Field" msgstr "" -#: .\cookbook\templates\url_import.html:357 +#: .\cookbook\templates\url_import.html:360 msgid "Items dragged to Blank Field will be appended." msgstr "" -#: .\cookbook\templates\url_import.html:404 +#: .\cookbook\templates\url_import.html:407 msgid "Delete Text" msgstr "" -#: .\cookbook\templates\url_import.html:417 +#: .\cookbook\templates\url_import.html:420 msgid "Delete image" msgstr "" -#: .\cookbook\templates\url_import.html:433 +#: .\cookbook\templates\url_import.html:436 msgid "Recipe Name" msgstr "" -#: .\cookbook\templates\url_import.html:437 +#: .\cookbook\templates\url_import.html:440 msgid "Recipe Description" msgstr "" -#: .\cookbook\templates\url_import.html:499 -#: .\cookbook\templates\url_import.html:531 -#: .\cookbook\templates\url_import.html:587 +#: .\cookbook\templates\url_import.html:504 +#: .\cookbook\templates\url_import.html:536 +#: .\cookbook\templates\url_import.html:596 msgid "Select one" msgstr "" -#: .\cookbook\templates\url_import.html:547 +#: .\cookbook\templates\url_import.html:554 msgid "Note" msgstr "" -#: .\cookbook\templates\url_import.html:588 +#: .\cookbook\templates\url_import.html:597 #, fuzzy #| msgid "Keywords" msgid "Add Keyword" msgstr "Kulcsszavak" -#: .\cookbook\templates\url_import.html:601 +#: .\cookbook\templates\url_import.html:610 msgid "All Keywords" msgstr "" -#: .\cookbook\templates\url_import.html:604 +#: .\cookbook\templates\url_import.html:613 msgid "Import all keywords, not only the ones already existing." msgstr "" -#: .\cookbook\templates\url_import.html:631 +#: .\cookbook\templates\url_import.html:640 msgid "Information" msgstr "" -#: .\cookbook\templates\url_import.html:633 +#: .\cookbook\templates\url_import.html:642 msgid "" " Only websites containing ld+json or microdata information can currently\n" " be imported. Most big recipe pages " @@ -2250,125 +2416,214 @@ msgid "" " github issues." msgstr "" -#: .\cookbook\templates\url_import.html:641 +#: .\cookbook\templates\url_import.html:650 msgid "Google ld+json Info" msgstr "" -#: .\cookbook\templates\url_import.html:644 +#: .\cookbook\templates\url_import.html:653 msgid "GitHub Issues" msgstr "" -#: .\cookbook\templates\url_import.html:646 +#: .\cookbook\templates\url_import.html:655 msgid "Recipe Markup Specification" msgstr "" -#: .\cookbook\views\api.py:83 .\cookbook\views\api.py:132 +#: .\cookbook\views\api.py:88 .\cookbook\views\api.py:170 msgid "Parameter updated_at incorrectly formatted" msgstr "" -#: .\cookbook\views\api.py:152 +#: .\cookbook\views\api.py:190 .\cookbook\views\api.py:291 #, python-brace-format msgid "No {self.basename} with id {pk} exists" msgstr "" -#: .\cookbook\views\api.py:156 +#: .\cookbook\views\api.py:194 msgid "Cannot merge with the same object!" msgstr "" -#: .\cookbook\views\api.py:163 +#: .\cookbook\views\api.py:201 #, python-brace-format msgid "No {self.basename} with id {target} exists" msgstr "" -#: .\cookbook\views\api.py:168 +#: .\cookbook\views\api.py:206 msgid "Cannot merge with child object!" msgstr "" -#: .\cookbook\views\api.py:201 +#: .\cookbook\views\api.py:239 #, python-brace-format msgid "{source.name} was merged successfully with {target.name}" msgstr "" -#: .\cookbook\views\api.py:205 +#: .\cookbook\views\api.py:244 #, python-brace-format msgid "An error occurred attempting to merge {source.name} with {target.name}" msgstr "" -#: .\cookbook\views\api.py:249 -#, python-brace-format -msgid "No {self.basename} with id {child} exists" -msgstr "" - -#: .\cookbook\views\api.py:258 +#: .\cookbook\views\api.py:300 #, python-brace-format msgid "{child.name} was moved successfully to the root." msgstr "" -#: .\cookbook\views\api.py:261 .\cookbook\views\api.py:279 +#: .\cookbook\views\api.py:303 .\cookbook\views\api.py:321 msgid "An error occurred attempting to move " msgstr "" -#: .\cookbook\views\api.py:264 +#: .\cookbook\views\api.py:306 msgid "Cannot move an object to itself!" msgstr "" -#: .\cookbook\views\api.py:270 +#: .\cookbook\views\api.py:312 #, python-brace-format msgid "No {self.basename} with id {parent} exists" msgstr "" -#: .\cookbook\views\api.py:276 +#: .\cookbook\views\api.py:318 #, python-brace-format msgid "{child.name} was moved successfully to parent {parent.name}" msgstr "" -#: .\cookbook\views\api.py:723 .\cookbook\views\data.py:42 +#: .\cookbook\views\api.py:470 +#, python-brace-format +msgid "{obj.name} was removed from the shopping list." +msgstr "" + +#: .\cookbook\views\api.py:475 .\cookbook\views\api.py:726 +#, python-brace-format +msgid "{obj.name} was added to the shopping list." +msgstr "" + +#: .\cookbook\views\api.py:587 +msgid "ID of recipe a step is part of. For multiple repeat parameter." +msgstr "" + +#: .\cookbook\views\api.py:588 +msgid "Query string matched (fuzzy) against object name." +msgstr "" + +#: .\cookbook\views\api.py:631 +msgid "" +"Query string matched (fuzzy) against recipe name. In the future also " +"fulltext search." +msgstr "" + +#: .\cookbook\views\api.py:632 +msgid "ID of keyword a recipe should have. For multiple repeat parameter." +msgstr "" + +#: .\cookbook\views\api.py:633 +msgid "ID of food a recipe should have. For multiple repeat parameter." +msgstr "" + +#: .\cookbook\views\api.py:634 +msgid "ID of unit a recipe should have." +msgstr "" + +#: .\cookbook\views\api.py:635 +msgid "Rating a recipe should have. [0 - 5]" +msgstr "" + +#: .\cookbook\views\api.py:636 +msgid "ID of book a recipe should be in. For multiple repeat parameter." +msgstr "" + +#: .\cookbook\views\api.py:637 +msgid "" +"If recipe should have all (AND=false) or any (OR=true) of the " +"provided keywords." +msgstr "" + +#: .\cookbook\views\api.py:638 +msgid "" +"If recipe should have all (AND=false) or any (OR=true) of the " +"provided foods." +msgstr "" + +#: .\cookbook\views\api.py:639 +msgid "" +"If recipe should be in all (AND=false) or any (OR=true) of the " +"provided books." +msgstr "" + +#: .\cookbook\views\api.py:640 +msgid "If only internal recipes should be returned. [true/false]" +msgstr "" + +#: .\cookbook\views\api.py:641 +msgid "Returns the results in randomized order. [true/false]" +msgstr "" + +#: .\cookbook\views\api.py:642 +msgid "Returns new results first in search results. [true/false]" +msgstr "" + +#: .\cookbook\views\api.py:768 +msgid "" +"Returns the shopping list entry with a primary key of id. Multiple values " +"allowed." +msgstr "" + +#: .\cookbook\views\api.py:771 +msgid "" +"Filter shopping list entries on checked. [true, false, both, recent]
- recent includes unchecked items and recently completed items." +msgstr "" + +#: .\cookbook\views\api.py:773 +msgid "Returns the shopping list entries sorted by supermarket category order." +msgstr "" + +#: .\cookbook\views\api.py:922 .\cookbook\views\data.py:42 #: .\cookbook\views\edit.py:129 .\cookbook\views\new.py:95 msgid "This feature is not yet available in the hosted version of tandoor!" msgstr "" -#: .\cookbook\views\api.py:745 +#: .\cookbook\views\api.py:944 msgid "Sync successful!" msgstr "" -#: .\cookbook\views\api.py:750 +#: .\cookbook\views\api.py:949 msgid "Error synchronizing with Storage" msgstr "" -#: .\cookbook\views\api.py:828 +#: .\cookbook\views\api.py:1028 msgid "Nothing to do." msgstr "" -#: .\cookbook\views\api.py:843 +#: .\cookbook\views\api.py:1043 msgid "The requested site provided malformed data and cannot be read." msgstr "" -#: .\cookbook\views\api.py:850 +#: .\cookbook\views\api.py:1050 msgid "The requested page could not be found." msgstr "" -#: .\cookbook\views\api.py:859 +#: .\cookbook\views\api.py:1068 msgid "" "The requested site does not provide any recognized data format to import the " "recipe from." msgstr "" -#: .\cookbook\views\api.py:873 +#: .\cookbook\views\api.py:1082 +msgid "Connection Refused." +msgstr "" + +#: .\cookbook\views\api.py:1091 msgid "No useable data could be found." msgstr "" -#: .\cookbook\views\api.py:889 +#: .\cookbook\views\api.py:1107 msgid "I couldn't find anything to do." msgstr "" #: .\cookbook\views\data.py:34 .\cookbook\views\data.py:129 -#: .\cookbook\views\edit.py:49 .\cookbook\views\import_export.py:73 +#: .\cookbook\views\edit.py:49 .\cookbook\views\import_export.py:80 #: .\cookbook\views\new.py:33 msgid "You have reached the maximum number of recipes for your space." msgstr "" #: .\cookbook\views\data.py:38 .\cookbook\views\data.py:133 -#: .\cookbook\views\edit.py:53 .\cookbook\views\import_export.py:77 +#: .\cookbook\views\edit.py:53 .\cookbook\views\import_export.py:84 #: .\cookbook\views\new.py:37 msgid "You have more users than allowed in your space." msgstr "" @@ -2384,7 +2639,7 @@ msgstr[1] "" msgid "Monitor" msgstr "" -#: .\cookbook\views\delete.py:125 .\cookbook\views\lists.py:86 +#: .\cookbook\views\delete.py:125 .\cookbook\views\lists.py:71 #: .\cookbook\views\new.py:101 msgid "Storage Backend" msgstr "" @@ -2402,7 +2657,7 @@ msgstr "" msgid "Bookmarks" msgstr "" -#: .\cookbook\views\delete.py:192 .\cookbook\views\new.py:235 +#: .\cookbook\views\delete.py:192 .\cookbook\views\new.py:238 msgid "Invite Link" msgstr "" @@ -2426,40 +2681,44 @@ msgstr "" msgid "Error saving changes!" msgstr "" -#: .\cookbook\views\import_export.py:99 +#: .\cookbook\views\import_export.py:106 msgid "Importing is not implemented for this provider" msgstr "" -#: .\cookbook\views\import_export.py:121 +#: .\cookbook\views\import_export.py:127 +msgid "" +"The PDF Exporter is not enabled on this instance as it is still in an " +"experimental state." +msgstr "" + +#: .\cookbook\views\import_export.py:132 msgid "Exporting is not implemented for this provider" msgstr "" -#: .\cookbook\views\lists.py:26 +#: .\cookbook\views\lists.py:25 msgid "Import Log" msgstr "" -#: .\cookbook\views\lists.py:39 +#: .\cookbook\views\lists.py:38 msgid "Discovery" msgstr "" -#: .\cookbook\views\lists.py:69 +#: .\cookbook\views\lists.py:54 msgid "Shopping Lists" msgstr "" -#: .\cookbook\views\lists.py:129 -#, fuzzy -#| msgid "New Food" -msgid "Foods" -msgstr "Új Étel" - -#: .\cookbook\views\lists.py:163 +#: .\cookbook\views\lists.py:148 msgid "Supermarkets" msgstr "" -#: .\cookbook\views\lists.py:179 +#: .\cookbook\views\lists.py:164 msgid "Shopping Categories" msgstr "" +#: .\cookbook\views\lists.py:217 +msgid "Steps" +msgstr "" + #: .\cookbook\views\lists.py:232 msgid "New Shopping List" msgstr "" @@ -2472,124 +2731,124 @@ msgstr "" msgid "There was an error importing this recipe!" msgstr "" -#: .\cookbook\views\new.py:209 +#: .\cookbook\views\new.py:212 msgid "Hello" msgstr "" -#: .\cookbook\views\new.py:209 +#: .\cookbook\views\new.py:212 msgid "You have been invited by " msgstr "" -#: .\cookbook\views\new.py:210 +#: .\cookbook\views\new.py:213 msgid " to join their Tandoor Recipes space " msgstr "" -#: .\cookbook\views\new.py:211 +#: .\cookbook\views\new.py:214 msgid "Click the following link to activate your account: " msgstr "" -#: .\cookbook\views\new.py:212 +#: .\cookbook\views\new.py:215 msgid "" "If the link does not work use the following code to manually join the space: " msgstr "" -#: .\cookbook\views\new.py:213 +#: .\cookbook\views\new.py:216 msgid "The invitation is valid until " msgstr "" -#: .\cookbook\views\new.py:214 +#: .\cookbook\views\new.py:217 msgid "" "Tandoor Recipes is an Open Source recipe manager. Check it out on GitHub " msgstr "" -#: .\cookbook\views\new.py:217 +#: .\cookbook\views\new.py:220 msgid "Tandoor Recipes Invite" msgstr "" -#: .\cookbook\views\new.py:224 +#: .\cookbook\views\new.py:227 msgid "Invite link successfully send to user." msgstr "" -#: .\cookbook\views\new.py:227 +#: .\cookbook\views\new.py:230 msgid "" "You have send to many emails, please share the link manually or wait a few " "hours." msgstr "" -#: .\cookbook\views\new.py:229 +#: .\cookbook\views\new.py:232 msgid "Email to user could not be send, please share link manually." msgstr "" -#: .\cookbook\views\views.py:127 +#: .\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 "" -#: .\cookbook\views\views.py:175 +#: .\cookbook\views\views.py:174 msgid "You do not have the required permissions to perform this action!" msgstr "" -#: .\cookbook\views\views.py:186 +#: .\cookbook\views\views.py:185 msgid "Comment saved!" msgstr "" -#: .\cookbook\views\views.py:277 +#: .\cookbook\views\views.py:276 msgid "This feature is not available in the demo version!" msgstr "" -#: .\cookbook\views\views.py:340 +#: .\cookbook\views\views.py:335 msgid "You must select at least one field to search!" msgstr "" -#: .\cookbook\views\views.py:345 +#: .\cookbook\views\views.py:340 msgid "" "To use this search method you must select at least one full text search " "field!" msgstr "" -#: .\cookbook\views\views.py:349 +#: .\cookbook\views\views.py:344 msgid "Fuzzy search is not compatible with this search method!" msgstr "" -#: .\cookbook\views\views.py:452 +#: .\cookbook\views\views.py:470 msgid "" "The setup page can only be used to create the first user! If you have " "forgotten your superuser credentials please consult the django documentation " "on how to reset passwords." msgstr "" -#: .\cookbook\views\views.py:459 +#: .\cookbook\views\views.py:477 msgid "Passwords dont match!" msgstr "" -#: .\cookbook\views\views.py:475 +#: .\cookbook\views\views.py:493 msgid "User has been created, please login!" msgstr "" -#: .\cookbook\views\views.py:491 +#: .\cookbook\views\views.py:509 msgid "Malformed Invite Link supplied!" msgstr "" -#: .\cookbook\views\views.py:498 +#: .\cookbook\views\views.py:516 msgid "You are already member of a space and therefore cannot join this one." msgstr "" -#: .\cookbook\views\views.py:509 +#: .\cookbook\views\views.py:527 msgid "Successfully joined space." msgstr "" -#: .\cookbook\views\views.py:515 +#: .\cookbook\views\views.py:533 msgid "Invite Link not valid or already used!" msgstr "" -#: .\cookbook\views\views.py:579 +#: .\cookbook\views\views.py:614 msgid "" "Reporting share links is not enabled for this instance. Please notify the " "page administrator to report problems." msgstr "" -#: .\cookbook\views\views.py:585 +#: .\cookbook\views\views.py:620 msgid "" "Recipe sharing link has been disabled! For additional information please " "contact the page administrator." diff --git a/cookbook/locale/it/LC_MESSAGES/django.mo b/cookbook/locale/it/LC_MESSAGES/django.mo index eabef4b846..411bfbd0b9 100644 Binary files a/cookbook/locale/it/LC_MESSAGES/django.mo and b/cookbook/locale/it/LC_MESSAGES/django.mo differ diff --git a/cookbook/locale/it/LC_MESSAGES/django.po b/cookbook/locale/it/LC_MESSAGES/django.po index 761e133a3a..32bbc64507 100644 --- a/cookbook/locale/it/LC_MESSAGES/django.po +++ b/cookbook/locale/it/LC_MESSAGES/django.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-07 17:31+0100\n" -"PO-Revision-Date: 2021-11-12 20:06+0000\n" +"POT-Creation-Date: 2022-01-18 14:52+0100\n" +"PO-Revision-Date: 2022-01-17 07:56+0000\n" "Last-Translator: Oliver Cervera \n" "Language-Team: Italian \n" @@ -23,67 +23,66 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.8\n" -#: .\cookbook\filters.py:23 .\cookbook\templates\base.html:125 -#: .\cookbook\templates\forms\ingredients.html:34 -#: .\cookbook\templates\space.html:43 .\cookbook\templates\stats.html:28 -#: .\cookbook\templates\url_import.html:274 +#: .\cookbook\filters.py:23 .\cookbook\templates\forms\ingredients.html:34 +#: .\cookbook\templates\space.html:50 .\cookbook\templates\stats.html:28 +#: .\cookbook\templates\url_import.html:277 msgid "Ingredients" msgstr "Ingredienti" -#: .\cookbook\forms.py:54 +#: .\cookbook\forms.py:56 msgid "Default unit" msgstr "Unità predefinita" -#: .\cookbook\forms.py:55 +#: .\cookbook\forms.py:57 msgid "Use fractions" msgstr "Usa frazioni" -#: .\cookbook\forms.py:56 +#: .\cookbook\forms.py:58 msgid "Use KJ" msgstr "Usa KJ" -#: .\cookbook\forms.py:57 +#: .\cookbook\forms.py:59 msgid "Theme" msgstr "Tema" -#: .\cookbook\forms.py:58 +#: .\cookbook\forms.py:60 msgid "Navbar color" msgstr "Colore barra di navigazione" -#: .\cookbook\forms.py:59 +#: .\cookbook\forms.py:61 msgid "Sticky navbar" msgstr "Barra di navigazione persistente" -#: .\cookbook\forms.py:60 +#: .\cookbook\forms.py:62 msgid "Default page" msgstr "Pagina predefinita" -#: .\cookbook\forms.py:61 +#: .\cookbook\forms.py:63 msgid "Show recent recipes" msgstr "Mostra ricette recenti" -#: .\cookbook\forms.py:62 +#: .\cookbook\forms.py:64 msgid "Search style" msgstr "Cerca stile" -#: .\cookbook\forms.py:63 +#: .\cookbook\forms.py:65 msgid "Plan sharing" msgstr "Condivisione piano" -#: .\cookbook\forms.py:64 +#: .\cookbook\forms.py:66 msgid "Ingredient decimal places" msgstr "Posizioni decimali degli ingredienti" -#: .\cookbook\forms.py:65 +#: .\cookbook\forms.py:67 msgid "Shopping list auto sync period" msgstr "Frequenza di sincronizzazione automatica della lista della spesa" -#: .\cookbook\forms.py:66 .\cookbook\templates\recipe_view.html:21 -#: .\cookbook\templates\space.html:62 .\cookbook\templates\stats.html:47 +#: .\cookbook\forms.py:68 .\cookbook\templates\recipe_view.html:21 +#: .\cookbook\templates\space.html:77 .\cookbook\templates\stats.html:47 msgid "Comments" msgstr "Commenti" -#: .\cookbook\forms.py:70 +#: .\cookbook\forms.py:72 msgid "" "Color of the top navigation bar. Not all colors work with all themes, just " "try them out!" @@ -91,13 +90,13 @@ msgstr "" "Colore della barra di navigazione in alto. Non tutti i colori funzionano con " "tutti i temi, provali e basta!" -#: .\cookbook\forms.py:72 +#: .\cookbook\forms.py:74 msgid "Default Unit to be used when inserting a new ingredient into a recipe." msgstr "" "Unità di misura predefinita da utilizzare quando si inserisce un nuovo " "ingrediente in una ricetta." -#: .\cookbook\forms.py:74 +#: .\cookbook\forms.py:76 msgid "" "Enables support for fractions in ingredient amounts (e.g. convert decimals " "to fractions automatically)" @@ -105,32 +104,40 @@ msgstr "" "Abilita il supporto alle frazioni per le quantità degli ingredienti (ad " "esempio converte i decimali in frazioni automaticamente)" -#: .\cookbook\forms.py:76 +#: .\cookbook\forms.py:78 msgid "Display nutritional energy amounts in joules instead of calories" msgstr "Mostra le informazioni nutrizionali in Joule invece che in calorie" -#: .\cookbook\forms.py:78 -msgid "" -"Users with whom newly created meal plan/shopping list entries should be " -"shared by default." +#: .\cookbook\forms.py:79 +#, fuzzy +#| msgid "" +#| "Users with whom newly created meal plan/shopping list entries should be " +#| "shared by default." +msgid "Users with whom newly created meal plans should be shared by default." msgstr "" "Gli utenti con i quali le nuove voci del piano alimentare/lista della spesa " "devono essere condivise per impostazione predefinita." #: .\cookbook\forms.py:80 +#, fuzzy +#| msgid "Try the new shopping list" +msgid "Users with whom to share shopping lists." +msgstr "Prova la nuova lista della spesa" + +#: .\cookbook\forms.py:82 msgid "Show recently viewed recipes on search page." msgstr "Mostra le ricette visualizzate di recente nella pagina di ricerca." -#: .\cookbook\forms.py:81 +#: .\cookbook\forms.py:83 msgid "Number of decimals to round ingredients." msgstr "Numero di decimali per approssimare gli ingredienti." -#: .\cookbook\forms.py:82 +#: .\cookbook\forms.py:84 msgid "If you want to be able to create and see comments underneath recipes." msgstr "" "Se vuoi essere in grado di creare e vedere i commenti sotto le ricette." -#: .\cookbook\forms.py:84 +#: .\cookbook\forms.py:86 .\cookbook\forms.py:493 msgid "" "Setting to 0 will disable auto sync. When viewing a shopping list the list " "is updated every set seconds to sync changes someone else might have made. " @@ -144,11 +151,19 @@ msgstr "" "di dati mobili. Se inferiore al limite della istanza viene ripristinato " "durante il salvataggio." -#: .\cookbook\forms.py:87 +#: .\cookbook\forms.py:89 msgid "Makes the navbar stick to the top of the page." msgstr "Fissa la barra di navigazione nella parte superiore della pagina." -#: .\cookbook\forms.py:103 +#: .\cookbook\forms.py:90 .\cookbook\forms.py:496 +msgid "Automatically add meal plan ingredients to shopping list." +msgstr "" + +#: .\cookbook\forms.py:91 +msgid "Exclude ingredients that are on hand." +msgstr "" + +#: .\cookbook\forms.py:108 msgid "" "Both fields are optional. If none are given the username will be displayed " "instead" @@ -156,39 +171,39 @@ msgstr "" "Entrambi i campi sono facoltativi. Se non viene fornito, verrà visualizzato " "il nome utente" -#: .\cookbook\forms.py:124 .\cookbook\forms.py:289 -#: .\cookbook\templates\url_import.html:158 +#: .\cookbook\forms.py:129 .\cookbook\forms.py:298 +#: .\cookbook\templates\url_import.html:161 msgid "Name" msgstr "Nome" -#: .\cookbook\forms.py:125 .\cookbook\forms.py:290 -#: .\cookbook\templates\space.html:39 .\cookbook\templates\stats.html:24 -#: .\cookbook\templates\url_import.html:192 -#: .\cookbook\templates\url_import.html:578 .\cookbook\views\lists.py:112 +#: .\cookbook\forms.py:130 .\cookbook\forms.py:299 +#: .\cookbook\templates\space.html:44 .\cookbook\templates\stats.html:24 +#: .\cookbook\templates\url_import.html:195 +#: .\cookbook\templates\url_import.html:585 .\cookbook\views\lists.py:97 msgid "Keywords" msgstr "Parole chiave" -#: .\cookbook\forms.py:126 +#: .\cookbook\forms.py:131 msgid "Preparation time in minutes" msgstr "Tempo di preparazione in minuti" -#: .\cookbook\forms.py:127 +#: .\cookbook\forms.py:132 msgid "Waiting time (cooking/baking) in minutes" msgstr "Tempo di attesa (cottura) in minuti" -#: .\cookbook\forms.py:128 .\cookbook\forms.py:259 .\cookbook\forms.py:291 +#: .\cookbook\forms.py:133 .\cookbook\forms.py:267 .\cookbook\forms.py:300 msgid "Path" msgstr "Percorso" -#: .\cookbook\forms.py:129 +#: .\cookbook\forms.py:134 msgid "Storage UID" msgstr "UID di archiviazione" -#: .\cookbook\forms.py:157 +#: .\cookbook\forms.py:164 msgid "Default" msgstr "Predefinito" -#: .\cookbook\forms.py:168 .\cookbook\templates\url_import.html:94 +#: .\cookbook\forms.py:175 .\cookbook\templates\url_import.html:97 msgid "" "To prevent duplicates recipes with the same name as existing ones are " "ignored. Check this box to import everything." @@ -196,20 +211,20 @@ msgstr "" "Per prevenire duplicati, vengono ignorate le ricette che hanno lo stesso " "nome di quelle esistenti. Metti la spunta per importare tutto." -#: .\cookbook\forms.py:190 +#: .\cookbook\forms.py:197 msgid "Add your comment: " msgstr "Aggiungi il tuo commento: " -#: .\cookbook\forms.py:205 +#: .\cookbook\forms.py:212 msgid "Leave empty for dropbox and enter app password for nextcloud." msgstr "" "Lascia vuoto per dropbox e inserisci la password dell'app per nextcloud." -#: .\cookbook\forms.py:212 +#: .\cookbook\forms.py:219 msgid "Leave empty for nextcloud and enter api token for dropbox." msgstr "Lascia vuoto per nextcloud e inserisci l'api token per dropbox." -#: .\cookbook\forms.py:221 +#: .\cookbook\forms.py:228 msgid "" "Leave empty for dropbox and enter only base url for nextcloud (/remote." "php/webdav/ is added automatically)" @@ -217,33 +232,33 @@ msgstr "" "Lascia vuoto per dropbox e inserisci solo l'url base per nextcloud (/" "remote.php/webdav/ è aggiunto automaticamente)" -#: .\cookbook\forms.py:258 .\cookbook\views\edit.py:166 +#: .\cookbook\forms.py:266 .\cookbook\views\edit.py:166 msgid "Storage" msgstr "Archiviazione" -#: .\cookbook\forms.py:260 +#: .\cookbook\forms.py:268 msgid "Active" msgstr "Attivo" -#: .\cookbook\forms.py:265 +#: .\cookbook\forms.py:274 msgid "Search String" msgstr "Stringa di Ricerca" -#: .\cookbook\forms.py:292 +#: .\cookbook\forms.py:301 msgid "File ID" msgstr "ID del File" -#: .\cookbook\forms.py:313 +#: .\cookbook\forms.py:323 msgid "You must provide at least a recipe or a title." msgstr "Devi fornire almeno una ricetta o un titolo." -#: .\cookbook\forms.py:326 +#: .\cookbook\forms.py:336 msgid "You can list default users to share recipes with in the settings." msgstr "" "È possibile visualizzare l'elenco degli utenti predefiniti con cui " "condividere le ricette nelle impostazioni." -#: .\cookbook\forms.py:327 +#: .\cookbook\forms.py:337 msgid "" "You can use markdown to format this field. See the docs here" @@ -251,19 +266,15 @@ msgstr "" "Puoi usare markdown per formattare questo campo. Guarda la documentazione qui" -#: .\cookbook\forms.py:353 +#: .\cookbook\forms.py:363 msgid "Maximum number of users for this space reached." msgstr "È stato raggiunto il numero massimo di utenti per questa istanza." -#: .\cookbook\forms.py:359 +#: .\cookbook\forms.py:369 msgid "Email address already taken!" msgstr "Questo indirizzo email è già in uso!" -#: .\cookbook\forms.py:367 -#, fuzzy -#| msgid "" -#| "An email address is not required but if present the invite link will be " -#| "send to the user." +#: .\cookbook\forms.py:377 msgid "" "An email address is not required but if present the invite link will be sent " "to the user." @@ -271,21 +282,21 @@ msgstr "" "Non è obbligatorio specificare l'indirizzo email, ma se presente verrà " "utilizzato per mandare all'utente un link di invito." -#: .\cookbook\forms.py:382 +#: .\cookbook\forms.py:392 msgid "Name already taken." msgstr "Nome già in uso." -#: .\cookbook\forms.py:393 +#: .\cookbook\forms.py:403 msgid "Accept Terms and Privacy" msgstr "Accetta i Termini d'uso e Privacy" -#: .\cookbook\forms.py:425 +#: .\cookbook\forms.py:435 msgid "" "Determines how fuzzy a search is if it uses trigram similarity matching (e." "g. low values mean more typos are ignored)." msgstr "" -#: .\cookbook\forms.py:435 +#: .\cookbook\forms.py:445 msgid "" "Select type method of search. Click here for " "full desciption of choices." @@ -293,70 +304,180 @@ msgstr "" "Seleziona il metodo di ricerca. Clicca qui " "per avere maggiori informazioni." -#: .\cookbook\forms.py:436 +#: .\cookbook\forms.py:446 msgid "" "Use fuzzy matching on units, keywords and ingredients when editing and " "importing recipes." msgstr "" -#: .\cookbook\forms.py:438 +#: .\cookbook\forms.py:448 msgid "" "Fields to search ignoring accents. Selecting this option can improve or " "degrade search quality depending on language" msgstr "" -#: .\cookbook\forms.py:440 +#: .\cookbook\forms.py:450 msgid "" "Fields to search for partial matches. (e.g. searching for 'Pie' will return " "'pie' and 'piece' and 'soapie')" msgstr "" -#: .\cookbook\forms.py:442 +#: .\cookbook\forms.py:452 msgid "" "Fields to search for beginning of word matches. (e.g. searching for 'sa' " "will return 'salad' and 'sandwich')" msgstr "" -#: .\cookbook\forms.py:444 +#: .\cookbook\forms.py:454 msgid "" "Fields to 'fuzzy' search. (e.g. searching for 'recpie' will find 'recipe'.) " "Note: this option will conflict with 'web' and 'raw' methods of search." msgstr "" -#: .\cookbook\forms.py:446 +#: .\cookbook\forms.py:456 msgid "" "Fields to full text search. Note: 'web', 'phrase', and 'raw' search methods " "only function with fulltext fields." msgstr "" -#: .\cookbook\forms.py:450 +#: .\cookbook\forms.py:460 msgid "Search Method" msgstr "Metodo di ricerca" -#: .\cookbook\forms.py:451 +#: .\cookbook\forms.py:461 msgid "Fuzzy Lookups" msgstr "" -#: .\cookbook\forms.py:452 +#: .\cookbook\forms.py:462 msgid "Ignore Accent" msgstr "Ignora accento" -#: .\cookbook\forms.py:453 +#: .\cookbook\forms.py:463 msgid "Partial Match" msgstr "Corrispondenza parziale" -#: .\cookbook\forms.py:454 +#: .\cookbook\forms.py:464 msgid "Starts Wtih" msgstr "Inizia con" -#: .\cookbook\forms.py:455 +#: .\cookbook\forms.py:465 msgid "Fuzzy Search" msgstr "Ricerca Fuzzy" -#: .\cookbook\forms.py:456 +#: .\cookbook\forms.py:466 msgid "Full Text" msgstr "Full Text" +#: .\cookbook\forms.py:491 +msgid "" +"Users will see all items you add to your shopping list. They must add you " +"to see items on their list." +msgstr "" + +#: .\cookbook\forms.py:497 +msgid "" +"When adding a meal plan to the shopping list (manually or automatically), " +"include all related recipes." +msgstr "" + +#: .\cookbook\forms.py:498 +msgid "" +"When adding a meal plan to the shopping list (manually or automatically), " +"exclude ingredients that are on hand." +msgstr "" + +#: .\cookbook\forms.py:499 +msgid "Default number of hours to delay a shopping list entry." +msgstr "" + +#: .\cookbook\forms.py:500 +msgid "Filter shopping list to only include supermarket categories." +msgstr "" + +#: .\cookbook\forms.py:501 +msgid "Days of recent shopping list entries to display." +msgstr "" + +#: .\cookbook\forms.py:502 +msgid "Mark food 'On Hand' when checked off shopping list." +msgstr "" + +#: .\cookbook\forms.py:503 +msgid "Delimiter to use for CSV exports." +msgstr "" + +#: .\cookbook\forms.py:504 +msgid "Prefix to add when copying list to the clipboard." +msgstr "" + +#: .\cookbook\forms.py:508 +#, fuzzy +#| msgid "New Shopping List" +msgid "Share Shopping List" +msgstr "Nuova lista della spesa" + +#: .\cookbook\forms.py:509 +msgid "Autosync" +msgstr "" + +#: .\cookbook\forms.py:510 +msgid "Auto Add Meal Plan" +msgstr "" + +#: .\cookbook\forms.py:511 +msgid "Exclude On Hand" +msgstr "" + +#: .\cookbook\forms.py:512 +msgid "Include Related" +msgstr "" + +#: .\cookbook\forms.py:513 +msgid "Default Delay Hours" +msgstr "" + +#: .\cookbook\forms.py:514 +#, fuzzy +#| msgid "Select Supermarket" +msgid "Filter to Supermarket" +msgstr "Seleziona supermercato" + +#: .\cookbook\forms.py:515 +msgid "Recent Days" +msgstr "" + +#: .\cookbook\forms.py:516 +msgid "CSV Delimiter" +msgstr "" + +#: .\cookbook\forms.py:517 .\cookbook\templates\shopping_list.html:322 +msgid "List Prefix" +msgstr "Prefisso lista" + +#: .\cookbook\forms.py:518 +msgid "Auto On Hand" +msgstr "" + +#: .\cookbook\forms.py:528 +msgid "Reset Food Inheritance" +msgstr "" + +#: .\cookbook\forms.py:529 +msgid "Reset all food to inherit the fields configured." +msgstr "" + +#: .\cookbook\forms.py:541 +#, fuzzy +#| msgid "Food that should be replaced." +msgid "Fields on food that should be inherited by default." +msgstr "Alimento che dovrebbe essere rimpiazzato." + +#: .\cookbook\forms.py:542 +#, fuzzy +#| msgid "Show recently viewed recipes on search page." +msgid "Show recipe counts on search filters" +msgstr "Mostra le ricette visualizzate di recente nella pagina di ricerca." + #: .\cookbook\helper\AllAuthCustomAdapter.py:36 msgid "" "In order to prevent spam, the requested email was not send. Please wait a " @@ -366,19 +487,19 @@ msgstr "" "riprova." #: .\cookbook\helper\permission_helper.py:136 -#: .\cookbook\helper\permission_helper.py:159 .\cookbook\views\views.py:149 +#: .\cookbook\helper\permission_helper.py:159 .\cookbook\views\views.py:148 msgid "You are not logged in and therefore cannot view this page!" msgstr "Non sei loggato e quindi non puoi visualizzare questa pagina!" #: .\cookbook\helper\permission_helper.py:140 #: .\cookbook\helper\permission_helper.py:146 #: .\cookbook\helper\permission_helper.py:171 -#: .\cookbook\helper\permission_helper.py:216 -#: .\cookbook\helper\permission_helper.py:230 -#: .\cookbook\helper\permission_helper.py:241 -#: .\cookbook\helper\permission_helper.py:252 .\cookbook\views\data.py:47 -#: .\cookbook\views\views.py:160 .\cookbook\views\views.py:167 -#: .\cookbook\views\views.py:233 +#: .\cookbook\helper\permission_helper.py:219 +#: .\cookbook\helper\permission_helper.py:233 +#: .\cookbook\helper\permission_helper.py:244 +#: .\cookbook\helper\permission_helper.py:255 .\cookbook\views\data.py:47 +#: .\cookbook\views\views.py:159 .\cookbook\views\views.py:166 +#: .\cookbook\views\views.py:232 msgid "You do not have the required permissions to view this page!" msgstr "Non hai i permessi necessari per visualizzare questa pagina!" @@ -388,25 +509,26 @@ msgstr "Non hai i permessi necessari per visualizzare questa pagina!" msgid "You cannot interact with this object as it is not owned by you!" msgstr "Non puoi interagire con questo oggetto perché non ne hai i diritti!" +#: .\cookbook\helper\recipe_search.py:473 +msgid "One of queryset or hash_key must be provided" +msgstr "" + +#: .\cookbook\helper\shopping_helper.py:54 +#, fuzzy +#| msgid "You must provide at least a recipe or a title." +msgid "You must supply a recipe or mealplan" +msgstr "Devi fornire almeno una ricetta o un titolo." + +#: .\cookbook\helper\shopping_helper.py:58 +msgid "You must supply a created_by" +msgstr "" + #: .\cookbook\helper\template_helper.py:61 #: .\cookbook\helper\template_helper.py:63 msgid "Could not parse template code." msgstr "Impossibile elaborare il codice del template." -#: .\cookbook\integration\integration.py:126 -#: .\cookbook\templates\import.html:14 .\cookbook\templates\import.html:20 -#: .\cookbook\templates\import_response.html:7 -#: .\cookbook\templates\test.html:14 .\cookbook\templates\test.html:20 -#: .\cookbook\templates\url_import.html:27 -#: .\cookbook\templates\url_import.html:105 -#: .\cookbook\templates\url_import.html:127 -#: .\cookbook\templates\url_import.html:321 -#: .\cookbook\templates\url_import.html:609 .\cookbook\views\delete.py:89 -#: .\cookbook\views\edit.py:200 -msgid "Import" -msgstr "Importa" - -#: .\cookbook\integration\integration.py:208 +#: .\cookbook\integration\integration.py:200 msgid "" "Importer expected a .zip file. Did you choose the correct importer type for " "your data ?" @@ -414,7 +536,7 @@ msgstr "" "La procedura di import necessita di un file .zip. Hai scelto il tipo di " "importazione corretta per i tuoi dati?" -#: .\cookbook\integration\integration.py:211 +#: .\cookbook\integration\integration.py:203 msgid "" "An unexpected error occurred during the import. Please make sure you have " "uploaded a valid file." @@ -422,11 +544,11 @@ msgstr "" "Un errore imprevisto si è verificato durante l'importazione. Assicurati di " "aver caricato un file valido." -#: .\cookbook\integration\integration.py:216 +#: .\cookbook\integration\integration.py:208 msgid "The following recipes were ignored because they already existed:" msgstr "Le seguenti ricette sono state ignorate perché già esistenti:" -#: .\cookbook\integration\integration.py:220 +#: .\cookbook\integration\integration.py:212 #, python-format msgid "Imported %s recipes." msgstr "Importate %s ricette." @@ -439,32 +561,32 @@ msgstr "Note" msgid "Nutritional Information" msgstr "Informazioni nutrizionali" -#: .\cookbook\integration\paprika.py:53 .\cookbook\templates\url_import.html:40 +#: .\cookbook\integration\paprika.py:53 .\cookbook\templates\url_import.html:42 msgid "Source" msgstr "Fonte" -#: .\cookbook\integration\safron.py:23 -#: .\cookbook\templates\include\log_cooking.html:16 -#: .\cookbook\templates\url_import.html:228 -#: .\cookbook\templates\url_import.html:459 +#: .\cookbook\integration\saffron.py:23 +#: .\cookbook\templates\include\log_cooking.html:18 +#: .\cookbook\templates\url_import.html:231 +#: .\cookbook\templates\url_import.html:462 msgid "Servings" msgstr "Porzioni" -#: .\cookbook\integration\safron.py:25 +#: .\cookbook\integration\saffron.py:25 msgid "Waiting time" msgstr "Tempo di cottura" -#: .\cookbook\integration\safron.py:27 +#: .\cookbook\integration\saffron.py:27 msgid "Preparation Time" msgstr "Tempo di preparazione" -#: .\cookbook\integration\safron.py:29 .\cookbook\templates\base.html:78 +#: .\cookbook\integration\saffron.py:29 .\cookbook\templates\base.html:78 #: .\cookbook\templates\forms\ingredients.html:7 #: .\cookbook\templates\index.html:7 msgid "Cookbook" msgstr "Ricette" -#: .\cookbook\integration\safron.py:31 +#: .\cookbook\integration\saffron.py:31 msgid "Section" msgstr "Selezione" @@ -502,7 +624,7 @@ msgstr "Cena" msgid "Other" msgstr "Altro" -#: .\cookbook\models.py:150 +#: .\cookbook\models.py:246 msgid "" "Maximum file storage for space in MB. 0 for unlimited, -1 to disable file " "upload." @@ -510,99 +632,130 @@ msgstr "" "Archiviazione massima in MB. 0 per illimitata, -1 per disabilitare il " "caricamento dei file." -#: .\cookbook\models.py:202 .\cookbook\templates\search.html:7 -#: .\cookbook\templates\shopping_list.html:59 +#: .\cookbook\models.py:300 .\cookbook\templates\search.html:7 +#: .\cookbook\templates\shopping_list.html:53 msgid "Search" msgstr "Cerca" -#: .\cookbook\models.py:203 .\cookbook\templates\base.html:82 +#: .\cookbook\models.py:301 .\cookbook\templates\base.html:82 #: .\cookbook\templates\meal_plan.html:7 #: .\cookbook\templates\meal_plan_new.html:7 .\cookbook\views\delete.py:181 #: .\cookbook\views\edit.py:220 .\cookbook\views\new.py:184 msgid "Meal-Plan" msgstr "Piano alimentare" -#: .\cookbook\models.py:204 .\cookbook\templates\base.html:90 +#: .\cookbook\models.py:302 .\cookbook\templates\base.html:90 msgid "Books" msgstr "Libri" -#: .\cookbook\models.py:212 +#: .\cookbook\models.py:310 msgid "Small" msgstr "Piccolo" -#: .\cookbook\models.py:212 +#: .\cookbook\models.py:310 msgid "Large" msgstr "Grande" -#: .\cookbook\models.py:212 .\cookbook\templates\generic\new_template.html:6 +#: .\cookbook\models.py:310 .\cookbook\templates\generic\new_template.html:6 #: .\cookbook\templates\generic\new_template.html:14 msgid "New" msgstr "Nuovo" -#: .\cookbook\models.py:396 +#: .\cookbook\models.py:512 msgid " is part of a recipe step and cannot be deleted" msgstr " è parte dello step di una ricetta e non può essere eliminato" -#: .\cookbook\models.py:441 .\cookbook\templates\url_import.html:42 +#: .\cookbook\models.py:586 .\cookbook\templates\url_import.html:44 msgid "Text" msgstr "Testo" -#: .\cookbook\models.py:441 +#: .\cookbook\models.py:586 msgid "Time" msgstr "Tempo" -#: .\cookbook\models.py:441 .\cookbook\templates\url_import.html:44 +#: .\cookbook\models.py:586 .\cookbook\templates\url_import.html:46 msgid "File" msgstr "File" -#: .\cookbook\models.py:441 +#: .\cookbook\models.py:586 #: .\cookbook\templates\include\recipe_open_modal.html:7 #: .\cookbook\views\delete.py:39 .\cookbook\views\edit.py:260 #: .\cookbook\views\new.py:53 msgid "Recipe" msgstr "Ricetta" -#: .\cookbook\models.py:871 .\cookbook\templates\search_info.html:28 +#: .\cookbook\models.py:1041 .\cookbook\templates\search_info.html:28 msgid "Simple" msgstr "Semplice" -#: .\cookbook\models.py:872 .\cookbook\templates\search_info.html:33 +#: .\cookbook\models.py:1042 .\cookbook\templates\search_info.html:33 msgid "Phrase" msgstr "Frase" -#: .\cookbook\models.py:873 .\cookbook\templates\search_info.html:38 +#: .\cookbook\models.py:1043 .\cookbook\templates\search_info.html:38 msgid "Web" msgstr "Web" -#: .\cookbook\models.py:874 .\cookbook\templates\search_info.html:47 +#: .\cookbook\models.py:1044 .\cookbook\templates\search_info.html:47 msgid "Raw" msgstr "Raw" -#: .\cookbook\models.py:912 +#: .\cookbook\models.py:1082 msgid "Food Alias" msgstr "Alias Alimento" -#: .\cookbook\models.py:912 +#: .\cookbook\models.py:1082 msgid "Unit Alias" msgstr "Alias Unità" -#: .\cookbook\models.py:912 +#: .\cookbook\models.py:1082 msgid "Keyword Alias" msgstr "Alias Parola Chiave" -#: .\cookbook\serializer.py:157 +#: .\cookbook\serializer.py:175 +msgid "A user is required" +msgstr "" + +#: .\cookbook\serializer.py:195 msgid "File uploads are not enabled for this Space." msgstr "Il caricamento dei file non è abilitato in questa istanza." -#: .\cookbook\serializer.py:168 +#: .\cookbook\serializer.py:206 msgid "You have reached your file upload limit." msgstr "Hai raggiungo il limite per il caricamento dei file." +#: .\cookbook\serializer.py:962 +msgid "Existing shopping list to update" +msgstr "" + +#: .\cookbook\serializer.py:964 +msgid "" +"List of ingredient IDs from the recipe to add, if not provided all " +"ingredients will be added." +msgstr "" + +#: .\cookbook\serializer.py:965 +msgid "" +"Providing a list_recipe ID and servings of 0 will delete that shopping list." +msgstr "" + +#: .\cookbook\serializer.py:973 +msgid "Amount of food to add to the shopping list" +msgstr "" + +#: .\cookbook\serializer.py:974 +msgid "ID of unit to use for the shopping list" +msgstr "" + +#: .\cookbook\serializer.py:975 +msgid "When set to true will delete all food from active shopping lists." +msgstr "" + #: .\cookbook\tables.py:35 .\cookbook\templates\generic\edit_template.html:6 #: .\cookbook\templates\generic\edit_template.html:14 #: .\cookbook\templates\recipes_table.html:82 -#: .\cookbook\templates\shopping_list.html:40 -#: .\cookbook\templates\space.html:90 +#: .\cookbook\templates\shopping_list.html:37 +#: .\cookbook\templates\space.html:109 msgid "Edit" msgstr "Modifica" @@ -747,27 +900,27 @@ msgstr "Login" msgid "Sign In" msgstr "Accedi" -#: .\cookbook\templates\account\login.html:32 +#: .\cookbook\templates\account\login.html:34 #: .\cookbook\templates\socialaccount\signup.html:8 #: .\cookbook\templates\socialaccount\signup.html:57 msgid "Sign Up" msgstr "Iscriviti" -#: .\cookbook\templates\account\login.html:36 -#: .\cookbook\templates\account\login.html:37 +#: .\cookbook\templates\account\login.html:39 +#: .\cookbook\templates\account\login.html:41 #: .\cookbook\templates\account\password_reset.html:29 msgid "Reset My Password" msgstr "Reimposta password" -#: .\cookbook\templates\account\login.html:37 +#: .\cookbook\templates\account\login.html:40 msgid "Lost your password?" msgstr "Hai dimenticato la password?" -#: .\cookbook\templates\account\login.html:48 +#: .\cookbook\templates\account\login.html:52 msgid "Social Login" msgstr "Login con social network" -#: .\cookbook\templates\account\login.html:49 +#: .\cookbook\templates\account\login.html:53 msgid "You can use any of the following providers to sign in." msgstr "Puoi usare uno dei seguenti provider per accedere." @@ -793,7 +946,7 @@ msgstr "Cambia Password" #: .\cookbook\templates\account\password_change.html:12 #: .\cookbook\templates\account\password_set.html:12 -#: .\cookbook\templates\settings.html:69 +#: .\cookbook\templates\settings.html:76 msgid "Password" msgstr "Password" @@ -840,6 +993,10 @@ msgid "" " Please request a new " "password reset." msgstr "" +"Il link per il reset della password non è corretto, probabilmente perché è " +"stato già utilizzato.\n" +" Puoi richiedere un nuovo reset della password." #: .\cookbook\templates\account\password_reset_from_key.html:33 msgid "change password" @@ -914,15 +1071,19 @@ msgstr "Spesa" msgid "Keyword" msgstr "Parola chiave" +#: .\cookbook\templates\base.html:125 .\cookbook\views\lists.py:114 +msgid "Foods" +msgstr "Alimenti" + #: .\cookbook\templates\base.html:137 #: .\cookbook\templates\forms\ingredients.html:24 -#: .\cookbook\templates\space.html:41 .\cookbook\templates\stats.html:26 -#: .\cookbook\views\lists.py:146 +#: .\cookbook\templates\space.html:47 .\cookbook\templates\stats.html:26 +#: .\cookbook\views\lists.py:131 msgid "Units" msgstr "Unità di misura" #: .\cookbook\templates\base.html:151 -#: .\cookbook\templates\shopping_list.html:237 +#: .\cookbook\templates\shopping_list.html:208 #: .\cookbook\templates\supermarket.html:7 msgid "Supermarket" msgstr "Supermercato" @@ -931,13 +1092,11 @@ msgstr "Supermercato" msgid "Supermarket Category" msgstr "Categoria Supermercato" -#: .\cookbook\templates\base.html:175 .\cookbook\views\lists.py:195 -#, fuzzy -#| msgid "Information" +#: .\cookbook\templates\base.html:175 .\cookbook\views\lists.py:180 msgid "Automations" -msgstr "Informazioni" +msgstr "Automazioni" -#: .\cookbook\templates\base.html:189 .\cookbook\views\lists.py:215 +#: .\cookbook\templates\base.html:189 .\cookbook\views\lists.py:200 msgid "Files" msgstr "File" @@ -952,7 +1111,7 @@ msgstr "Cronologia" #: .\cookbook\templates\base.html:228 .\cookbook\templates\export.html:14 #: .\cookbook\templates\export.html:20 -#: .\cookbook\templates\shopping_list.html:358 +#: .\cookbook\templates\shopping_list.html:310 #: .\cookbook\templates\test2.html:14 .\cookbook\templates\test2.html:20 msgid "Export" msgstr "Esporta" @@ -962,19 +1121,19 @@ msgid "Import Recipe" msgstr "Importa Ricetta" #: .\cookbook\templates\base.html:246 -#: .\cookbook\templates\shopping_list.html:195 -#: .\cookbook\templates\shopping_list.html:217 +#: .\cookbook\templates\shopping_list.html:165 +#: .\cookbook\templates\shopping_list.html:188 msgid "Create" msgstr "Crea" #: .\cookbook\templates\base.html:259 #: .\cookbook\templates\generic\list_template.html:14 -#: .\cookbook\templates\space.html:58 .\cookbook\templates\stats.html:43 +#: .\cookbook\templates\space.html:69 .\cookbook\templates\stats.html:43 msgid "External Recipes" msgstr "Ricette esterne" -#: .\cookbook\templates\base.html:262 .\cookbook\templates\space.html:7 -#: .\cookbook\templates\space.html:19 +#: .\cookbook\templates\base.html:262 .\cookbook\templates\space.html:8 +#: .\cookbook\templates\space.html:20 .\cookbook\templates\space.html:150 msgid "Space Settings" msgstr "Impostazioni istanza" @@ -1044,11 +1203,13 @@ msgstr "Il percorso deve essere nel formato seguente" #: .\cookbook\templates\forms\edit_import_recipe.html:14 #: .\cookbook\templates\generic\edit_template.html:23 #: .\cookbook\templates\generic\new_template.html:23 -#: .\cookbook\templates\include\log_cooking.html:28 -#: .\cookbook\templates\settings.html:63 .\cookbook\templates\settings.html:105 -#: .\cookbook\templates\settings.html:123 -#: .\cookbook\templates\settings.html:195 -#: .\cookbook\templates\shopping_list.html:360 +#: .\cookbook\templates\include\log_cooking.html:30 +#: .\cookbook\templates\settings.html:70 .\cookbook\templates\settings.html:112 +#: .\cookbook\templates\settings.html:130 +#: .\cookbook\templates\settings.html:202 +#: .\cookbook\templates\settings.html:213 +#: .\cookbook\templates\shopping_list.html:311 +#: .\cookbook\templates\space.html:155 msgid "Save" msgstr "Salva" @@ -1158,15 +1319,20 @@ msgid "Delete original file" msgstr "Elimina il file originale" #: .\cookbook\templates\generic\list_template.html:6 -#: .\cookbook\templates\generic\list_template.html:21 +#: .\cookbook\templates\generic\list_template.html:22 msgid "List" msgstr "Elenco" -#: .\cookbook\templates\generic\list_template.html:34 +#: .\cookbook\templates\generic\list_template.html:33 +#: .\cookbook\templates\shopping_list.html:33 +msgid "Try the new shopping list" +msgstr "Prova la nuova lista della spesa" + +#: .\cookbook\templates\generic\list_template.html:45 msgid "Filter" msgstr "Filtro" -#: .\cookbook\templates\generic\list_template.html:39 +#: .\cookbook\templates\generic\list_template.html:50 msgid "Import all" msgstr "Importa tutto" @@ -1192,19 +1358,31 @@ msgstr "Registro di cottura" msgid "Import Recipes" msgstr "Importa Ricette" -#: .\cookbook\templates\include\log_cooking.html:7 +#: .\cookbook\templates\import.html:14 .\cookbook\templates\import.html:20 +#: .\cookbook\templates\import_response.html:7 +#: .\cookbook\templates\test.html:14 .\cookbook\templates\test.html:20 +#: .\cookbook\templates\url_import.html:29 +#: .\cookbook\templates\url_import.html:108 +#: .\cookbook\templates\url_import.html:130 +#: .\cookbook\templates\url_import.html:324 +#: .\cookbook\templates\url_import.html:618 .\cookbook\views\delete.py:89 +#: .\cookbook\views\edit.py:200 +msgid "Import" +msgstr "Importa" + +#: .\cookbook\templates\include\log_cooking.html:9 msgid "Log Recipe Cooking" msgstr "Aggiungi al registro delle ricette cucinate" -#: .\cookbook\templates\include\log_cooking.html:13 +#: .\cookbook\templates\include\log_cooking.html:15 msgid "All fields are optional and can be left empty." msgstr "Tutti i campi sono opzionali e possono essere lasciati vuoti." -#: .\cookbook\templates\include\log_cooking.html:19 +#: .\cookbook\templates\include\log_cooking.html:21 msgid "Rating" msgstr "Valutazione" -#: .\cookbook\templates\include\log_cooking.html:27 +#: .\cookbook\templates\include\log_cooking.html:29 #: .\cookbook\templates\include\recipe_open_modal.html:18 msgid "Close" msgstr "Chiudi" @@ -1256,7 +1434,7 @@ msgstr "Ripristina Ricerca" msgid "Last viewed" msgstr "Recenti" -#: .\cookbook\templates\index.html:87 .\cookbook\templates\space.html:35 +#: .\cookbook\templates\index.html:87 .\cookbook\templates\space.html:37 #: .\cookbook\templates\stats.html:22 msgid "Recipes" msgstr "Ricette" @@ -1430,7 +1608,7 @@ msgid "Created by" msgstr "Creato da" #: .\cookbook\templates\meal_plan_entry.html:20 -#: .\cookbook\templates\shopping_list.html:261 +#: .\cookbook\templates\shopping_list.html:232 msgid "Shared with" msgstr "Condiviso con" @@ -1552,17 +1730,17 @@ msgstr "Commento" #: .\cookbook\templates\recipes_table.html:19 #: .\cookbook\templates\recipes_table.html:23 -#: .\cookbook\templates\url_import.html:444 +#: .\cookbook\templates\url_import.html:447 msgid "Recipe Image" msgstr "Immagine ricetta" #: .\cookbook\templates\recipes_table.html:51 -#: .\cookbook\templates\url_import.html:449 +#: .\cookbook\templates\url_import.html:452 msgid "Preparation time ca." msgstr "Tempo di preparazione circa" #: .\cookbook\templates\recipes_table.html:57 -#: .\cookbook\templates\url_import.html:454 +#: .\cookbook\templates\url_import.html:457 msgid "Waiting time ca." msgstr "Tempo di cottura circa" @@ -1580,7 +1758,7 @@ msgstr "Pagina iniziale ricette" #: .\cookbook\templates\search_info.html:5 #: .\cookbook\templates\search_info.html:9 -#: .\cookbook\templates\settings.html:165 +#: .\cookbook\templates\settings.html:172 msgid "Search Settings" msgstr "Impostazioni di ricerca" @@ -1759,36 +1937,42 @@ msgstr "Impostazioni API" msgid "Search-Settings" msgstr "Cerca-Impostazioni" -#: .\cookbook\templates\settings.html:58 +#: .\cookbook\templates\settings.html:56 +#, fuzzy +#| msgid "Search-Settings" +msgid "Shopping-Settings" +msgstr "Cerca-Impostazioni" + +#: .\cookbook\templates\settings.html:65 msgid "Name Settings" msgstr "Impostazioni Nome" -#: .\cookbook\templates\settings.html:66 +#: .\cookbook\templates\settings.html:73 msgid "Account Settings" msgstr "Impostazioni Account" -#: .\cookbook\templates\settings.html:68 +#: .\cookbook\templates\settings.html:75 msgid "Emails" msgstr "Email" -#: .\cookbook\templates\settings.html:71 +#: .\cookbook\templates\settings.html:78 #: .\cookbook\templates\socialaccount\connections.html:11 msgid "Social" msgstr "Social" -#: .\cookbook\templates\settings.html:84 +#: .\cookbook\templates\settings.html:91 msgid "Language" msgstr "Lingua" -#: .\cookbook\templates\settings.html:114 +#: .\cookbook\templates\settings.html:121 msgid "Style" msgstr "Stile" -#: .\cookbook\templates\settings.html:135 +#: .\cookbook\templates\settings.html:142 msgid "API Token" msgstr "Token API" -#: .\cookbook\templates\settings.html:136 +#: .\cookbook\templates\settings.html:143 msgid "" "You can use both basic authentication and token based authentication to " "access the REST API." @@ -1796,7 +1980,7 @@ msgstr "" "Per accedere alle API REST puoi usare sia l'autenticazione base sia quella " "tramite token." -#: .\cookbook\templates\settings.html:153 +#: .\cookbook\templates\settings.html:160 msgid "" "Use the token as an Authorization header prefixed by the word token as shown " "in the following examples:" @@ -1804,18 +1988,18 @@ msgstr "" "Usa il token come header Authorization preceduto dalla parola Token come " "negli esempi seguenti:" -#: .\cookbook\templates\settings.html:155 +#: .\cookbook\templates\settings.html:162 msgid "or" msgstr "o" -#: .\cookbook\templates\settings.html:166 +#: .\cookbook\templates\settings.html:173 msgid "" "There are many options to configure the search depending on your personal " "preferences." msgstr "" "Ci sono molte opzioni per configurare la ricerca in base alle tue preferenze." -#: .\cookbook\templates\settings.html:167 +#: .\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." @@ -1824,7 +2008,7 @@ msgstr "" "continuare a usare le impostazioni predefinite oppure scegliere una delle " "seguenti modalità." -#: .\cookbook\templates\settings.html:168 +#: .\cookbook\templates\settings.html:175 msgid "" "If you do want to configure the search you can read about the different " "options here." @@ -1832,39 +2016,48 @@ msgstr "" "Se vuoi comunque configurare la ricerca, puoi informarti riguardo le opzioni " "disponibili qui." -#: .\cookbook\templates\settings.html:173 +#: .\cookbook\templates\settings.html:180 msgid "Fuzzy" msgstr "Fuzzy" -#: .\cookbook\templates\settings.html:174 +#: .\cookbook\templates\settings.html:181 msgid "" "Find what you need even if your search or the recipe contains typos. Might " "return more results than needed to make sure you find what you are looking " "for." msgstr "" +"Cerca quello che ti serve anche se la ricerca o la ricetta contengono " +"errori. Potrebbe mostrare più risultati di quelli necessari per mostrarti " +"quello che stai cercando." -#: .\cookbook\templates\settings.html:175 +#: .\cookbook\templates\settings.html:182 msgid "This is the default behavior" msgstr "È il comportamento predefinito" -#: .\cookbook\templates\settings.html:176 -#: .\cookbook\templates\settings.html:184 +#: .\cookbook\templates\settings.html:183 +#: .\cookbook\templates\settings.html:191 msgid "Apply" msgstr "Applica" -#: .\cookbook\templates\settings.html:181 +#: .\cookbook\templates\settings.html:188 msgid "Precise" msgstr "Preciso" -#: .\cookbook\templates\settings.html:182 +#: .\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 "" -#: .\cookbook\templates\settings.html:183 +#: .\cookbook\templates\settings.html:190 msgid "Perfect for large Databases" -msgstr "" +msgstr "Perfetto per database grandi" + +#: .\cookbook\templates\settings.html:207 +#, fuzzy +#| msgid "Shopping List" +msgid "Shopping Settings" +msgstr "Lista della spesa" #: .\cookbook\templates\setup.html:6 .\cookbook\templates\system.html:5 msgid "Cookbook Setup" @@ -1884,81 +2077,73 @@ msgstr "" msgid "Create Superuser account" msgstr "Crea super utente" -#: .\cookbook\templates\shopping_list.html:7 +#: .\cookbook\templates\shopping_list.html:8 #: .\cookbook\templates\shopping_list.html:29 -#: .\cookbook\templates\shopping_list.html:721 +#: .\cookbook\templates\shopping_list.html:663 msgid "Shopping List" msgstr "Lista della spesa" -#: .\cookbook\templates\shopping_list.html:34 -msgid "Try the new shopping list" -msgstr "Prova la nuova lista della spesa" - -#: .\cookbook\templates\shopping_list.html:63 +#: .\cookbook\templates\shopping_list.html:55 msgid "Search Recipe" msgstr "Cerca Ricetta" -#: .\cookbook\templates\shopping_list.html:86 +#: .\cookbook\templates\shopping_list.html:72 msgid "Shopping Recipes" msgstr "Ricette per la spesa" -#: .\cookbook\templates\shopping_list.html:90 +#: .\cookbook\templates\shopping_list.html:74 msgid "No recipes selected" msgstr "Nessuna ricetta selezionata" -#: .\cookbook\templates\shopping_list.html:157 +#: .\cookbook\templates\shopping_list.html:131 msgid "Entry Mode" msgstr "Modalità di inserimento" -#: .\cookbook\templates\shopping_list.html:165 +#: .\cookbook\templates\shopping_list.html:139 msgid "Add Entry" msgstr "Aggiungi voce" -#: .\cookbook\templates\shopping_list.html:181 +#: .\cookbook\templates\shopping_list.html:152 msgid "Amount" msgstr "Quantità" -#: .\cookbook\templates\shopping_list.html:194 +#: .\cookbook\templates\shopping_list.html:164 msgid "Select Unit" msgstr "Seleziona unità di misura" -#: .\cookbook\templates\shopping_list.html:196 -#: .\cookbook\templates\shopping_list.html:218 -#: .\cookbook\templates\shopping_list.html:248 -#: .\cookbook\templates\shopping_list.html:272 -#: .\cookbook\templates\url_import.html:500 -#: .\cookbook\templates\url_import.html:532 +#: .\cookbook\templates\shopping_list.html:166 +#: .\cookbook\templates\shopping_list.html:189 +#: .\cookbook\templates\shopping_list.html:219 +#: .\cookbook\templates\shopping_list.html:243 +#: .\cookbook\templates\url_import.html:505 +#: .\cookbook\templates\url_import.html:537 msgid "Select" msgstr "Seleziona" -#: .\cookbook\templates\shopping_list.html:216 +#: .\cookbook\templates\shopping_list.html:187 msgid "Select Food" msgstr "Seleziona alimento" -#: .\cookbook\templates\shopping_list.html:247 +#: .\cookbook\templates\shopping_list.html:218 msgid "Select Supermarket" msgstr "Seleziona supermercato" -#: .\cookbook\templates\shopping_list.html:271 +#: .\cookbook\templates\shopping_list.html:242 msgid "Select User" msgstr "Seleziona utente" -#: .\cookbook\templates\shopping_list.html:290 +#: .\cookbook\templates\shopping_list.html:258 msgid "Finished" msgstr "Completato" -#: .\cookbook\templates\shopping_list.html:303 +#: .\cookbook\templates\shopping_list.html:267 msgid "You are offline, shopping list might not syncronize." msgstr "Sei offline: la lista della spesa potrebbe non sincronizzarsi." -#: .\cookbook\templates\shopping_list.html:368 +#: .\cookbook\templates\shopping_list.html:318 msgid "Copy/Export" msgstr "Copia/Esporta" -#: .\cookbook\templates\shopping_list.html:372 -msgid "List Prefix" -msgstr "Prefisso lista" - #: .\cookbook\templates\socialaccount\connections.html:4 #: .\cookbook\templates\socialaccount\connections.html:15 msgid "Account Connections" @@ -2012,80 +2197,80 @@ msgstr "" msgid "Sign in using" msgstr "Accedi usando" -#: .\cookbook\templates\space.html:23 +#: .\cookbook\templates\space.html:25 msgid "Space:" msgstr "Istanza:" -#: .\cookbook\templates\space.html:24 +#: .\cookbook\templates\space.html:26 msgid "Manage Subscription" msgstr "Gestisci iscrizione" -#: .\cookbook\templates\space.html:32 .\cookbook\templates\stats.html:19 +#: .\cookbook\templates\space.html:34 .\cookbook\templates\stats.html:19 msgid "Number of objects" msgstr "Numero di oggetti" -#: .\cookbook\templates\space.html:45 .\cookbook\templates\stats.html:30 +#: .\cookbook\templates\space.html:54 .\cookbook\templates\stats.html:30 msgid "Recipe Imports" msgstr "Ricette importate" -#: .\cookbook\templates\space.html:53 .\cookbook\templates\stats.html:38 +#: .\cookbook\templates\space.html:62 .\cookbook\templates\stats.html:38 msgid "Objects stats" msgstr "Statistiche degli oggetti" -#: .\cookbook\templates\space.html:56 .\cookbook\templates\stats.html:41 +#: .\cookbook\templates\space.html:65 .\cookbook\templates\stats.html:41 msgid "Recipes without Keywords" msgstr "Ricette senza parole chiave" -#: .\cookbook\templates\space.html:60 .\cookbook\templates\stats.html:45 +#: .\cookbook\templates\space.html:73 .\cookbook\templates\stats.html:45 msgid "Internal Recipes" msgstr "Ricette interne" -#: .\cookbook\templates\space.html:73 +#: .\cookbook\templates\space.html:89 msgid "Members" msgstr "Membri" -#: .\cookbook\templates\space.html:77 +#: .\cookbook\templates\space.html:95 msgid "Invite User" msgstr "Invita utente" -#: .\cookbook\templates\space.html:88 +#: .\cookbook\templates\space.html:107 msgid "User" msgstr "Utente" -#: .\cookbook\templates\space.html:89 +#: .\cookbook\templates\space.html:108 msgid "Groups" msgstr "Gruppi" -#: .\cookbook\templates\space.html:105 +#: .\cookbook\templates\space.html:119 msgid "admin" msgstr "admin" -#: .\cookbook\templates\space.html:106 +#: .\cookbook\templates\space.html:120 msgid "user" msgstr "utente" -#: .\cookbook\templates\space.html:107 +#: .\cookbook\templates\space.html:121 msgid "guest" msgstr "ospite" -#: .\cookbook\templates\space.html:108 +#: .\cookbook\templates\space.html:122 msgid "remove" msgstr "rimuovi" -#: .\cookbook\templates\space.html:112 +#: .\cookbook\templates\space.html:126 msgid "Update" msgstr "Aggiorna" -#: .\cookbook\templates\space.html:116 +#: .\cookbook\templates\space.html:130 msgid "You cannot edit yourself." msgstr "Non puoi modificare te stesso." -#: .\cookbook\templates\space.html:123 +#: .\cookbook\templates\space.html:136 msgid "There are no members in your space yet!" msgstr "Non ci sono ancora ricette in questa istanza!" -#: .\cookbook\templates\space.html:130 .\cookbook\templates\system.html:21 -#: .\cookbook\views\lists.py:100 +#: .\cookbook\templates\space.html:143 .\cookbook\templates\system.html:21 +#: .\cookbook\views\lists.py:85 msgid "Invite Links" msgstr "Link di invito" @@ -2218,108 +2403,108 @@ msgstr "" "raccomandato perché alcune\n" "funzionalità sono disponibili solo con un database Posgres." -#: .\cookbook\templates\url_import.html:6 +#: .\cookbook\templates\url_import.html:8 msgid "URL Import" msgstr "Importa da URL" -#: .\cookbook\templates\url_import.html:31 +#: .\cookbook\templates\url_import.html:33 msgid "Drag me to your bookmarks to import recipes from anywhere" msgstr "Spostami nei tuoi segnalibri per importare facilmente le ricette" -#: .\cookbook\templates\url_import.html:32 +#: .\cookbook\templates\url_import.html:34 msgid "Bookmark Me!" msgstr "Salvami nei preferiti!" -#: .\cookbook\templates\url_import.html:36 +#: .\cookbook\templates\url_import.html:38 msgid "URL" msgstr "URL" -#: .\cookbook\templates\url_import.html:38 +#: .\cookbook\templates\url_import.html:40 msgid "App" msgstr "App" -#: .\cookbook\templates\url_import.html:62 +#: .\cookbook\templates\url_import.html:64 msgid "Enter website URL" msgstr "Inserisci l'indirizzo del sito web" -#: .\cookbook\templates\url_import.html:101 +#: .\cookbook\templates\url_import.html:104 msgid "Select recipe files to import or drop them here..." msgstr "Seleziona i file delle ricette da importare o spostarli qui..." -#: .\cookbook\templates\url_import.html:122 +#: .\cookbook\templates\url_import.html:125 msgid "Paste json or html source here to load recipe." msgstr "Incolla qui il codice html o json per caricare una ricetta." -#: .\cookbook\templates\url_import.html:150 +#: .\cookbook\templates\url_import.html:153 msgid "Preview Recipe Data" msgstr "Anteprima dati della ricetta" -#: .\cookbook\templates\url_import.html:151 +#: .\cookbook\templates\url_import.html:154 msgid "Drag recipe attributes from the right into the appropriate box below." msgstr "Trascina gli attributi della ricetta da destra nella casella in basso." -#: .\cookbook\templates\url_import.html:160 -#: .\cookbook\templates\url_import.html:177 -#: .\cookbook\templates\url_import.html:194 -#: .\cookbook\templates\url_import.html:213 -#: .\cookbook\templates\url_import.html:231 -#: .\cookbook\templates\url_import.html:246 -#: .\cookbook\templates\url_import.html:261 -#: .\cookbook\templates\url_import.html:277 -#: .\cookbook\templates\url_import.html:304 -#: .\cookbook\templates\url_import.html:355 +#: .\cookbook\templates\url_import.html:163 +#: .\cookbook\templates\url_import.html:180 +#: .\cookbook\templates\url_import.html:197 +#: .\cookbook\templates\url_import.html:216 +#: .\cookbook\templates\url_import.html:234 +#: .\cookbook\templates\url_import.html:249 +#: .\cookbook\templates\url_import.html:264 +#: .\cookbook\templates\url_import.html:280 +#: .\cookbook\templates\url_import.html:307 +#: .\cookbook\templates\url_import.html:358 msgid "Clear Contents" msgstr "Cancella il contenuto" -#: .\cookbook\templates\url_import.html:162 +#: .\cookbook\templates\url_import.html:165 msgid "Text dragged here will be appended to the name." msgstr "Il testo trascinato qui sarà aggiunto al nome." -#: .\cookbook\templates\url_import.html:175 +#: .\cookbook\templates\url_import.html:178 msgid "Description" msgstr "Descrizione" -#: .\cookbook\templates\url_import.html:179 +#: .\cookbook\templates\url_import.html:182 msgid "Text dragged here will be appended to the description." msgstr "Il testo trascinato qui sarà aggiunto alla descrizione." -#: .\cookbook\templates\url_import.html:196 +#: .\cookbook\templates\url_import.html:199 msgid "Keywords dragged here will be appended to current list" msgstr "Le parole chiave trascinate qui saranno aggiunte alla lista corrente" -#: .\cookbook\templates\url_import.html:211 +#: .\cookbook\templates\url_import.html:214 msgid "Image" msgstr "Immagine" -#: .\cookbook\templates\url_import.html:243 +#: .\cookbook\templates\url_import.html:246 msgid "Prep Time" msgstr "Tempo di preparazione" -#: .\cookbook\templates\url_import.html:258 +#: .\cookbook\templates\url_import.html:261 msgid "Cook Time" msgstr "Tempo di cottura" -#: .\cookbook\templates\url_import.html:279 +#: .\cookbook\templates\url_import.html:282 msgid "Ingredients dragged here will be appended to current list." msgstr "Gli ingredienti trascinati qui saranno aggiunti alla lista corrente." -#: .\cookbook\templates\url_import.html:301 -#: .\cookbook\templates\url_import.html:572 +#: .\cookbook\templates\url_import.html:304 +#: .\cookbook\templates\url_import.html:579 msgid "Instructions" msgstr "Istruzioni" -#: .\cookbook\templates\url_import.html:306 +#: .\cookbook\templates\url_import.html:309 msgid "" "Recipe instructions dragged here will be appended to current instructions." msgstr "" "Le istruzioni per la ricetta trascinate qui saranno aggiunte alle istruzioni " "correnti." -#: .\cookbook\templates\url_import.html:329 +#: .\cookbook\templates\url_import.html:332 msgid "Discovered Attributes" msgstr "Attributi trovati" -#: .\cookbook\templates\url_import.html:331 +#: .\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." @@ -2327,61 +2512,61 @@ msgstr "" "Trascina gli attributi delle ricette dal basso nella casella sulla sinistra. " "Clicca su qualsiasi nodo per mostrare le sue proprietà complete." -#: .\cookbook\templates\url_import.html:348 +#: .\cookbook\templates\url_import.html:351 msgid "Show Blank Field" msgstr "Mostra campo vuoto" -#: .\cookbook\templates\url_import.html:353 +#: .\cookbook\templates\url_import.html:356 msgid "Blank Field" msgstr "Campo vuoto" -#: .\cookbook\templates\url_import.html:357 +#: .\cookbook\templates\url_import.html:360 msgid "Items dragged to Blank Field will be appended." msgstr "Gli elementi trascinati nel campo vuoto saranno ignorati." -#: .\cookbook\templates\url_import.html:404 +#: .\cookbook\templates\url_import.html:407 msgid "Delete Text" msgstr "Elimina testo" -#: .\cookbook\templates\url_import.html:417 +#: .\cookbook\templates\url_import.html:420 msgid "Delete image" msgstr "Elimina immagine" -#: .\cookbook\templates\url_import.html:433 +#: .\cookbook\templates\url_import.html:436 msgid "Recipe Name" msgstr "Nome Ricetta" -#: .\cookbook\templates\url_import.html:437 +#: .\cookbook\templates\url_import.html:440 msgid "Recipe Description" msgstr "Descrizione ricetta" -#: .\cookbook\templates\url_import.html:499 -#: .\cookbook\templates\url_import.html:531 -#: .\cookbook\templates\url_import.html:587 +#: .\cookbook\templates\url_import.html:504 +#: .\cookbook\templates\url_import.html:536 +#: .\cookbook\templates\url_import.html:596 msgid "Select one" msgstr "Seleziona un elemento" -#: .\cookbook\templates\url_import.html:547 +#: .\cookbook\templates\url_import.html:554 msgid "Note" msgstr "Nota" -#: .\cookbook\templates\url_import.html:588 +#: .\cookbook\templates\url_import.html:597 msgid "Add Keyword" msgstr "Aggiungi parole chiave" -#: .\cookbook\templates\url_import.html:601 +#: .\cookbook\templates\url_import.html:610 msgid "All Keywords" msgstr "Tutte le parole chiave" -#: .\cookbook\templates\url_import.html:604 +#: .\cookbook\templates\url_import.html:613 msgid "Import all keywords, not only the ones already existing." msgstr "Importa tutte le parole chiave, non solo quelle che già esistono." -#: .\cookbook\templates\url_import.html:631 +#: .\cookbook\templates\url_import.html:640 msgid "Information" msgstr "Informazioni" -#: .\cookbook\templates\url_import.html:633 +#: .\cookbook\templates\url_import.html:642 msgid "" " Only websites containing ld+json or microdata information can currently\n" " be imported. Most big recipe pages " @@ -2399,108 +2584,193 @@ msgstr "" "struttura dati, puoi inviare un esempio nella sezione Issues \n" " su GitHub." -#: .\cookbook\templates\url_import.html:641 +#: .\cookbook\templates\url_import.html:650 msgid "Google ld+json Info" msgstr "Info Google Id+json" -#: .\cookbook\templates\url_import.html:644 +#: .\cookbook\templates\url_import.html:653 msgid "GitHub Issues" msgstr "Issues (Problemi aperti) su GitHub" -#: .\cookbook\templates\url_import.html:646 +#: .\cookbook\templates\url_import.html:655 msgid "Recipe Markup Specification" msgstr "Specifica di Markup della ricetta" -#: .\cookbook\views\api.py:83 .\cookbook\views\api.py:132 +#: .\cookbook\views\api.py:88 .\cookbook\views\api.py:170 msgid "Parameter updated_at incorrectly formatted" msgstr "Il parametro updated_at non è formattato correttamente" -#: .\cookbook\views\api.py:152 +#: .\cookbook\views\api.py:190 .\cookbook\views\api.py:291 #, python-brace-format msgid "No {self.basename} with id {pk} exists" msgstr "Non esiste nessun {self.basename} con id {pk}" -#: .\cookbook\views\api.py:156 +#: .\cookbook\views\api.py:194 msgid "Cannot merge with the same object!" msgstr "Non è possibile unirlo con lo stesso oggetto!" -#: .\cookbook\views\api.py:163 +#: .\cookbook\views\api.py:201 #, python-brace-format msgid "No {self.basename} with id {target} exists" msgstr "Non esiste nessun {self.basename} con id {target}" -#: .\cookbook\views\api.py:168 +#: .\cookbook\views\api.py:206 msgid "Cannot merge with child object!" msgstr "Non è possibile unirlo con un oggetto secondario!" -#: .\cookbook\views\api.py:201 +#: .\cookbook\views\api.py:239 #, python-brace-format msgid "{source.name} was merged successfully with {target.name}" msgstr "{source.name} è stato unito con successo a {target.name}" -#: .\cookbook\views\api.py:205 +#: .\cookbook\views\api.py:244 #, python-brace-format msgid "An error occurred attempting to merge {source.name} with {target.name}" msgstr "" "Si è verificato un errore durante l'unione di {source.name} con {target.name}" -#: .\cookbook\views\api.py:249 -#, python-brace-format -msgid "No {self.basename} with id {child} exists" -msgstr "Non esiste nessun {self.basename} con id {child}" - -#: .\cookbook\views\api.py:258 +#: .\cookbook\views\api.py:300 #, python-brace-format msgid "{child.name} was moved successfully to the root." msgstr "{child.name} è stato spostato con successo alla radice." -#: .\cookbook\views\api.py:261 .\cookbook\views\api.py:279 +#: .\cookbook\views\api.py:303 .\cookbook\views\api.py:321 msgid "An error occurred attempting to move " msgstr "Si è verificato un errore durante lo spostamento " -#: .\cookbook\views\api.py:264 +#: .\cookbook\views\api.py:306 msgid "Cannot move an object to itself!" msgstr "Non è possibile muovere un oggetto a sé stesso!" -#: .\cookbook\views\api.py:270 +#: .\cookbook\views\api.py:312 #, python-brace-format msgid "No {self.basename} with id {parent} exists" msgstr "Non esiste nessun {self.basename} con id {parent}" -#: .\cookbook\views\api.py:276 +#: .\cookbook\views\api.py:318 #, python-brace-format msgid "{child.name} was moved successfully to parent {parent.name}" msgstr "{child.name} è stato spostato con successo al primario {parent.name}" -#: .\cookbook\views\api.py:723 .\cookbook\views\data.py:42 +#: .\cookbook\views\api.py:470 +#, python-brace-format +msgid "{obj.name} was removed from the shopping list." +msgstr "" + +#: .\cookbook\views\api.py:475 .\cookbook\views\api.py:726 +#, python-brace-format +msgid "{obj.name} was added to the shopping list." +msgstr "" + +#: .\cookbook\views\api.py:587 +msgid "ID of recipe a step is part of. For multiple repeat parameter." +msgstr "" + +#: .\cookbook\views\api.py:588 +msgid "Query string matched (fuzzy) against object name." +msgstr "" + +#: .\cookbook\views\api.py:631 +msgid "" +"Query string matched (fuzzy) against recipe name. In the future also " +"fulltext search." +msgstr "" + +#: .\cookbook\views\api.py:632 +msgid "ID of keyword a recipe should have. For multiple repeat parameter." +msgstr "" + +#: .\cookbook\views\api.py:633 +msgid "ID of food a recipe should have. For multiple repeat parameter." +msgstr "" + +#: .\cookbook\views\api.py:634 +msgid "ID of unit a recipe should have." +msgstr "" + +#: .\cookbook\views\api.py:635 +msgid "Rating a recipe should have. [0 - 5]" +msgstr "" + +#: .\cookbook\views\api.py:636 +msgid "ID of book a recipe should be in. For multiple repeat parameter." +msgstr "" + +#: .\cookbook\views\api.py:637 +msgid "" +"If recipe should have all (AND=false) or any (OR=true) of the " +"provided keywords." +msgstr "" + +#: .\cookbook\views\api.py:638 +msgid "" +"If recipe should have all (AND=false) or any (OR=true) of the " +"provided foods." +msgstr "" + +#: .\cookbook\views\api.py:639 +msgid "" +"If recipe should be in all (AND=false) or any (OR=true) of the " +"provided books." +msgstr "" + +#: .\cookbook\views\api.py:640 +msgid "If only internal recipes should be returned. [true/false]" +msgstr "" + +#: .\cookbook\views\api.py:641 +msgid "Returns the results in randomized order. [true/false]" +msgstr "" + +#: .\cookbook\views\api.py:642 +msgid "Returns new results first in search results. [true/false]" +msgstr "" + +#: .\cookbook\views\api.py:768 +msgid "" +"Returns the shopping list entry with a primary key of id. Multiple values " +"allowed." +msgstr "" + +#: .\cookbook\views\api.py:771 +msgid "" +"Filter shopping list entries on checked. [true, false, both, recent]
- recent includes unchecked items and recently completed items." +msgstr "" + +#: .\cookbook\views\api.py:773 +msgid "Returns the shopping list entries sorted by supermarket category order." +msgstr "" + +#: .\cookbook\views\api.py:922 .\cookbook\views\data.py:42 #: .\cookbook\views\edit.py:129 .\cookbook\views\new.py:95 msgid "This feature is not yet available in the hosted version of tandoor!" msgstr "" "Questa funzione non è ancora disponibile nella versione hostata di Tandor!" -#: .\cookbook\views\api.py:745 +#: .\cookbook\views\api.py:944 msgid "Sync successful!" msgstr "Sincronizzazione completata con successo!" -#: .\cookbook\views\api.py:750 +#: .\cookbook\views\api.py:949 msgid "Error synchronizing with Storage" msgstr "Errore di sincronizzazione con questo backend" -#: .\cookbook\views\api.py:828 +#: .\cookbook\views\api.py:1028 msgid "Nothing to do." msgstr "Nulla da fare." -#: .\cookbook\views\api.py:843 +#: .\cookbook\views\api.py:1043 msgid "The requested site provided malformed data and cannot be read." msgstr "" "Il sito richiesto ha fornito dati in formato non corretto e non può essere " "letto." -#: .\cookbook\views\api.py:850 +#: .\cookbook\views\api.py:1050 msgid "The requested page could not be found." msgstr "La pagina richiesta non è stata trovata." -#: .\cookbook\views\api.py:859 +#: .\cookbook\views\api.py:1068 msgid "" "The requested site does not provide any recognized data format to import the " "recipe from." @@ -2508,22 +2778,26 @@ msgstr "" "Il sito richiesto non fornisce un formato di dati riconosciuto da cui " "importare la ricetta." -#: .\cookbook\views\api.py:873 +#: .\cookbook\views\api.py:1082 +msgid "Connection Refused." +msgstr "" + +#: .\cookbook\views\api.py:1091 msgid "No useable data could be found." msgstr "Nessuna informazione utilizzabile è stata trovata." -#: .\cookbook\views\api.py:889 +#: .\cookbook\views\api.py:1107 msgid "I couldn't find anything to do." msgstr "Non è stato trovato nulla da fare." #: .\cookbook\views\data.py:34 .\cookbook\views\data.py:129 -#: .\cookbook\views\edit.py:49 .\cookbook\views\import_export.py:73 +#: .\cookbook\views\edit.py:49 .\cookbook\views\import_export.py:80 #: .\cookbook\views\new.py:33 msgid "You have reached the maximum number of recipes for your space." msgstr "Hai raggiunto il numero massimo di ricette nella tua istanza." #: .\cookbook\views\data.py:38 .\cookbook\views\data.py:133 -#: .\cookbook\views\edit.py:53 .\cookbook\views\import_export.py:77 +#: .\cookbook\views\edit.py:53 .\cookbook\views\import_export.py:84 #: .\cookbook\views\new.py:37 msgid "You have more users than allowed in your space." msgstr "Hai più utenti di quanti permessi nella tua istanza." @@ -2540,7 +2814,7 @@ msgstr[1] "" msgid "Monitor" msgstr "Monitoraggio" -#: .\cookbook\views\delete.py:125 .\cookbook\views\lists.py:86 +#: .\cookbook\views\delete.py:125 .\cookbook\views\lists.py:71 #: .\cookbook\views\new.py:101 msgid "Storage Backend" msgstr "Backend di archiviazione" @@ -2560,7 +2834,7 @@ msgstr "Libro delle ricette" msgid "Bookmarks" msgstr "Preferiti" -#: .\cookbook\views\delete.py:192 .\cookbook\views\new.py:235 +#: .\cookbook\views\delete.py:192 .\cookbook\views\new.py:238 msgid "Invite Link" msgstr "Link di invito" @@ -2586,38 +2860,44 @@ msgstr "Modifiche salvate!" msgid "Error saving changes!" msgstr "Si è verificato un errore durante il salvataggio delle modifiche!" -#: .\cookbook\views\import_export.py:99 +#: .\cookbook\views\import_export.py:106 msgid "Importing is not implemented for this provider" msgstr "Questo provider non permette l'importazione" -#: .\cookbook\views\import_export.py:121 +#: .\cookbook\views\import_export.py:127 +msgid "" +"The PDF Exporter is not enabled on this instance as it is still in an " +"experimental state." +msgstr "" + +#: .\cookbook\views\import_export.py:132 msgid "Exporting is not implemented for this provider" msgstr "Questo provider non permette l'esportazione" -#: .\cookbook\views\lists.py:26 +#: .\cookbook\views\lists.py:25 msgid "Import Log" msgstr "Registro importazioni" -#: .\cookbook\views\lists.py:39 +#: .\cookbook\views\lists.py:38 msgid "Discovery" msgstr "Trovate" -#: .\cookbook\views\lists.py:69 +#: .\cookbook\views\lists.py:54 msgid "Shopping Lists" msgstr "Liste della spesa" -#: .\cookbook\views\lists.py:129 -msgid "Foods" -msgstr "Alimenti" - -#: .\cookbook\views\lists.py:163 +#: .\cookbook\views\lists.py:148 msgid "Supermarkets" msgstr "Supermercati" -#: .\cookbook\views\lists.py:179 +#: .\cookbook\views\lists.py:164 msgid "Shopping Categories" msgstr "Categorie della spesa" +#: .\cookbook\views\lists.py:217 +msgid "Steps" +msgstr "Step" + #: .\cookbook\views\lists.py:232 msgid "New Shopping List" msgstr "Nuova lista della spesa" @@ -2630,49 +2910,49 @@ msgstr "La nuova ricetta è stata importata!" msgid "There was an error importing this recipe!" msgstr "Si è verificato un errore durante l'importazione di questa ricetta!" -#: .\cookbook\views\new.py:209 +#: .\cookbook\views\new.py:212 msgid "Hello" msgstr "Ciao" -#: .\cookbook\views\new.py:209 +#: .\cookbook\views\new.py:212 msgid "You have been invited by " msgstr "Sei stato invitato da " -#: .\cookbook\views\new.py:210 +#: .\cookbook\views\new.py:213 msgid " to join their Tandoor Recipes space " msgstr " per entrare nella sua istanza di Tandoor Recipes " -#: .\cookbook\views\new.py:211 +#: .\cookbook\views\new.py:214 msgid "Click the following link to activate your account: " msgstr "Clicca il link qui di seguito per attivare il tuo account: " -#: .\cookbook\views\new.py:212 +#: .\cookbook\views\new.py:215 msgid "" "If the link does not work use the following code to manually join the space: " msgstr "" "Se il link non funziona, usa il seguente codice per entrare manualmente " "nell'istanza: " -#: .\cookbook\views\new.py:213 +#: .\cookbook\views\new.py:216 msgid "The invitation is valid until " msgstr "L'invito è valido fino al " -#: .\cookbook\views\new.py:214 +#: .\cookbook\views\new.py:217 msgid "" "Tandoor Recipes is an Open Source recipe manager. Check it out on GitHub " msgstr "" "Tandoor Recipes è un gestore di ricette Open Source. Dagli una occhiata su " "GitHub " -#: .\cookbook\views\new.py:217 +#: .\cookbook\views\new.py:220 msgid "Tandoor Recipes Invite" msgstr "Invito per Tandoor Recipes" -#: .\cookbook\views\new.py:224 +#: .\cookbook\views\new.py:227 msgid "Invite link successfully send to user." msgstr "Link di invito inviato con successo all'utente." -#: .\cookbook\views\new.py:227 +#: .\cookbook\views\new.py:230 msgid "" "You have send to many emails, please share the link manually or wait a few " "hours." @@ -2680,13 +2960,13 @@ msgstr "" "Hai mandato troppe email, condividi il link manualmente o aspetta qualche " "ora." -#: .\cookbook\views\new.py:229 +#: .\cookbook\views\new.py:232 msgid "Email to user could not be send, please share link manually." msgstr "" "Non è stato possibile inviare l'email all'utente, condividi il link " "manualmente." -#: .\cookbook\views\views.py:127 +#: .\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." @@ -2694,23 +2974,23 @@ msgstr "" "Hai creato la tua istanza personale per le ricette. Inizia aggiungendo " "qualche ricetta o invita altre persone a unirsi a te." -#: .\cookbook\views\views.py:175 +#: .\cookbook\views\views.py:174 msgid "You do not have the required permissions to perform this action!" msgstr "Non hai i permessi necessari per completare questa operazione!" -#: .\cookbook\views\views.py:186 +#: .\cookbook\views\views.py:185 msgid "Comment saved!" msgstr "Commento salvato!" -#: .\cookbook\views\views.py:277 +#: .\cookbook\views\views.py:276 msgid "This feature is not available in the demo version!" msgstr "Questa funzione non è disponibile nella versione demo!" -#: .\cookbook\views\views.py:340 +#: .\cookbook\views\views.py:335 msgid "You must select at least one field to search!" msgstr "Devi selezionare almeno un campo da cercare!" -#: .\cookbook\views\views.py:345 +#: .\cookbook\views\views.py:340 msgid "" "To use this search method you must select at least one full text search " "field!" @@ -2718,11 +2998,11 @@ msgstr "" "Per utilizzare questo metodo di ricerca devi selezionare almeno un campo di " "ricerca full text!" -#: .\cookbook\views\views.py:349 +#: .\cookbook\views\views.py:344 msgid "Fuzzy search is not compatible with this search method!" msgstr "La ricerca Fuzzy non è compatibile con questo metodo di ricerca!" -#: .\cookbook\views\views.py:452 +#: .\cookbook\views\views.py:470 msgid "" "The setup page can only be used to create the first user! If you have " "forgotten your superuser credentials please consult the django documentation " @@ -2732,32 +3012,32 @@ msgstr "" "utente! Se hai dimenticato le credenziali del tuo super utente controlla la " "documentazione di Django per resettare le password." -#: .\cookbook\views\views.py:459 +#: .\cookbook\views\views.py:477 msgid "Passwords dont match!" msgstr "Le password non combaciano!" -#: .\cookbook\views\views.py:475 +#: .\cookbook\views\views.py:493 msgid "User has been created, please login!" msgstr "L'utente è stato creato e ora può essere usato per il login!" -#: .\cookbook\views\views.py:491 +#: .\cookbook\views\views.py:509 msgid "Malformed Invite Link supplied!" msgstr "È stato fornito un link di invito non valido!" -#: .\cookbook\views\views.py:498 +#: .\cookbook\views\views.py:516 msgid "You are already member of a space and therefore cannot join this one." msgstr "" "Sei già membro di una istanza e quindi non puoi entrare in quest'altra." -#: .\cookbook\views\views.py:509 +#: .\cookbook\views\views.py:527 msgid "Successfully joined space." msgstr "Sei entrato a far parte di questa istanza." -#: .\cookbook\views\views.py:515 +#: .\cookbook\views\views.py:533 msgid "Invite Link not valid or already used!" msgstr "Il link di invito non è valido o è stato già usato!" -#: .\cookbook\views\views.py:579 +#: .\cookbook\views\views.py:614 msgid "" "Reporting share links is not enabled for this instance. Please notify the " "page administrator to report problems." @@ -2765,7 +3045,7 @@ msgstr "" "La segnalazione dei link di condivisione non è abilitata per questa istanza. " "Notifica l'amministratore per segnalare i problemi." -#: .\cookbook\views\views.py:585 +#: .\cookbook\views\views.py:620 msgid "" "Recipe sharing link has been disabled! For additional information please " "contact the page administrator." @@ -2773,6 +3053,10 @@ msgstr "" "Il link per la condivisione delle ricette è stato disabilitato! Per maggiori " "informazioni contatta l'amministratore." +#, python-brace-format +#~ msgid "No {self.basename} with id {child} exists" +#~ msgstr "Non esiste nessun {self.basename} con id {child}" + #~ msgid "New Unit" #~ msgstr "Nuova unità di misura" @@ -2794,9 +3078,6 @@ msgstr "" #~ msgid "Old Food" #~ msgstr "Vecchio alimento" -#~ msgid "Food that should be replaced." -#~ msgstr "Alimento che dovrebbe essere rimpiazzato." - #~ msgid "New Entry" #~ msgstr "Nuovo Campo" @@ -3043,9 +3324,6 @@ msgstr "" #~ msgid "Delete Recipe" #~ msgstr "Elimina Ricetta" -#~ msgid "Steps" -#~ msgstr "Step" - #, fuzzy #~| msgid "Password Reset" #~ msgid "Password Settings" diff --git a/cookbook/locale/lv/LC_MESSAGES/django.mo b/cookbook/locale/lv/LC_MESSAGES/django.mo index ea1f9cfb9f..5371b29595 100644 Binary files a/cookbook/locale/lv/LC_MESSAGES/django.mo and b/cookbook/locale/lv/LC_MESSAGES/django.mo differ diff --git a/cookbook/locale/lv/LC_MESSAGES/django.po b/cookbook/locale/lv/LC_MESSAGES/django.po index ddc9220ba3..38bc5d750a 100644 --- a/cookbook/locale/lv/LC_MESSAGES/django.po +++ b/cookbook/locale/lv/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-08 16:27+0100\n" +"POT-Creation-Date: 2022-01-18 14:52+0100\n" "PO-Revision-Date: 2020-06-02 19:28+0000\n" "Last-Translator: vabene1111 , 2021\n" "Language-Team: Latvian (https://www.transifex.com/django-recipes/" @@ -23,77 +23,76 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : " "2);\n" -#: .\cookbook\filters.py:23 .\cookbook\templates\base.html:125 -#: .\cookbook\templates\forms\ingredients.html:34 -#: .\cookbook\templates\space.html:43 .\cookbook\templates\stats.html:28 -#: .\cookbook\templates\url_import.html:274 +#: .\cookbook\filters.py:23 .\cookbook\templates\forms\ingredients.html:34 +#: .\cookbook\templates\space.html:50 .\cookbook\templates\stats.html:28 +#: .\cookbook\templates\url_import.html:277 msgid "Ingredients" msgstr "Sastāvdaļas" -#: .\cookbook\forms.py:54 +#: .\cookbook\forms.py:56 msgid "Default unit" msgstr "" -#: .\cookbook\forms.py:55 +#: .\cookbook\forms.py:57 #, fuzzy #| msgid "System Information" msgid "Use fractions" msgstr "Sistēmas informācija" -#: .\cookbook\forms.py:56 +#: .\cookbook\forms.py:58 msgid "Use KJ" msgstr "" -#: .\cookbook\forms.py:57 +#: .\cookbook\forms.py:59 msgid "Theme" msgstr "" -#: .\cookbook\forms.py:58 +#: .\cookbook\forms.py:60 msgid "Navbar color" msgstr "" -#: .\cookbook\forms.py:59 +#: .\cookbook\forms.py:61 msgid "Sticky navbar" msgstr "" -#: .\cookbook\forms.py:60 +#: .\cookbook\forms.py:62 msgid "Default page" msgstr "" -#: .\cookbook\forms.py:61 +#: .\cookbook\forms.py:63 #, fuzzy #| msgid "Shopping Recipes" msgid "Show recent recipes" msgstr "Iepirkšanās receptes" -#: .\cookbook\forms.py:62 +#: .\cookbook\forms.py:64 #, fuzzy #| msgid "Search" msgid "Search style" msgstr "Meklēt" -#: .\cookbook\forms.py:63 +#: .\cookbook\forms.py:65 msgid "Plan sharing" msgstr "" -#: .\cookbook\forms.py:64 +#: .\cookbook\forms.py:66 #, fuzzy #| msgid "Ingredients" msgid "Ingredient decimal places" msgstr "Sastāvdaļas" -#: .\cookbook\forms.py:65 +#: .\cookbook\forms.py:67 #, fuzzy #| msgid "Shopping list currently empty" msgid "Shopping list auto sync period" msgstr "Iepirkumu saraksts pašlaik ir tukšs" -#: .\cookbook\forms.py:66 .\cookbook\templates\recipe_view.html:21 -#: .\cookbook\templates\space.html:62 .\cookbook\templates\stats.html:47 +#: .\cookbook\forms.py:68 .\cookbook\templates\recipe_view.html:21 +#: .\cookbook\templates\space.html:77 .\cookbook\templates\stats.html:47 msgid "Comments" msgstr "Komentāri" -#: .\cookbook\forms.py:70 +#: .\cookbook\forms.py:72 msgid "" "Color of the top navigation bar. Not all colors work with all themes, just " "try them out!" @@ -101,11 +100,11 @@ msgstr "" "Augšējās navigācijas joslas krāsa. Ne visas krāsas darbojas ar visām tēmām, " "vienkārši izmēģiniet tās!" -#: .\cookbook\forms.py:72 +#: .\cookbook\forms.py:74 msgid "Default Unit to be used when inserting a new ingredient into a recipe." msgstr "Noklusējuma vienība, ko izmantot, ievietojot receptē jaunu sastāvdaļu." -#: .\cookbook\forms.py:74 +#: .\cookbook\forms.py:76 msgid "" "Enables support for fractions in ingredient amounts (e.g. convert decimals " "to fractions automatically)" @@ -113,32 +112,40 @@ msgstr "" "Iespējot daļskaitļus sastāvdaļu daudzumos (piemēram, decimāldaļas " "automātiski pārveidot par daļskaitļiem)" -#: .\cookbook\forms.py:76 +#: .\cookbook\forms.py:78 msgid "Display nutritional energy amounts in joules instead of calories" msgstr "" -#: .\cookbook\forms.py:78 -msgid "" -"Users with whom newly created meal plan/shopping list entries should be " -"shared by default." +#: .\cookbook\forms.py:79 +#, fuzzy +#| msgid "" +#| "Users with whom newly created meal plan/shopping list entries should be " +#| "shared by default." +msgid "Users with whom newly created meal plans should be shared by default." msgstr "" "Lietotāji, ar kuriem jaunizveidotie maltīšu saraksti/iepirkumu saraksti tiks " "kopīgoti pēc noklusējuma." #: .\cookbook\forms.py:80 +#, fuzzy +#| msgid "Open Shopping List" +msgid "Users with whom to share shopping lists." +msgstr "Atvērt iepirkumu sarakstu" + +#: .\cookbook\forms.py:82 msgid "Show recently viewed recipes on search page." msgstr "Parādīt nesen skatītās receptes meklēšanas lapā." -#: .\cookbook\forms.py:81 +#: .\cookbook\forms.py:83 msgid "Number of decimals to round ingredients." msgstr "Ciparu skaits pēc komata decimāldaļām sastāvdaļās." -#: .\cookbook\forms.py:82 +#: .\cookbook\forms.py:84 msgid "If you want to be able to create and see comments underneath recipes." msgstr "" "Ja vēlaties, lai jūs varētu izveidot un redzēt komentārus zem receptēm." -#: .\cookbook\forms.py:84 +#: .\cookbook\forms.py:86 .\cookbook\forms.py:493 msgid "" "Setting to 0 will disable auto sync. When viewing a shopping list the list " "is updated every set seconds to sync changes someone else might have made. " @@ -152,11 +159,19 @@ msgstr "" "Ja tas ir zemāks par instances ierobežojumu, tas tiek atiestatīts, " "saglabājot." -#: .\cookbook\forms.py:87 +#: .\cookbook\forms.py:89 msgid "Makes the navbar stick to the top of the page." msgstr "" -#: .\cookbook\forms.py:103 +#: .\cookbook\forms.py:90 .\cookbook\forms.py:496 +msgid "Automatically add meal plan ingredients to shopping list." +msgstr "" + +#: .\cookbook\forms.py:91 +msgid "Exclude ingredients that are on hand." +msgstr "" + +#: .\cookbook\forms.py:108 msgid "" "Both fields are optional. If none are given the username will be displayed " "instead" @@ -164,57 +179,57 @@ msgstr "" "Abi lauki nav obligāti. Ja neviens nav norādīts, tā vietā tiks parādīts " "lietotājvārds" -#: .\cookbook\forms.py:124 .\cookbook\forms.py:289 -#: .\cookbook\templates\url_import.html:158 +#: .\cookbook\forms.py:129 .\cookbook\forms.py:298 +#: .\cookbook\templates\url_import.html:161 msgid "Name" msgstr "Vārds" -#: .\cookbook\forms.py:125 .\cookbook\forms.py:290 -#: .\cookbook\templates\space.html:39 .\cookbook\templates\stats.html:24 -#: .\cookbook\templates\url_import.html:192 -#: .\cookbook\templates\url_import.html:578 .\cookbook\views\lists.py:112 +#: .\cookbook\forms.py:130 .\cookbook\forms.py:299 +#: .\cookbook\templates\space.html:44 .\cookbook\templates\stats.html:24 +#: .\cookbook\templates\url_import.html:195 +#: .\cookbook\templates\url_import.html:585 .\cookbook\views\lists.py:97 msgid "Keywords" msgstr "Atslēgvārdi" -#: .\cookbook\forms.py:126 +#: .\cookbook\forms.py:131 msgid "Preparation time in minutes" msgstr "Pagatavošanas laiks minūtēs" -#: .\cookbook\forms.py:127 +#: .\cookbook\forms.py:132 msgid "Waiting time (cooking/baking) in minutes" msgstr "Gaidīšanas laiks (vārīšana / cepšana) minūtēs" -#: .\cookbook\forms.py:128 .\cookbook\forms.py:259 .\cookbook\forms.py:291 +#: .\cookbook\forms.py:133 .\cookbook\forms.py:267 .\cookbook\forms.py:300 msgid "Path" msgstr "Ceļš" -#: .\cookbook\forms.py:129 +#: .\cookbook\forms.py:134 msgid "Storage UID" msgstr "Krātuves UID" -#: .\cookbook\forms.py:157 +#: .\cookbook\forms.py:164 msgid "Default" msgstr "" -#: .\cookbook\forms.py:168 .\cookbook\templates\url_import.html:94 +#: .\cookbook\forms.py:175 .\cookbook\templates\url_import.html:97 msgid "" "To prevent duplicates recipes with the same name as existing ones are " "ignored. Check this box to import everything." msgstr "" -#: .\cookbook\forms.py:190 +#: .\cookbook\forms.py:197 msgid "Add your comment: " msgstr "Pievienot komentāru: " -#: .\cookbook\forms.py:205 +#: .\cookbook\forms.py:212 msgid "Leave empty for dropbox and enter app password for nextcloud." msgstr "Atstājiet tukšu Dropbox un ievadiet lietotnes paroli Nextcloud." -#: .\cookbook\forms.py:212 +#: .\cookbook\forms.py:219 msgid "Leave empty for nextcloud and enter api token for dropbox." msgstr "Atstājiet tukšu Nextcloud un ievadiet API tokenu Dropbox." -#: .\cookbook\forms.py:221 +#: .\cookbook\forms.py:228 msgid "" "Leave empty for dropbox and enter only base url for nextcloud (/remote." "php/webdav/ is added automatically)" @@ -222,33 +237,33 @@ msgstr "" "Atstājiet tukšu Dropbox un ievadiet tikai Nextcloud bāzes URL ( /" "remote.php/webdav/
tiek pievienots automātiski)" -#: .\cookbook\forms.py:258 .\cookbook\views\edit.py:166 +#: .\cookbook\forms.py:266 .\cookbook\views\edit.py:166 msgid "Storage" msgstr "Krātuve" -#: .\cookbook\forms.py:260 +#: .\cookbook\forms.py:268 msgid "Active" msgstr "" -#: .\cookbook\forms.py:265 +#: .\cookbook\forms.py:274 msgid "Search String" msgstr "Meklēšanas virkne" -#: .\cookbook\forms.py:292 +#: .\cookbook\forms.py:301 msgid "File ID" msgstr "Faila ID" -#: .\cookbook\forms.py:313 +#: .\cookbook\forms.py:323 msgid "You must provide at least a recipe or a title." msgstr "Jums jānorāda vismaz recepte vai nosaukums." -#: .\cookbook\forms.py:326 +#: .\cookbook\forms.py:336 msgid "You can list default users to share recipes with in the settings." msgstr "" "Iestatījumos varat uzskaitīt noklusējuma lietotājus, ar kuriem koplietot " "receptes." -#: .\cookbook\forms.py:327 +#: .\cookbook\forms.py:337 msgid "" "You can use markdown to format this field. See the docs here" @@ -256,110 +271,218 @@ msgstr "" "Lai formatētu šo lauku, varat izmantot Markdown. Skatiet dokumentus šeit " -#: .\cookbook\forms.py:353 +#: .\cookbook\forms.py:363 msgid "Maximum number of users for this space reached." msgstr "" -#: .\cookbook\forms.py:359 +#: .\cookbook\forms.py:369 msgid "Email address already taken!" msgstr "" -#: .\cookbook\forms.py:367 +#: .\cookbook\forms.py:377 msgid "" "An email address is not required but if present the invite link will be sent " "to the user." msgstr "" -#: .\cookbook\forms.py:382 +#: .\cookbook\forms.py:392 msgid "Name already taken." msgstr "" -#: .\cookbook\forms.py:393 +#: .\cookbook\forms.py:403 msgid "Accept Terms and Privacy" msgstr "" -#: .\cookbook\forms.py:425 +#: .\cookbook\forms.py:435 msgid "" "Determines how fuzzy a search is if it uses trigram similarity matching (e." "g. low values mean more typos are ignored)." msgstr "" -#: .\cookbook\forms.py:435 +#: .\cookbook\forms.py:445 msgid "" "Select type method of search. Click here for " "full desciption of choices." msgstr "" -#: .\cookbook\forms.py:436 +#: .\cookbook\forms.py:446 msgid "" "Use fuzzy matching on units, keywords and ingredients when editing and " "importing recipes." msgstr "" -#: .\cookbook\forms.py:438 +#: .\cookbook\forms.py:448 msgid "" "Fields to search ignoring accents. Selecting this option can improve or " "degrade search quality depending on language" msgstr "" -#: .\cookbook\forms.py:440 +#: .\cookbook\forms.py:450 msgid "" "Fields to search for partial matches. (e.g. searching for 'Pie' will return " "'pie' and 'piece' and 'soapie')" msgstr "" -#: .\cookbook\forms.py:442 +#: .\cookbook\forms.py:452 msgid "" "Fields to search for beginning of word matches. (e.g. searching for 'sa' " "will return 'salad' and 'sandwich')" msgstr "" -#: .\cookbook\forms.py:444 +#: .\cookbook\forms.py:454 msgid "" "Fields to 'fuzzy' search. (e.g. searching for 'recpie' will find 'recipe'.) " "Note: this option will conflict with 'web' and 'raw' methods of search." msgstr "" -#: .\cookbook\forms.py:446 +#: .\cookbook\forms.py:456 msgid "" "Fields to full text search. Note: 'web', 'phrase', and 'raw' search methods " "only function with fulltext fields." msgstr "" -#: .\cookbook\forms.py:450 +#: .\cookbook\forms.py:460 #, fuzzy #| msgid "Search" msgid "Search Method" msgstr "Meklēt" -#: .\cookbook\forms.py:451 +#: .\cookbook\forms.py:461 msgid "Fuzzy Lookups" msgstr "" -#: .\cookbook\forms.py:452 +#: .\cookbook\forms.py:462 msgid "Ignore Accent" msgstr "" -#: .\cookbook\forms.py:453 +#: .\cookbook\forms.py:463 msgid "Partial Match" msgstr "" -#: .\cookbook\forms.py:454 +#: .\cookbook\forms.py:464 msgid "Starts Wtih" msgstr "" -#: .\cookbook\forms.py:455 +#: .\cookbook\forms.py:465 #, fuzzy #| msgid "Search" msgid "Fuzzy Search" msgstr "Meklēt" -#: .\cookbook\forms.py:456 +#: .\cookbook\forms.py:466 #, fuzzy #| msgid "Text" msgid "Full Text" msgstr "Teskts" +#: .\cookbook\forms.py:491 +msgid "" +"Users will see all items you add to your shopping list. They must add you " +"to see items on their list." +msgstr "" + +#: .\cookbook\forms.py:497 +msgid "" +"When adding a meal plan to the shopping list (manually or automatically), " +"include all related recipes." +msgstr "" + +#: .\cookbook\forms.py:498 +msgid "" +"When adding a meal plan to the shopping list (manually or automatically), " +"exclude ingredients that are on hand." +msgstr "" + +#: .\cookbook\forms.py:499 +msgid "Default number of hours to delay a shopping list entry." +msgstr "" + +#: .\cookbook\forms.py:500 +msgid "Filter shopping list to only include supermarket categories." +msgstr "" + +#: .\cookbook\forms.py:501 +msgid "Days of recent shopping list entries to display." +msgstr "" + +#: .\cookbook\forms.py:502 +msgid "Mark food 'On Hand' when checked off shopping list." +msgstr "" + +#: .\cookbook\forms.py:503 +msgid "Delimiter to use for CSV exports." +msgstr "" + +#: .\cookbook\forms.py:504 +msgid "Prefix to add when copying list to the clipboard." +msgstr "" + +#: .\cookbook\forms.py:508 +#, fuzzy +#| msgid "Shopping List" +msgid "Share Shopping List" +msgstr "Iepirkumu saraksts" + +#: .\cookbook\forms.py:509 +msgid "Autosync" +msgstr "" + +#: .\cookbook\forms.py:510 +msgid "Auto Add Meal Plan" +msgstr "" + +#: .\cookbook\forms.py:511 +msgid "Exclude On Hand" +msgstr "" + +#: .\cookbook\forms.py:512 +msgid "Include Related" +msgstr "" + +#: .\cookbook\forms.py:513 +msgid "Default Delay Hours" +msgstr "" + +#: .\cookbook\forms.py:514 +msgid "Filter to Supermarket" +msgstr "" + +#: .\cookbook\forms.py:515 +msgid "Recent Days" +msgstr "" + +#: .\cookbook\forms.py:516 +msgid "CSV Delimiter" +msgstr "" + +#: .\cookbook\forms.py:517 .\cookbook\templates\shopping_list.html:322 +msgid "List Prefix" +msgstr "Saraksta prefikss" + +#: .\cookbook\forms.py:518 +msgid "Auto On Hand" +msgstr "" + +#: .\cookbook\forms.py:528 +msgid "Reset Food Inheritance" +msgstr "" + +#: .\cookbook\forms.py:529 +msgid "Reset all food to inherit the fields configured." +msgstr "" + +#: .\cookbook\forms.py:541 +#, fuzzy +#| msgid "Food that should be replaced." +msgid "Fields on food that should be inherited by default." +msgstr "Ēdiens, kas būtu jāaizstāj." + +#: .\cookbook\forms.py:542 +#, fuzzy +#| msgid "Show recently viewed recipes on search page." +msgid "Show recipe counts on search filters" +msgstr "Parādīt nesen skatītās receptes meklēšanas lapā." + #: .\cookbook\helper\AllAuthCustomAdapter.py:36 msgid "" "In order to prevent spam, the requested email was not send. Please wait a " @@ -367,19 +490,19 @@ msgid "" msgstr "" #: .\cookbook\helper\permission_helper.py:136 -#: .\cookbook\helper\permission_helper.py:159 .\cookbook\views\views.py:149 +#: .\cookbook\helper\permission_helper.py:159 .\cookbook\views\views.py:148 msgid "You are not logged in and therefore cannot view this page!" msgstr "Jūs neesat pieteicies un tāpēc nevarat skatīt šo lapu!" #: .\cookbook\helper\permission_helper.py:140 #: .\cookbook\helper\permission_helper.py:146 #: .\cookbook\helper\permission_helper.py:171 -#: .\cookbook\helper\permission_helper.py:216 -#: .\cookbook\helper\permission_helper.py:230 -#: .\cookbook\helper\permission_helper.py:241 -#: .\cookbook\helper\permission_helper.py:252 .\cookbook\views\data.py:47 -#: .\cookbook\views\views.py:160 .\cookbook\views\views.py:167 -#: .\cookbook\views\views.py:233 +#: .\cookbook\helper\permission_helper.py:219 +#: .\cookbook\helper\permission_helper.py:233 +#: .\cookbook\helper\permission_helper.py:244 +#: .\cookbook\helper\permission_helper.py:255 .\cookbook\views\data.py:47 +#: .\cookbook\views\views.py:159 .\cookbook\views\views.py:166 +#: .\cookbook\views\views.py:232 msgid "You do not have the required permissions to view this page!" msgstr "Jums nav nepieciešamo atļauju, lai apskatītu šo lapu!" @@ -389,41 +512,42 @@ msgstr "Jums nav nepieciešamo atļauju, lai apskatītu šo lapu!" msgid "You cannot interact with this object as it is not owned by you!" msgstr "Jūs nevarat mainīt šo objektu, jo tas nepieder jums!" +#: .\cookbook\helper\recipe_search.py:473 +msgid "One of queryset or hash_key must be provided" +msgstr "" + +#: .\cookbook\helper\shopping_helper.py:54 +#, fuzzy +#| msgid "You must provide at least a recipe or a title." +msgid "You must supply a recipe or mealplan" +msgstr "Jums jānorāda vismaz recepte vai nosaukums." + +#: .\cookbook\helper\shopping_helper.py:58 +msgid "You must supply a created_by" +msgstr "" + #: .\cookbook\helper\template_helper.py:61 #: .\cookbook\helper\template_helper.py:63 msgid "Could not parse template code." msgstr "" -#: .\cookbook\integration\integration.py:126 -#: .\cookbook\templates\import.html:14 .\cookbook\templates\import.html:20 -#: .\cookbook\templates\import_response.html:7 -#: .\cookbook\templates\test.html:14 .\cookbook\templates\test.html:20 -#: .\cookbook\templates\url_import.html:27 -#: .\cookbook\templates\url_import.html:105 -#: .\cookbook\templates\url_import.html:127 -#: .\cookbook\templates\url_import.html:321 -#: .\cookbook\templates\url_import.html:609 .\cookbook\views\delete.py:89 -#: .\cookbook\views\edit.py:200 -msgid "Import" -msgstr "Importēt" - -#: .\cookbook\integration\integration.py:208 +#: .\cookbook\integration\integration.py:200 msgid "" "Importer expected a .zip file. Did you choose the correct importer type for " "your data ?" msgstr "" -#: .\cookbook\integration\integration.py:211 +#: .\cookbook\integration\integration.py:203 msgid "" "An unexpected error occurred during the import. Please make sure you have " "uploaded a valid file." msgstr "" -#: .\cookbook\integration\integration.py:216 +#: .\cookbook\integration\integration.py:208 msgid "The following recipes were ignored because they already existed:" msgstr "" -#: .\cookbook\integration\integration.py:220 +#: .\cookbook\integration\integration.py:212 #, fuzzy, python-format #| msgid "Imported new recipe!" msgid "Imported %s recipes." @@ -441,32 +565,32 @@ msgstr "Piezīme" msgid "Nutritional Information" msgstr "Informācija" -#: .\cookbook\integration\paprika.py:53 .\cookbook\templates\url_import.html:40 +#: .\cookbook\integration\paprika.py:53 .\cookbook\templates\url_import.html:42 msgid "Source" msgstr "" -#: .\cookbook\integration\safron.py:23 -#: .\cookbook\templates\include\log_cooking.html:16 -#: .\cookbook\templates\url_import.html:228 -#: .\cookbook\templates\url_import.html:459 +#: .\cookbook\integration\saffron.py:23 +#: .\cookbook\templates\include\log_cooking.html:18 +#: .\cookbook\templates\url_import.html:231 +#: .\cookbook\templates\url_import.html:462 msgid "Servings" msgstr "Porciju skaits" -#: .\cookbook\integration\safron.py:25 +#: .\cookbook\integration\saffron.py:25 msgid "Waiting time" msgstr "" -#: .\cookbook\integration\safron.py:27 +#: .\cookbook\integration\saffron.py:27 msgid "Preparation Time" msgstr "Pagatavošanas laiks" -#: .\cookbook\integration\safron.py:29 .\cookbook\templates\base.html:78 +#: .\cookbook\integration\saffron.py:29 .\cookbook\templates\base.html:78 #: .\cookbook\templates\forms\ingredients.html:7 #: .\cookbook\templates\index.html:7 msgid "Cookbook" msgstr "Pavārgrāmata" -#: .\cookbook\integration\safron.py:31 +#: .\cookbook\integration\saffron.py:31 msgid "Section" msgstr "" @@ -502,113 +626,144 @@ msgstr "Vakariņas" msgid "Other" msgstr "Cits" -#: .\cookbook\models.py:150 +#: .\cookbook\models.py:246 msgid "" "Maximum file storage for space in MB. 0 for unlimited, -1 to disable file " "upload." msgstr "" -#: .\cookbook\models.py:202 .\cookbook\templates\search.html:7 -#: .\cookbook\templates\shopping_list.html:59 +#: .\cookbook\models.py:300 .\cookbook\templates\search.html:7 +#: .\cookbook\templates\shopping_list.html:53 msgid "Search" msgstr "Meklēt" -#: .\cookbook\models.py:203 .\cookbook\templates\base.html:82 +#: .\cookbook\models.py:301 .\cookbook\templates\base.html:82 #: .\cookbook\templates\meal_plan.html:7 #: .\cookbook\templates\meal_plan_new.html:7 .\cookbook\views\delete.py:181 #: .\cookbook\views\edit.py:220 .\cookbook\views\new.py:184 msgid "Meal-Plan" msgstr "Maltīšu plāns" -#: .\cookbook\models.py:204 .\cookbook\templates\base.html:90 +#: .\cookbook\models.py:302 .\cookbook\templates\base.html:90 msgid "Books" msgstr "Grāmatas" -#: .\cookbook\models.py:212 +#: .\cookbook\models.py:310 msgid "Small" msgstr "Mazs" -#: .\cookbook\models.py:212 +#: .\cookbook\models.py:310 msgid "Large" msgstr "Liels" -#: .\cookbook\models.py:212 .\cookbook\templates\generic\new_template.html:6 +#: .\cookbook\models.py:310 .\cookbook\templates\generic\new_template.html:6 #: .\cookbook\templates\generic\new_template.html:14 msgid "New" msgstr "Jauns" -#: .\cookbook\models.py:396 +#: .\cookbook\models.py:512 msgid " is part of a recipe step and cannot be deleted" msgstr "" -#: .\cookbook\models.py:441 .\cookbook\templates\url_import.html:42 +#: .\cookbook\models.py:586 .\cookbook\templates\url_import.html:44 msgid "Text" msgstr "Teskts" -#: .\cookbook\models.py:441 +#: .\cookbook\models.py:586 msgid "Time" msgstr "Laiks" -#: .\cookbook\models.py:441 .\cookbook\templates\url_import.html:44 +#: .\cookbook\models.py:586 .\cookbook\templates\url_import.html:46 #, fuzzy #| msgid "File ID" msgid "File" msgstr "Faila ID" -#: .\cookbook\models.py:441 +#: .\cookbook\models.py:586 #: .\cookbook\templates\include\recipe_open_modal.html:7 #: .\cookbook\views\delete.py:39 .\cookbook\views\edit.py:260 #: .\cookbook\views\new.py:53 msgid "Recipe" msgstr "Recepte" -#: .\cookbook\models.py:871 .\cookbook\templates\search_info.html:28 +#: .\cookbook\models.py:1041 .\cookbook\templates\search_info.html:28 msgid "Simple" msgstr "" -#: .\cookbook\models.py:872 .\cookbook\templates\search_info.html:33 +#: .\cookbook\models.py:1042 .\cookbook\templates\search_info.html:33 msgid "Phrase" msgstr "" -#: .\cookbook\models.py:873 .\cookbook\templates\search_info.html:38 +#: .\cookbook\models.py:1043 .\cookbook\templates\search_info.html:38 msgid "Web" msgstr "" -#: .\cookbook\models.py:874 .\cookbook\templates\search_info.html:47 +#: .\cookbook\models.py:1044 .\cookbook\templates\search_info.html:47 msgid "Raw" msgstr "" -#: .\cookbook\models.py:912 +#: .\cookbook\models.py:1082 #, fuzzy #| msgid "Food" msgid "Food Alias" msgstr "Ēdiens" -#: .\cookbook\models.py:912 +#: .\cookbook\models.py:1082 #, fuzzy #| msgid "Units" msgid "Unit Alias" msgstr "Vienības" -#: .\cookbook\models.py:912 +#: .\cookbook\models.py:1082 #, fuzzy #| msgid "Keywords" msgid "Keyword Alias" msgstr "Atslēgvārdi" -#: .\cookbook\serializer.py:157 +#: .\cookbook\serializer.py:175 +msgid "A user is required" +msgstr "" + +#: .\cookbook\serializer.py:195 msgid "File uploads are not enabled for this Space." msgstr "" -#: .\cookbook\serializer.py:168 +#: .\cookbook\serializer.py:206 msgid "You have reached your file upload limit." msgstr "" +#: .\cookbook\serializer.py:962 +msgid "Existing shopping list to update" +msgstr "" + +#: .\cookbook\serializer.py:964 +msgid "" +"List of ingredient IDs from the recipe to add, if not provided all " +"ingredients will be added." +msgstr "" + +#: .\cookbook\serializer.py:965 +msgid "" +"Providing a list_recipe ID and servings of 0 will delete that shopping list." +msgstr "" + +#: .\cookbook\serializer.py:973 +msgid "Amount of food to add to the shopping list" +msgstr "" + +#: .\cookbook\serializer.py:974 +msgid "ID of unit to use for the shopping list" +msgstr "" + +#: .\cookbook\serializer.py:975 +msgid "When set to true will delete all food from active shopping lists." +msgstr "" + #: .\cookbook\tables.py:35 .\cookbook\templates\generic\edit_template.html:6 #: .\cookbook\templates\generic\edit_template.html:14 #: .\cookbook\templates\recipes_table.html:82 -#: .\cookbook\templates\shopping_list.html:40 -#: .\cookbook\templates\space.html:90 +#: .\cookbook\templates\shopping_list.html:37 +#: .\cookbook\templates\space.html:109 msgid "Edit" msgstr "Rediģēt" @@ -748,27 +903,27 @@ msgstr "Pieslēgties" msgid "Sign In" msgstr "" -#: .\cookbook\templates\account\login.html:32 +#: .\cookbook\templates\account\login.html:34 #: .\cookbook\templates\socialaccount\signup.html:8 #: .\cookbook\templates\socialaccount\signup.html:57 msgid "Sign Up" msgstr "" -#: .\cookbook\templates\account\login.html:36 -#: .\cookbook\templates\account\login.html:37 +#: .\cookbook\templates\account\login.html:39 +#: .\cookbook\templates\account\login.html:41 #: .\cookbook\templates\account\password_reset.html:29 msgid "Reset My Password" msgstr "" -#: .\cookbook\templates\account\login.html:37 +#: .\cookbook\templates\account\login.html:40 msgid "Lost your password?" msgstr "" -#: .\cookbook\templates\account\login.html:48 +#: .\cookbook\templates\account\login.html:52 msgid "Social Login" msgstr "" -#: .\cookbook\templates\account\login.html:49 +#: .\cookbook\templates\account\login.html:53 msgid "You can use any of the following providers to sign in." msgstr "" @@ -796,7 +951,7 @@ msgstr "Izmaiņas saglabātas!" #: .\cookbook\templates\account\password_change.html:12 #: .\cookbook\templates\account\password_set.html:12 -#: .\cookbook\templates\settings.html:69 +#: .\cookbook\templates\settings.html:76 #, fuzzy #| msgid "Settings" msgid "Password" @@ -921,15 +1076,21 @@ msgstr "Iepirkšanās" msgid "Keyword" msgstr "Atslēgvārds" +#: .\cookbook\templates\base.html:125 .\cookbook\views\lists.py:114 +#, fuzzy +#| msgid "Food" +msgid "Foods" +msgstr "Ēdiens" + #: .\cookbook\templates\base.html:137 #: .\cookbook\templates\forms\ingredients.html:24 -#: .\cookbook\templates\space.html:41 .\cookbook\templates\stats.html:26 -#: .\cookbook\views\lists.py:146 +#: .\cookbook\templates\space.html:47 .\cookbook\templates\stats.html:26 +#: .\cookbook\views\lists.py:131 msgid "Units" msgstr "Vienības" #: .\cookbook\templates\base.html:151 -#: .\cookbook\templates\shopping_list.html:237 +#: .\cookbook\templates\shopping_list.html:208 #: .\cookbook\templates\supermarket.html:7 msgid "Supermarket" msgstr "" @@ -940,13 +1101,13 @@ msgstr "" msgid "Supermarket Category" msgstr "Rediģēt vairākas kategorijas uzreiz" -#: .\cookbook\templates\base.html:175 .\cookbook\views\lists.py:195 +#: .\cookbook\templates\base.html:175 .\cookbook\views\lists.py:180 #, fuzzy #| msgid "Information" msgid "Automations" msgstr "Informācija" -#: .\cookbook\templates\base.html:189 .\cookbook\views\lists.py:215 +#: .\cookbook\templates\base.html:189 .\cookbook\views\lists.py:200 #, fuzzy #| msgid "File ID" msgid "Files" @@ -963,7 +1124,7 @@ msgstr "Vēsture" #: .\cookbook\templates\base.html:228 .\cookbook\templates\export.html:14 #: .\cookbook\templates\export.html:20 -#: .\cookbook\templates\shopping_list.html:358 +#: .\cookbook\templates\shopping_list.html:310 #: .\cookbook\templates\test2.html:14 .\cookbook\templates\test2.html:20 msgid "Export" msgstr "Eksportēt" @@ -973,19 +1134,19 @@ msgid "Import Recipe" msgstr "Importēt recepti" #: .\cookbook\templates\base.html:246 -#: .\cookbook\templates\shopping_list.html:195 -#: .\cookbook\templates\shopping_list.html:217 +#: .\cookbook\templates\shopping_list.html:165 +#: .\cookbook\templates\shopping_list.html:188 msgid "Create" msgstr "Izveidot" #: .\cookbook\templates\base.html:259 #: .\cookbook\templates\generic\list_template.html:14 -#: .\cookbook\templates\space.html:58 .\cookbook\templates\stats.html:43 +#: .\cookbook\templates\space.html:69 .\cookbook\templates\stats.html:43 msgid "External Recipes" msgstr "Ārējās receptes" -#: .\cookbook\templates\base.html:262 .\cookbook\templates\space.html:7 -#: .\cookbook\templates\space.html:19 +#: .\cookbook\templates\base.html:262 .\cookbook\templates\space.html:8 +#: .\cookbook\templates\space.html:20 .\cookbook\templates\space.html:150 #, fuzzy #| msgid "Settings" msgid "Space Settings" @@ -1056,11 +1217,13 @@ msgstr "Ceļam jābūt šādā formātā" #: .\cookbook\templates\forms\edit_import_recipe.html:14 #: .\cookbook\templates\generic\edit_template.html:23 #: .\cookbook\templates\generic\new_template.html:23 -#: .\cookbook\templates\include\log_cooking.html:28 -#: .\cookbook\templates\settings.html:63 .\cookbook\templates\settings.html:105 -#: .\cookbook\templates\settings.html:123 -#: .\cookbook\templates\settings.html:195 -#: .\cookbook\templates\shopping_list.html:360 +#: .\cookbook\templates\include\log_cooking.html:30 +#: .\cookbook\templates\settings.html:70 .\cookbook\templates\settings.html:112 +#: .\cookbook\templates\settings.html:130 +#: .\cookbook\templates\settings.html:202 +#: .\cookbook\templates\settings.html:213 +#: .\cookbook\templates\shopping_list.html:311 +#: .\cookbook\templates\space.html:155 msgid "Save" msgstr "Saglabāt" @@ -1175,15 +1338,22 @@ msgid "Delete original file" msgstr "Dzēst sākotnējo failu" #: .\cookbook\templates\generic\list_template.html:6 -#: .\cookbook\templates\generic\list_template.html:21 +#: .\cookbook\templates\generic\list_template.html:22 msgid "List" msgstr "Saraksts" -#: .\cookbook\templates\generic\list_template.html:34 +#: .\cookbook\templates\generic\list_template.html:33 +#: .\cookbook\templates\shopping_list.html:33 +#, fuzzy +#| msgid "Open Shopping List" +msgid "Try the new shopping list" +msgstr "Atvērt iepirkumu sarakstu" + +#: .\cookbook\templates\generic\list_template.html:45 msgid "Filter" msgstr "Filtrs" -#: .\cookbook\templates\generic\list_template.html:39 +#: .\cookbook\templates\generic\list_template.html:50 msgid "Import all" msgstr "Importēt visu" @@ -1209,19 +1379,31 @@ msgstr "Pagatavošanas žurnāls" msgid "Import Recipes" msgstr "Importēt receptes" -#: .\cookbook\templates\include\log_cooking.html:7 +#: .\cookbook\templates\import.html:14 .\cookbook\templates\import.html:20 +#: .\cookbook\templates\import_response.html:7 +#: .\cookbook\templates\test.html:14 .\cookbook\templates\test.html:20 +#: .\cookbook\templates\url_import.html:29 +#: .\cookbook\templates\url_import.html:108 +#: .\cookbook\templates\url_import.html:130 +#: .\cookbook\templates\url_import.html:324 +#: .\cookbook\templates\url_import.html:618 .\cookbook\views\delete.py:89 +#: .\cookbook\views\edit.py:200 +msgid "Import" +msgstr "Importēt" + +#: .\cookbook\templates\include\log_cooking.html:9 msgid "Log Recipe Cooking" msgstr "Saglabāt recepšu pagatavošanu žurnālā" -#: .\cookbook\templates\include\log_cooking.html:13 +#: .\cookbook\templates\include\log_cooking.html:15 msgid "All fields are optional and can be left empty." msgstr "Visi lauki nav obligāti, un tos var atstāt tukšus." -#: .\cookbook\templates\include\log_cooking.html:19 +#: .\cookbook\templates\include\log_cooking.html:21 msgid "Rating" msgstr "Vērtējums" -#: .\cookbook\templates\include\log_cooking.html:27 +#: .\cookbook\templates\include\log_cooking.html:29 #: .\cookbook\templates\include\recipe_open_modal.html:18 msgid "Close" msgstr "Aizvērt" @@ -1276,7 +1458,7 @@ msgstr "Atiestatīt meklēšanu" msgid "Last viewed" msgstr "Pēdējoreiz skatīts" -#: .\cookbook\templates\index.html:87 .\cookbook\templates\space.html:35 +#: .\cookbook\templates\index.html:87 .\cookbook\templates\space.html:37 #: .\cookbook\templates\stats.html:22 msgid "Recipes" msgstr "Receptes" @@ -1447,7 +1629,7 @@ msgid "Created by" msgstr "Izveidojis" #: .\cookbook\templates\meal_plan_entry.html:20 -#: .\cookbook\templates\shopping_list.html:261 +#: .\cookbook\templates\shopping_list.html:232 msgid "Shared with" msgstr "Kopīgots ar" @@ -1564,17 +1746,17 @@ msgstr "Komentēt" #: .\cookbook\templates\recipes_table.html:19 #: .\cookbook\templates\recipes_table.html:23 -#: .\cookbook\templates\url_import.html:444 +#: .\cookbook\templates\url_import.html:447 msgid "Recipe Image" msgstr "Receptes attēls" #: .\cookbook\templates\recipes_table.html:51 -#: .\cookbook\templates\url_import.html:449 +#: .\cookbook\templates\url_import.html:452 msgid "Preparation time ca." msgstr "Pagatavošanas laiks apm." #: .\cookbook\templates\recipes_table.html:57 -#: .\cookbook\templates\url_import.html:454 +#: .\cookbook\templates\url_import.html:457 msgid "Waiting time ca." msgstr "Gaidīšanas laiks apm." @@ -1592,7 +1774,7 @@ msgstr "Recepšu Sākums" #: .\cookbook\templates\search_info.html:5 #: .\cookbook\templates\search_info.html:9 -#: .\cookbook\templates\settings.html:165 +#: .\cookbook\templates\settings.html:172 #, fuzzy #| msgid "Search String" msgid "Search Settings" @@ -1775,42 +1957,48 @@ msgstr "Iestatījumi" msgid "Search-Settings" msgstr "Meklēšanas virkne" -#: .\cookbook\templates\settings.html:58 +#: .\cookbook\templates\settings.html:56 +#, fuzzy +#| msgid "Search String" +msgid "Shopping-Settings" +msgstr "Meklēšanas virkne" + +#: .\cookbook\templates\settings.html:65 #, fuzzy #| msgid "Settings" msgid "Name Settings" msgstr "Iestatījumi" -#: .\cookbook\templates\settings.html:66 +#: .\cookbook\templates\settings.html:73 #, fuzzy #| msgid "Settings" msgid "Account Settings" msgstr "Iestatījumi" -#: .\cookbook\templates\settings.html:68 +#: .\cookbook\templates\settings.html:75 #, fuzzy #| msgid "Settings" msgid "Emails" msgstr "Iestatījumi" -#: .\cookbook\templates\settings.html:71 +#: .\cookbook\templates\settings.html:78 #: .\cookbook\templates\socialaccount\connections.html:11 msgid "Social" msgstr "" -#: .\cookbook\templates\settings.html:84 +#: .\cookbook\templates\settings.html:91 msgid "Language" msgstr "Valoda" -#: .\cookbook\templates\settings.html:114 +#: .\cookbook\templates\settings.html:121 msgid "Style" msgstr "Stils" -#: .\cookbook\templates\settings.html:135 +#: .\cookbook\templates\settings.html:142 msgid "API Token" msgstr "API Tokens" -#: .\cookbook\templates\settings.html:136 +#: .\cookbook\templates\settings.html:143 msgid "" "You can use both basic authentication and token based authentication to " "access the REST API." @@ -1818,7 +2006,7 @@ msgstr "" "Lai piekļūtu REST API, varat izmantot gan pamata autentifikāciju, gan tokena " "autentifikāciju." -#: .\cookbook\templates\settings.html:153 +#: .\cookbook\templates\settings.html:160 msgid "" "Use the token as an Authorization header prefixed by the word token as shown " "in the following examples:" @@ -1826,62 +2014,68 @@ msgstr "" "Izmantojiet token, kā Authorization header, kas pievienota vārdam token, kā " "parādīts šajos piemēros:" -#: .\cookbook\templates\settings.html:155 +#: .\cookbook\templates\settings.html:162 msgid "or" msgstr "vai" -#: .\cookbook\templates\settings.html:166 +#: .\cookbook\templates\settings.html:173 msgid "" "There are many options to configure the search depending on your personal " "preferences." msgstr "" -#: .\cookbook\templates\settings.html:167 +#: .\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 "" -#: .\cookbook\templates\settings.html:168 +#: .\cookbook\templates\settings.html:175 msgid "" "If you do want to configure the search you can read about the different " "options here." msgstr "" -#: .\cookbook\templates\settings.html:173 +#: .\cookbook\templates\settings.html:180 msgid "Fuzzy" msgstr "" -#: .\cookbook\templates\settings.html:174 +#: .\cookbook\templates\settings.html:181 msgid "" "Find what you need even if your search or the recipe contains typos. Might " "return more results than needed to make sure you find what you are looking " "for." msgstr "" -#: .\cookbook\templates\settings.html:175 +#: .\cookbook\templates\settings.html:182 msgid "This is the default behavior" msgstr "" -#: .\cookbook\templates\settings.html:176 -#: .\cookbook\templates\settings.html:184 +#: .\cookbook\templates\settings.html:183 +#: .\cookbook\templates\settings.html:191 msgid "Apply" msgstr "" -#: .\cookbook\templates\settings.html:181 +#: .\cookbook\templates\settings.html:188 msgid "Precise" msgstr "" -#: .\cookbook\templates\settings.html:182 +#: .\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 "" -#: .\cookbook\templates\settings.html:183 +#: .\cookbook\templates\settings.html:190 msgid "Perfect for large Databases" msgstr "" +#: .\cookbook\templates\settings.html:207 +#, fuzzy +#| msgid "Shopping List" +msgid "Shopping Settings" +msgstr "Iepirkumu saraksts" + #: .\cookbook\templates\setup.html:6 .\cookbook\templates\system.html:5 msgid "Cookbook Setup" msgstr "Pavārgrāmatu iestatīšana" @@ -1901,83 +2095,73 @@ msgstr "" msgid "Create Superuser account" msgstr "Izveidojiet superlietotāja kontu" -#: .\cookbook\templates\shopping_list.html:7 +#: .\cookbook\templates\shopping_list.html:8 #: .\cookbook\templates\shopping_list.html:29 -#: .\cookbook\templates\shopping_list.html:721 +#: .\cookbook\templates\shopping_list.html:663 msgid "Shopping List" msgstr "Iepirkumu saraksts" -#: .\cookbook\templates\shopping_list.html:34 -#, fuzzy -#| msgid "Open Shopping List" -msgid "Try the new shopping list" -msgstr "Atvērt iepirkumu sarakstu" - -#: .\cookbook\templates\shopping_list.html:63 +#: .\cookbook\templates\shopping_list.html:55 msgid "Search Recipe" msgstr "Meklēt recepti" -#: .\cookbook\templates\shopping_list.html:86 +#: .\cookbook\templates\shopping_list.html:72 msgid "Shopping Recipes" msgstr "Iepirkšanās receptes" -#: .\cookbook\templates\shopping_list.html:90 +#: .\cookbook\templates\shopping_list.html:74 msgid "No recipes selected" msgstr "Nav izvēlēta neviena recepte" -#: .\cookbook\templates\shopping_list.html:157 +#: .\cookbook\templates\shopping_list.html:131 msgid "Entry Mode" msgstr "" -#: .\cookbook\templates\shopping_list.html:165 +#: .\cookbook\templates\shopping_list.html:139 msgid "Add Entry" msgstr "" -#: .\cookbook\templates\shopping_list.html:181 +#: .\cookbook\templates\shopping_list.html:152 msgid "Amount" msgstr "Summa" -#: .\cookbook\templates\shopping_list.html:194 +#: .\cookbook\templates\shopping_list.html:164 msgid "Select Unit" msgstr "Atlasiet vienību" -#: .\cookbook\templates\shopping_list.html:196 -#: .\cookbook\templates\shopping_list.html:218 -#: .\cookbook\templates\shopping_list.html:248 -#: .\cookbook\templates\shopping_list.html:272 -#: .\cookbook\templates\url_import.html:500 -#: .\cookbook\templates\url_import.html:532 +#: .\cookbook\templates\shopping_list.html:166 +#: .\cookbook\templates\shopping_list.html:189 +#: .\cookbook\templates\shopping_list.html:219 +#: .\cookbook\templates\shopping_list.html:243 +#: .\cookbook\templates\url_import.html:505 +#: .\cookbook\templates\url_import.html:537 msgid "Select" msgstr "Atlasīt" -#: .\cookbook\templates\shopping_list.html:216 +#: .\cookbook\templates\shopping_list.html:187 msgid "Select Food" msgstr "Atlasīt ēdienu" -#: .\cookbook\templates\shopping_list.html:247 +#: .\cookbook\templates\shopping_list.html:218 msgid "Select Supermarket" msgstr "" -#: .\cookbook\templates\shopping_list.html:271 +#: .\cookbook\templates\shopping_list.html:242 msgid "Select User" msgstr "Atlasīt lietotāju" -#: .\cookbook\templates\shopping_list.html:290 +#: .\cookbook\templates\shopping_list.html:258 msgid "Finished" msgstr "Pabeigts" -#: .\cookbook\templates\shopping_list.html:303 +#: .\cookbook\templates\shopping_list.html:267 msgid "You are offline, shopping list might not syncronize." msgstr "Jūs esat bezsaistē. Iepirkumu saraksts netiek sinhronizēts." -#: .\cookbook\templates\shopping_list.html:368 +#: .\cookbook\templates\shopping_list.html:318 msgid "Copy/Export" msgstr "Kopēt/eksportēt" -#: .\cookbook\templates\shopping_list.html:372 -msgid "List Prefix" -msgstr "Saraksta prefikss" - #: .\cookbook\templates\socialaccount\connections.html:4 #: .\cookbook\templates\socialaccount\connections.html:15 msgid "Account Connections" @@ -2027,88 +2211,88 @@ msgstr "" msgid "Sign in using" msgstr "" -#: .\cookbook\templates\space.html:23 +#: .\cookbook\templates\space.html:25 msgid "Space:" msgstr "" -#: .\cookbook\templates\space.html:24 +#: .\cookbook\templates\space.html:26 msgid "Manage Subscription" msgstr "" -#: .\cookbook\templates\space.html:32 .\cookbook\templates\stats.html:19 +#: .\cookbook\templates\space.html:34 .\cookbook\templates\stats.html:19 msgid "Number of objects" msgstr "Objektu skaits" -#: .\cookbook\templates\space.html:45 .\cookbook\templates\stats.html:30 +#: .\cookbook\templates\space.html:54 .\cookbook\templates\stats.html:30 msgid "Recipe Imports" msgstr "Recepšu imports" -#: .\cookbook\templates\space.html:53 .\cookbook\templates\stats.html:38 +#: .\cookbook\templates\space.html:62 .\cookbook\templates\stats.html:38 msgid "Objects stats" msgstr "Objektu statistika" -#: .\cookbook\templates\space.html:56 .\cookbook\templates\stats.html:41 +#: .\cookbook\templates\space.html:65 .\cookbook\templates\stats.html:41 msgid "Recipes without Keywords" msgstr "Receptes bez atslēgas vārdiem" -#: .\cookbook\templates\space.html:60 .\cookbook\templates\stats.html:45 +#: .\cookbook\templates\space.html:73 .\cookbook\templates\stats.html:45 msgid "Internal Recipes" msgstr "Iekšējās receptes" -#: .\cookbook\templates\space.html:73 +#: .\cookbook\templates\space.html:89 msgid "Members" msgstr "" -#: .\cookbook\templates\space.html:77 +#: .\cookbook\templates\space.html:95 #, fuzzy #| msgid "Invite Links" msgid "Invite User" msgstr "Uzaicinājuma saites" -#: .\cookbook\templates\space.html:88 +#: .\cookbook\templates\space.html:107 msgid "User" msgstr "" -#: .\cookbook\templates\space.html:89 +#: .\cookbook\templates\space.html:108 msgid "Groups" msgstr "" -#: .\cookbook\templates\space.html:105 +#: .\cookbook\templates\space.html:119 #, fuzzy #| msgid "Admin" msgid "admin" msgstr "Administrators" -#: .\cookbook\templates\space.html:106 +#: .\cookbook\templates\space.html:120 msgid "user" msgstr "" -#: .\cookbook\templates\space.html:107 +#: .\cookbook\templates\space.html:121 msgid "guest" msgstr "" -#: .\cookbook\templates\space.html:108 +#: .\cookbook\templates\space.html:122 msgid "remove" msgstr "" -#: .\cookbook\templates\space.html:112 +#: .\cookbook\templates\space.html:126 msgid "Update" msgstr "" -#: .\cookbook\templates\space.html:116 +#: .\cookbook\templates\space.html:130 #, fuzzy #| msgid "You cannot edit this storage!" msgid "You cannot edit yourself." msgstr "Jūs nevarat rediģēt šo krātuvi!" -#: .\cookbook\templates\space.html:123 +#: .\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 "Šajā grāmatā vēl nav receptes." -#: .\cookbook\templates\space.html:130 .\cookbook\templates\system.html:21 -#: .\cookbook\views\lists.py:100 +#: .\cookbook\templates\space.html:143 .\cookbook\templates\system.html:21 +#: .\cookbook\views\lists.py:85 msgid "Invite Links" msgstr "Uzaicinājuma saites" @@ -2251,186 +2435,186 @@ msgstr "" " funkcijas darbojas tikai ar Postgres datu bāzēm.\n" " " -#: .\cookbook\templates\url_import.html:6 +#: .\cookbook\templates\url_import.html:8 msgid "URL Import" msgstr "URL importēšana" -#: .\cookbook\templates\url_import.html:31 +#: .\cookbook\templates\url_import.html:33 msgid "Drag me to your bookmarks to import recipes from anywhere" msgstr "" -#: .\cookbook\templates\url_import.html:32 +#: .\cookbook\templates\url_import.html:34 #, fuzzy #| msgid "Bookmark saved!" msgid "Bookmark Me!" msgstr "Grāmatzīme saglabāta!" -#: .\cookbook\templates\url_import.html:36 +#: .\cookbook\templates\url_import.html:38 msgid "URL" msgstr "" -#: .\cookbook\templates\url_import.html:38 +#: .\cookbook\templates\url_import.html:40 msgid "App" msgstr "" -#: .\cookbook\templates\url_import.html:62 +#: .\cookbook\templates\url_import.html:64 msgid "Enter website URL" msgstr "Ievadiet vietnes URL" -#: .\cookbook\templates\url_import.html:101 +#: .\cookbook\templates\url_import.html:104 msgid "Select recipe files to import or drop them here..." msgstr "" -#: .\cookbook\templates\url_import.html:122 +#: .\cookbook\templates\url_import.html:125 msgid "Paste json or html source here to load recipe." msgstr "" -#: .\cookbook\templates\url_import.html:150 +#: .\cookbook\templates\url_import.html:153 #, fuzzy #| msgid "View Recipe" msgid "Preview Recipe Data" msgstr "Skatīt recepti" -#: .\cookbook\templates\url_import.html:151 +#: .\cookbook\templates\url_import.html:154 msgid "Drag recipe attributes from the right into the appropriate box below." msgstr "" -#: .\cookbook\templates\url_import.html:160 -#: .\cookbook\templates\url_import.html:177 -#: .\cookbook\templates\url_import.html:194 -#: .\cookbook\templates\url_import.html:213 -#: .\cookbook\templates\url_import.html:231 -#: .\cookbook\templates\url_import.html:246 -#: .\cookbook\templates\url_import.html:261 -#: .\cookbook\templates\url_import.html:277 -#: .\cookbook\templates\url_import.html:304 -#: .\cookbook\templates\url_import.html:355 +#: .\cookbook\templates\url_import.html:163 +#: .\cookbook\templates\url_import.html:180 +#: .\cookbook\templates\url_import.html:197 +#: .\cookbook\templates\url_import.html:216 +#: .\cookbook\templates\url_import.html:234 +#: .\cookbook\templates\url_import.html:249 +#: .\cookbook\templates\url_import.html:264 +#: .\cookbook\templates\url_import.html:280 +#: .\cookbook\templates\url_import.html:307 +#: .\cookbook\templates\url_import.html:358 msgid "Clear Contents" msgstr "" -#: .\cookbook\templates\url_import.html:162 +#: .\cookbook\templates\url_import.html:165 msgid "Text dragged here will be appended to the name." msgstr "" -#: .\cookbook\templates\url_import.html:175 +#: .\cookbook\templates\url_import.html:178 msgid "Description" msgstr "" -#: .\cookbook\templates\url_import.html:179 +#: .\cookbook\templates\url_import.html:182 msgid "Text dragged here will be appended to the description." msgstr "" -#: .\cookbook\templates\url_import.html:196 +#: .\cookbook\templates\url_import.html:199 msgid "Keywords dragged here will be appended to current list" msgstr "" -#: .\cookbook\templates\url_import.html:211 +#: .\cookbook\templates\url_import.html:214 msgid "Image" msgstr "" -#: .\cookbook\templates\url_import.html:243 +#: .\cookbook\templates\url_import.html:246 #, fuzzy #| msgid "Preparation Time" msgid "Prep Time" msgstr "Pagatavošanas laiks" -#: .\cookbook\templates\url_import.html:258 +#: .\cookbook\templates\url_import.html:261 #, fuzzy #| msgid "Time" msgid "Cook Time" msgstr "Laiks" -#: .\cookbook\templates\url_import.html:279 +#: .\cookbook\templates\url_import.html:282 msgid "Ingredients dragged here will be appended to current list." msgstr "" -#: .\cookbook\templates\url_import.html:301 -#: .\cookbook\templates\url_import.html:572 +#: .\cookbook\templates\url_import.html:304 +#: .\cookbook\templates\url_import.html:579 msgid "Instructions" msgstr "Instrukcijas" -#: .\cookbook\templates\url_import.html:306 +#: .\cookbook\templates\url_import.html:309 msgid "" "Recipe instructions dragged here will be appended to current instructions." msgstr "" -#: .\cookbook\templates\url_import.html:329 +#: .\cookbook\templates\url_import.html:332 #, fuzzy #| msgid "Discovered Recipes" msgid "Discovered Attributes" msgstr "Atrastās receptes" -#: .\cookbook\templates\url_import.html:331 +#: .\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 "" -#: .\cookbook\templates\url_import.html:348 +#: .\cookbook\templates\url_import.html:351 #, fuzzy #| msgid "Show as header" msgid "Show Blank Field" msgstr "Rādīt kā galveni" -#: .\cookbook\templates\url_import.html:353 +#: .\cookbook\templates\url_import.html:356 msgid "Blank Field" msgstr "" -#: .\cookbook\templates\url_import.html:357 +#: .\cookbook\templates\url_import.html:360 msgid "Items dragged to Blank Field will be appended." msgstr "" -#: .\cookbook\templates\url_import.html:404 +#: .\cookbook\templates\url_import.html:407 #, fuzzy #| msgid "Delete Step" msgid "Delete Text" msgstr "Dzēst soli" -#: .\cookbook\templates\url_import.html:417 +#: .\cookbook\templates\url_import.html:420 #, fuzzy #| msgid "Delete Recipe" msgid "Delete image" msgstr "Dzēst recepti" -#: .\cookbook\templates\url_import.html:433 +#: .\cookbook\templates\url_import.html:436 msgid "Recipe Name" msgstr "Receptes nosaukums" -#: .\cookbook\templates\url_import.html:437 +#: .\cookbook\templates\url_import.html:440 #, fuzzy #| msgid "Recipe Markup Specification" msgid "Recipe Description" msgstr "Recepšu Markup specifikācija" -#: .\cookbook\templates\url_import.html:499 -#: .\cookbook\templates\url_import.html:531 -#: .\cookbook\templates\url_import.html:587 +#: .\cookbook\templates\url_import.html:504 +#: .\cookbook\templates\url_import.html:536 +#: .\cookbook\templates\url_import.html:596 msgid "Select one" msgstr "Izvēlies vienu" -#: .\cookbook\templates\url_import.html:547 +#: .\cookbook\templates\url_import.html:554 msgid "Note" msgstr "Piezīme" -#: .\cookbook\templates\url_import.html:588 +#: .\cookbook\templates\url_import.html:597 #, fuzzy #| msgid "All Keywords" msgid "Add Keyword" msgstr "Visi atslēgvārdi" -#: .\cookbook\templates\url_import.html:601 +#: .\cookbook\templates\url_import.html:610 msgid "All Keywords" msgstr "Visi atslēgvārdi" -#: .\cookbook\templates\url_import.html:604 +#: .\cookbook\templates\url_import.html:613 msgid "Import all keywords, not only the ones already existing." msgstr "Importējiet visus atslēgvārdus, ne tikai jau esošos." -#: .\cookbook\templates\url_import.html:631 +#: .\cookbook\templates\url_import.html:640 msgid "Information" msgstr "Informācija" -#: .\cookbook\templates\url_import.html:633 +#: .\cookbook\templates\url_import.html:642 msgid "" " Only websites containing ld+json or microdata information can currently\n" " be imported. Most big recipe pages " @@ -2449,106 +2633,191 @@ msgstr "" "nekautrējieties ievietot piemēru\n" " Github." -#: .\cookbook\templates\url_import.html:641 +#: .\cookbook\templates\url_import.html:650 msgid "Google ld+json Info" msgstr "Google ld+json informācija" -#: .\cookbook\templates\url_import.html:644 +#: .\cookbook\templates\url_import.html:653 msgid "GitHub Issues" msgstr "GitHub Issues" -#: .\cookbook\templates\url_import.html:646 +#: .\cookbook\templates\url_import.html:655 msgid "Recipe Markup Specification" msgstr "Recepšu Markup specifikācija" -#: .\cookbook\views\api.py:83 .\cookbook\views\api.py:132 +#: .\cookbook\views\api.py:88 .\cookbook\views\api.py:170 #, fuzzy #| msgid "Parameter filter_list incorrectly formatted" msgid "Parameter updated_at incorrectly formatted" msgstr "Parametrs filter_list ir nepareizi formatēts" -#: .\cookbook\views\api.py:152 +#: .\cookbook\views\api.py:190 .\cookbook\views\api.py:291 #, python-brace-format msgid "No {self.basename} with id {pk} exists" msgstr "" -#: .\cookbook\views\api.py:156 +#: .\cookbook\views\api.py:194 msgid "Cannot merge with the same object!" msgstr "" -#: .\cookbook\views\api.py:163 +#: .\cookbook\views\api.py:201 #, python-brace-format msgid "No {self.basename} with id {target} exists" msgstr "" -#: .\cookbook\views\api.py:168 +#: .\cookbook\views\api.py:206 msgid "Cannot merge with child object!" msgstr "" -#: .\cookbook\views\api.py:201 +#: .\cookbook\views\api.py:239 #, python-brace-format msgid "{source.name} was merged successfully with {target.name}" msgstr "" -#: .\cookbook\views\api.py:205 +#: .\cookbook\views\api.py:244 #, python-brace-format msgid "An error occurred attempting to merge {source.name} with {target.name}" msgstr "" -#: .\cookbook\views\api.py:249 -#, python-brace-format -msgid "No {self.basename} with id {child} exists" -msgstr "" - -#: .\cookbook\views\api.py:258 +#: .\cookbook\views\api.py:300 #, python-brace-format msgid "{child.name} was moved successfully to the root." msgstr "" -#: .\cookbook\views\api.py:261 .\cookbook\views\api.py:279 +#: .\cookbook\views\api.py:303 .\cookbook\views\api.py:321 msgid "An error occurred attempting to move " msgstr "" -#: .\cookbook\views\api.py:264 +#: .\cookbook\views\api.py:306 msgid "Cannot move an object to itself!" msgstr "" -#: .\cookbook\views\api.py:270 +#: .\cookbook\views\api.py:312 #, python-brace-format msgid "No {self.basename} with id {parent} exists" msgstr "" -#: .\cookbook\views\api.py:276 +#: .\cookbook\views\api.py:318 #, python-brace-format msgid "{child.name} was moved successfully to parent {parent.name}" msgstr "" -#: .\cookbook\views\api.py:723 .\cookbook\views\data.py:42 +#: .\cookbook\views\api.py:470 +#, python-brace-format +msgid "{obj.name} was removed from the shopping list." +msgstr "" + +#: .\cookbook\views\api.py:475 .\cookbook\views\api.py:726 +#, python-brace-format +msgid "{obj.name} was added to the shopping list." +msgstr "" + +#: .\cookbook\views\api.py:587 +msgid "ID of recipe a step is part of. For multiple repeat parameter." +msgstr "" + +#: .\cookbook\views\api.py:588 +msgid "Query string matched (fuzzy) against object name." +msgstr "" + +#: .\cookbook\views\api.py:631 +msgid "" +"Query string matched (fuzzy) against recipe name. In the future also " +"fulltext search." +msgstr "" + +#: .\cookbook\views\api.py:632 +msgid "ID of keyword a recipe should have. For multiple repeat parameter." +msgstr "" + +#: .\cookbook\views\api.py:633 +msgid "ID of food a recipe should have. For multiple repeat parameter." +msgstr "" + +#: .\cookbook\views\api.py:634 +msgid "ID of unit a recipe should have." +msgstr "" + +#: .\cookbook\views\api.py:635 +msgid "Rating a recipe should have. [0 - 5]" +msgstr "" + +#: .\cookbook\views\api.py:636 +msgid "ID of book a recipe should be in. For multiple repeat parameter." +msgstr "" + +#: .\cookbook\views\api.py:637 +msgid "" +"If recipe should have all (AND=false) or any (OR=true) of the " +"provided keywords." +msgstr "" + +#: .\cookbook\views\api.py:638 +msgid "" +"If recipe should have all (AND=false) or any (OR=true) of the " +"provided foods." +msgstr "" + +#: .\cookbook\views\api.py:639 +msgid "" +"If recipe should be in all (AND=false) or any (OR=true) of the " +"provided books." +msgstr "" + +#: .\cookbook\views\api.py:640 +msgid "If only internal recipes should be returned. [true/false]" +msgstr "" + +#: .\cookbook\views\api.py:641 +msgid "Returns the results in randomized order. [true/false]" +msgstr "" + +#: .\cookbook\views\api.py:642 +msgid "Returns new results first in search results. [true/false]" +msgstr "" + +#: .\cookbook\views\api.py:768 +msgid "" +"Returns the shopping list entry with a primary key of id. Multiple values " +"allowed." +msgstr "" + +#: .\cookbook\views\api.py:771 +msgid "" +"Filter shopping list entries on checked. [true, false, both, recent]
- recent includes unchecked items and recently completed items." +msgstr "" + +#: .\cookbook\views\api.py:773 +msgid "Returns the shopping list entries sorted by supermarket category order." +msgstr "" + +#: .\cookbook\views\api.py:922 .\cookbook\views\data.py:42 #: .\cookbook\views\edit.py:129 .\cookbook\views\new.py:95 msgid "This feature is not yet available in the hosted version of tandoor!" msgstr "" -#: .\cookbook\views\api.py:745 +#: .\cookbook\views\api.py:944 msgid "Sync successful!" msgstr "Sinhronizācija ir veiksmīga!" -#: .\cookbook\views\api.py:750 +#: .\cookbook\views\api.py:949 msgid "Error synchronizing with Storage" msgstr "Sinhronizējot ar krātuvi, radās kļūda" -#: .\cookbook\views\api.py:828 +#: .\cookbook\views\api.py:1028 msgid "Nothing to do." msgstr "" -#: .\cookbook\views\api.py:843 +#: .\cookbook\views\api.py:1043 msgid "The requested site provided malformed data and cannot be read." msgstr "Pieprasītā vietne sniedza nepareizus datus, kurus nevar nolasīt." -#: .\cookbook\views\api.py:850 +#: .\cookbook\views\api.py:1050 msgid "The requested page could not be found." msgstr "Pieprasīto lapu nevarēja atrast." -#: .\cookbook\views\api.py:859 +#: .\cookbook\views\api.py:1068 msgid "" "The requested site does not provide any recognized data format to import the " "recipe from." @@ -2556,24 +2825,28 @@ msgstr "" "Pieprasītajā vietnē nav norādīts atzīts datu formāts, no kura varētu " "importēt recepti." -#: .\cookbook\views\api.py:873 +#: .\cookbook\views\api.py:1082 +msgid "Connection Refused." +msgstr "" + +#: .\cookbook\views\api.py:1091 #, fuzzy #| msgid "The requested page could not be found." msgid "No useable data could be found." msgstr "Pieprasīto lapu nevarēja atrast." -#: .\cookbook\views\api.py:889 +#: .\cookbook\views\api.py:1107 msgid "I couldn't find anything to do." msgstr "" #: .\cookbook\views\data.py:34 .\cookbook\views\data.py:129 -#: .\cookbook\views\edit.py:49 .\cookbook\views\import_export.py:73 +#: .\cookbook\views\edit.py:49 .\cookbook\views\import_export.py:80 #: .\cookbook\views\new.py:33 msgid "You have reached the maximum number of recipes for your space." msgstr "" #: .\cookbook\views\data.py:38 .\cookbook\views\data.py:133 -#: .\cookbook\views\edit.py:53 .\cookbook\views\import_export.py:77 +#: .\cookbook\views\edit.py:53 .\cookbook\views\import_export.py:84 #: .\cookbook\views\new.py:37 msgid "You have more users than allowed in your space." msgstr "" @@ -2590,7 +2863,7 @@ msgstr[2] "Partijas rediģēšana pabeigta. %(count)d receptes tika atjaunināta msgid "Monitor" msgstr "Uzraudzīt" -#: .\cookbook\views\delete.py:125 .\cookbook\views\lists.py:86 +#: .\cookbook\views\delete.py:125 .\cookbook\views\lists.py:71 #: .\cookbook\views\new.py:101 msgid "Storage Backend" msgstr "Krātuves aizmugursistēma" @@ -2610,7 +2883,7 @@ msgstr "Recepšu grāmata" msgid "Bookmarks" msgstr "Grāmatzīmes" -#: .\cookbook\views\delete.py:192 .\cookbook\views\new.py:235 +#: .\cookbook\views\delete.py:192 .\cookbook\views\new.py:238 msgid "Invite Link" msgstr "Uzaicinājuma saite" @@ -2634,42 +2907,46 @@ msgstr "Izmaiņas saglabātas!" msgid "Error saving changes!" msgstr "Saglabājot izmaiņas, radās kļūda!" -#: .\cookbook\views\import_export.py:99 +#: .\cookbook\views\import_export.py:106 msgid "Importing is not implemented for this provider" msgstr "" -#: .\cookbook\views\import_export.py:121 +#: .\cookbook\views\import_export.py:127 +msgid "" +"The PDF Exporter is not enabled on this instance as it is still in an " +"experimental state." +msgstr "" + +#: .\cookbook\views\import_export.py:132 msgid "Exporting is not implemented for this provider" msgstr "" -#: .\cookbook\views\lists.py:26 +#: .\cookbook\views\lists.py:25 msgid "Import Log" msgstr "Importēšanas žurnāls" -#: .\cookbook\views\lists.py:39 +#: .\cookbook\views\lists.py:38 msgid "Discovery" msgstr "Atklāšana" -#: .\cookbook\views\lists.py:69 +#: .\cookbook\views\lists.py:54 msgid "Shopping Lists" msgstr "Iepirkšanās saraksti" -#: .\cookbook\views\lists.py:129 -#, fuzzy -#| msgid "Food" -msgid "Foods" -msgstr "Ēdiens" - -#: .\cookbook\views\lists.py:163 +#: .\cookbook\views\lists.py:148 msgid "Supermarkets" msgstr "" -#: .\cookbook\views\lists.py:179 +#: .\cookbook\views\lists.py:164 #, fuzzy #| msgid "Shopping Recipes" msgid "Shopping Categories" msgstr "Iepirkšanās receptes" +#: .\cookbook\views\lists.py:217 +msgid "Steps" +msgstr "Soļi" + #: .\cookbook\views\lists.py:232 #, fuzzy #| msgid "Shopping List" @@ -2684,87 +2961,87 @@ msgstr "Importēta jauna recepte!" msgid "There was an error importing this recipe!" msgstr "Importējot šo recepti, radās kļūda!" -#: .\cookbook\views\new.py:209 +#: .\cookbook\views\new.py:212 msgid "Hello" msgstr "" -#: .\cookbook\views\new.py:209 +#: .\cookbook\views\new.py:212 msgid "You have been invited by " msgstr "" -#: .\cookbook\views\new.py:210 +#: .\cookbook\views\new.py:213 msgid " to join their Tandoor Recipes space " msgstr "" -#: .\cookbook\views\new.py:211 +#: .\cookbook\views\new.py:214 msgid "Click the following link to activate your account: " msgstr "" -#: .\cookbook\views\new.py:212 +#: .\cookbook\views\new.py:215 msgid "" "If the link does not work use the following code to manually join the space: " msgstr "" -#: .\cookbook\views\new.py:213 +#: .\cookbook\views\new.py:216 msgid "The invitation is valid until " msgstr "" -#: .\cookbook\views\new.py:214 +#: .\cookbook\views\new.py:217 msgid "" "Tandoor Recipes is an Open Source recipe manager. Check it out on GitHub " msgstr "" -#: .\cookbook\views\new.py:217 +#: .\cookbook\views\new.py:220 msgid "Tandoor Recipes Invite" msgstr "" -#: .\cookbook\views\new.py:224 +#: .\cookbook\views\new.py:227 msgid "Invite link successfully send to user." msgstr "" -#: .\cookbook\views\new.py:227 +#: .\cookbook\views\new.py:230 msgid "" "You have send to many emails, please share the link manually or wait a few " "hours." msgstr "" -#: .\cookbook\views\new.py:229 +#: .\cookbook\views\new.py:232 msgid "Email to user could not be send, please share link manually." msgstr "" -#: .\cookbook\views\views.py:127 +#: .\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 "" -#: .\cookbook\views\views.py:175 +#: .\cookbook\views\views.py:174 msgid "You do not have the required permissions to perform this action!" msgstr "Jums nav nepieciešamo atļauju, lai veiktu šo darbību!" -#: .\cookbook\views\views.py:186 +#: .\cookbook\views\views.py:185 msgid "Comment saved!" msgstr "Komentārs saglabāts!" -#: .\cookbook\views\views.py:277 +#: .\cookbook\views\views.py:276 msgid "This feature is not available in the demo version!" msgstr "" -#: .\cookbook\views\views.py:340 +#: .\cookbook\views\views.py:335 msgid "You must select at least one field to search!" msgstr "" -#: .\cookbook\views\views.py:345 +#: .\cookbook\views\views.py:340 msgid "" "To use this search method you must select at least one full text search " "field!" msgstr "" -#: .\cookbook\views\views.py:349 +#: .\cookbook\views\views.py:344 msgid "Fuzzy search is not compatible with this search method!" msgstr "" -#: .\cookbook\views\views.py:452 +#: .\cookbook\views\views.py:470 msgid "" "The setup page can only be used to create the first user! If you have " "forgotten your superuser credentials please consult the django documentation " @@ -2774,39 +3051,39 @@ msgstr "" "aizmirsis sava superlietotāja informāciju, lūdzu, skatiet Django " "dokumentāciju par paroļu atiestatīšanu." -#: .\cookbook\views\views.py:459 +#: .\cookbook\views\views.py:477 msgid "Passwords dont match!" msgstr "Paroles nesakrīt!" -#: .\cookbook\views\views.py:475 +#: .\cookbook\views\views.py:493 msgid "User has been created, please login!" msgstr "Lietotājs ir izveidots, lūdzu, piesakieties!" -#: .\cookbook\views\views.py:491 +#: .\cookbook\views\views.py:509 msgid "Malformed Invite Link supplied!" msgstr "Nepareiza uzaicinājuma saite!" -#: .\cookbook\views\views.py:498 +#: .\cookbook\views\views.py:516 #, 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 "Jūs neesat pieteicies un tāpēc nevarat skatīt šo lapu!" -#: .\cookbook\views\views.py:509 +#: .\cookbook\views\views.py:527 msgid "Successfully joined space." msgstr "" -#: .\cookbook\views\views.py:515 +#: .\cookbook\views\views.py:533 msgid "Invite Link not valid or already used!" msgstr "Uzaicinājuma saite nav derīga vai jau izmantota!" -#: .\cookbook\views\views.py:579 +#: .\cookbook\views\views.py:614 msgid "" "Reporting share links is not enabled for this instance. Please notify the " "page administrator to report problems." msgstr "" -#: .\cookbook\views\views.py:585 +#: .\cookbook\views\views.py:620 msgid "" "Recipe sharing link has been disabled! For additional information please " "contact the page administrator." @@ -2833,9 +3110,6 @@ msgstr "" #~ msgid "Old Food" #~ msgstr "Vecais ēdiens" -#~ msgid "Food that should be replaced." -#~ msgstr "Ēdiens, kas būtu jāaizstāj." - #~ msgid "New Entry" #~ msgstr "Jauns ieraksts" @@ -3017,9 +3291,6 @@ msgstr "" #~ msgid "Delete Recipe" #~ msgstr "Dzēst recepti" -#~ msgid "Steps" -#~ msgstr "Soļi" - #~ msgid "" #~ "A username is not required, if left blank the new user can choose one." #~ msgstr "" diff --git a/cookbook/locale/nl/LC_MESSAGES/django.mo b/cookbook/locale/nl/LC_MESSAGES/django.mo index 2c852340a5..175ca41f70 100644 Binary files a/cookbook/locale/nl/LC_MESSAGES/django.mo and b/cookbook/locale/nl/LC_MESSAGES/django.mo differ diff --git a/cookbook/locale/nl/LC_MESSAGES/django.po b/cookbook/locale/nl/LC_MESSAGES/django.po index 6018bccea4..89f1adf38f 100644 --- a/cookbook/locale/nl/LC_MESSAGES/django.po +++ b/cookbook/locale/nl/LC_MESSAGES/django.po @@ -12,11 +12,11 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-07 17:31+0100\n" +"POT-Creation-Date: 2022-01-18 14:52+0100\n" "PO-Revision-Date: 2021-11-14 14:06+0000\n" "Last-Translator: Job Putters \n" -"Language-Team: Dutch \n" +"Language-Team: Dutch \n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -24,67 +24,66 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.8\n" -#: .\cookbook\filters.py:23 .\cookbook\templates\base.html:125 -#: .\cookbook\templates\forms\ingredients.html:34 -#: .\cookbook\templates\space.html:43 .\cookbook\templates\stats.html:28 -#: .\cookbook\templates\url_import.html:274 +#: .\cookbook\filters.py:23 .\cookbook\templates\forms\ingredients.html:34 +#: .\cookbook\templates\space.html:50 .\cookbook\templates\stats.html:28 +#: .\cookbook\templates\url_import.html:277 msgid "Ingredients" msgstr "Ingrediënten" -#: .\cookbook\forms.py:54 +#: .\cookbook\forms.py:56 msgid "Default unit" msgstr "Standaard eenheid" -#: .\cookbook\forms.py:55 +#: .\cookbook\forms.py:57 msgid "Use fractions" msgstr "Gebruik fracties" -#: .\cookbook\forms.py:56 +#: .\cookbook\forms.py:58 msgid "Use KJ" msgstr "Gebruik KJ" -#: .\cookbook\forms.py:57 +#: .\cookbook\forms.py:59 msgid "Theme" msgstr "Thema" -#: .\cookbook\forms.py:58 +#: .\cookbook\forms.py:60 msgid "Navbar color" msgstr "Navbar kleur" -#: .\cookbook\forms.py:59 +#: .\cookbook\forms.py:61 msgid "Sticky navbar" msgstr "Plak navbar" -#: .\cookbook\forms.py:60 +#: .\cookbook\forms.py:62 msgid "Default page" msgstr "Standaard pagina" -#: .\cookbook\forms.py:61 +#: .\cookbook\forms.py:63 msgid "Show recent recipes" msgstr "Toon recente recepten" -#: .\cookbook\forms.py:62 +#: .\cookbook\forms.py:64 msgid "Search style" msgstr "Zoekstijl" -#: .\cookbook\forms.py:63 +#: .\cookbook\forms.py:65 msgid "Plan sharing" msgstr "Plan delen" -#: .\cookbook\forms.py:64 +#: .\cookbook\forms.py:66 msgid "Ingredient decimal places" msgstr "Ingrediënt decimalen" -#: .\cookbook\forms.py:65 +#: .\cookbook\forms.py:67 msgid "Shopping list auto sync period" msgstr "Boodschappenlijst auto sync periode" -#: .\cookbook\forms.py:66 .\cookbook\templates\recipe_view.html:21 -#: .\cookbook\templates\space.html:62 .\cookbook\templates\stats.html:47 +#: .\cookbook\forms.py:68 .\cookbook\templates\recipe_view.html:21 +#: .\cookbook\templates\space.html:77 .\cookbook\templates\stats.html:47 msgid "Comments" msgstr "Opmerkingen" -#: .\cookbook\forms.py:70 +#: .\cookbook\forms.py:72 msgid "" "Color of the top navigation bar. Not all colors work with all themes, just " "try them out!" @@ -92,13 +91,13 @@ msgstr "" "De kleur van de bovenste navigatie balk. Niet alle kleuren werken met alle " "thema's, je dient ze dus simpelweg uit te proberen!" -#: .\cookbook\forms.py:72 +#: .\cookbook\forms.py:74 msgid "Default Unit to be used when inserting a new ingredient into a recipe." msgstr "" "Standaard eenheid die gebruikt wordt wanneer een nieuw ingrediënt aan een " "recept wordt toegevoegd." -#: .\cookbook\forms.py:74 +#: .\cookbook\forms.py:76 msgid "" "Enables support for fractions in ingredient amounts (e.g. convert decimals " "to fractions automatically)" @@ -106,31 +105,39 @@ msgstr "" "Mogelijk maken van breuken bij ingrediënt aantallen (het automatisch " "converteren van decimalen naar breuken)" -#: .\cookbook\forms.py:76 +#: .\cookbook\forms.py:78 msgid "Display nutritional energy amounts in joules instead of calories" msgstr "Geef energiewaardes weer in joules in plaats van calorieën" -#: .\cookbook\forms.py:78 -msgid "" -"Users with whom newly created meal plan/shopping list entries should be " -"shared by default." +#: .\cookbook\forms.py:79 +#, fuzzy +#| msgid "" +#| "Users with whom newly created meal plan/shopping list entries should be " +#| "shared by default." +msgid "Users with whom newly created meal plans should be shared by default." msgstr "" "Gebruikers waarmee een nieuw maaltijdplan/boodschappenlijst standaard " "gedeeld moeten worden." #: .\cookbook\forms.py:80 +#, fuzzy +#| msgid "Try the new shopping list" +msgid "Users with whom to share shopping lists." +msgstr "Probeer de nieuwe boodschappenlijst" + +#: .\cookbook\forms.py:82 msgid "Show recently viewed recipes on search page." msgstr "Geef recent bekeken recepten op de zoekpagina weer." -#: .\cookbook\forms.py:81 +#: .\cookbook\forms.py:83 msgid "Number of decimals to round ingredients." msgstr "Aantal decimalen om ingrediënten op af te ronden." -#: .\cookbook\forms.py:82 +#: .\cookbook\forms.py:84 msgid "If you want to be able to create and see comments underneath recipes." msgstr "Als je opmerkingen onder recepten wil kunnen maken en zien." -#: .\cookbook\forms.py:84 +#: .\cookbook\forms.py:86 .\cookbook\forms.py:493 msgid "" "Setting to 0 will disable auto sync. When viewing a shopping list the list " "is updated every set seconds to sync changes someone else might have made. " @@ -143,11 +150,19 @@ msgstr "" "gelijktijdig boodschappen doen maar verbruikt mogelijk extra mobiele data. " "Wordt gereset bij opslaan wanneer de limiet niet bereikt is." -#: .\cookbook\forms.py:87 +#: .\cookbook\forms.py:89 msgid "Makes the navbar stick to the top of the page." msgstr "Zet de navbar vast aan de bovenkant van de pagina." -#: .\cookbook\forms.py:103 +#: .\cookbook\forms.py:90 .\cookbook\forms.py:496 +msgid "Automatically add meal plan ingredients to shopping list." +msgstr "" + +#: .\cookbook\forms.py:91 +msgid "Exclude ingredients that are on hand." +msgstr "" + +#: .\cookbook\forms.py:108 msgid "" "Both fields are optional. If none are given the username will be displayed " "instead" @@ -155,39 +170,39 @@ msgstr "" "Beide velden zijn optioneel. Indien niks is opgegeven wordt de " "gebruikersnaam weergegeven" -#: .\cookbook\forms.py:124 .\cookbook\forms.py:289 -#: .\cookbook\templates\url_import.html:158 +#: .\cookbook\forms.py:129 .\cookbook\forms.py:298 +#: .\cookbook\templates\url_import.html:161 msgid "Name" msgstr "Naam" -#: .\cookbook\forms.py:125 .\cookbook\forms.py:290 -#: .\cookbook\templates\space.html:39 .\cookbook\templates\stats.html:24 -#: .\cookbook\templates\url_import.html:192 -#: .\cookbook\templates\url_import.html:578 .\cookbook\views\lists.py:112 +#: .\cookbook\forms.py:130 .\cookbook\forms.py:299 +#: .\cookbook\templates\space.html:44 .\cookbook\templates\stats.html:24 +#: .\cookbook\templates\url_import.html:195 +#: .\cookbook\templates\url_import.html:585 .\cookbook\views\lists.py:97 msgid "Keywords" msgstr "Etiketten" -#: .\cookbook\forms.py:126 +#: .\cookbook\forms.py:131 msgid "Preparation time in minutes" msgstr "Voorbereidingstijd in minuten" -#: .\cookbook\forms.py:127 +#: .\cookbook\forms.py:132 msgid "Waiting time (cooking/baking) in minutes" msgstr "Wacht tijd in minuten (koken en bakken)" -#: .\cookbook\forms.py:128 .\cookbook\forms.py:259 .\cookbook\forms.py:291 +#: .\cookbook\forms.py:133 .\cookbook\forms.py:267 .\cookbook\forms.py:300 msgid "Path" msgstr "Pad" -#: .\cookbook\forms.py:129 +#: .\cookbook\forms.py:134 msgid "Storage UID" msgstr "Opslag UID" -#: .\cookbook\forms.py:157 +#: .\cookbook\forms.py:164 msgid "Default" msgstr "Standaard waarde" -#: .\cookbook\forms.py:168 .\cookbook\templates\url_import.html:94 +#: .\cookbook\forms.py:175 .\cookbook\templates\url_import.html:97 msgid "" "To prevent duplicates recipes with the same name as existing ones are " "ignored. Check this box to import everything." @@ -195,19 +210,19 @@ msgstr "" "Om dubbelingen te voorkomen worden recepten met dezelfde naam als een " "bestaand recept genegeerd. Vink aan om alles te importeren." -#: .\cookbook\forms.py:190 +#: .\cookbook\forms.py:197 msgid "Add your comment: " msgstr "Voeg een opmerking toe: " -#: .\cookbook\forms.py:205 +#: .\cookbook\forms.py:212 msgid "Leave empty for dropbox and enter app password for nextcloud." msgstr "Laat leeg voor dropbox en vul het app wachtwoord in voor nextcloud." -#: .\cookbook\forms.py:212 +#: .\cookbook\forms.py:219 msgid "Leave empty for nextcloud and enter api token for dropbox." msgstr "Laat leeg voor nextcloud en vul de api token in voor dropbox." -#: .\cookbook\forms.py:221 +#: .\cookbook\forms.py:228 msgid "" "Leave empty for dropbox and enter only base url for nextcloud (/remote." "php/webdav/ is added automatically)" @@ -215,33 +230,33 @@ msgstr "" "Laat leeg voor dropbox en vul enkel de base url voor nextcloud in. (/" "remote.php/webdav/ wordt automatisch toegevoegd.)" -#: .\cookbook\forms.py:258 .\cookbook\views\edit.py:166 +#: .\cookbook\forms.py:266 .\cookbook\views\edit.py:166 msgid "Storage" msgstr "Opslag" -#: .\cookbook\forms.py:260 +#: .\cookbook\forms.py:268 msgid "Active" msgstr "Actief" -#: .\cookbook\forms.py:265 +#: .\cookbook\forms.py:274 msgid "Search String" msgstr "Zoekopdracht" -#: .\cookbook\forms.py:292 +#: .\cookbook\forms.py:301 msgid "File ID" msgstr "Bestands ID" -#: .\cookbook\forms.py:313 +#: .\cookbook\forms.py:323 msgid "You must provide at least a recipe or a title." msgstr "Je moet minimaal één recept of titel te specificeren." -#: .\cookbook\forms.py:326 +#: .\cookbook\forms.py:336 msgid "You can list default users to share recipes with in the settings." msgstr "" "Je kan in de instellingen standaard gebruikers in stellen om de recepten met " "te delen." -#: .\cookbook\forms.py:327 +#: .\cookbook\forms.py:337 msgid "" "You can use markdown to format this field. See the docs here" @@ -249,15 +264,15 @@ msgstr "" "Je kunt markdown gebruiken om dit veld te op te maken. Bekijk de documentatie hier" -#: .\cookbook\forms.py:353 +#: .\cookbook\forms.py:363 msgid "Maximum number of users for this space reached." msgstr "Maximum aantal gebruikers voor deze ruimte bereikt." -#: .\cookbook\forms.py:359 +#: .\cookbook\forms.py:369 msgid "Email address already taken!" msgstr "E-mailadres reeds in gebruik!" -#: .\cookbook\forms.py:367 +#: .\cookbook\forms.py:377 msgid "" "An email address is not required but if present the invite link will be sent " "to the user." @@ -265,15 +280,15 @@ msgstr "" "Een e-mailadres is niet vereist, maar indien aanwezig zal de " "uitnodigingslink naar de gebruiker worden gestuurd." -#: .\cookbook\forms.py:382 +#: .\cookbook\forms.py:392 msgid "Name already taken." msgstr "Naam reeds in gebruik." -#: .\cookbook\forms.py:393 +#: .\cookbook\forms.py:403 msgid "Accept Terms and Privacy" msgstr "Accepteer voorwaarden" -#: .\cookbook\forms.py:425 +#: .\cookbook\forms.py:435 msgid "" "Determines how fuzzy a search is if it uses trigram similarity matching (e." "g. low values mean more typos are ignored)." @@ -281,7 +296,7 @@ msgstr "" "Bepaalt hoe 'fuzzy' een zoekopdracht is als het trigram vergelijken gebruikt " "(lage waarden betekenen bijvoorbeeld dat meer typefouten genegeerd worden)." -#: .\cookbook\forms.py:435 +#: .\cookbook\forms.py:445 msgid "" "Select type method of search. Click here for " "full desciption of choices." @@ -289,7 +304,7 @@ msgstr "" "Selecteer zoekmethode. Klik hier voor een " "beschrijving van de keuzes." -#: .\cookbook\forms.py:436 +#: .\cookbook\forms.py:446 msgid "" "Use fuzzy matching on units, keywords and ingredients when editing and " "importing recipes." @@ -297,7 +312,7 @@ msgstr "" "Gebruik 'fuzzy' koppelen bij eenheden, etiketten en ingrediënten bij " "bewerken en importeren van recepten." -#: .\cookbook\forms.py:438 +#: .\cookbook\forms.py:448 msgid "" "Fields to search ignoring accents. Selecting this option can improve or " "degrade search quality depending on language" @@ -306,7 +321,7 @@ msgstr "" "deze optie kan de zoekkwaliteit afhankelijk van de taal, zowel verbeteren " "als verslechteren" -#: .\cookbook\forms.py:440 +#: .\cookbook\forms.py:450 msgid "" "Fields to search for partial matches. (e.g. searching for 'Pie' will return " "'pie' and 'piece' and 'soapie')" @@ -314,7 +329,7 @@ msgstr "" "Velden doorzoeken op gedeelde overeenkomsten. (zoeken op 'Appel' vindt " "'appel', 'aardappel' en 'appelsap')" -#: .\cookbook\forms.py:442 +#: .\cookbook\forms.py:452 msgid "" "Fields to search for beginning of word matches. (e.g. searching for 'sa' " "will return 'salad' and 'sandwich')" @@ -322,7 +337,7 @@ msgstr "" "Velden doorzoeken op overeenkomsten aan het begin van het woord. (zoeken op " "'sa' vindt 'salade' en 'sandwich')" -#: .\cookbook\forms.py:444 +#: .\cookbook\forms.py:454 msgid "" "Fields to 'fuzzy' search. (e.g. searching for 'recpie' will find 'recipe'.) " "Note: this option will conflict with 'web' and 'raw' methods of search." @@ -330,7 +345,7 @@ msgstr "" "Velden 'fuzzy' doorzoeken. (zoeken op 'recetp' vindt ook 'recept') Noot: " "deze optie conflicteert met de zoekmethoden 'web' en 'raw'." -#: .\cookbook\forms.py:446 +#: .\cookbook\forms.py:456 msgid "" "Fields to full text search. Note: 'web', 'phrase', and 'raw' search methods " "only function with fulltext fields." @@ -338,34 +353,144 @@ msgstr "" "Velden doorzoeken op volledige tekst. Noot: Web, Zin en Raw zoekmethoden " "werken alleen met volledige tekstvelden." -#: .\cookbook\forms.py:450 +#: .\cookbook\forms.py:460 msgid "Search Method" msgstr "Zoekmethode" -#: .\cookbook\forms.py:451 +#: .\cookbook\forms.py:461 msgid "Fuzzy Lookups" msgstr "'Fuzzy' zoekopdrachten" -#: .\cookbook\forms.py:452 +#: .\cookbook\forms.py:462 msgid "Ignore Accent" msgstr "Negeer accent" -#: .\cookbook\forms.py:453 +#: .\cookbook\forms.py:463 msgid "Partial Match" msgstr "Gedeeltelijke overeenkomst" -#: .\cookbook\forms.py:454 +#: .\cookbook\forms.py:464 msgid "Starts Wtih" msgstr "Begint met" -#: .\cookbook\forms.py:455 +#: .\cookbook\forms.py:465 msgid "Fuzzy Search" msgstr "'Fuzzy' zoeken" -#: .\cookbook\forms.py:456 +#: .\cookbook\forms.py:466 msgid "Full Text" msgstr "Volledige tekst" +#: .\cookbook\forms.py:491 +msgid "" +"Users will see all items you add to your shopping list. They must add you " +"to see items on their list." +msgstr "" + +#: .\cookbook\forms.py:497 +msgid "" +"When adding a meal plan to the shopping list (manually or automatically), " +"include all related recipes." +msgstr "" + +#: .\cookbook\forms.py:498 +msgid "" +"When adding a meal plan to the shopping list (manually or automatically), " +"exclude ingredients that are on hand." +msgstr "" + +#: .\cookbook\forms.py:499 +msgid "Default number of hours to delay a shopping list entry." +msgstr "" + +#: .\cookbook\forms.py:500 +msgid "Filter shopping list to only include supermarket categories." +msgstr "" + +#: .\cookbook\forms.py:501 +msgid "Days of recent shopping list entries to display." +msgstr "" + +#: .\cookbook\forms.py:502 +msgid "Mark food 'On Hand' when checked off shopping list." +msgstr "" + +#: .\cookbook\forms.py:503 +msgid "Delimiter to use for CSV exports." +msgstr "" + +#: .\cookbook\forms.py:504 +msgid "Prefix to add when copying list to the clipboard." +msgstr "" + +#: .\cookbook\forms.py:508 +#, fuzzy +#| msgid "New Shopping List" +msgid "Share Shopping List" +msgstr "Nieuwe boodschappenlijst" + +#: .\cookbook\forms.py:509 +msgid "Autosync" +msgstr "" + +#: .\cookbook\forms.py:510 +msgid "Auto Add Meal Plan" +msgstr "" + +#: .\cookbook\forms.py:511 +msgid "Exclude On Hand" +msgstr "" + +#: .\cookbook\forms.py:512 +msgid "Include Related" +msgstr "" + +#: .\cookbook\forms.py:513 +msgid "Default Delay Hours" +msgstr "" + +#: .\cookbook\forms.py:514 +#, fuzzy +#| msgid "Select Supermarket" +msgid "Filter to Supermarket" +msgstr "Selecteer supermarkt" + +#: .\cookbook\forms.py:515 +msgid "Recent Days" +msgstr "" + +#: .\cookbook\forms.py:516 +msgid "CSV Delimiter" +msgstr "" + +#: .\cookbook\forms.py:517 .\cookbook\templates\shopping_list.html:322 +msgid "List Prefix" +msgstr "Lijst voorvoegsel" + +#: .\cookbook\forms.py:518 +msgid "Auto On Hand" +msgstr "" + +#: .\cookbook\forms.py:528 +msgid "Reset Food Inheritance" +msgstr "" + +#: .\cookbook\forms.py:529 +msgid "Reset all food to inherit the fields configured." +msgstr "" + +#: .\cookbook\forms.py:541 +#, fuzzy +#| msgid "Food that should be replaced." +msgid "Fields on food that should be inherited by default." +msgstr "Te vervangen Ingrediënt." + +#: .\cookbook\forms.py:542 +#, fuzzy +#| msgid "Show recently viewed recipes on search page." +msgid "Show recipe counts on search filters" +msgstr "Geef recent bekeken recepten op de zoekpagina weer." + #: .\cookbook\helper\AllAuthCustomAdapter.py:36 msgid "" "In order to prevent spam, the requested email was not send. Please wait a " @@ -375,19 +500,19 @@ msgstr "" "minuten en probeer het opnieuw." #: .\cookbook\helper\permission_helper.py:136 -#: .\cookbook\helper\permission_helper.py:159 .\cookbook\views\views.py:149 +#: .\cookbook\helper\permission_helper.py:159 .\cookbook\views\views.py:148 msgid "You are not logged in and therefore cannot view this page!" msgstr "Je bent niet ingelogd en kan deze pagina daarom niet bekijken!" #: .\cookbook\helper\permission_helper.py:140 #: .\cookbook\helper\permission_helper.py:146 #: .\cookbook\helper\permission_helper.py:171 -#: .\cookbook\helper\permission_helper.py:216 -#: .\cookbook\helper\permission_helper.py:230 -#: .\cookbook\helper\permission_helper.py:241 -#: .\cookbook\helper\permission_helper.py:252 .\cookbook\views\data.py:47 -#: .\cookbook\views\views.py:160 .\cookbook\views\views.py:167 -#: .\cookbook\views\views.py:233 +#: .\cookbook\helper\permission_helper.py:219 +#: .\cookbook\helper\permission_helper.py:233 +#: .\cookbook\helper\permission_helper.py:244 +#: .\cookbook\helper\permission_helper.py:255 .\cookbook\views\data.py:47 +#: .\cookbook\views\views.py:159 .\cookbook\views\views.py:166 +#: .\cookbook\views\views.py:232 msgid "You do not have the required permissions to view this page!" msgstr "Je hebt niet de benodigde machtigingen om deze pagina te bekijken!" @@ -398,32 +523,33 @@ msgid "You cannot interact with this object as it is not owned by you!" msgstr "" "Interactie met dit object is niet mogelijk omdat je niet de eigenaar bent!" +#: .\cookbook\helper\recipe_search.py:473 +msgid "One of queryset or hash_key must be provided" +msgstr "" + +#: .\cookbook\helper\shopping_helper.py:54 +#, fuzzy +#| msgid "You must provide at least a recipe or a title." +msgid "You must supply a recipe or mealplan" +msgstr "Je moet minimaal één recept of titel te specificeren." + +#: .\cookbook\helper\shopping_helper.py:58 +msgid "You must supply a created_by" +msgstr "" + #: .\cookbook\helper\template_helper.py:61 #: .\cookbook\helper\template_helper.py:63 msgid "Could not parse template code." msgstr "Sjablooncode kon niet verwerkt worden." -#: .\cookbook\integration\integration.py:126 -#: .\cookbook\templates\import.html:14 .\cookbook\templates\import.html:20 -#: .\cookbook\templates\import_response.html:7 -#: .\cookbook\templates\test.html:14 .\cookbook\templates\test.html:20 -#: .\cookbook\templates\url_import.html:27 -#: .\cookbook\templates\url_import.html:105 -#: .\cookbook\templates\url_import.html:127 -#: .\cookbook\templates\url_import.html:321 -#: .\cookbook\templates\url_import.html:609 .\cookbook\views\delete.py:89 -#: .\cookbook\views\edit.py:200 -msgid "Import" -msgstr "Importeer" - -#: .\cookbook\integration\integration.py:208 +#: .\cookbook\integration\integration.py:200 msgid "" "Importer expected a .zip file. Did you choose the correct importer type for " "your data ?" msgstr "" "De importtool verwachtte een .zip bestand. Heb je het juiste type gekozen?" -#: .\cookbook\integration\integration.py:211 +#: .\cookbook\integration\integration.py:203 msgid "" "An unexpected error occurred during the import. Please make sure you have " "uploaded a valid file." @@ -431,11 +557,11 @@ msgstr "" "Er is een onverwachte fout opgetreden tijdens het importeren. Controleer of " "u een geldig bestand hebt geüpload." -#: .\cookbook\integration\integration.py:216 +#: .\cookbook\integration\integration.py:208 msgid "The following recipes were ignored because they already existed:" msgstr "De volgende recepten zijn genegeerd omdat ze al bestonden:" -#: .\cookbook\integration\integration.py:220 +#: .\cookbook\integration\integration.py:212 #, python-format msgid "Imported %s recipes." msgstr "%s recepten geïmporteerd." @@ -448,32 +574,32 @@ msgstr "Notities" msgid "Nutritional Information" msgstr "Voedingswaarde" -#: .\cookbook\integration\paprika.py:53 .\cookbook\templates\url_import.html:40 +#: .\cookbook\integration\paprika.py:53 .\cookbook\templates\url_import.html:42 msgid "Source" msgstr "Bron" -#: .\cookbook\integration\safron.py:23 -#: .\cookbook\templates\include\log_cooking.html:16 -#: .\cookbook\templates\url_import.html:228 -#: .\cookbook\templates\url_import.html:459 +#: .\cookbook\integration\saffron.py:23 +#: .\cookbook\templates\include\log_cooking.html:18 +#: .\cookbook\templates\url_import.html:231 +#: .\cookbook\templates\url_import.html:462 msgid "Servings" msgstr "Porties" -#: .\cookbook\integration\safron.py:25 +#: .\cookbook\integration\saffron.py:25 msgid "Waiting time" msgstr "Wachttijd" -#: .\cookbook\integration\safron.py:27 +#: .\cookbook\integration\saffron.py:27 msgid "Preparation Time" msgstr "Bereidingstijd" -#: .\cookbook\integration\safron.py:29 .\cookbook\templates\base.html:78 +#: .\cookbook\integration\saffron.py:29 .\cookbook\templates\base.html:78 #: .\cookbook\templates\forms\ingredients.html:7 #: .\cookbook\templates\index.html:7 msgid "Cookbook" msgstr "Kookboek" -#: .\cookbook\integration\safron.py:31 +#: .\cookbook\integration\saffron.py:31 msgid "Section" msgstr "Sectie" @@ -511,7 +637,7 @@ msgstr "Avondeten" msgid "Other" msgstr "Overige" -#: .\cookbook\models.py:150 +#: .\cookbook\models.py:246 msgid "" "Maximum file storage for space in MB. 0 for unlimited, -1 to disable file " "upload." @@ -519,99 +645,130 @@ msgstr "" "Maximale bestandsopslag voor ruimte in MB. 0 voor onbeperkt, -1 om uploaden " "van bestanden uit te schakelen." -#: .\cookbook\models.py:202 .\cookbook\templates\search.html:7 -#: .\cookbook\templates\shopping_list.html:59 +#: .\cookbook\models.py:300 .\cookbook\templates\search.html:7 +#: .\cookbook\templates\shopping_list.html:53 msgid "Search" msgstr "Zoeken" -#: .\cookbook\models.py:203 .\cookbook\templates\base.html:82 +#: .\cookbook\models.py:301 .\cookbook\templates\base.html:82 #: .\cookbook\templates\meal_plan.html:7 #: .\cookbook\templates\meal_plan_new.html:7 .\cookbook\views\delete.py:181 #: .\cookbook\views\edit.py:220 .\cookbook\views\new.py:184 msgid "Meal-Plan" msgstr "Maaltijdplan" -#: .\cookbook\models.py:204 .\cookbook\templates\base.html:90 +#: .\cookbook\models.py:302 .\cookbook\templates\base.html:90 msgid "Books" msgstr "Boeken" -#: .\cookbook\models.py:212 +#: .\cookbook\models.py:310 msgid "Small" msgstr "Klein" -#: .\cookbook\models.py:212 +#: .\cookbook\models.py:310 msgid "Large" msgstr "Groot" -#: .\cookbook\models.py:212 .\cookbook\templates\generic\new_template.html:6 +#: .\cookbook\models.py:310 .\cookbook\templates\generic\new_template.html:6 #: .\cookbook\templates\generic\new_template.html:14 msgid "New" msgstr "Nieuw" -#: .\cookbook\models.py:396 +#: .\cookbook\models.py:512 msgid " is part of a recipe step and cannot be deleted" msgstr " is deel van een receptstap en kan niet verwijderd worden" -#: .\cookbook\models.py:441 .\cookbook\templates\url_import.html:42 +#: .\cookbook\models.py:586 .\cookbook\templates\url_import.html:44 msgid "Text" msgstr "Tekst" -#: .\cookbook\models.py:441 +#: .\cookbook\models.py:586 msgid "Time" msgstr "Tijd" -#: .\cookbook\models.py:441 .\cookbook\templates\url_import.html:44 +#: .\cookbook\models.py:586 .\cookbook\templates\url_import.html:46 msgid "File" msgstr "Bestand" -#: .\cookbook\models.py:441 +#: .\cookbook\models.py:586 #: .\cookbook\templates\include\recipe_open_modal.html:7 #: .\cookbook\views\delete.py:39 .\cookbook\views\edit.py:260 #: .\cookbook\views\new.py:53 msgid "Recipe" msgstr "Recept" -#: .\cookbook\models.py:871 .\cookbook\templates\search_info.html:28 +#: .\cookbook\models.py:1041 .\cookbook\templates\search_info.html:28 msgid "Simple" msgstr "Simpel" -#: .\cookbook\models.py:872 .\cookbook\templates\search_info.html:33 +#: .\cookbook\models.py:1042 .\cookbook\templates\search_info.html:33 msgid "Phrase" msgstr "Zin" -#: .\cookbook\models.py:873 .\cookbook\templates\search_info.html:38 +#: .\cookbook\models.py:1043 .\cookbook\templates\search_info.html:38 msgid "Web" msgstr "Web" -#: .\cookbook\models.py:874 .\cookbook\templates\search_info.html:47 +#: .\cookbook\models.py:1044 .\cookbook\templates\search_info.html:47 msgid "Raw" msgstr "Rauw" -#: .\cookbook\models.py:912 +#: .\cookbook\models.py:1082 msgid "Food Alias" msgstr "Ingrediënt alias" -#: .\cookbook\models.py:912 +#: .\cookbook\models.py:1082 msgid "Unit Alias" msgstr "Eenheid alias" -#: .\cookbook\models.py:912 +#: .\cookbook\models.py:1082 msgid "Keyword Alias" msgstr "Etiket alias" -#: .\cookbook\serializer.py:157 +#: .\cookbook\serializer.py:175 +msgid "A user is required" +msgstr "" + +#: .\cookbook\serializer.py:195 msgid "File uploads are not enabled for this Space." msgstr "Bestandsuploads zijn niet ingeschakeld voor deze Ruimte." -#: .\cookbook\serializer.py:168 +#: .\cookbook\serializer.py:206 msgid "You have reached your file upload limit." msgstr "U heeft de uploadlimiet bereikt." +#: .\cookbook\serializer.py:962 +msgid "Existing shopping list to update" +msgstr "" + +#: .\cookbook\serializer.py:964 +msgid "" +"List of ingredient IDs from the recipe to add, if not provided all " +"ingredients will be added." +msgstr "" + +#: .\cookbook\serializer.py:965 +msgid "" +"Providing a list_recipe ID and servings of 0 will delete that shopping list." +msgstr "" + +#: .\cookbook\serializer.py:973 +msgid "Amount of food to add to the shopping list" +msgstr "" + +#: .\cookbook\serializer.py:974 +msgid "ID of unit to use for the shopping list" +msgstr "" + +#: .\cookbook\serializer.py:975 +msgid "When set to true will delete all food from active shopping lists." +msgstr "" + #: .\cookbook\tables.py:35 .\cookbook\templates\generic\edit_template.html:6 #: .\cookbook\templates\generic\edit_template.html:14 #: .\cookbook\templates\recipes_table.html:82 -#: .\cookbook\templates\shopping_list.html:40 -#: .\cookbook\templates\space.html:90 +#: .\cookbook\templates\shopping_list.html:37 +#: .\cookbook\templates\space.html:109 msgid "Edit" msgstr "Bewerken" @@ -755,27 +912,27 @@ msgstr "Inloggen" msgid "Sign In" msgstr "Log in" -#: .\cookbook\templates\account\login.html:32 +#: .\cookbook\templates\account\login.html:34 #: .\cookbook\templates\socialaccount\signup.html:8 #: .\cookbook\templates\socialaccount\signup.html:57 msgid "Sign Up" msgstr "Registreer" -#: .\cookbook\templates\account\login.html:36 -#: .\cookbook\templates\account\login.html:37 +#: .\cookbook\templates\account\login.html:39 +#: .\cookbook\templates\account\login.html:41 #: .\cookbook\templates\account\password_reset.html:29 msgid "Reset My Password" msgstr "Reset wachtwoord" -#: .\cookbook\templates\account\login.html:37 +#: .\cookbook\templates\account\login.html:40 msgid "Lost your password?" msgstr "Wachtwoord vergeten?" -#: .\cookbook\templates\account\login.html:48 +#: .\cookbook\templates\account\login.html:52 msgid "Social Login" msgstr "Socials login" -#: .\cookbook\templates\account\login.html:49 +#: .\cookbook\templates\account\login.html:53 msgid "You can use any of the following providers to sign in." msgstr "Je kan een van de volgende providers gebruiken om in te loggen." @@ -801,7 +958,7 @@ msgstr "Wijzig wachtwoord" #: .\cookbook\templates\account\password_change.html:12 #: .\cookbook\templates\account\password_set.html:12 -#: .\cookbook\templates\settings.html:69 +#: .\cookbook\templates\settings.html:76 msgid "Password" msgstr "Wachtwoord" @@ -926,15 +1083,19 @@ msgstr "Winkelen" msgid "Keyword" msgstr "Etiketten" +#: .\cookbook\templates\base.html:125 .\cookbook\views\lists.py:114 +msgid "Foods" +msgstr "Ingrediënten" + #: .\cookbook\templates\base.html:137 #: .\cookbook\templates\forms\ingredients.html:24 -#: .\cookbook\templates\space.html:41 .\cookbook\templates\stats.html:26 -#: .\cookbook\views\lists.py:146 +#: .\cookbook\templates\space.html:47 .\cookbook\templates\stats.html:26 +#: .\cookbook\views\lists.py:131 msgid "Units" msgstr "Eenheden" #: .\cookbook\templates\base.html:151 -#: .\cookbook\templates\shopping_list.html:237 +#: .\cookbook\templates\shopping_list.html:208 #: .\cookbook\templates\supermarket.html:7 msgid "Supermarket" msgstr "Supermarkt" @@ -943,11 +1104,11 @@ msgstr "Supermarkt" msgid "Supermarket Category" msgstr "Supermarktcategorie" -#: .\cookbook\templates\base.html:175 .\cookbook\views\lists.py:195 +#: .\cookbook\templates\base.html:175 .\cookbook\views\lists.py:180 msgid "Automations" msgstr "Automatiseringen" -#: .\cookbook\templates\base.html:189 .\cookbook\views\lists.py:215 +#: .\cookbook\templates\base.html:189 .\cookbook\views\lists.py:200 msgid "Files" msgstr "Bestanden" @@ -962,7 +1123,7 @@ msgstr "Geschiedenis" #: .\cookbook\templates\base.html:228 .\cookbook\templates\export.html:14 #: .\cookbook\templates\export.html:20 -#: .\cookbook\templates\shopping_list.html:358 +#: .\cookbook\templates\shopping_list.html:310 #: .\cookbook\templates\test2.html:14 .\cookbook\templates\test2.html:20 msgid "Export" msgstr "Exporteren" @@ -972,19 +1133,19 @@ msgid "Import Recipe" msgstr "Recept importeren" #: .\cookbook\templates\base.html:246 -#: .\cookbook\templates\shopping_list.html:195 -#: .\cookbook\templates\shopping_list.html:217 +#: .\cookbook\templates\shopping_list.html:165 +#: .\cookbook\templates\shopping_list.html:188 msgid "Create" msgstr "Aanmaken" #: .\cookbook\templates\base.html:259 #: .\cookbook\templates\generic\list_template.html:14 -#: .\cookbook\templates\space.html:58 .\cookbook\templates\stats.html:43 +#: .\cookbook\templates\space.html:69 .\cookbook\templates\stats.html:43 msgid "External Recipes" msgstr "Externe recepten" -#: .\cookbook\templates\base.html:262 .\cookbook\templates\space.html:7 -#: .\cookbook\templates\space.html:19 +#: .\cookbook\templates\base.html:262 .\cookbook\templates\space.html:8 +#: .\cookbook\templates\space.html:20 .\cookbook\templates\space.html:150 msgid "Space Settings" msgstr "Ruimte Instellingen" @@ -1054,11 +1215,13 @@ msgstr "Het pad dient het volgende format te hebben" #: .\cookbook\templates\forms\edit_import_recipe.html:14 #: .\cookbook\templates\generic\edit_template.html:23 #: .\cookbook\templates\generic\new_template.html:23 -#: .\cookbook\templates\include\log_cooking.html:28 -#: .\cookbook\templates\settings.html:63 .\cookbook\templates\settings.html:105 -#: .\cookbook\templates\settings.html:123 -#: .\cookbook\templates\settings.html:195 -#: .\cookbook\templates\shopping_list.html:360 +#: .\cookbook\templates\include\log_cooking.html:30 +#: .\cookbook\templates\settings.html:70 .\cookbook\templates\settings.html:112 +#: .\cookbook\templates\settings.html:130 +#: .\cookbook\templates\settings.html:202 +#: .\cookbook\templates\settings.html:213 +#: .\cookbook\templates\shopping_list.html:311 +#: .\cookbook\templates\space.html:155 msgid "Save" msgstr "Opslaan" @@ -1169,15 +1332,20 @@ msgid "Delete original file" msgstr "Origineel bestand verwijderen" #: .\cookbook\templates\generic\list_template.html:6 -#: .\cookbook\templates\generic\list_template.html:21 +#: .\cookbook\templates\generic\list_template.html:22 msgid "List" msgstr " " -#: .\cookbook\templates\generic\list_template.html:34 +#: .\cookbook\templates\generic\list_template.html:33 +#: .\cookbook\templates\shopping_list.html:33 +msgid "Try the new shopping list" +msgstr "Probeer de nieuwe boodschappenlijst" + +#: .\cookbook\templates\generic\list_template.html:45 msgid "Filter" msgstr "Filtreren" -#: .\cookbook\templates\generic\list_template.html:39 +#: .\cookbook\templates\generic\list_template.html:50 msgid "Import all" msgstr "Alles importeren" @@ -1203,19 +1371,31 @@ msgstr "Kook logboek" msgid "Import Recipes" msgstr "Recepten importeren" -#: .\cookbook\templates\include\log_cooking.html:7 +#: .\cookbook\templates\import.html:14 .\cookbook\templates\import.html:20 +#: .\cookbook\templates\import_response.html:7 +#: .\cookbook\templates\test.html:14 .\cookbook\templates\test.html:20 +#: .\cookbook\templates\url_import.html:29 +#: .\cookbook\templates\url_import.html:108 +#: .\cookbook\templates\url_import.html:130 +#: .\cookbook\templates\url_import.html:324 +#: .\cookbook\templates\url_import.html:618 .\cookbook\views\delete.py:89 +#: .\cookbook\views\edit.py:200 +msgid "Import" +msgstr "Importeer" + +#: .\cookbook\templates\include\log_cooking.html:9 msgid "Log Recipe Cooking" msgstr "logboek recept koken" -#: .\cookbook\templates\include\log_cooking.html:13 +#: .\cookbook\templates\include\log_cooking.html:15 msgid "All fields are optional and can be left empty." msgstr "Alle velden zijn optioneel en mogen leeg gelaten worden." -#: .\cookbook\templates\include\log_cooking.html:19 +#: .\cookbook\templates\include\log_cooking.html:21 msgid "Rating" msgstr "Beoordeling" -#: .\cookbook\templates\include\log_cooking.html:27 +#: .\cookbook\templates\include\log_cooking.html:29 #: .\cookbook\templates\include\recipe_open_modal.html:18 msgid "Close" msgstr "Sluiten" @@ -1269,7 +1449,7 @@ msgstr "Zoekopdracht opnieuw instellen" msgid "Last viewed" msgstr "Laatst bekeken" -#: .\cookbook\templates\index.html:87 .\cookbook\templates\space.html:35 +#: .\cookbook\templates\index.html:87 .\cookbook\templates\space.html:37 #: .\cookbook\templates\stats.html:22 msgid "Recipes" msgstr "Recepten" @@ -1443,7 +1623,7 @@ msgid "Created by" msgstr "Gemaakt door" #: .\cookbook\templates\meal_plan_entry.html:20 -#: .\cookbook\templates\shopping_list.html:261 +#: .\cookbook\templates\shopping_list.html:232 msgid "Shared with" msgstr "Gedeeld met" @@ -1564,17 +1744,17 @@ msgstr "Opmerking" #: .\cookbook\templates\recipes_table.html:19 #: .\cookbook\templates\recipes_table.html:23 -#: .\cookbook\templates\url_import.html:444 +#: .\cookbook\templates\url_import.html:447 msgid "Recipe Image" msgstr "Recept afbeelding" #: .\cookbook\templates\recipes_table.html:51 -#: .\cookbook\templates\url_import.html:449 +#: .\cookbook\templates\url_import.html:452 msgid "Preparation time ca." msgstr "Geschatte voorbereidingstijd" #: .\cookbook\templates\recipes_table.html:57 -#: .\cookbook\templates\url_import.html:454 +#: .\cookbook\templates\url_import.html:457 msgid "Waiting time ca." msgstr "Geschatte wachttijd" @@ -1592,7 +1772,7 @@ msgstr "Recept thuis" #: .\cookbook\templates\search_info.html:5 #: .\cookbook\templates\search_info.html:9 -#: .\cookbook\templates\settings.html:165 +#: .\cookbook\templates\settings.html:172 msgid "Search Settings" msgstr "Zoekinstellingen" @@ -1862,36 +2042,42 @@ msgstr "API-instellingen" msgid "Search-Settings" msgstr "Zoek instellingen" -#: .\cookbook\templates\settings.html:58 +#: .\cookbook\templates\settings.html:56 +#, fuzzy +#| msgid "Search-Settings" +msgid "Shopping-Settings" +msgstr "Zoek instellingen" + +#: .\cookbook\templates\settings.html:65 msgid "Name Settings" msgstr "Naam instellingen" -#: .\cookbook\templates\settings.html:66 +#: .\cookbook\templates\settings.html:73 msgid "Account Settings" msgstr "Account instellingen" -#: .\cookbook\templates\settings.html:68 +#: .\cookbook\templates\settings.html:75 msgid "Emails" msgstr "E-mails" -#: .\cookbook\templates\settings.html:71 +#: .\cookbook\templates\settings.html:78 #: .\cookbook\templates\socialaccount\connections.html:11 msgid "Social" msgstr "Socials" -#: .\cookbook\templates\settings.html:84 +#: .\cookbook\templates\settings.html:91 msgid "Language" msgstr "Taal" -#: .\cookbook\templates\settings.html:114 +#: .\cookbook\templates\settings.html:121 msgid "Style" msgstr "Stijl" -#: .\cookbook\templates\settings.html:135 +#: .\cookbook\templates\settings.html:142 msgid "API Token" msgstr "API Token" -#: .\cookbook\templates\settings.html:136 +#: .\cookbook\templates\settings.html:143 msgid "" "You can use both basic authentication and token based authentication to " "access the REST API." @@ -1899,7 +2085,7 @@ msgstr "" "Je kan zowel basale verificatie als verificatie op basis van tokens " "gebruiken om toegang tot de REST API te krijgen." -#: .\cookbook\templates\settings.html:153 +#: .\cookbook\templates\settings.html:160 msgid "" "Use the token as an Authorization header prefixed by the word token as shown " "in the following examples:" @@ -1907,11 +2093,11 @@ msgstr "" "Gebruik de token als een 'Authorization header'voorafgegaan door het woord " "token zoals in de volgende voorbeelden:" -#: .\cookbook\templates\settings.html:155 +#: .\cookbook\templates\settings.html:162 msgid "or" msgstr "of" -#: .\cookbook\templates\settings.html:166 +#: .\cookbook\templates\settings.html:173 msgid "" "There are many options to configure the search depending on your personal " "preferences." @@ -1919,7 +2105,7 @@ msgstr "" "Er zijn vele mogelijkheden om het zoeken te configureren die afhangen van je " "persoonlijke voorkeur." -#: .\cookbook\templates\settings.html:167 +#: .\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." @@ -1928,7 +2114,7 @@ msgstr "" "gebruikmaken van het standaard profiel of de volgende vooraf ingestelde " "profielen." -#: .\cookbook\templates\settings.html:168 +#: .\cookbook\templates\settings.html:175 msgid "" "If you do want to configure the search you can read about the different " "options here." @@ -1936,11 +2122,11 @@ msgstr "" "Als je het zoeken wil configureren kan je hier " "over de verschillende opties lezen." -#: .\cookbook\templates\settings.html:173 +#: .\cookbook\templates\settings.html:180 msgid "Fuzzy" msgstr "Fuzzy" -#: .\cookbook\templates\settings.html:174 +#: .\cookbook\templates\settings.html:181 msgid "" "Find what you need even if your search or the recipe contains typos. Might " "return more results than needed to make sure you find what you are looking " @@ -1950,20 +2136,20 @@ msgstr "" "bevat. Mogelijk krijg je meer resultaten dan je nodig hebt, om zeker te " "weten dat je vindt wat je nodig hebt." -#: .\cookbook\templates\settings.html:175 +#: .\cookbook\templates\settings.html:182 msgid "This is the default behavior" msgstr "Dit is het standaard gedrag" -#: .\cookbook\templates\settings.html:176 -#: .\cookbook\templates\settings.html:184 +#: .\cookbook\templates\settings.html:183 +#: .\cookbook\templates\settings.html:191 msgid "Apply" msgstr "Pas toe" -#: .\cookbook\templates\settings.html:181 +#: .\cookbook\templates\settings.html:188 msgid "Precise" msgstr "Nauwkeurig" -#: .\cookbook\templates\settings.html:182 +#: .\cookbook\templates\settings.html:189 msgid "" "Allows fine control over search results but might not return results if too " "many spelling mistakes are made." @@ -1971,10 +2157,16 @@ msgstr "" "Staat fijnmazige controle over zoekresultaten toe, maar toont mogelijk geen " "resultaten als er te veel spelfouten gemaakt zijn." -#: .\cookbook\templates\settings.html:183 +#: .\cookbook\templates\settings.html:190 msgid "Perfect for large Databases" msgstr "Perfect voor grote databases" +#: .\cookbook\templates\settings.html:207 +#, fuzzy +#| msgid "Shopping List" +msgid "Shopping Settings" +msgstr "Boodschappenlijst" + #: .\cookbook\templates\setup.html:6 .\cookbook\templates\system.html:5 msgid "Cookbook Setup" msgstr "Kookboek Setup" @@ -1993,81 +2185,73 @@ msgstr "" msgid "Create Superuser account" msgstr "Maak Superuser acount" -#: .\cookbook\templates\shopping_list.html:7 +#: .\cookbook\templates\shopping_list.html:8 #: .\cookbook\templates\shopping_list.html:29 -#: .\cookbook\templates\shopping_list.html:721 +#: .\cookbook\templates\shopping_list.html:663 msgid "Shopping List" msgstr "Boodschappenlijst" -#: .\cookbook\templates\shopping_list.html:34 -msgid "Try the new shopping list" -msgstr "Probeer de nieuwe boodschappenlijst" - -#: .\cookbook\templates\shopping_list.html:63 +#: .\cookbook\templates\shopping_list.html:55 msgid "Search Recipe" msgstr "Zoek recept" -#: .\cookbook\templates\shopping_list.html:86 +#: .\cookbook\templates\shopping_list.html:72 msgid "Shopping Recipes" msgstr "Recepten op boodschappenlijst" -#: .\cookbook\templates\shopping_list.html:90 +#: .\cookbook\templates\shopping_list.html:74 msgid "No recipes selected" msgstr "Geen recepten geselecteerd" -#: .\cookbook\templates\shopping_list.html:157 +#: .\cookbook\templates\shopping_list.html:131 msgid "Entry Mode" msgstr "Invoermodus" -#: .\cookbook\templates\shopping_list.html:165 +#: .\cookbook\templates\shopping_list.html:139 msgid "Add Entry" msgstr "Voeg toe aan boodschappenlijst" -#: .\cookbook\templates\shopping_list.html:181 +#: .\cookbook\templates\shopping_list.html:152 msgid "Amount" msgstr "Hoeveelheid" -#: .\cookbook\templates\shopping_list.html:194 +#: .\cookbook\templates\shopping_list.html:164 msgid "Select Unit" msgstr "Selecteer eenheid" -#: .\cookbook\templates\shopping_list.html:196 -#: .\cookbook\templates\shopping_list.html:218 -#: .\cookbook\templates\shopping_list.html:248 -#: .\cookbook\templates\shopping_list.html:272 -#: .\cookbook\templates\url_import.html:500 -#: .\cookbook\templates\url_import.html:532 +#: .\cookbook\templates\shopping_list.html:166 +#: .\cookbook\templates\shopping_list.html:189 +#: .\cookbook\templates\shopping_list.html:219 +#: .\cookbook\templates\shopping_list.html:243 +#: .\cookbook\templates\url_import.html:505 +#: .\cookbook\templates\url_import.html:537 msgid "Select" msgstr "Selecteer" -#: .\cookbook\templates\shopping_list.html:216 +#: .\cookbook\templates\shopping_list.html:187 msgid "Select Food" msgstr "Selecteer ingrediënt" -#: .\cookbook\templates\shopping_list.html:247 +#: .\cookbook\templates\shopping_list.html:218 msgid "Select Supermarket" msgstr "Selecteer supermarkt" -#: .\cookbook\templates\shopping_list.html:271 +#: .\cookbook\templates\shopping_list.html:242 msgid "Select User" msgstr "Selecteer gebruiker" -#: .\cookbook\templates\shopping_list.html:290 +#: .\cookbook\templates\shopping_list.html:258 msgid "Finished" msgstr "Afgerond" -#: .\cookbook\templates\shopping_list.html:303 +#: .\cookbook\templates\shopping_list.html:267 msgid "You are offline, shopping list might not syncronize." msgstr "Je bent offline, de boodschappenlijst synchroniseert mogelijk niet." -#: .\cookbook\templates\shopping_list.html:368 +#: .\cookbook\templates\shopping_list.html:318 msgid "Copy/Export" msgstr "Kopieër/exporteer" -#: .\cookbook\templates\shopping_list.html:372 -msgid "List Prefix" -msgstr "Lijst voorvoegsel" - #: .\cookbook\templates\socialaccount\connections.html:4 #: .\cookbook\templates\socialaccount\connections.html:15 msgid "Account Connections" @@ -2123,80 +2307,80 @@ msgstr "" msgid "Sign in using" msgstr "Log in met" -#: .\cookbook\templates\space.html:23 +#: .\cookbook\templates\space.html:25 msgid "Space:" msgstr "Ruimte:" -#: .\cookbook\templates\space.html:24 +#: .\cookbook\templates\space.html:26 msgid "Manage Subscription" msgstr "Beheer abonnementen" -#: .\cookbook\templates\space.html:32 .\cookbook\templates\stats.html:19 +#: .\cookbook\templates\space.html:34 .\cookbook\templates\stats.html:19 msgid "Number of objects" msgstr "Aantal objecten" -#: .\cookbook\templates\space.html:45 .\cookbook\templates\stats.html:30 +#: .\cookbook\templates\space.html:54 .\cookbook\templates\stats.html:30 msgid "Recipe Imports" msgstr "Geïmporteerde recepten" -#: .\cookbook\templates\space.html:53 .\cookbook\templates\stats.html:38 +#: .\cookbook\templates\space.html:62 .\cookbook\templates\stats.html:38 msgid "Objects stats" msgstr "Object statistieken" -#: .\cookbook\templates\space.html:56 .\cookbook\templates\stats.html:41 +#: .\cookbook\templates\space.html:65 .\cookbook\templates\stats.html:41 msgid "Recipes without Keywords" msgstr "Recepten zonder etiketten" -#: .\cookbook\templates\space.html:60 .\cookbook\templates\stats.html:45 +#: .\cookbook\templates\space.html:73 .\cookbook\templates\stats.html:45 msgid "Internal Recipes" msgstr "Interne recepten" -#: .\cookbook\templates\space.html:73 +#: .\cookbook\templates\space.html:89 msgid "Members" msgstr "Leden" -#: .\cookbook\templates\space.html:77 +#: .\cookbook\templates\space.html:95 msgid "Invite User" msgstr "Nodig gebruiker uit" -#: .\cookbook\templates\space.html:88 +#: .\cookbook\templates\space.html:107 msgid "User" msgstr "Gebruiker" -#: .\cookbook\templates\space.html:89 +#: .\cookbook\templates\space.html:108 msgid "Groups" msgstr "Groepen" -#: .\cookbook\templates\space.html:105 +#: .\cookbook\templates\space.html:119 msgid "admin" msgstr "Beheerder" -#: .\cookbook\templates\space.html:106 +#: .\cookbook\templates\space.html:120 msgid "user" msgstr "gebruiker" -#: .\cookbook\templates\space.html:107 +#: .\cookbook\templates\space.html:121 msgid "guest" msgstr "gast" -#: .\cookbook\templates\space.html:108 +#: .\cookbook\templates\space.html:122 msgid "remove" msgstr "verwijder" -#: .\cookbook\templates\space.html:112 +#: .\cookbook\templates\space.html:126 msgid "Update" msgstr "Update" -#: .\cookbook\templates\space.html:116 +#: .\cookbook\templates\space.html:130 msgid "You cannot edit yourself." msgstr "Je kan jezelf niet bewerken." -#: .\cookbook\templates\space.html:123 +#: .\cookbook\templates\space.html:136 msgid "There are no members in your space yet!" msgstr "Er zitten nog geen leden in jouw ruimte!" -#: .\cookbook\templates\space.html:130 .\cookbook\templates\system.html:21 -#: .\cookbook\views\lists.py:100 +#: .\cookbook\templates\space.html:143 .\cookbook\templates\system.html:21 +#: .\cookbook\views\lists.py:85 msgid "Invite Links" msgstr "Uitnodigingslink" @@ -2336,111 +2520,111 @@ msgstr "" " alleen werken met Postgres databases.\n" " " -#: .\cookbook\templates\url_import.html:6 +#: .\cookbook\templates\url_import.html:8 msgid "URL Import" msgstr "Importeer URL" -#: .\cookbook\templates\url_import.html:31 +#: .\cookbook\templates\url_import.html:33 msgid "Drag me to your bookmarks to import recipes from anywhere" msgstr "" "Sleep mij naar je bladwijzers om overal recepten vandaan te kunnen importeren" -#: .\cookbook\templates\url_import.html:32 +#: .\cookbook\templates\url_import.html:34 msgid "Bookmark Me!" msgstr "Sla mij op als bladwijzer!" -#: .\cookbook\templates\url_import.html:36 +#: .\cookbook\templates\url_import.html:38 msgid "URL" msgstr "URL" -#: .\cookbook\templates\url_import.html:38 +#: .\cookbook\templates\url_import.html:40 msgid "App" msgstr "App" -#: .\cookbook\templates\url_import.html:62 +#: .\cookbook\templates\url_import.html:64 msgid "Enter website URL" msgstr "Vul website URL in" -#: .\cookbook\templates\url_import.html:101 +#: .\cookbook\templates\url_import.html:104 msgid "Select recipe files to import or drop them here..." msgstr "" "Selecteer receptbestanden om te importeren of sleep ze hier naar toe..." -#: .\cookbook\templates\url_import.html:122 +#: .\cookbook\templates\url_import.html:125 msgid "Paste json or html source here to load recipe." msgstr "Plak json of html bron om recept te laden." -#: .\cookbook\templates\url_import.html:150 +#: .\cookbook\templates\url_import.html:153 msgid "Preview Recipe Data" msgstr "Bekijk recept gegevens" -#: .\cookbook\templates\url_import.html:151 +#: .\cookbook\templates\url_import.html:154 msgid "Drag recipe attributes from the right into the appropriate box below." msgstr "" "Sleep eigenschappen van het recept van rechts naar het juiste vlak beneden." -#: .\cookbook\templates\url_import.html:160 -#: .\cookbook\templates\url_import.html:177 -#: .\cookbook\templates\url_import.html:194 -#: .\cookbook\templates\url_import.html:213 -#: .\cookbook\templates\url_import.html:231 -#: .\cookbook\templates\url_import.html:246 -#: .\cookbook\templates\url_import.html:261 -#: .\cookbook\templates\url_import.html:277 -#: .\cookbook\templates\url_import.html:304 -#: .\cookbook\templates\url_import.html:355 +#: .\cookbook\templates\url_import.html:163 +#: .\cookbook\templates\url_import.html:180 +#: .\cookbook\templates\url_import.html:197 +#: .\cookbook\templates\url_import.html:216 +#: .\cookbook\templates\url_import.html:234 +#: .\cookbook\templates\url_import.html:249 +#: .\cookbook\templates\url_import.html:264 +#: .\cookbook\templates\url_import.html:280 +#: .\cookbook\templates\url_import.html:307 +#: .\cookbook\templates\url_import.html:358 msgid "Clear Contents" msgstr "Wis inhoud" -#: .\cookbook\templates\url_import.html:162 +#: .\cookbook\templates\url_import.html:165 msgid "Text dragged here will be appended to the name." msgstr "Hierheen gesleepte tekst wordt aan de naam toegevoegd." -#: .\cookbook\templates\url_import.html:175 +#: .\cookbook\templates\url_import.html:178 msgid "Description" msgstr "Beschrijving" -#: .\cookbook\templates\url_import.html:179 +#: .\cookbook\templates\url_import.html:182 msgid "Text dragged here will be appended to the description." msgstr "Hierheen gesleepte tekst wordt aan de beschrijving toegevoegd." -#: .\cookbook\templates\url_import.html:196 +#: .\cookbook\templates\url_import.html:199 msgid "Keywords dragged here will be appended to current list" msgstr "Hierheen gesleepte Etiketten worden aan de huidige lijst toegevoegd" -#: .\cookbook\templates\url_import.html:211 +#: .\cookbook\templates\url_import.html:214 msgid "Image" msgstr "Afbeelding" -#: .\cookbook\templates\url_import.html:243 +#: .\cookbook\templates\url_import.html:246 msgid "Prep Time" msgstr "Voorbereidingstijd" -#: .\cookbook\templates\url_import.html:258 +#: .\cookbook\templates\url_import.html:261 msgid "Cook Time" msgstr "Kooktijd" -#: .\cookbook\templates\url_import.html:279 +#: .\cookbook\templates\url_import.html:282 msgid "Ingredients dragged here will be appended to current list." msgstr "" "Hierheen gesleepte Ingrediënten worden aan de huidige lijst toegevoegd." -#: .\cookbook\templates\url_import.html:301 -#: .\cookbook\templates\url_import.html:572 +#: .\cookbook\templates\url_import.html:304 +#: .\cookbook\templates\url_import.html:579 msgid "Instructions" msgstr "Instructies" -#: .\cookbook\templates\url_import.html:306 +#: .\cookbook\templates\url_import.html:309 msgid "" "Recipe instructions dragged here will be appended to current instructions." msgstr "" "Hierheen gesleepte Recept instructies worden aan de huidige lijst toegevoegd." -#: .\cookbook\templates\url_import.html:329 +#: .\cookbook\templates\url_import.html:332 msgid "Discovered Attributes" msgstr "Ontdekte Eigenschappen" -#: .\cookbook\templates\url_import.html:331 +#: .\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." @@ -2448,61 +2632,61 @@ msgstr "" "Sleep recept eigenschappen van beneden naar de juiste doos aan de " "linkerzijde. Klik er op om alle eigenschappen te zien." -#: .\cookbook\templates\url_import.html:348 +#: .\cookbook\templates\url_import.html:351 msgid "Show Blank Field" msgstr "Toon Leeg Veld" -#: .\cookbook\templates\url_import.html:353 +#: .\cookbook\templates\url_import.html:356 msgid "Blank Field" msgstr "Leeg Veld" -#: .\cookbook\templates\url_import.html:357 +#: .\cookbook\templates\url_import.html:360 msgid "Items dragged to Blank Field will be appended." msgstr "Naar Leeg Veld gesleepte items worden toegevoegd." -#: .\cookbook\templates\url_import.html:404 +#: .\cookbook\templates\url_import.html:407 msgid "Delete Text" msgstr "Verwijder tekst" -#: .\cookbook\templates\url_import.html:417 +#: .\cookbook\templates\url_import.html:420 msgid "Delete image" msgstr "Verwijder afbeelding" -#: .\cookbook\templates\url_import.html:433 +#: .\cookbook\templates\url_import.html:436 msgid "Recipe Name" msgstr "Naam Recept" -#: .\cookbook\templates\url_import.html:437 +#: .\cookbook\templates\url_import.html:440 msgid "Recipe Description" msgstr "Beschrijving recept" -#: .\cookbook\templates\url_import.html:499 -#: .\cookbook\templates\url_import.html:531 -#: .\cookbook\templates\url_import.html:587 +#: .\cookbook\templates\url_import.html:504 +#: .\cookbook\templates\url_import.html:536 +#: .\cookbook\templates\url_import.html:596 msgid "Select one" msgstr "Selecteer één" -#: .\cookbook\templates\url_import.html:547 +#: .\cookbook\templates\url_import.html:554 msgid "Note" msgstr "Notitie" -#: .\cookbook\templates\url_import.html:588 +#: .\cookbook\templates\url_import.html:597 msgid "Add Keyword" msgstr "Voeg Etiket toe" -#: .\cookbook\templates\url_import.html:601 +#: .\cookbook\templates\url_import.html:610 msgid "All Keywords" msgstr "Alle etiketten" -#: .\cookbook\templates\url_import.html:604 +#: .\cookbook\templates\url_import.html:613 msgid "Import all keywords, not only the ones already existing." msgstr "Importeer alle etiketten, niet alleen de bestaande." -#: .\cookbook\templates\url_import.html:631 +#: .\cookbook\templates\url_import.html:640 msgid "Information" msgstr "Informatie" -#: .\cookbook\templates\url_import.html:633 +#: .\cookbook\templates\url_import.html:642 msgid "" " Only websites containing ld+json or microdata information can currently\n" " be imported. Most big recipe pages " @@ -2520,108 +2704,193 @@ msgstr "" "vrij om een voorbeeld te posten in \n" " de GitHub issues." -#: .\cookbook\templates\url_import.html:641 +#: .\cookbook\templates\url_import.html:650 msgid "Google ld+json Info" msgstr "Google Id+json Info" -#: .\cookbook\templates\url_import.html:644 +#: .\cookbook\templates\url_import.html:653 msgid "GitHub Issues" msgstr "GitHub issues" -#: .\cookbook\templates\url_import.html:646 +#: .\cookbook\templates\url_import.html:655 msgid "Recipe Markup Specification" msgstr "Recept opmaak specificatie" -#: .\cookbook\views\api.py:83 .\cookbook\views\api.py:132 +#: .\cookbook\views\api.py:88 .\cookbook\views\api.py:170 msgid "Parameter updated_at incorrectly formatted" msgstr "Parameter updatet_at is onjuist geformateerd" -#: .\cookbook\views\api.py:152 +#: .\cookbook\views\api.py:190 .\cookbook\views\api.py:291 #, python-brace-format msgid "No {self.basename} with id {pk} exists" msgstr "Er bestaat geen {self.basename} met id {pk}" -#: .\cookbook\views\api.py:156 +#: .\cookbook\views\api.py:194 msgid "Cannot merge with the same object!" msgstr "Kan niet met hetzelfde object samenvoegen!" -#: .\cookbook\views\api.py:163 +#: .\cookbook\views\api.py:201 #, python-brace-format msgid "No {self.basename} with id {target} exists" msgstr "Er bestaat geen {self.basename} met id {target}" -#: .\cookbook\views\api.py:168 +#: .\cookbook\views\api.py:206 msgid "Cannot merge with child object!" msgstr "Kan niet met kindobject samenvoegen!" -#: .\cookbook\views\api.py:201 +#: .\cookbook\views\api.py:239 #, python-brace-format msgid "{source.name} was merged successfully with {target.name}" msgstr "{source.name} is succesvol samengevoegd met {target.name}" -#: .\cookbook\views\api.py:205 +#: .\cookbook\views\api.py:244 #, python-brace-format msgid "An error occurred attempting to merge {source.name} with {target.name}" msgstr "" "Er is een error opgetreden bij het samenvoegen van {source.name} met {target." "name}" -#: .\cookbook\views\api.py:249 -#, python-brace-format -msgid "No {self.basename} with id {child} exists" -msgstr "Er bestaat geen {self.basename} met id {child}" - -#: .\cookbook\views\api.py:258 +#: .\cookbook\views\api.py:300 #, python-brace-format msgid "{child.name} was moved successfully to the root." msgstr "{child.name} is succesvol verplaatst naar het hoogste niveau." -#: .\cookbook\views\api.py:261 .\cookbook\views\api.py:279 +#: .\cookbook\views\api.py:303 .\cookbook\views\api.py:321 msgid "An error occurred attempting to move " msgstr "Er is een error opgetreden bij het verplaatsen " -#: .\cookbook\views\api.py:264 +#: .\cookbook\views\api.py:306 msgid "Cannot move an object to itself!" msgstr "Kan object niet verplaatsen naar zichzelf!" -#: .\cookbook\views\api.py:270 +#: .\cookbook\views\api.py:312 #, python-brace-format msgid "No {self.basename} with id {parent} exists" msgstr "Er bestaat geen {self.basename} met id {parent}" -#: .\cookbook\views\api.py:276 +#: .\cookbook\views\api.py:318 #, python-brace-format msgid "{child.name} was moved successfully to parent {parent.name}" msgstr "{child.name} is succesvol verplaatst naar {parent.name}" -#: .\cookbook\views\api.py:723 .\cookbook\views\data.py:42 +#: .\cookbook\views\api.py:470 +#, python-brace-format +msgid "{obj.name} was removed from the shopping list." +msgstr "" + +#: .\cookbook\views\api.py:475 .\cookbook\views\api.py:726 +#, python-brace-format +msgid "{obj.name} was added to the shopping list." +msgstr "" + +#: .\cookbook\views\api.py:587 +msgid "ID of recipe a step is part of. For multiple repeat parameter." +msgstr "" + +#: .\cookbook\views\api.py:588 +msgid "Query string matched (fuzzy) against object name." +msgstr "" + +#: .\cookbook\views\api.py:631 +msgid "" +"Query string matched (fuzzy) against recipe name. In the future also " +"fulltext search." +msgstr "" + +#: .\cookbook\views\api.py:632 +msgid "ID of keyword a recipe should have. For multiple repeat parameter." +msgstr "" + +#: .\cookbook\views\api.py:633 +msgid "ID of food a recipe should have. For multiple repeat parameter." +msgstr "" + +#: .\cookbook\views\api.py:634 +msgid "ID of unit a recipe should have." +msgstr "" + +#: .\cookbook\views\api.py:635 +msgid "Rating a recipe should have. [0 - 5]" +msgstr "" + +#: .\cookbook\views\api.py:636 +msgid "ID of book a recipe should be in. For multiple repeat parameter." +msgstr "" + +#: .\cookbook\views\api.py:637 +msgid "" +"If recipe should have all (AND=false) or any (OR=true) of the " +"provided keywords." +msgstr "" + +#: .\cookbook\views\api.py:638 +msgid "" +"If recipe should have all (AND=false) or any (OR=true) of the " +"provided foods." +msgstr "" + +#: .\cookbook\views\api.py:639 +msgid "" +"If recipe should be in all (AND=false) or any (OR=true) of the " +"provided books." +msgstr "" + +#: .\cookbook\views\api.py:640 +msgid "If only internal recipes should be returned. [true/false]" +msgstr "" + +#: .\cookbook\views\api.py:641 +msgid "Returns the results in randomized order. [true/false]" +msgstr "" + +#: .\cookbook\views\api.py:642 +msgid "Returns new results first in search results. [true/false]" +msgstr "" + +#: .\cookbook\views\api.py:768 +msgid "" +"Returns the shopping list entry with a primary key of id. Multiple values " +"allowed." +msgstr "" + +#: .\cookbook\views\api.py:771 +msgid "" +"Filter shopping list entries on checked. [true, false, both, recent]
- recent includes unchecked items and recently completed items." +msgstr "" + +#: .\cookbook\views\api.py:773 +msgid "Returns the shopping list entries sorted by supermarket category order." +msgstr "" + +#: .\cookbook\views\api.py:922 .\cookbook\views\data.py:42 #: .\cookbook\views\edit.py:129 .\cookbook\views\new.py:95 msgid "This feature is not yet available in the hosted version of tandoor!" msgstr "Deze optie is nog niet beschikbaar in de gehoste versie van Tandoor!" -#: .\cookbook\views\api.py:745 +#: .\cookbook\views\api.py:944 msgid "Sync successful!" msgstr "Synchronisatie succesvol!" -#: .\cookbook\views\api.py:750 +#: .\cookbook\views\api.py:949 msgid "Error synchronizing with Storage" msgstr "Er is een fout opgetreden bij het synchroniseren met Opslag" -#: .\cookbook\views\api.py:828 +#: .\cookbook\views\api.py:1028 msgid "Nothing to do." msgstr "Niks te doen." -#: .\cookbook\views\api.py:843 +#: .\cookbook\views\api.py:1043 msgid "The requested site provided malformed data and cannot be read." msgstr "" "De opgevraagde site heeft misvormde data verstrekt en kan niet gelezen " "worden." -#: .\cookbook\views\api.py:850 +#: .\cookbook\views\api.py:1050 msgid "The requested page could not be found." msgstr "De opgevraagde pagina kon niet gevonden worden." -#: .\cookbook\views\api.py:859 +#: .\cookbook\views\api.py:1068 msgid "" "The requested site does not provide any recognized data format to import the " "recipe from." @@ -2629,22 +2898,26 @@ msgstr "" "De opgevraagde site biedt geen bekend gegevensformaat aan om het recept van " "te importeren." -#: .\cookbook\views\api.py:873 +#: .\cookbook\views\api.py:1082 +msgid "Connection Refused." +msgstr "" + +#: .\cookbook\views\api.py:1091 msgid "No useable data could be found." msgstr "Er is geen bruikbare data gevonden." -#: .\cookbook\views\api.py:889 +#: .\cookbook\views\api.py:1107 msgid "I couldn't find anything to do." msgstr "Ik kon niks vinden om te doen." #: .\cookbook\views\data.py:34 .\cookbook\views\data.py:129 -#: .\cookbook\views\edit.py:49 .\cookbook\views\import_export.py:73 +#: .\cookbook\views\edit.py:49 .\cookbook\views\import_export.py:80 #: .\cookbook\views\new.py:33 msgid "You have reached the maximum number of recipes for your space." msgstr "Je hebt het maximaal aantal recepten voor jouw ruimte bereikt." #: .\cookbook\views\data.py:38 .\cookbook\views\data.py:133 -#: .\cookbook\views\edit.py:53 .\cookbook\views\import_export.py:77 +#: .\cookbook\views\edit.py:53 .\cookbook\views\import_export.py:84 #: .\cookbook\views\new.py:37 msgid "You have more users than allowed in your space." msgstr "Je hebt meer gebruikers dan toegestaan in jouw ruimte." @@ -2660,7 +2933,7 @@ msgstr[1] "Batch bewerking voldaan. %(count)d Recepten zijn geupdatet." msgid "Monitor" msgstr "Bewaker" -#: .\cookbook\views\delete.py:125 .\cookbook\views\lists.py:86 +#: .\cookbook\views\delete.py:125 .\cookbook\views\lists.py:71 #: .\cookbook\views\new.py:101 msgid "Storage Backend" msgstr "Opslag backend" @@ -2680,7 +2953,7 @@ msgstr "Kookboek" msgid "Bookmarks" msgstr "Bladwijzers" -#: .\cookbook\views\delete.py:192 .\cookbook\views\new.py:235 +#: .\cookbook\views\delete.py:192 .\cookbook\views\new.py:238 msgid "Invite Link" msgstr "Uitnodigingslink" @@ -2704,38 +2977,44 @@ msgstr "Wijzigingen opgeslagen!" msgid "Error saving changes!" msgstr "Fout bij het opslaan van de wijzigingen!" -#: .\cookbook\views\import_export.py:99 +#: .\cookbook\views\import_export.py:106 msgid "Importing is not implemented for this provider" msgstr "Importeren is voor deze provider niet geïmplementeerd" -#: .\cookbook\views\import_export.py:121 +#: .\cookbook\views\import_export.py:127 +msgid "" +"The PDF Exporter is not enabled on this instance as it is still in an " +"experimental state." +msgstr "" + +#: .\cookbook\views\import_export.py:132 msgid "Exporting is not implemented for this provider" msgstr "Exporteren is voor deze provider niet geïmplementeerd" -#: .\cookbook\views\lists.py:26 +#: .\cookbook\views\lists.py:25 msgid "Import Log" msgstr "Import logboek" -#: .\cookbook\views\lists.py:39 +#: .\cookbook\views\lists.py:38 msgid "Discovery" msgstr "Ontdekken" -#: .\cookbook\views\lists.py:69 +#: .\cookbook\views\lists.py:54 msgid "Shopping Lists" msgstr "Boodschappenlijst" -#: .\cookbook\views\lists.py:129 -msgid "Foods" -msgstr "Ingrediënten" - -#: .\cookbook\views\lists.py:163 +#: .\cookbook\views\lists.py:148 msgid "Supermarkets" msgstr "Supermarkten" -#: .\cookbook\views\lists.py:179 +#: .\cookbook\views\lists.py:164 msgid "Shopping Categories" msgstr "Boodschappencategorieën" +#: .\cookbook\views\lists.py:217 +msgid "Steps" +msgstr "Stappen" + #: .\cookbook\views\lists.py:232 msgid "New Shopping List" msgstr "Nieuwe boodschappenlijst" @@ -2748,48 +3027,48 @@ msgstr "Nieuw recept geïmporteerd!" msgid "There was an error importing this recipe!" msgstr "Er is een fout opgetreden bij het importeren van dit recept!" -#: .\cookbook\views\new.py:209 +#: .\cookbook\views\new.py:212 msgid "Hello" msgstr "Hallo" -#: .\cookbook\views\new.py:209 +#: .\cookbook\views\new.py:212 msgid "You have been invited by " msgstr "Je bent uitgenodigd door " -#: .\cookbook\views\new.py:210 +#: .\cookbook\views\new.py:213 msgid " to join their Tandoor Recipes space " msgstr " om zijn/haar Tandoor Recepten ruimte " -#: .\cookbook\views\new.py:211 +#: .\cookbook\views\new.py:214 msgid "Click the following link to activate your account: " msgstr "Klik om de volgende link om je account te activeren: " -#: .\cookbook\views\new.py:212 +#: .\cookbook\views\new.py:215 msgid "" "If the link does not work use the following code to manually join the space: " msgstr "" "Als de linkt niet werkt, gebruik dan de volgende code om handmatig tot de " "ruimte toe te treden: " -#: .\cookbook\views\new.py:213 +#: .\cookbook\views\new.py:216 msgid "The invitation is valid until " msgstr "De uitnodiging is geldig tot " -#: .\cookbook\views\new.py:214 +#: .\cookbook\views\new.py:217 msgid "" "Tandoor Recipes is an Open Source recipe manager. Check it out on GitHub " msgstr "" "Tandoor Recepten is een Open Source recepten manager. Bekijk het op GitHub " -#: .\cookbook\views\new.py:217 +#: .\cookbook\views\new.py:220 msgid "Tandoor Recipes Invite" msgstr "Tandoor Recepten uitnodiging" -#: .\cookbook\views\new.py:224 +#: .\cookbook\views\new.py:227 msgid "Invite link successfully send to user." msgstr "Uitnodigingslink succesvol verstuurd naar gebruiker." -#: .\cookbook\views\new.py:227 +#: .\cookbook\views\new.py:230 msgid "" "You have send to many emails, please share the link manually or wait a few " "hours." @@ -2797,12 +3076,12 @@ msgstr "" "Je hebt te veel e-mails verstuurd, deel de link handmatig of wacht enkele " "uren." -#: .\cookbook\views\new.py:229 +#: .\cookbook\views\new.py:232 msgid "Email to user could not be send, please share link manually." msgstr "" "E-mail aan gebruiker kon niet verzonden worden, deel de link handmatig." -#: .\cookbook\views\views.py:127 +#: .\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." @@ -2810,23 +3089,23 @@ msgstr "" "Je hebt je eigen recepten ruimte succesvol aangemaakt. Start met het " "toevoegen van recepten of nodig anderen uit om je te vergezellen." -#: .\cookbook\views\views.py:175 +#: .\cookbook\views\views.py:174 msgid "You do not have the required permissions to perform this action!" msgstr "Je beschikt niet over de juiste rechten om deze actie uit te voeren!" -#: .\cookbook\views\views.py:186 +#: .\cookbook\views\views.py:185 msgid "Comment saved!" msgstr "Opmerking opgeslagen!" -#: .\cookbook\views\views.py:277 +#: .\cookbook\views\views.py:276 msgid "This feature is not available in the demo version!" msgstr "Deze optie is niet beschikbaar in de demo versie!" -#: .\cookbook\views\views.py:340 +#: .\cookbook\views\views.py:335 msgid "You must select at least one field to search!" msgstr "Je moet tenminste één veld om te doorzoeken selecteren!" -#: .\cookbook\views\views.py:345 +#: .\cookbook\views\views.py:340 msgid "" "To use this search method you must select at least one full text search " "field!" @@ -2834,11 +3113,11 @@ msgstr "" "Om deze zoekmethode te gebruiken moet je tenminste één volledig tekstveld " "selecteren!" -#: .\cookbook\views\views.py:349 +#: .\cookbook\views\views.py:344 msgid "Fuzzy search is not compatible with this search method!" msgstr "'Fuzzy' zoeken is niet te gebruiken met deze zoekmethode!" -#: .\cookbook\views\views.py:452 +#: .\cookbook\views\views.py:470 msgid "" "The setup page can only be used to create the first user! If you have " "forgotten your superuser credentials please consult the django documentation " @@ -2849,31 +3128,31 @@ msgstr "" "documentatie raad moeten plegen voor een methode om je wachtwoord te " "resetten." -#: .\cookbook\views\views.py:459 +#: .\cookbook\views\views.py:477 msgid "Passwords dont match!" msgstr "Wachtwoorden komen niet overeen!" -#: .\cookbook\views\views.py:475 +#: .\cookbook\views\views.py:493 msgid "User has been created, please login!" msgstr "Gebruiker is gecreëerd, Log in alstublieft!" -#: .\cookbook\views\views.py:491 +#: .\cookbook\views\views.py:509 msgid "Malformed Invite Link supplied!" msgstr "Onjuiste uitnodigingslink opgegeven!" -#: .\cookbook\views\views.py:498 +#: .\cookbook\views\views.py:516 msgid "You are already member of a space and therefore cannot join this one." msgstr "Je bent al lid van een ruimte en kan daardoor niet toetreden tot deze." -#: .\cookbook\views\views.py:509 +#: .\cookbook\views\views.py:527 msgid "Successfully joined space." msgstr "Succesvol toegetreden tot ruimte." -#: .\cookbook\views\views.py:515 +#: .\cookbook\views\views.py:533 msgid "Invite Link not valid or already used!" msgstr "De uitnodigingslink is niet valide of al gebruikt!" -#: .\cookbook\views\views.py:579 +#: .\cookbook\views\views.py:614 msgid "" "Reporting share links is not enabled for this instance. Please notify the " "page administrator to report problems." @@ -2881,7 +3160,7 @@ msgstr "" "Het rapporteren van gedeelde links is niet geactiveerd voor deze instantie. " "Rapporteer problemen bij de beheerder van de pagina." -#: .\cookbook\views\views.py:585 +#: .\cookbook\views\views.py:620 msgid "" "Recipe sharing link has been disabled! For additional information please " "contact the page administrator." @@ -2889,6 +3168,10 @@ msgstr "" "Links voor het delen van recepten zijn gedeactiveerd. Neem contact op met de " "paginabeheerder voor aanvullende informatie." +#, python-brace-format +#~ msgid "No {self.basename} with id {child} exists" +#~ msgstr "Er bestaat geen {self.basename} met id {child}" + #~ msgid "New Unit" #~ msgstr "Nieuwe eenheid" @@ -2910,9 +3193,6 @@ msgstr "" #~ msgid "Old Food" #~ msgstr "Oud Ingrediënt" -#~ msgid "Food that should be replaced." -#~ msgstr "Te vervangen Ingrediënt." - #~ msgid "New Entry" #~ msgstr "Nieuw item" @@ -3158,9 +3438,6 @@ msgstr "" #~ msgid "Delete Recipe" #~ msgstr "Verwijder recept" -#~ msgid "Steps" -#~ msgstr "Stappen" - #~ msgid "Password Settings" #~ msgstr "Wachtwoord instellingen" diff --git a/cookbook/locale/pt/LC_MESSAGES/django.mo b/cookbook/locale/pt/LC_MESSAGES/django.mo index 5a8c6d5736..fb128ac63a 100644 Binary files a/cookbook/locale/pt/LC_MESSAGES/django.mo and b/cookbook/locale/pt/LC_MESSAGES/django.mo differ diff --git a/cookbook/locale/pt/LC_MESSAGES/django.po b/cookbook/locale/pt/LC_MESSAGES/django.po index ce9e12075d..ce17747b89 100644 --- a/cookbook/locale/pt/LC_MESSAGES/django.po +++ b/cookbook/locale/pt/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-08 16:27+0100\n" +"POT-Creation-Date: 2022-01-18 14:52+0100\n" "PO-Revision-Date: 2021-11-12 20:06+0000\n" "Last-Translator: Henrique Silva \n" "Language-Team: Portuguese /remote." "php/webdav/
is added automatically)" @@ -212,33 +226,33 @@ msgstr "" "Deixar vazio para Dropbox e inserir apenas url base para Nextcloud (/" "remote.php/webdav/é adicionado automaticamente). " -#: .\cookbook\forms.py:258 .\cookbook\views\edit.py:166 +#: .\cookbook\forms.py:266 .\cookbook\views\edit.py:166 msgid "Storage" msgstr "Armazenamento" -#: .\cookbook\forms.py:260 +#: .\cookbook\forms.py:268 msgid "Active" msgstr "Ativo" -#: .\cookbook\forms.py:265 +#: .\cookbook\forms.py:274 msgid "Search String" msgstr "Procurar" -#: .\cookbook\forms.py:292 +#: .\cookbook\forms.py:301 msgid "File ID" msgstr "ID the ficheiro" -#: .\cookbook\forms.py:313 +#: .\cookbook\forms.py:323 msgid "You must provide at least a recipe or a title." msgstr "É necessário inserir uma receita ou um título." -#: .\cookbook\forms.py:326 +#: .\cookbook\forms.py:336 msgid "You can list default users to share recipes with in the settings." msgstr "" "É possível escolher os utilizadores com quem partilhar receitas por defeitos " "nas definições." -#: .\cookbook\forms.py:327 +#: .\cookbook\forms.py:337 msgid "" "You can use markdown to format this field. See the docs here" @@ -246,15 +260,15 @@ msgstr "" "É possível utilizar markdown para editar este campo. Documentação disponível aqui" -#: .\cookbook\forms.py:353 +#: .\cookbook\forms.py:363 msgid "Maximum number of users for this space reached." msgstr "Número máximo de utilizadores alcançado." -#: .\cookbook\forms.py:359 +#: .\cookbook\forms.py:369 msgid "Email address already taken!" msgstr "Endereço email já utilizado!" -#: .\cookbook\forms.py:367 +#: .\cookbook\forms.py:377 msgid "" "An email address is not required but if present the invite link will be sent " "to the user." @@ -262,15 +276,15 @@ msgstr "" "Um endereço de email não é obrigatório mas se fornecido será enviada uma " "mensagem ao utilizador." -#: .\cookbook\forms.py:382 +#: .\cookbook\forms.py:392 msgid "Name already taken." msgstr "Nome já existente." -#: .\cookbook\forms.py:393 +#: .\cookbook\forms.py:403 msgid "Accept Terms and Privacy" msgstr "Aceitar Termos e Condições" -#: .\cookbook\forms.py:425 +#: .\cookbook\forms.py:435 msgid "" "Determines how fuzzy a search is if it uses trigram similarity matching (e." "g. low values mean more typos are ignored)." @@ -279,7 +293,7 @@ msgstr "" "de semelhança de trigrama (valores mais baixos significam que mais erros são " "ignorados)." -#: .\cookbook\forms.py:435 +#: .\cookbook\forms.py:445 msgid "" "Select type method of search. Click here for " "full desciption of choices." @@ -287,7 +301,7 @@ msgstr "" "Selecionar o método de pesquisa. Uma descrição completa das opções pode ser " "encontrada aqui." -#: .\cookbook\forms.py:436 +#: .\cookbook\forms.py:446 msgid "" "Use fuzzy matching on units, keywords and ingredients when editing and " "importing recipes." @@ -295,7 +309,7 @@ msgstr "" "Utilizar correspondência difusa em unidades, palavras-chave e ingredientes " "ao editar e importar receitas." -#: .\cookbook\forms.py:438 +#: .\cookbook\forms.py:448 msgid "" "Fields to search ignoring accents. Selecting this option can improve or " "degrade search quality depending on language" @@ -303,64 +317,172 @@ msgstr "" "Campos de pesquisa que ignoram pontuação. Esta opção pode aumentar ou " "diminuir a qualidade de pesquisa dependendo da língua em uso" -#: .\cookbook\forms.py:440 +#: .\cookbook\forms.py:450 msgid "" "Fields to search for partial matches. (e.g. searching for 'Pie' will return " "'pie' and 'piece' and 'soapie')" msgstr "" -#: .\cookbook\forms.py:442 +#: .\cookbook\forms.py:452 msgid "" "Fields to search for beginning of word matches. (e.g. searching for 'sa' " "will return 'salad' and 'sandwich')" msgstr "" -#: .\cookbook\forms.py:444 +#: .\cookbook\forms.py:454 msgid "" "Fields to 'fuzzy' search. (e.g. searching for 'recpie' will find 'recipe'.) " "Note: this option will conflict with 'web' and 'raw' methods of search." msgstr "" -#: .\cookbook\forms.py:446 +#: .\cookbook\forms.py:456 msgid "" "Fields to full text search. Note: 'web', 'phrase', and 'raw' search methods " "only function with fulltext fields." msgstr "" -#: .\cookbook\forms.py:450 +#: .\cookbook\forms.py:460 #, fuzzy #| msgid "Search" msgid "Search Method" msgstr "Procurar" -#: .\cookbook\forms.py:451 +#: .\cookbook\forms.py:461 msgid "Fuzzy Lookups" msgstr "" -#: .\cookbook\forms.py:452 +#: .\cookbook\forms.py:462 msgid "Ignore Accent" msgstr "" -#: .\cookbook\forms.py:453 +#: .\cookbook\forms.py:463 msgid "Partial Match" msgstr "" -#: .\cookbook\forms.py:454 +#: .\cookbook\forms.py:464 msgid "Starts Wtih" msgstr "" -#: .\cookbook\forms.py:455 +#: .\cookbook\forms.py:465 #, fuzzy #| msgid "Search" msgid "Fuzzy Search" msgstr "Procurar" -#: .\cookbook\forms.py:456 +#: .\cookbook\forms.py:466 #, fuzzy #| msgid "Text" msgid "Full Text" msgstr "Texto" +#: .\cookbook\forms.py:491 +msgid "" +"Users will see all items you add to your shopping list. They must add you " +"to see items on their list." +msgstr "" + +#: .\cookbook\forms.py:497 +msgid "" +"When adding a meal plan to the shopping list (manually or automatically), " +"include all related recipes." +msgstr "" + +#: .\cookbook\forms.py:498 +msgid "" +"When adding a meal plan to the shopping list (manually or automatically), " +"exclude ingredients that are on hand." +msgstr "" + +#: .\cookbook\forms.py:499 +msgid "Default number of hours to delay a shopping list entry." +msgstr "" + +#: .\cookbook\forms.py:500 +msgid "Filter shopping list to only include supermarket categories." +msgstr "" + +#: .\cookbook\forms.py:501 +msgid "Days of recent shopping list entries to display." +msgstr "" + +#: .\cookbook\forms.py:502 +msgid "Mark food 'On Hand' when checked off shopping list." +msgstr "" + +#: .\cookbook\forms.py:503 +msgid "Delimiter to use for CSV exports." +msgstr "" + +#: .\cookbook\forms.py:504 +msgid "Prefix to add when copying list to the clipboard." +msgstr "" + +#: .\cookbook\forms.py:508 +#, fuzzy +#| msgid "Shopping" +msgid "Share Shopping List" +msgstr "Compras" + +#: .\cookbook\forms.py:509 +msgid "Autosync" +msgstr "" + +#: .\cookbook\forms.py:510 +msgid "Auto Add Meal Plan" +msgstr "" + +#: .\cookbook\forms.py:511 +msgid "Exclude On Hand" +msgstr "" + +#: .\cookbook\forms.py:512 +msgid "Include Related" +msgstr "" + +#: .\cookbook\forms.py:513 +msgid "Default Delay Hours" +msgstr "" + +#: .\cookbook\forms.py:514 +msgid "Filter to Supermarket" +msgstr "" + +#: .\cookbook\forms.py:515 +msgid "Recent Days" +msgstr "" + +#: .\cookbook\forms.py:516 +msgid "CSV Delimiter" +msgstr "" + +#: .\cookbook\forms.py:517 .\cookbook\templates\shopping_list.html:322 +msgid "List Prefix" +msgstr "" + +#: .\cookbook\forms.py:518 +msgid "Auto On Hand" +msgstr "" + +#: .\cookbook\forms.py:528 +msgid "Reset Food Inheritance" +msgstr "" + +#: .\cookbook\forms.py:529 +msgid "Reset all food to inherit the fields configured." +msgstr "" + +#: .\cookbook\forms.py:541 +#, fuzzy +#| msgid "Food that should be replaced." +msgid "Fields on food that should be inherited by default." +msgstr "Prato a ser alterado." + +#: .\cookbook\forms.py:542 +#, fuzzy +#| msgid "Show recently viewed recipes on search page." +msgid "Show recipe counts on search filters" +msgstr "Mostrar receitas recentes na página de pesquisa." + #: .\cookbook\helper\AllAuthCustomAdapter.py:36 msgid "" "In order to prevent spam, the requested email was not send. Please wait a " @@ -368,19 +490,19 @@ msgid "" msgstr "" #: .\cookbook\helper\permission_helper.py:136 -#: .\cookbook\helper\permission_helper.py:159 .\cookbook\views\views.py:149 +#: .\cookbook\helper\permission_helper.py:159 .\cookbook\views\views.py:148 msgid "You are not logged in and therefore cannot view this page!" msgstr "Autenticação necessária para aceder a esta página!" #: .\cookbook\helper\permission_helper.py:140 #: .\cookbook\helper\permission_helper.py:146 #: .\cookbook\helper\permission_helper.py:171 -#: .\cookbook\helper\permission_helper.py:216 -#: .\cookbook\helper\permission_helper.py:230 -#: .\cookbook\helper\permission_helper.py:241 -#: .\cookbook\helper\permission_helper.py:252 .\cookbook\views\data.py:47 -#: .\cookbook\views\views.py:160 .\cookbook\views\views.py:167 -#: .\cookbook\views\views.py:233 +#: .\cookbook\helper\permission_helper.py:219 +#: .\cookbook\helper\permission_helper.py:233 +#: .\cookbook\helper\permission_helper.py:244 +#: .\cookbook\helper\permission_helper.py:255 .\cookbook\views\data.py:47 +#: .\cookbook\views\views.py:159 .\cookbook\views\views.py:166 +#: .\cookbook\views\views.py:232 msgid "You do not have the required permissions to view this page!" msgstr "Sem permissões para aceder a esta página!" @@ -390,41 +512,42 @@ msgstr "Sem permissões para aceder a esta página!" msgid "You cannot interact with this object as it is not owned by you!" msgstr "" +#: .\cookbook\helper\recipe_search.py:473 +msgid "One of queryset or hash_key must be provided" +msgstr "" + +#: .\cookbook\helper\shopping_helper.py:54 +#, fuzzy +#| msgid "You must provide at least a recipe or a title." +msgid "You must supply a recipe or mealplan" +msgstr "É necessário inserir uma receita ou um título." + +#: .\cookbook\helper\shopping_helper.py:58 +msgid "You must supply a created_by" +msgstr "" + #: .\cookbook\helper\template_helper.py:61 #: .\cookbook\helper\template_helper.py:63 msgid "Could not parse template code." msgstr "" -#: .\cookbook\integration\integration.py:126 -#: .\cookbook\templates\import.html:14 .\cookbook\templates\import.html:20 -#: .\cookbook\templates\import_response.html:7 -#: .\cookbook\templates\test.html:14 .\cookbook\templates\test.html:20 -#: .\cookbook\templates\url_import.html:27 -#: .\cookbook\templates\url_import.html:105 -#: .\cookbook\templates\url_import.html:127 -#: .\cookbook\templates\url_import.html:321 -#: .\cookbook\templates\url_import.html:609 .\cookbook\views\delete.py:89 -#: .\cookbook\views\edit.py:200 -msgid "Import" -msgstr "Importar" - -#: .\cookbook\integration\integration.py:208 +#: .\cookbook\integration\integration.py:200 msgid "" "Importer expected a .zip file. Did you choose the correct importer type for " "your data ?" msgstr "" -#: .\cookbook\integration\integration.py:211 +#: .\cookbook\integration\integration.py:203 msgid "" "An unexpected error occurred during the import. Please make sure you have " "uploaded a valid file." msgstr "" -#: .\cookbook\integration\integration.py:216 +#: .\cookbook\integration\integration.py:208 msgid "The following recipes were ignored because they already existed:" msgstr "" -#: .\cookbook\integration\integration.py:220 +#: .\cookbook\integration\integration.py:212 #, fuzzy, python-format #| msgid "Import Recipes" msgid "Imported %s recipes." @@ -440,32 +563,32 @@ msgstr "Nota" msgid "Nutritional Information" msgstr "" -#: .\cookbook\integration\paprika.py:53 .\cookbook\templates\url_import.html:40 +#: .\cookbook\integration\paprika.py:53 .\cookbook\templates\url_import.html:42 msgid "Source" msgstr "" -#: .\cookbook\integration\safron.py:23 -#: .\cookbook\templates\include\log_cooking.html:16 -#: .\cookbook\templates\url_import.html:228 -#: .\cookbook\templates\url_import.html:459 +#: .\cookbook\integration\saffron.py:23 +#: .\cookbook\templates\include\log_cooking.html:18 +#: .\cookbook\templates\url_import.html:231 +#: .\cookbook\templates\url_import.html:462 msgid "Servings" msgstr "Porções" -#: .\cookbook\integration\safron.py:25 +#: .\cookbook\integration\saffron.py:25 msgid "Waiting time" msgstr "" -#: .\cookbook\integration\safron.py:27 +#: .\cookbook\integration\saffron.py:27 msgid "Preparation Time" msgstr "" -#: .\cookbook\integration\safron.py:29 .\cookbook\templates\base.html:78 +#: .\cookbook\integration\saffron.py:29 .\cookbook\templates\base.html:78 #: .\cookbook\templates\forms\ingredients.html:7 #: .\cookbook\templates\index.html:7 msgid "Cookbook" msgstr "Livro de refeições" -#: .\cookbook\integration\safron.py:31 +#: .\cookbook\integration\saffron.py:31 msgid "Section" msgstr "" @@ -501,113 +624,144 @@ msgstr "Jantar" msgid "Other" msgstr "Outro" -#: .\cookbook\models.py:150 +#: .\cookbook\models.py:246 msgid "" "Maximum file storage for space in MB. 0 for unlimited, -1 to disable file " "upload." msgstr "" -#: .\cookbook\models.py:202 .\cookbook\templates\search.html:7 -#: .\cookbook\templates\shopping_list.html:59 +#: .\cookbook\models.py:300 .\cookbook\templates\search.html:7 +#: .\cookbook\templates\shopping_list.html:53 msgid "Search" msgstr "Procurar" -#: .\cookbook\models.py:203 .\cookbook\templates\base.html:82 +#: .\cookbook\models.py:301 .\cookbook\templates\base.html:82 #: .\cookbook\templates\meal_plan.html:7 #: .\cookbook\templates\meal_plan_new.html:7 .\cookbook\views\delete.py:181 #: .\cookbook\views\edit.py:220 .\cookbook\views\new.py:184 msgid "Meal-Plan" msgstr "Plano de refeição" -#: .\cookbook\models.py:204 .\cookbook\templates\base.html:90 +#: .\cookbook\models.py:302 .\cookbook\templates\base.html:90 msgid "Books" msgstr "Livros" -#: .\cookbook\models.py:212 +#: .\cookbook\models.py:310 msgid "Small" msgstr "Pequeno" -#: .\cookbook\models.py:212 +#: .\cookbook\models.py:310 msgid "Large" msgstr "Grande" -#: .\cookbook\models.py:212 .\cookbook\templates\generic\new_template.html:6 +#: .\cookbook\models.py:310 .\cookbook\templates\generic\new_template.html:6 #: .\cookbook\templates\generic\new_template.html:14 msgid "New" msgstr "Novo" -#: .\cookbook\models.py:396 +#: .\cookbook\models.py:512 msgid " is part of a recipe step and cannot be deleted" msgstr "" -#: .\cookbook\models.py:441 .\cookbook\templates\url_import.html:42 +#: .\cookbook\models.py:586 .\cookbook\templates\url_import.html:44 msgid "Text" msgstr "Texto" -#: .\cookbook\models.py:441 +#: .\cookbook\models.py:586 msgid "Time" msgstr "Tempo" -#: .\cookbook\models.py:441 .\cookbook\templates\url_import.html:44 +#: .\cookbook\models.py:586 .\cookbook\templates\url_import.html:46 #, fuzzy #| msgid "File ID" msgid "File" msgstr "ID the ficheiro" -#: .\cookbook\models.py:441 +#: .\cookbook\models.py:586 #: .\cookbook\templates\include\recipe_open_modal.html:7 #: .\cookbook\views\delete.py:39 .\cookbook\views\edit.py:260 #: .\cookbook\views\new.py:53 msgid "Recipe" msgstr "Receita" -#: .\cookbook\models.py:871 .\cookbook\templates\search_info.html:28 +#: .\cookbook\models.py:1041 .\cookbook\templates\search_info.html:28 msgid "Simple" msgstr "" -#: .\cookbook\models.py:872 .\cookbook\templates\search_info.html:33 +#: .\cookbook\models.py:1042 .\cookbook\templates\search_info.html:33 msgid "Phrase" msgstr "" -#: .\cookbook\models.py:873 .\cookbook\templates\search_info.html:38 +#: .\cookbook\models.py:1043 .\cookbook\templates\search_info.html:38 msgid "Web" msgstr "" -#: .\cookbook\models.py:874 .\cookbook\templates\search_info.html:47 +#: .\cookbook\models.py:1044 .\cookbook\templates\search_info.html:47 msgid "Raw" msgstr "" -#: .\cookbook\models.py:912 +#: .\cookbook\models.py:1082 #, fuzzy #| msgid "New Food" msgid "Food Alias" msgstr "Novo Prato" -#: .\cookbook\models.py:912 +#: .\cookbook\models.py:1082 #, fuzzy #| msgid "Units" msgid "Unit Alias" msgstr "Unidades" -#: .\cookbook\models.py:912 +#: .\cookbook\models.py:1082 #, fuzzy #| msgid "Keywords" msgid "Keyword Alias" msgstr "Palavras-chave" -#: .\cookbook\serializer.py:157 +#: .\cookbook\serializer.py:175 +msgid "A user is required" +msgstr "" + +#: .\cookbook\serializer.py:195 msgid "File uploads are not enabled for this Space." msgstr "" -#: .\cookbook\serializer.py:168 +#: .\cookbook\serializer.py:206 msgid "You have reached your file upload limit." msgstr "" +#: .\cookbook\serializer.py:962 +msgid "Existing shopping list to update" +msgstr "" + +#: .\cookbook\serializer.py:964 +msgid "" +"List of ingredient IDs from the recipe to add, if not provided all " +"ingredients will be added." +msgstr "" + +#: .\cookbook\serializer.py:965 +msgid "" +"Providing a list_recipe ID and servings of 0 will delete that shopping list." +msgstr "" + +#: .\cookbook\serializer.py:973 +msgid "Amount of food to add to the shopping list" +msgstr "" + +#: .\cookbook\serializer.py:974 +msgid "ID of unit to use for the shopping list" +msgstr "" + +#: .\cookbook\serializer.py:975 +msgid "When set to true will delete all food from active shopping lists." +msgstr "" + #: .\cookbook\tables.py:35 .\cookbook\templates\generic\edit_template.html:6 #: .\cookbook\templates\generic\edit_template.html:14 #: .\cookbook\templates\recipes_table.html:82 -#: .\cookbook\templates\shopping_list.html:40 -#: .\cookbook\templates\space.html:90 +#: .\cookbook\templates\shopping_list.html:37 +#: .\cookbook\templates\space.html:109 msgid "Edit" msgstr "Editar" @@ -745,27 +899,27 @@ msgstr "Iniciar sessão" msgid "Sign In" msgstr "" -#: .\cookbook\templates\account\login.html:32 +#: .\cookbook\templates\account\login.html:34 #: .\cookbook\templates\socialaccount\signup.html:8 #: .\cookbook\templates\socialaccount\signup.html:57 msgid "Sign Up" msgstr "" -#: .\cookbook\templates\account\login.html:36 -#: .\cookbook\templates\account\login.html:37 +#: .\cookbook\templates\account\login.html:39 +#: .\cookbook\templates\account\login.html:41 #: .\cookbook\templates\account\password_reset.html:29 msgid "Reset My Password" msgstr "" -#: .\cookbook\templates\account\login.html:37 +#: .\cookbook\templates\account\login.html:40 msgid "Lost your password?" msgstr "" -#: .\cookbook\templates\account\login.html:48 +#: .\cookbook\templates\account\login.html:52 msgid "Social Login" msgstr "" -#: .\cookbook\templates\account\login.html:49 +#: .\cookbook\templates\account\login.html:53 msgid "You can use any of the following providers to sign in." msgstr "" @@ -791,7 +945,7 @@ msgstr "" #: .\cookbook\templates\account\password_change.html:12 #: .\cookbook\templates\account\password_set.html:12 -#: .\cookbook\templates\settings.html:69 +#: .\cookbook\templates\settings.html:76 #, fuzzy #| msgid "Settings" msgid "Password" @@ -912,15 +1066,21 @@ msgstr "Compras" msgid "Keyword" msgstr "Palavra-chave" +#: .\cookbook\templates\base.html:125 .\cookbook\views\lists.py:114 +#, fuzzy +#| msgid "New Food" +msgid "Foods" +msgstr "Novo Prato" + #: .\cookbook\templates\base.html:137 #: .\cookbook\templates\forms\ingredients.html:24 -#: .\cookbook\templates\space.html:41 .\cookbook\templates\stats.html:26 -#: .\cookbook\views\lists.py:146 +#: .\cookbook\templates\space.html:47 .\cookbook\templates\stats.html:26 +#: .\cookbook\views\lists.py:131 msgid "Units" msgstr "Unidades" #: .\cookbook\templates\base.html:151 -#: .\cookbook\templates\shopping_list.html:237 +#: .\cookbook\templates\shopping_list.html:208 #: .\cookbook\templates\supermarket.html:7 msgid "Supermarket" msgstr "" @@ -931,11 +1091,11 @@ msgstr "" msgid "Supermarket Category" msgstr "Editar Categorias em massa" -#: .\cookbook\templates\base.html:175 .\cookbook\views\lists.py:195 +#: .\cookbook\templates\base.html:175 .\cookbook\views\lists.py:180 msgid "Automations" msgstr "" -#: .\cookbook\templates\base.html:189 .\cookbook\views\lists.py:215 +#: .\cookbook\templates\base.html:189 .\cookbook\views\lists.py:200 #, fuzzy #| msgid "File ID" msgid "Files" @@ -952,7 +1112,7 @@ msgstr "Histórico" #: .\cookbook\templates\base.html:228 .\cookbook\templates\export.html:14 #: .\cookbook\templates\export.html:20 -#: .\cookbook\templates\shopping_list.html:358 +#: .\cookbook\templates\shopping_list.html:310 #: .\cookbook\templates\test2.html:14 .\cookbook\templates\test2.html:20 msgid "Export" msgstr "Exportar" @@ -962,19 +1122,19 @@ msgid "Import Recipe" msgstr "Importar Receita" #: .\cookbook\templates\base.html:246 -#: .\cookbook\templates\shopping_list.html:195 -#: .\cookbook\templates\shopping_list.html:217 +#: .\cookbook\templates\shopping_list.html:165 +#: .\cookbook\templates\shopping_list.html:188 msgid "Create" msgstr "Criar" #: .\cookbook\templates\base.html:259 #: .\cookbook\templates\generic\list_template.html:14 -#: .\cookbook\templates\space.html:58 .\cookbook\templates\stats.html:43 +#: .\cookbook\templates\space.html:69 .\cookbook\templates\stats.html:43 msgid "External Recipes" msgstr "" -#: .\cookbook\templates\base.html:262 .\cookbook\templates\space.html:7 -#: .\cookbook\templates\space.html:19 +#: .\cookbook\templates\base.html:262 .\cookbook\templates\space.html:8 +#: .\cookbook\templates\space.html:20 .\cookbook\templates\space.html:150 #, fuzzy #| msgid "Settings" msgid "Space Settings" @@ -1042,11 +1202,13 @@ msgstr "O caminho deve estar no seguinte formato" #: .\cookbook\templates\forms\edit_import_recipe.html:14 #: .\cookbook\templates\generic\edit_template.html:23 #: .\cookbook\templates\generic\new_template.html:23 -#: .\cookbook\templates\include\log_cooking.html:28 -#: .\cookbook\templates\settings.html:63 .\cookbook\templates\settings.html:105 -#: .\cookbook\templates\settings.html:123 -#: .\cookbook\templates\settings.html:195 -#: .\cookbook\templates\shopping_list.html:360 +#: .\cookbook\templates\include\log_cooking.html:30 +#: .\cookbook\templates\settings.html:70 .\cookbook\templates\settings.html:112 +#: .\cookbook\templates\settings.html:130 +#: .\cookbook\templates\settings.html:202 +#: .\cookbook\templates\settings.html:213 +#: .\cookbook\templates\shopping_list.html:311 +#: .\cookbook\templates\space.html:155 msgid "Save" msgstr "Gravar" @@ -1159,15 +1321,20 @@ msgid "Delete original file" msgstr "Apagar ficheiro original" #: .\cookbook\templates\generic\list_template.html:6 -#: .\cookbook\templates\generic\list_template.html:21 +#: .\cookbook\templates\generic\list_template.html:22 msgid "List" msgstr "Listar " -#: .\cookbook\templates\generic\list_template.html:34 +#: .\cookbook\templates\generic\list_template.html:33 +#: .\cookbook\templates\shopping_list.html:33 +msgid "Try the new shopping list" +msgstr "" + +#: .\cookbook\templates\generic\list_template.html:45 msgid "Filter" msgstr "Filtrar" -#: .\cookbook\templates\generic\list_template.html:39 +#: .\cookbook\templates\generic\list_template.html:50 msgid "Import all" msgstr "Importar tudo" @@ -1193,19 +1360,31 @@ msgstr "Registro Cook" msgid "Import Recipes" msgstr "Importar Receitas" -#: .\cookbook\templates\include\log_cooking.html:7 +#: .\cookbook\templates\import.html:14 .\cookbook\templates\import.html:20 +#: .\cookbook\templates\import_response.html:7 +#: .\cookbook\templates\test.html:14 .\cookbook\templates\test.html:20 +#: .\cookbook\templates\url_import.html:29 +#: .\cookbook\templates\url_import.html:108 +#: .\cookbook\templates\url_import.html:130 +#: .\cookbook\templates\url_import.html:324 +#: .\cookbook\templates\url_import.html:618 .\cookbook\views\delete.py:89 +#: .\cookbook\views\edit.py:200 +msgid "Import" +msgstr "Importar" + +#: .\cookbook\templates\include\log_cooking.html:9 msgid "Log Recipe Cooking" msgstr "Registro Receita Cooking" -#: .\cookbook\templates\include\log_cooking.html:13 +#: .\cookbook\templates\include\log_cooking.html:15 msgid "All fields are optional and can be left empty." msgstr "Todos os campos são opcionais e podem ser deixados vazios. " -#: .\cookbook\templates\include\log_cooking.html:19 +#: .\cookbook\templates\include\log_cooking.html:21 msgid "Rating" msgstr "Classificação " -#: .\cookbook\templates\include\log_cooking.html:27 +#: .\cookbook\templates\include\log_cooking.html:29 #: .\cookbook\templates\include\recipe_open_modal.html:18 msgid "Close" msgstr "Fechar" @@ -1259,7 +1438,7 @@ msgstr "Redefinir Procura" msgid "Last viewed" msgstr "Ultimo visto" -#: .\cookbook\templates\index.html:87 .\cookbook\templates\space.html:35 +#: .\cookbook\templates\index.html:87 .\cookbook\templates\space.html:37 #: .\cookbook\templates\stats.html:22 msgid "Recipes" msgstr "Receitas" @@ -1416,7 +1595,7 @@ msgid "Created by" msgstr "" #: .\cookbook\templates\meal_plan_entry.html:20 -#: .\cookbook\templates\shopping_list.html:261 +#: .\cookbook\templates\shopping_list.html:232 msgid "Shared with" msgstr "" @@ -1533,17 +1712,17 @@ msgstr "" #: .\cookbook\templates\recipes_table.html:19 #: .\cookbook\templates\recipes_table.html:23 -#: .\cookbook\templates\url_import.html:444 +#: .\cookbook\templates\url_import.html:447 msgid "Recipe Image" msgstr "" #: .\cookbook\templates\recipes_table.html:51 -#: .\cookbook\templates\url_import.html:449 +#: .\cookbook\templates\url_import.html:452 msgid "Preparation time ca." msgstr "" #: .\cookbook\templates\recipes_table.html:57 -#: .\cookbook\templates\url_import.html:454 +#: .\cookbook\templates\url_import.html:457 msgid "Waiting time ca." msgstr "" @@ -1561,7 +1740,7 @@ msgstr "" #: .\cookbook\templates\search_info.html:5 #: .\cookbook\templates\search_info.html:9 -#: .\cookbook\templates\settings.html:165 +#: .\cookbook\templates\settings.html:172 #, fuzzy #| msgid "Search String" msgid "Search Settings" @@ -1744,109 +1923,121 @@ msgstr "Definições" msgid "Search-Settings" msgstr "Procurar" -#: .\cookbook\templates\settings.html:58 +#: .\cookbook\templates\settings.html:56 +#, fuzzy +#| msgid "Search String" +msgid "Shopping-Settings" +msgstr "Procurar" + +#: .\cookbook\templates\settings.html:65 #, fuzzy #| msgid "Settings" msgid "Name Settings" msgstr "Definições" -#: .\cookbook\templates\settings.html:66 +#: .\cookbook\templates\settings.html:73 #, fuzzy #| msgid "Settings" msgid "Account Settings" msgstr "Definições" -#: .\cookbook\templates\settings.html:68 +#: .\cookbook\templates\settings.html:75 #, fuzzy #| msgid "Settings" msgid "Emails" msgstr "Definições" -#: .\cookbook\templates\settings.html:71 +#: .\cookbook\templates\settings.html:78 #: .\cookbook\templates\socialaccount\connections.html:11 msgid "Social" msgstr "" -#: .\cookbook\templates\settings.html:84 +#: .\cookbook\templates\settings.html:91 msgid "Language" msgstr "" -#: .\cookbook\templates\settings.html:114 +#: .\cookbook\templates\settings.html:121 msgid "Style" msgstr "" -#: .\cookbook\templates\settings.html:135 +#: .\cookbook\templates\settings.html:142 msgid "API Token" msgstr "" -#: .\cookbook\templates\settings.html:136 +#: .\cookbook\templates\settings.html:143 msgid "" "You can use both basic authentication and token based authentication to " "access the REST API." msgstr "" -#: .\cookbook\templates\settings.html:153 +#: .\cookbook\templates\settings.html:160 msgid "" "Use the token as an Authorization header prefixed by the word token as shown " "in the following examples:" msgstr "" -#: .\cookbook\templates\settings.html:155 +#: .\cookbook\templates\settings.html:162 msgid "or" msgstr "" -#: .\cookbook\templates\settings.html:166 +#: .\cookbook\templates\settings.html:173 msgid "" "There are many options to configure the search depending on your personal " "preferences." msgstr "" -#: .\cookbook\templates\settings.html:167 +#: .\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 "" -#: .\cookbook\templates\settings.html:168 +#: .\cookbook\templates\settings.html:175 msgid "" "If you do want to configure the search you can read about the different " "options here." msgstr "" -#: .\cookbook\templates\settings.html:173 +#: .\cookbook\templates\settings.html:180 msgid "Fuzzy" msgstr "" -#: .\cookbook\templates\settings.html:174 +#: .\cookbook\templates\settings.html:181 msgid "" "Find what you need even if your search or the recipe contains typos. Might " "return more results than needed to make sure you find what you are looking " "for." msgstr "" -#: .\cookbook\templates\settings.html:175 +#: .\cookbook\templates\settings.html:182 msgid "This is the default behavior" msgstr "" -#: .\cookbook\templates\settings.html:176 -#: .\cookbook\templates\settings.html:184 +#: .\cookbook\templates\settings.html:183 +#: .\cookbook\templates\settings.html:191 msgid "Apply" msgstr "" -#: .\cookbook\templates\settings.html:181 +#: .\cookbook\templates\settings.html:188 msgid "Precise" msgstr "" -#: .\cookbook\templates\settings.html:182 +#: .\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 "" -#: .\cookbook\templates\settings.html:183 +#: .\cookbook\templates\settings.html:190 msgid "Perfect for large Databases" msgstr "" +#: .\cookbook\templates\settings.html:207 +#, fuzzy +#| msgid "Settings" +msgid "Shopping Settings" +msgstr "Definições" + #: .\cookbook\templates\setup.html:6 .\cookbook\templates\system.html:5 msgid "Cookbook Setup" msgstr "" @@ -1864,81 +2055,73 @@ msgstr "" msgid "Create Superuser account" msgstr "" -#: .\cookbook\templates\shopping_list.html:7 +#: .\cookbook\templates\shopping_list.html:8 #: .\cookbook\templates\shopping_list.html:29 -#: .\cookbook\templates\shopping_list.html:721 +#: .\cookbook\templates\shopping_list.html:663 msgid "Shopping List" msgstr "" -#: .\cookbook\templates\shopping_list.html:34 -msgid "Try the new shopping list" -msgstr "" - -#: .\cookbook\templates\shopping_list.html:63 +#: .\cookbook\templates\shopping_list.html:55 msgid "Search Recipe" msgstr "Procure Receita" -#: .\cookbook\templates\shopping_list.html:86 +#: .\cookbook\templates\shopping_list.html:72 msgid "Shopping Recipes" msgstr "" -#: .\cookbook\templates\shopping_list.html:90 +#: .\cookbook\templates\shopping_list.html:74 msgid "No recipes selected" msgstr "" -#: .\cookbook\templates\shopping_list.html:157 +#: .\cookbook\templates\shopping_list.html:131 msgid "Entry Mode" msgstr "" -#: .\cookbook\templates\shopping_list.html:165 +#: .\cookbook\templates\shopping_list.html:139 msgid "Add Entry" msgstr "" -#: .\cookbook\templates\shopping_list.html:181 +#: .\cookbook\templates\shopping_list.html:152 msgid "Amount" msgstr "" -#: .\cookbook\templates\shopping_list.html:194 +#: .\cookbook\templates\shopping_list.html:164 msgid "Select Unit" msgstr "Selecionar Unidade" -#: .\cookbook\templates\shopping_list.html:196 -#: .\cookbook\templates\shopping_list.html:218 -#: .\cookbook\templates\shopping_list.html:248 -#: .\cookbook\templates\shopping_list.html:272 -#: .\cookbook\templates\url_import.html:500 -#: .\cookbook\templates\url_import.html:532 +#: .\cookbook\templates\shopping_list.html:166 +#: .\cookbook\templates\shopping_list.html:189 +#: .\cookbook\templates\shopping_list.html:219 +#: .\cookbook\templates\shopping_list.html:243 +#: .\cookbook\templates\url_import.html:505 +#: .\cookbook\templates\url_import.html:537 msgid "Select" msgstr "Selecionar" -#: .\cookbook\templates\shopping_list.html:216 +#: .\cookbook\templates\shopping_list.html:187 msgid "Select Food" msgstr "" -#: .\cookbook\templates\shopping_list.html:247 +#: .\cookbook\templates\shopping_list.html:218 msgid "Select Supermarket" msgstr "" -#: .\cookbook\templates\shopping_list.html:271 +#: .\cookbook\templates\shopping_list.html:242 msgid "Select User" msgstr "" -#: .\cookbook\templates\shopping_list.html:290 +#: .\cookbook\templates\shopping_list.html:258 msgid "Finished" msgstr "" -#: .\cookbook\templates\shopping_list.html:303 +#: .\cookbook\templates\shopping_list.html:267 msgid "You are offline, shopping list might not syncronize." msgstr "" -#: .\cookbook\templates\shopping_list.html:368 +#: .\cookbook\templates\shopping_list.html:318 msgid "Copy/Export" msgstr "" -#: .\cookbook\templates\shopping_list.html:372 -msgid "List Prefix" -msgstr "" - #: .\cookbook\templates\socialaccount\connections.html:4 #: .\cookbook\templates\socialaccount\connections.html:15 msgid "Account Connections" @@ -1988,84 +2171,84 @@ msgstr "" msgid "Sign in using" msgstr "" -#: .\cookbook\templates\space.html:23 +#: .\cookbook\templates\space.html:25 msgid "Space:" msgstr "" -#: .\cookbook\templates\space.html:24 +#: .\cookbook\templates\space.html:26 msgid "Manage Subscription" msgstr "" -#: .\cookbook\templates\space.html:32 .\cookbook\templates\stats.html:19 +#: .\cookbook\templates\space.html:34 .\cookbook\templates\stats.html:19 msgid "Number of objects" msgstr "" -#: .\cookbook\templates\space.html:45 .\cookbook\templates\stats.html:30 +#: .\cookbook\templates\space.html:54 .\cookbook\templates\stats.html:30 msgid "Recipe Imports" msgstr "" -#: .\cookbook\templates\space.html:53 .\cookbook\templates\stats.html:38 +#: .\cookbook\templates\space.html:62 .\cookbook\templates\stats.html:38 msgid "Objects stats" msgstr "" -#: .\cookbook\templates\space.html:56 .\cookbook\templates\stats.html:41 +#: .\cookbook\templates\space.html:65 .\cookbook\templates\stats.html:41 msgid "Recipes without Keywords" msgstr "" -#: .\cookbook\templates\space.html:60 .\cookbook\templates\stats.html:45 +#: .\cookbook\templates\space.html:73 .\cookbook\templates\stats.html:45 msgid "Internal Recipes" msgstr "" -#: .\cookbook\templates\space.html:73 +#: .\cookbook\templates\space.html:89 msgid "Members" msgstr "" -#: .\cookbook\templates\space.html:77 +#: .\cookbook\templates\space.html:95 msgid "Invite User" msgstr "" -#: .\cookbook\templates\space.html:88 +#: .\cookbook\templates\space.html:107 msgid "User" msgstr "" -#: .\cookbook\templates\space.html:89 +#: .\cookbook\templates\space.html:108 msgid "Groups" msgstr "" -#: .\cookbook\templates\space.html:105 +#: .\cookbook\templates\space.html:119 #, fuzzy #| msgid "Admin" msgid "admin" msgstr "Administração" -#: .\cookbook\templates\space.html:106 +#: .\cookbook\templates\space.html:120 msgid "user" msgstr "" -#: .\cookbook\templates\space.html:107 +#: .\cookbook\templates\space.html:121 msgid "guest" msgstr "" -#: .\cookbook\templates\space.html:108 +#: .\cookbook\templates\space.html:122 msgid "remove" msgstr "" -#: .\cookbook\templates\space.html:112 +#: .\cookbook\templates\space.html:126 msgid "Update" msgstr "" -#: .\cookbook\templates\space.html:116 +#: .\cookbook\templates\space.html:130 msgid "You cannot edit yourself." msgstr "" -#: .\cookbook\templates\space.html:123 +#: .\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 "Ainda não há receitas neste livro." -#: .\cookbook\templates\space.html:130 .\cookbook\templates\system.html:21 -#: .\cookbook\views\lists.py:100 +#: .\cookbook\templates\space.html:143 .\cookbook\templates\system.html:21 +#: .\cookbook\views\lists.py:85 msgid "Invite Links" msgstr "" @@ -2174,182 +2357,182 @@ msgid "" " " msgstr "" -#: .\cookbook\templates\url_import.html:6 +#: .\cookbook\templates\url_import.html:8 msgid "URL Import" msgstr "" -#: .\cookbook\templates\url_import.html:31 +#: .\cookbook\templates\url_import.html:33 msgid "Drag me to your bookmarks to import recipes from anywhere" msgstr "" -#: .\cookbook\templates\url_import.html:32 +#: .\cookbook\templates\url_import.html:34 msgid "Bookmark Me!" msgstr "" -#: .\cookbook\templates\url_import.html:36 +#: .\cookbook\templates\url_import.html:38 msgid "URL" msgstr "" -#: .\cookbook\templates\url_import.html:38 +#: .\cookbook\templates\url_import.html:40 msgid "App" msgstr "" -#: .\cookbook\templates\url_import.html:62 +#: .\cookbook\templates\url_import.html:64 msgid "Enter website URL" msgstr "" -#: .\cookbook\templates\url_import.html:101 +#: .\cookbook\templates\url_import.html:104 msgid "Select recipe files to import or drop them here..." msgstr "" -#: .\cookbook\templates\url_import.html:122 +#: .\cookbook\templates\url_import.html:125 msgid "Paste json or html source here to load recipe." msgstr "" -#: .\cookbook\templates\url_import.html:150 +#: .\cookbook\templates\url_import.html:153 #, fuzzy #| msgid "View Recipe" msgid "Preview Recipe Data" msgstr "Ver Receita" -#: .\cookbook\templates\url_import.html:151 +#: .\cookbook\templates\url_import.html:154 msgid "Drag recipe attributes from the right into the appropriate box below." msgstr "" -#: .\cookbook\templates\url_import.html:160 -#: .\cookbook\templates\url_import.html:177 -#: .\cookbook\templates\url_import.html:194 -#: .\cookbook\templates\url_import.html:213 -#: .\cookbook\templates\url_import.html:231 -#: .\cookbook\templates\url_import.html:246 -#: .\cookbook\templates\url_import.html:261 -#: .\cookbook\templates\url_import.html:277 -#: .\cookbook\templates\url_import.html:304 -#: .\cookbook\templates\url_import.html:355 +#: .\cookbook\templates\url_import.html:163 +#: .\cookbook\templates\url_import.html:180 +#: .\cookbook\templates\url_import.html:197 +#: .\cookbook\templates\url_import.html:216 +#: .\cookbook\templates\url_import.html:234 +#: .\cookbook\templates\url_import.html:249 +#: .\cookbook\templates\url_import.html:264 +#: .\cookbook\templates\url_import.html:280 +#: .\cookbook\templates\url_import.html:307 +#: .\cookbook\templates\url_import.html:358 msgid "Clear Contents" msgstr "" -#: .\cookbook\templates\url_import.html:162 +#: .\cookbook\templates\url_import.html:165 msgid "Text dragged here will be appended to the name." msgstr "" -#: .\cookbook\templates\url_import.html:175 +#: .\cookbook\templates\url_import.html:178 msgid "Description" msgstr "" -#: .\cookbook\templates\url_import.html:179 +#: .\cookbook\templates\url_import.html:182 msgid "Text dragged here will be appended to the description." msgstr "" -#: .\cookbook\templates\url_import.html:196 +#: .\cookbook\templates\url_import.html:199 msgid "Keywords dragged here will be appended to current list" msgstr "" -#: .\cookbook\templates\url_import.html:211 +#: .\cookbook\templates\url_import.html:214 msgid "Image" msgstr "" -#: .\cookbook\templates\url_import.html:243 +#: .\cookbook\templates\url_import.html:246 #, fuzzy #| msgid "Time" msgid "Prep Time" msgstr "Tempo" -#: .\cookbook\templates\url_import.html:258 +#: .\cookbook\templates\url_import.html:261 #, fuzzy #| msgid "Time" msgid "Cook Time" msgstr "Tempo" -#: .\cookbook\templates\url_import.html:279 +#: .\cookbook\templates\url_import.html:282 msgid "Ingredients dragged here will be appended to current list." msgstr "" -#: .\cookbook\templates\url_import.html:301 -#: .\cookbook\templates\url_import.html:572 +#: .\cookbook\templates\url_import.html:304 +#: .\cookbook\templates\url_import.html:579 msgid "Instructions" msgstr "Instruções" -#: .\cookbook\templates\url_import.html:306 +#: .\cookbook\templates\url_import.html:309 msgid "" "Recipe instructions dragged here will be appended to current instructions." msgstr "" -#: .\cookbook\templates\url_import.html:329 +#: .\cookbook\templates\url_import.html:332 #, fuzzy #| msgid "Discovered Recipes" msgid "Discovered Attributes" msgstr "Descobrir Receitas" -#: .\cookbook\templates\url_import.html:331 +#: .\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 "" -#: .\cookbook\templates\url_import.html:348 +#: .\cookbook\templates\url_import.html:351 #, fuzzy #| msgid "Show as header" msgid "Show Blank Field" msgstr "Mostrar como cabeçalho" -#: .\cookbook\templates\url_import.html:353 +#: .\cookbook\templates\url_import.html:356 msgid "Blank Field" msgstr "" -#: .\cookbook\templates\url_import.html:357 +#: .\cookbook\templates\url_import.html:360 msgid "Items dragged to Blank Field will be appended." msgstr "" -#: .\cookbook\templates\url_import.html:404 +#: .\cookbook\templates\url_import.html:407 #, fuzzy #| msgid "Delete Step" msgid "Delete Text" msgstr "Apagar Passo" -#: .\cookbook\templates\url_import.html:417 +#: .\cookbook\templates\url_import.html:420 #, fuzzy #| msgid "Delete Recipe" msgid "Delete image" msgstr "Apagar Receita" -#: .\cookbook\templates\url_import.html:433 +#: .\cookbook\templates\url_import.html:436 msgid "Recipe Name" msgstr "" -#: .\cookbook\templates\url_import.html:437 +#: .\cookbook\templates\url_import.html:440 msgid "Recipe Description" msgstr "" -#: .\cookbook\templates\url_import.html:499 -#: .\cookbook\templates\url_import.html:531 -#: .\cookbook\templates\url_import.html:587 +#: .\cookbook\templates\url_import.html:504 +#: .\cookbook\templates\url_import.html:536 +#: .\cookbook\templates\url_import.html:596 msgid "Select one" msgstr "" -#: .\cookbook\templates\url_import.html:547 +#: .\cookbook\templates\url_import.html:554 msgid "Note" msgstr "Nota" -#: .\cookbook\templates\url_import.html:588 +#: .\cookbook\templates\url_import.html:597 #, fuzzy #| msgid "Keyword" msgid "Add Keyword" msgstr "Palavra-chave" -#: .\cookbook\templates\url_import.html:601 +#: .\cookbook\templates\url_import.html:610 msgid "All Keywords" msgstr "" -#: .\cookbook\templates\url_import.html:604 +#: .\cookbook\templates\url_import.html:613 msgid "Import all keywords, not only the ones already existing." msgstr "" -#: .\cookbook\templates\url_import.html:631 +#: .\cookbook\templates\url_import.html:640 msgid "Information" msgstr "" -#: .\cookbook\templates\url_import.html:633 +#: .\cookbook\templates\url_import.html:642 msgid "" " Only websites containing ld+json or microdata information can currently\n" " be imported. Most big recipe pages " @@ -2360,125 +2543,214 @@ msgid "" " github issues." msgstr "" -#: .\cookbook\templates\url_import.html:641 +#: .\cookbook\templates\url_import.html:650 msgid "Google ld+json Info" msgstr "" -#: .\cookbook\templates\url_import.html:644 +#: .\cookbook\templates\url_import.html:653 msgid "GitHub Issues" msgstr "" -#: .\cookbook\templates\url_import.html:646 +#: .\cookbook\templates\url_import.html:655 msgid "Recipe Markup Specification" msgstr "" -#: .\cookbook\views\api.py:83 .\cookbook\views\api.py:132 +#: .\cookbook\views\api.py:88 .\cookbook\views\api.py:170 msgid "Parameter updated_at incorrectly formatted" msgstr "" -#: .\cookbook\views\api.py:152 +#: .\cookbook\views\api.py:190 .\cookbook\views\api.py:291 #, python-brace-format msgid "No {self.basename} with id {pk} exists" msgstr "" -#: .\cookbook\views\api.py:156 +#: .\cookbook\views\api.py:194 msgid "Cannot merge with the same object!" msgstr "" -#: .\cookbook\views\api.py:163 +#: .\cookbook\views\api.py:201 #, python-brace-format msgid "No {self.basename} with id {target} exists" msgstr "" -#: .\cookbook\views\api.py:168 +#: .\cookbook\views\api.py:206 msgid "Cannot merge with child object!" msgstr "" -#: .\cookbook\views\api.py:201 +#: .\cookbook\views\api.py:239 #, python-brace-format msgid "{source.name} was merged successfully with {target.name}" msgstr "" -#: .\cookbook\views\api.py:205 +#: .\cookbook\views\api.py:244 #, python-brace-format msgid "An error occurred attempting to merge {source.name} with {target.name}" msgstr "" -#: .\cookbook\views\api.py:249 -#, python-brace-format -msgid "No {self.basename} with id {child} exists" -msgstr "" - -#: .\cookbook\views\api.py:258 +#: .\cookbook\views\api.py:300 #, python-brace-format msgid "{child.name} was moved successfully to the root." msgstr "" -#: .\cookbook\views\api.py:261 .\cookbook\views\api.py:279 +#: .\cookbook\views\api.py:303 .\cookbook\views\api.py:321 msgid "An error occurred attempting to move " msgstr "" -#: .\cookbook\views\api.py:264 +#: .\cookbook\views\api.py:306 msgid "Cannot move an object to itself!" msgstr "" -#: .\cookbook\views\api.py:270 +#: .\cookbook\views\api.py:312 #, python-brace-format msgid "No {self.basename} with id {parent} exists" msgstr "" -#: .\cookbook\views\api.py:276 +#: .\cookbook\views\api.py:318 #, python-brace-format msgid "{child.name} was moved successfully to parent {parent.name}" msgstr "" -#: .\cookbook\views\api.py:723 .\cookbook\views\data.py:42 +#: .\cookbook\views\api.py:470 +#, python-brace-format +msgid "{obj.name} was removed from the shopping list." +msgstr "" + +#: .\cookbook\views\api.py:475 .\cookbook\views\api.py:726 +#, python-brace-format +msgid "{obj.name} was added to the shopping list." +msgstr "" + +#: .\cookbook\views\api.py:587 +msgid "ID of recipe a step is part of. For multiple repeat parameter." +msgstr "" + +#: .\cookbook\views\api.py:588 +msgid "Query string matched (fuzzy) against object name." +msgstr "" + +#: .\cookbook\views\api.py:631 +msgid "" +"Query string matched (fuzzy) against recipe name. In the future also " +"fulltext search." +msgstr "" + +#: .\cookbook\views\api.py:632 +msgid "ID of keyword a recipe should have. For multiple repeat parameter." +msgstr "" + +#: .\cookbook\views\api.py:633 +msgid "ID of food a recipe should have. For multiple repeat parameter." +msgstr "" + +#: .\cookbook\views\api.py:634 +msgid "ID of unit a recipe should have." +msgstr "" + +#: .\cookbook\views\api.py:635 +msgid "Rating a recipe should have. [0 - 5]" +msgstr "" + +#: .\cookbook\views\api.py:636 +msgid "ID of book a recipe should be in. For multiple repeat parameter." +msgstr "" + +#: .\cookbook\views\api.py:637 +msgid "" +"If recipe should have all (AND=false) or any (OR=true) of the " +"provided keywords." +msgstr "" + +#: .\cookbook\views\api.py:638 +msgid "" +"If recipe should have all (AND=false) or any (OR=true) of the " +"provided foods." +msgstr "" + +#: .\cookbook\views\api.py:639 +msgid "" +"If recipe should be in all (AND=false) or any (OR=true) of the " +"provided books." +msgstr "" + +#: .\cookbook\views\api.py:640 +msgid "If only internal recipes should be returned. [true/false]" +msgstr "" + +#: .\cookbook\views\api.py:641 +msgid "Returns the results in randomized order. [true/false]" +msgstr "" + +#: .\cookbook\views\api.py:642 +msgid "Returns new results first in search results. [true/false]" +msgstr "" + +#: .\cookbook\views\api.py:768 +msgid "" +"Returns the shopping list entry with a primary key of id. Multiple values " +"allowed." +msgstr "" + +#: .\cookbook\views\api.py:771 +msgid "" +"Filter shopping list entries on checked. [true, false, both, recent]
- recent includes unchecked items and recently completed items." +msgstr "" + +#: .\cookbook\views\api.py:773 +msgid "Returns the shopping list entries sorted by supermarket category order." +msgstr "" + +#: .\cookbook\views\api.py:922 .\cookbook\views\data.py:42 #: .\cookbook\views\edit.py:129 .\cookbook\views\new.py:95 msgid "This feature is not yet available in the hosted version of tandoor!" msgstr "" -#: .\cookbook\views\api.py:745 +#: .\cookbook\views\api.py:944 msgid "Sync successful!" msgstr "" -#: .\cookbook\views\api.py:750 +#: .\cookbook\views\api.py:949 msgid "Error synchronizing with Storage" msgstr "" -#: .\cookbook\views\api.py:828 +#: .\cookbook\views\api.py:1028 msgid "Nothing to do." msgstr "" -#: .\cookbook\views\api.py:843 +#: .\cookbook\views\api.py:1043 msgid "The requested site provided malformed data and cannot be read." msgstr "" -#: .\cookbook\views\api.py:850 +#: .\cookbook\views\api.py:1050 msgid "The requested page could not be found." msgstr "" -#: .\cookbook\views\api.py:859 +#: .\cookbook\views\api.py:1068 msgid "" "The requested site does not provide any recognized data format to import the " "recipe from." msgstr "Esta página não contém uma receita que eu consiga entender." -#: .\cookbook\views\api.py:873 +#: .\cookbook\views\api.py:1082 +msgid "Connection Refused." +msgstr "" + +#: .\cookbook\views\api.py:1091 msgid "No useable data could be found." msgstr "" -#: .\cookbook\views\api.py:889 +#: .\cookbook\views\api.py:1107 msgid "I couldn't find anything to do." msgstr "" #: .\cookbook\views\data.py:34 .\cookbook\views\data.py:129 -#: .\cookbook\views\edit.py:49 .\cookbook\views\import_export.py:73 +#: .\cookbook\views\edit.py:49 .\cookbook\views\import_export.py:80 #: .\cookbook\views\new.py:33 msgid "You have reached the maximum number of recipes for your space." msgstr "" #: .\cookbook\views\data.py:38 .\cookbook\views\data.py:133 -#: .\cookbook\views\edit.py:53 .\cookbook\views\import_export.py:77 +#: .\cookbook\views\edit.py:53 .\cookbook\views\import_export.py:84 #: .\cookbook\views\new.py:37 msgid "You have more users than allowed in your space." msgstr "" @@ -2494,7 +2766,7 @@ msgstr[1] "" msgid "Monitor" msgstr "" -#: .\cookbook\views\delete.py:125 .\cookbook\views\lists.py:86 +#: .\cookbook\views\delete.py:125 .\cookbook\views\lists.py:71 #: .\cookbook\views\new.py:101 msgid "Storage Backend" msgstr "" @@ -2512,7 +2784,7 @@ msgstr "" msgid "Bookmarks" msgstr "" -#: .\cookbook\views\delete.py:192 .\cookbook\views\new.py:235 +#: .\cookbook\views\delete.py:192 .\cookbook\views\new.py:238 msgid "Invite Link" msgstr "" @@ -2536,40 +2808,44 @@ msgstr "" msgid "Error saving changes!" msgstr "" -#: .\cookbook\views\import_export.py:99 +#: .\cookbook\views\import_export.py:106 msgid "Importing is not implemented for this provider" msgstr "" -#: .\cookbook\views\import_export.py:121 +#: .\cookbook\views\import_export.py:127 +msgid "" +"The PDF Exporter is not enabled on this instance as it is still in an " +"experimental state." +msgstr "" + +#: .\cookbook\views\import_export.py:132 msgid "Exporting is not implemented for this provider" msgstr "" -#: .\cookbook\views\lists.py:26 +#: .\cookbook\views\lists.py:25 msgid "Import Log" msgstr "" -#: .\cookbook\views\lists.py:39 +#: .\cookbook\views\lists.py:38 msgid "Discovery" msgstr "" -#: .\cookbook\views\lists.py:69 +#: .\cookbook\views\lists.py:54 msgid "Shopping Lists" msgstr "" -#: .\cookbook\views\lists.py:129 -#, fuzzy -#| msgid "New Food" -msgid "Foods" -msgstr "Novo Prato" - -#: .\cookbook\views\lists.py:163 +#: .\cookbook\views\lists.py:148 msgid "Supermarkets" msgstr "" -#: .\cookbook\views\lists.py:179 +#: .\cookbook\views\lists.py:164 msgid "Shopping Categories" msgstr "" +#: .\cookbook\views\lists.py:217 +msgid "Steps" +msgstr "Passos" + #: .\cookbook\views\lists.py:232 #, fuzzy #| msgid "Shopping" @@ -2584,126 +2860,126 @@ msgstr "" msgid "There was an error importing this recipe!" msgstr "" -#: .\cookbook\views\new.py:209 +#: .\cookbook\views\new.py:212 msgid "Hello" msgstr "" -#: .\cookbook\views\new.py:209 +#: .\cookbook\views\new.py:212 msgid "You have been invited by " msgstr "" -#: .\cookbook\views\new.py:210 +#: .\cookbook\views\new.py:213 msgid " to join their Tandoor Recipes space " msgstr "" -#: .\cookbook\views\new.py:211 +#: .\cookbook\views\new.py:214 msgid "Click the following link to activate your account: " msgstr "" -#: .\cookbook\views\new.py:212 +#: .\cookbook\views\new.py:215 msgid "" "If the link does not work use the following code to manually join the space: " msgstr "" -#: .\cookbook\views\new.py:213 +#: .\cookbook\views\new.py:216 msgid "The invitation is valid until " msgstr "" -#: .\cookbook\views\new.py:214 +#: .\cookbook\views\new.py:217 msgid "" "Tandoor Recipes is an Open Source recipe manager. Check it out on GitHub " msgstr "" -#: .\cookbook\views\new.py:217 +#: .\cookbook\views\new.py:220 msgid "Tandoor Recipes Invite" msgstr "" -#: .\cookbook\views\new.py:224 +#: .\cookbook\views\new.py:227 msgid "Invite link successfully send to user." msgstr "" -#: .\cookbook\views\new.py:227 +#: .\cookbook\views\new.py:230 msgid "" "You have send to many emails, please share the link manually or wait a few " "hours." msgstr "" -#: .\cookbook\views\new.py:229 +#: .\cookbook\views\new.py:232 msgid "Email to user could not be send, please share link manually." msgstr "" -#: .\cookbook\views\views.py:127 +#: .\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 "" -#: .\cookbook\views\views.py:175 +#: .\cookbook\views\views.py:174 msgid "You do not have the required permissions to perform this action!" msgstr "" -#: .\cookbook\views\views.py:186 +#: .\cookbook\views\views.py:185 msgid "Comment saved!" msgstr "" -#: .\cookbook\views\views.py:277 +#: .\cookbook\views\views.py:276 msgid "This feature is not available in the demo version!" msgstr "" -#: .\cookbook\views\views.py:340 +#: .\cookbook\views\views.py:335 msgid "You must select at least one field to search!" msgstr "" -#: .\cookbook\views\views.py:345 +#: .\cookbook\views\views.py:340 msgid "" "To use this search method you must select at least one full text search " "field!" msgstr "" -#: .\cookbook\views\views.py:349 +#: .\cookbook\views\views.py:344 msgid "Fuzzy search is not compatible with this search method!" msgstr "" -#: .\cookbook\views\views.py:452 +#: .\cookbook\views\views.py:470 msgid "" "The setup page can only be used to create the first user! If you have " "forgotten your superuser credentials please consult the django documentation " "on how to reset passwords." msgstr "" -#: .\cookbook\views\views.py:459 +#: .\cookbook\views\views.py:477 msgid "Passwords dont match!" msgstr "" -#: .\cookbook\views\views.py:475 +#: .\cookbook\views\views.py:493 msgid "User has been created, please login!" msgstr "" -#: .\cookbook\views\views.py:491 +#: .\cookbook\views\views.py:509 msgid "Malformed Invite Link supplied!" msgstr "" -#: .\cookbook\views\views.py:498 +#: .\cookbook\views\views.py:516 #, 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 "Autenticação necessária para aceder a esta página!" -#: .\cookbook\views\views.py:509 +#: .\cookbook\views\views.py:527 msgid "Successfully joined space." msgstr "" -#: .\cookbook\views\views.py:515 +#: .\cookbook\views\views.py:533 msgid "Invite Link not valid or already used!" msgstr "" -#: .\cookbook\views\views.py:579 +#: .\cookbook\views\views.py:614 msgid "" "Reporting share links is not enabled for this instance. Please notify the " "page administrator to report problems." msgstr "" -#: .\cookbook\views\views.py:585 +#: .\cookbook\views\views.py:620 msgid "" "Recipe sharing link has been disabled! For additional information please " "contact the page administrator." @@ -2730,9 +3006,6 @@ msgstr "" #~ msgid "Old Food" #~ msgstr "Prato Anterior" -#~ msgid "Food that should be replaced." -#~ msgstr "Prato a ser alterado." - #~ msgid "New Entry" #~ msgstr "Nova Entrada" @@ -2841,9 +3114,6 @@ msgstr "" #~ msgid "Delete Recipe" #~ msgstr "Apagar Receita" -#~ msgid "Steps" -#~ msgstr "Passos" - #~ msgid "" #~ "A username is not required, if left blank the new user can choose one." #~ msgstr "" diff --git a/cookbook/locale/rn/LC_MESSAGES/django.po b/cookbook/locale/rn/LC_MESSAGES/django.po index 2833d69db7..b301bc6170 100644 --- a/cookbook/locale/rn/LC_MESSAGES/django.po +++ b/cookbook/locale/rn/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-08 16:27+0100\n" +"POT-Creation-Date: 2022-01-18 14:52+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,105 +18,106 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" -#: .\cookbook\filters.py:23 .\cookbook\templates\base.html:125 -#: .\cookbook\templates\forms\ingredients.html:34 -#: .\cookbook\templates\space.html:43 .\cookbook\templates\stats.html:28 -#: .\cookbook\templates\url_import.html:274 +#: .\cookbook\filters.py:23 .\cookbook\templates\forms\ingredients.html:34 +#: .\cookbook\templates\space.html:50 .\cookbook\templates\stats.html:28 +#: .\cookbook\templates\url_import.html:277 msgid "Ingredients" msgstr "" -#: .\cookbook\forms.py:54 +#: .\cookbook\forms.py:56 msgid "Default unit" msgstr "" -#: .\cookbook\forms.py:55 +#: .\cookbook\forms.py:57 msgid "Use fractions" msgstr "" -#: .\cookbook\forms.py:56 +#: .\cookbook\forms.py:58 msgid "Use KJ" msgstr "" -#: .\cookbook\forms.py:57 +#: .\cookbook\forms.py:59 msgid "Theme" msgstr "" -#: .\cookbook\forms.py:58 +#: .\cookbook\forms.py:60 msgid "Navbar color" msgstr "" -#: .\cookbook\forms.py:59 +#: .\cookbook\forms.py:61 msgid "Sticky navbar" msgstr "" -#: .\cookbook\forms.py:60 +#: .\cookbook\forms.py:62 msgid "Default page" msgstr "" -#: .\cookbook\forms.py:61 +#: .\cookbook\forms.py:63 msgid "Show recent recipes" msgstr "" -#: .\cookbook\forms.py:62 +#: .\cookbook\forms.py:64 msgid "Search style" msgstr "" -#: .\cookbook\forms.py:63 +#: .\cookbook\forms.py:65 msgid "Plan sharing" msgstr "" -#: .\cookbook\forms.py:64 +#: .\cookbook\forms.py:66 msgid "Ingredient decimal places" msgstr "" -#: .\cookbook\forms.py:65 +#: .\cookbook\forms.py:67 msgid "Shopping list auto sync period" msgstr "" -#: .\cookbook\forms.py:66 .\cookbook\templates\recipe_view.html:21 -#: .\cookbook\templates\space.html:62 .\cookbook\templates\stats.html:47 +#: .\cookbook\forms.py:68 .\cookbook\templates\recipe_view.html:21 +#: .\cookbook\templates\space.html:77 .\cookbook\templates\stats.html:47 msgid "Comments" msgstr "" -#: .\cookbook\forms.py:70 +#: .\cookbook\forms.py:72 msgid "" "Color of the top navigation bar. Not all colors work with all themes, just " "try them out!" msgstr "" -#: .\cookbook\forms.py:72 +#: .\cookbook\forms.py:74 msgid "Default Unit to be used when inserting a new ingredient into a recipe." msgstr "" -#: .\cookbook\forms.py:74 +#: .\cookbook\forms.py:76 msgid "" "Enables support for fractions in ingredient amounts (e.g. convert decimals " "to fractions automatically)" msgstr "" -#: .\cookbook\forms.py:76 +#: .\cookbook\forms.py:78 msgid "Display nutritional energy amounts in joules instead of calories" msgstr "" -#: .\cookbook\forms.py:78 -msgid "" -"Users with whom newly created meal plan/shopping list entries should be " -"shared by default." +#: .\cookbook\forms.py:79 +msgid "Users with whom newly created meal plans should be shared by default." msgstr "" #: .\cookbook\forms.py:80 +msgid "Users with whom to share shopping lists." +msgstr "" + +#: .\cookbook\forms.py:82 msgid "Show recently viewed recipes on search page." msgstr "" -#: .\cookbook\forms.py:81 +#: .\cookbook\forms.py:83 msgid "Number of decimals to round ingredients." msgstr "" -#: .\cookbook\forms.py:82 +#: .\cookbook\forms.py:84 msgid "If you want to be able to create and see comments underneath recipes." msgstr "" -#: .\cookbook\forms.py:84 +#: .\cookbook\forms.py:86 .\cookbook\forms.py:493 msgid "" "Setting to 0 will disable auto sync. When viewing a shopping list the list " "is updated every set seconds to sync changes someone else might have made. " @@ -124,200 +125,310 @@ msgid "" "mobile data. If lower than instance limit it is reset when saving." msgstr "" -#: .\cookbook\forms.py:87 +#: .\cookbook\forms.py:89 msgid "Makes the navbar stick to the top of the page." msgstr "" -#: .\cookbook\forms.py:103 +#: .\cookbook\forms.py:90 .\cookbook\forms.py:496 +msgid "Automatically add meal plan ingredients to shopping list." +msgstr "" + +#: .\cookbook\forms.py:91 +msgid "Exclude ingredients that are on hand." +msgstr "" + +#: .\cookbook\forms.py:108 msgid "" "Both fields are optional. If none are given the username will be displayed " "instead" msgstr "" -#: .\cookbook\forms.py:124 .\cookbook\forms.py:289 -#: .\cookbook\templates\url_import.html:158 +#: .\cookbook\forms.py:129 .\cookbook\forms.py:298 +#: .\cookbook\templates\url_import.html:161 msgid "Name" msgstr "" -#: .\cookbook\forms.py:125 .\cookbook\forms.py:290 -#: .\cookbook\templates\space.html:39 .\cookbook\templates\stats.html:24 -#: .\cookbook\templates\url_import.html:192 -#: .\cookbook\templates\url_import.html:578 .\cookbook\views\lists.py:112 +#: .\cookbook\forms.py:130 .\cookbook\forms.py:299 +#: .\cookbook\templates\space.html:44 .\cookbook\templates\stats.html:24 +#: .\cookbook\templates\url_import.html:195 +#: .\cookbook\templates\url_import.html:585 .\cookbook\views\lists.py:97 msgid "Keywords" msgstr "" -#: .\cookbook\forms.py:126 +#: .\cookbook\forms.py:131 msgid "Preparation time in minutes" msgstr "" -#: .\cookbook\forms.py:127 +#: .\cookbook\forms.py:132 msgid "Waiting time (cooking/baking) in minutes" msgstr "" -#: .\cookbook\forms.py:128 .\cookbook\forms.py:259 .\cookbook\forms.py:291 +#: .\cookbook\forms.py:133 .\cookbook\forms.py:267 .\cookbook\forms.py:300 msgid "Path" msgstr "" -#: .\cookbook\forms.py:129 +#: .\cookbook\forms.py:134 msgid "Storage UID" msgstr "" -#: .\cookbook\forms.py:157 +#: .\cookbook\forms.py:164 msgid "Default" msgstr "" -#: .\cookbook\forms.py:168 .\cookbook\templates\url_import.html:94 +#: .\cookbook\forms.py:175 .\cookbook\templates\url_import.html:97 msgid "" "To prevent duplicates recipes with the same name as existing ones are " "ignored. Check this box to import everything." msgstr "" -#: .\cookbook\forms.py:190 +#: .\cookbook\forms.py:197 msgid "Add your comment: " msgstr "" -#: .\cookbook\forms.py:205 +#: .\cookbook\forms.py:212 msgid "Leave empty for dropbox and enter app password for nextcloud." msgstr "" -#: .\cookbook\forms.py:212 +#: .\cookbook\forms.py:219 msgid "Leave empty for nextcloud and enter api token for dropbox." msgstr "" -#: .\cookbook\forms.py:221 +#: .\cookbook\forms.py:228 msgid "" "Leave empty for dropbox and enter only base url for nextcloud (/remote." "php/webdav/ is added automatically)" msgstr "" -#: .\cookbook\forms.py:258 .\cookbook\views\edit.py:166 +#: .\cookbook\forms.py:266 .\cookbook\views\edit.py:166 msgid "Storage" msgstr "" -#: .\cookbook\forms.py:260 +#: .\cookbook\forms.py:268 msgid "Active" msgstr "" -#: .\cookbook\forms.py:265 +#: .\cookbook\forms.py:274 msgid "Search String" msgstr "" -#: .\cookbook\forms.py:292 +#: .\cookbook\forms.py:301 msgid "File ID" msgstr "" -#: .\cookbook\forms.py:313 +#: .\cookbook\forms.py:323 msgid "You must provide at least a recipe or a title." msgstr "" -#: .\cookbook\forms.py:326 +#: .\cookbook\forms.py:336 msgid "You can list default users to share recipes with in the settings." msgstr "" -#: .\cookbook\forms.py:327 +#: .\cookbook\forms.py:337 msgid "" "You can use markdown to format this field. See the docs here" msgstr "" -#: .\cookbook\forms.py:353 +#: .\cookbook\forms.py:363 msgid "Maximum number of users for this space reached." msgstr "" -#: .\cookbook\forms.py:359 +#: .\cookbook\forms.py:369 msgid "Email address already taken!" msgstr "" -#: .\cookbook\forms.py:367 +#: .\cookbook\forms.py:377 msgid "" "An email address is not required but if present the invite link will be sent " "to the user." msgstr "" -#: .\cookbook\forms.py:382 +#: .\cookbook\forms.py:392 msgid "Name already taken." msgstr "" -#: .\cookbook\forms.py:393 +#: .\cookbook\forms.py:403 msgid "Accept Terms and Privacy" msgstr "" -#: .\cookbook\forms.py:425 +#: .\cookbook\forms.py:435 msgid "" "Determines how fuzzy a search is if it uses trigram similarity matching (e." "g. low values mean more typos are ignored)." msgstr "" -#: .\cookbook\forms.py:435 +#: .\cookbook\forms.py:445 msgid "" "Select type method of search. Click here for " "full desciption of choices." msgstr "" -#: .\cookbook\forms.py:436 +#: .\cookbook\forms.py:446 msgid "" "Use fuzzy matching on units, keywords and ingredients when editing and " "importing recipes." msgstr "" -#: .\cookbook\forms.py:438 +#: .\cookbook\forms.py:448 msgid "" "Fields to search ignoring accents. Selecting this option can improve or " "degrade search quality depending on language" msgstr "" -#: .\cookbook\forms.py:440 +#: .\cookbook\forms.py:450 msgid "" "Fields to search for partial matches. (e.g. searching for 'Pie' will return " "'pie' and 'piece' and 'soapie')" msgstr "" -#: .\cookbook\forms.py:442 +#: .\cookbook\forms.py:452 msgid "" "Fields to search for beginning of word matches. (e.g. searching for 'sa' " "will return 'salad' and 'sandwich')" msgstr "" -#: .\cookbook\forms.py:444 +#: .\cookbook\forms.py:454 msgid "" "Fields to 'fuzzy' search. (e.g. searching for 'recpie' will find 'recipe'.) " "Note: this option will conflict with 'web' and 'raw' methods of search." msgstr "" -#: .\cookbook\forms.py:446 +#: .\cookbook\forms.py:456 msgid "" "Fields to full text search. Note: 'web', 'phrase', and 'raw' search methods " "only function with fulltext fields." msgstr "" -#: .\cookbook\forms.py:450 +#: .\cookbook\forms.py:460 msgid "Search Method" msgstr "" -#: .\cookbook\forms.py:451 +#: .\cookbook\forms.py:461 msgid "Fuzzy Lookups" msgstr "" -#: .\cookbook\forms.py:452 +#: .\cookbook\forms.py:462 msgid "Ignore Accent" msgstr "" -#: .\cookbook\forms.py:453 +#: .\cookbook\forms.py:463 msgid "Partial Match" msgstr "" -#: .\cookbook\forms.py:454 +#: .\cookbook\forms.py:464 msgid "Starts Wtih" msgstr "" -#: .\cookbook\forms.py:455 +#: .\cookbook\forms.py:465 msgid "Fuzzy Search" msgstr "" -#: .\cookbook\forms.py:456 +#: .\cookbook\forms.py:466 msgid "Full Text" msgstr "" +#: .\cookbook\forms.py:491 +msgid "" +"Users will see all items you add to your shopping list. They must add you " +"to see items on their list." +msgstr "" + +#: .\cookbook\forms.py:497 +msgid "" +"When adding a meal plan to the shopping list (manually or automatically), " +"include all related recipes." +msgstr "" + +#: .\cookbook\forms.py:498 +msgid "" +"When adding a meal plan to the shopping list (manually or automatically), " +"exclude ingredients that are on hand." +msgstr "" + +#: .\cookbook\forms.py:499 +msgid "Default number of hours to delay a shopping list entry." +msgstr "" + +#: .\cookbook\forms.py:500 +msgid "Filter shopping list to only include supermarket categories." +msgstr "" + +#: .\cookbook\forms.py:501 +msgid "Days of recent shopping list entries to display." +msgstr "" + +#: .\cookbook\forms.py:502 +msgid "Mark food 'On Hand' when checked off shopping list." +msgstr "" + +#: .\cookbook\forms.py:503 +msgid "Delimiter to use for CSV exports." +msgstr "" + +#: .\cookbook\forms.py:504 +msgid "Prefix to add when copying list to the clipboard." +msgstr "" + +#: .\cookbook\forms.py:508 +msgid "Share Shopping List" +msgstr "" + +#: .\cookbook\forms.py:509 +msgid "Autosync" +msgstr "" + +#: .\cookbook\forms.py:510 +msgid "Auto Add Meal Plan" +msgstr "" + +#: .\cookbook\forms.py:511 +msgid "Exclude On Hand" +msgstr "" + +#: .\cookbook\forms.py:512 +msgid "Include Related" +msgstr "" + +#: .\cookbook\forms.py:513 +msgid "Default Delay Hours" +msgstr "" + +#: .\cookbook\forms.py:514 +msgid "Filter to Supermarket" +msgstr "" + +#: .\cookbook\forms.py:515 +msgid "Recent Days" +msgstr "" + +#: .\cookbook\forms.py:516 +msgid "CSV Delimiter" +msgstr "" + +#: .\cookbook\forms.py:517 .\cookbook\templates\shopping_list.html:322 +msgid "List Prefix" +msgstr "" + +#: .\cookbook\forms.py:518 +msgid "Auto On Hand" +msgstr "" + +#: .\cookbook\forms.py:528 +msgid "Reset Food Inheritance" +msgstr "" + +#: .\cookbook\forms.py:529 +msgid "Reset all food to inherit the fields configured." +msgstr "" + +#: .\cookbook\forms.py:541 +msgid "Fields on food that should be inherited by default." +msgstr "" + +#: .\cookbook\forms.py:542 +msgid "Show recipe counts on search filters" +msgstr "" + #: .\cookbook\helper\AllAuthCustomAdapter.py:36 msgid "" "In order to prevent spam, the requested email was not send. Please wait a " @@ -325,19 +436,19 @@ msgid "" msgstr "" #: .\cookbook\helper\permission_helper.py:136 -#: .\cookbook\helper\permission_helper.py:159 .\cookbook\views\views.py:149 +#: .\cookbook\helper\permission_helper.py:159 .\cookbook\views\views.py:148 msgid "You are not logged in and therefore cannot view this page!" msgstr "" #: .\cookbook\helper\permission_helper.py:140 #: .\cookbook\helper\permission_helper.py:146 #: .\cookbook\helper\permission_helper.py:171 -#: .\cookbook\helper\permission_helper.py:216 -#: .\cookbook\helper\permission_helper.py:230 -#: .\cookbook\helper\permission_helper.py:241 -#: .\cookbook\helper\permission_helper.py:252 .\cookbook\views\data.py:47 -#: .\cookbook\views\views.py:160 .\cookbook\views\views.py:167 -#: .\cookbook\views\views.py:233 +#: .\cookbook\helper\permission_helper.py:219 +#: .\cookbook\helper\permission_helper.py:233 +#: .\cookbook\helper\permission_helper.py:244 +#: .\cookbook\helper\permission_helper.py:255 .\cookbook\views\data.py:47 +#: .\cookbook\views\views.py:159 .\cookbook\views\views.py:166 +#: .\cookbook\views\views.py:232 msgid "You do not have the required permissions to view this page!" msgstr "" @@ -347,41 +458,40 @@ msgstr "" msgid "You cannot interact with this object as it is not owned by you!" msgstr "" +#: .\cookbook\helper\recipe_search.py:473 +msgid "One of queryset or hash_key must be provided" +msgstr "" + +#: .\cookbook\helper\shopping_helper.py:54 +msgid "You must supply a recipe or mealplan" +msgstr "" + +#: .\cookbook\helper\shopping_helper.py:58 +msgid "You must supply a created_by" +msgstr "" + #: .\cookbook\helper\template_helper.py:61 #: .\cookbook\helper\template_helper.py:63 msgid "Could not parse template code." msgstr "" -#: .\cookbook\integration\integration.py:126 -#: .\cookbook\templates\import.html:14 .\cookbook\templates\import.html:20 -#: .\cookbook\templates\import_response.html:7 -#: .\cookbook\templates\test.html:14 .\cookbook\templates\test.html:20 -#: .\cookbook\templates\url_import.html:27 -#: .\cookbook\templates\url_import.html:105 -#: .\cookbook\templates\url_import.html:127 -#: .\cookbook\templates\url_import.html:321 -#: .\cookbook\templates\url_import.html:609 .\cookbook\views\delete.py:89 -#: .\cookbook\views\edit.py:200 -msgid "Import" -msgstr "" - -#: .\cookbook\integration\integration.py:208 +#: .\cookbook\integration\integration.py:200 msgid "" "Importer expected a .zip file. Did you choose the correct importer type for " "your data ?" msgstr "" -#: .\cookbook\integration\integration.py:211 +#: .\cookbook\integration\integration.py:203 msgid "" "An unexpected error occurred during the import. Please make sure you have " "uploaded a valid file." msgstr "" -#: .\cookbook\integration\integration.py:216 +#: .\cookbook\integration\integration.py:208 msgid "The following recipes were ignored because they already existed:" msgstr "" -#: .\cookbook\integration\integration.py:220 +#: .\cookbook\integration\integration.py:212 #, python-format msgid "Imported %s recipes." msgstr "" @@ -394,32 +504,32 @@ msgstr "" msgid "Nutritional Information" msgstr "" -#: .\cookbook\integration\paprika.py:53 .\cookbook\templates\url_import.html:40 +#: .\cookbook\integration\paprika.py:53 .\cookbook\templates\url_import.html:42 msgid "Source" msgstr "" -#: .\cookbook\integration\safron.py:23 -#: .\cookbook\templates\include\log_cooking.html:16 -#: .\cookbook\templates\url_import.html:228 -#: .\cookbook\templates\url_import.html:459 +#: .\cookbook\integration\saffron.py:23 +#: .\cookbook\templates\include\log_cooking.html:18 +#: .\cookbook\templates\url_import.html:231 +#: .\cookbook\templates\url_import.html:462 msgid "Servings" msgstr "" -#: .\cookbook\integration\safron.py:25 +#: .\cookbook\integration\saffron.py:25 msgid "Waiting time" msgstr "" -#: .\cookbook\integration\safron.py:27 +#: .\cookbook\integration\saffron.py:27 msgid "Preparation Time" msgstr "" -#: .\cookbook\integration\safron.py:29 .\cookbook\templates\base.html:78 +#: .\cookbook\integration\saffron.py:29 .\cookbook\templates\base.html:78 #: .\cookbook\templates\forms\ingredients.html:7 #: .\cookbook\templates\index.html:7 msgid "Cookbook" msgstr "" -#: .\cookbook\integration\safron.py:31 +#: .\cookbook\integration\saffron.py:31 msgid "Section" msgstr "" @@ -455,105 +565,136 @@ msgstr "" msgid "Other" msgstr "" -#: .\cookbook\models.py:150 +#: .\cookbook\models.py:246 msgid "" "Maximum file storage for space in MB. 0 for unlimited, -1 to disable file " "upload." msgstr "" -#: .\cookbook\models.py:202 .\cookbook\templates\search.html:7 -#: .\cookbook\templates\shopping_list.html:59 +#: .\cookbook\models.py:300 .\cookbook\templates\search.html:7 +#: .\cookbook\templates\shopping_list.html:53 msgid "Search" msgstr "" -#: .\cookbook\models.py:203 .\cookbook\templates\base.html:82 +#: .\cookbook\models.py:301 .\cookbook\templates\base.html:82 #: .\cookbook\templates\meal_plan.html:7 #: .\cookbook\templates\meal_plan_new.html:7 .\cookbook\views\delete.py:181 #: .\cookbook\views\edit.py:220 .\cookbook\views\new.py:184 msgid "Meal-Plan" msgstr "" -#: .\cookbook\models.py:204 .\cookbook\templates\base.html:90 +#: .\cookbook\models.py:302 .\cookbook\templates\base.html:90 msgid "Books" msgstr "" -#: .\cookbook\models.py:212 +#: .\cookbook\models.py:310 msgid "Small" msgstr "" -#: .\cookbook\models.py:212 +#: .\cookbook\models.py:310 msgid "Large" msgstr "" -#: .\cookbook\models.py:212 .\cookbook\templates\generic\new_template.html:6 +#: .\cookbook\models.py:310 .\cookbook\templates\generic\new_template.html:6 #: .\cookbook\templates\generic\new_template.html:14 msgid "New" msgstr "" -#: .\cookbook\models.py:396 +#: .\cookbook\models.py:512 msgid " is part of a recipe step and cannot be deleted" msgstr "" -#: .\cookbook\models.py:441 .\cookbook\templates\url_import.html:42 +#: .\cookbook\models.py:586 .\cookbook\templates\url_import.html:44 msgid "Text" msgstr "" -#: .\cookbook\models.py:441 +#: .\cookbook\models.py:586 msgid "Time" msgstr "" -#: .\cookbook\models.py:441 .\cookbook\templates\url_import.html:44 +#: .\cookbook\models.py:586 .\cookbook\templates\url_import.html:46 msgid "File" msgstr "" -#: .\cookbook\models.py:441 +#: .\cookbook\models.py:586 #: .\cookbook\templates\include\recipe_open_modal.html:7 #: .\cookbook\views\delete.py:39 .\cookbook\views\edit.py:260 #: .\cookbook\views\new.py:53 msgid "Recipe" msgstr "" -#: .\cookbook\models.py:871 .\cookbook\templates\search_info.html:28 +#: .\cookbook\models.py:1041 .\cookbook\templates\search_info.html:28 msgid "Simple" msgstr "" -#: .\cookbook\models.py:872 .\cookbook\templates\search_info.html:33 +#: .\cookbook\models.py:1042 .\cookbook\templates\search_info.html:33 msgid "Phrase" msgstr "" -#: .\cookbook\models.py:873 .\cookbook\templates\search_info.html:38 +#: .\cookbook\models.py:1043 .\cookbook\templates\search_info.html:38 msgid "Web" msgstr "" -#: .\cookbook\models.py:874 .\cookbook\templates\search_info.html:47 +#: .\cookbook\models.py:1044 .\cookbook\templates\search_info.html:47 msgid "Raw" msgstr "" -#: .\cookbook\models.py:912 +#: .\cookbook\models.py:1082 msgid "Food Alias" msgstr "" -#: .\cookbook\models.py:912 +#: .\cookbook\models.py:1082 msgid "Unit Alias" msgstr "" -#: .\cookbook\models.py:912 +#: .\cookbook\models.py:1082 msgid "Keyword Alias" msgstr "" -#: .\cookbook\serializer.py:157 +#: .\cookbook\serializer.py:175 +msgid "A user is required" +msgstr "" + +#: .\cookbook\serializer.py:195 msgid "File uploads are not enabled for this Space." msgstr "" -#: .\cookbook\serializer.py:168 +#: .\cookbook\serializer.py:206 msgid "You have reached your file upload limit." msgstr "" +#: .\cookbook\serializer.py:962 +msgid "Existing shopping list to update" +msgstr "" + +#: .\cookbook\serializer.py:964 +msgid "" +"List of ingredient IDs from the recipe to add, if not provided all " +"ingredients will be added." +msgstr "" + +#: .\cookbook\serializer.py:965 +msgid "" +"Providing a list_recipe ID and servings of 0 will delete that shopping list." +msgstr "" + +#: .\cookbook\serializer.py:973 +msgid "Amount of food to add to the shopping list" +msgstr "" + +#: .\cookbook\serializer.py:974 +msgid "ID of unit to use for the shopping list" +msgstr "" + +#: .\cookbook\serializer.py:975 +msgid "When set to true will delete all food from active shopping lists." +msgstr "" + #: .\cookbook\tables.py:35 .\cookbook\templates\generic\edit_template.html:6 #: .\cookbook\templates\generic\edit_template.html:14 #: .\cookbook\templates\recipes_table.html:82 -#: .\cookbook\templates\shopping_list.html:40 -#: .\cookbook\templates\space.html:90 +#: .\cookbook\templates\shopping_list.html:37 +#: .\cookbook\templates\space.html:109 msgid "Edit" msgstr "" @@ -689,27 +830,27 @@ msgstr "" msgid "Sign In" msgstr "" -#: .\cookbook\templates\account\login.html:32 +#: .\cookbook\templates\account\login.html:34 #: .\cookbook\templates\socialaccount\signup.html:8 #: .\cookbook\templates\socialaccount\signup.html:57 msgid "Sign Up" msgstr "" -#: .\cookbook\templates\account\login.html:36 -#: .\cookbook\templates\account\login.html:37 +#: .\cookbook\templates\account\login.html:39 +#: .\cookbook\templates\account\login.html:41 #: .\cookbook\templates\account\password_reset.html:29 msgid "Reset My Password" msgstr "" -#: .\cookbook\templates\account\login.html:37 +#: .\cookbook\templates\account\login.html:40 msgid "Lost your password?" msgstr "" -#: .\cookbook\templates\account\login.html:48 +#: .\cookbook\templates\account\login.html:52 msgid "Social Login" msgstr "" -#: .\cookbook\templates\account\login.html:49 +#: .\cookbook\templates\account\login.html:53 msgid "You can use any of the following providers to sign in." msgstr "" @@ -735,7 +876,7 @@ msgstr "" #: .\cookbook\templates\account\password_change.html:12 #: .\cookbook\templates\account\password_set.html:12 -#: .\cookbook\templates\settings.html:69 +#: .\cookbook\templates\settings.html:76 msgid "Password" msgstr "" @@ -852,15 +993,19 @@ msgstr "" msgid "Keyword" msgstr "" +#: .\cookbook\templates\base.html:125 .\cookbook\views\lists.py:114 +msgid "Foods" +msgstr "" + #: .\cookbook\templates\base.html:137 #: .\cookbook\templates\forms\ingredients.html:24 -#: .\cookbook\templates\space.html:41 .\cookbook\templates\stats.html:26 -#: .\cookbook\views\lists.py:146 +#: .\cookbook\templates\space.html:47 .\cookbook\templates\stats.html:26 +#: .\cookbook\views\lists.py:131 msgid "Units" msgstr "" #: .\cookbook\templates\base.html:151 -#: .\cookbook\templates\shopping_list.html:237 +#: .\cookbook\templates\shopping_list.html:208 #: .\cookbook\templates\supermarket.html:7 msgid "Supermarket" msgstr "" @@ -869,11 +1014,11 @@ msgstr "" msgid "Supermarket Category" msgstr "" -#: .\cookbook\templates\base.html:175 .\cookbook\views\lists.py:195 +#: .\cookbook\templates\base.html:175 .\cookbook\views\lists.py:180 msgid "Automations" msgstr "" -#: .\cookbook\templates\base.html:189 .\cookbook\views\lists.py:215 +#: .\cookbook\templates\base.html:189 .\cookbook\views\lists.py:200 msgid "Files" msgstr "" @@ -888,7 +1033,7 @@ msgstr "" #: .\cookbook\templates\base.html:228 .\cookbook\templates\export.html:14 #: .\cookbook\templates\export.html:20 -#: .\cookbook\templates\shopping_list.html:358 +#: .\cookbook\templates\shopping_list.html:310 #: .\cookbook\templates\test2.html:14 .\cookbook\templates\test2.html:20 msgid "Export" msgstr "" @@ -898,19 +1043,19 @@ msgid "Import Recipe" msgstr "" #: .\cookbook\templates\base.html:246 -#: .\cookbook\templates\shopping_list.html:195 -#: .\cookbook\templates\shopping_list.html:217 +#: .\cookbook\templates\shopping_list.html:165 +#: .\cookbook\templates\shopping_list.html:188 msgid "Create" msgstr "" #: .\cookbook\templates\base.html:259 #: .\cookbook\templates\generic\list_template.html:14 -#: .\cookbook\templates\space.html:58 .\cookbook\templates\stats.html:43 +#: .\cookbook\templates\space.html:69 .\cookbook\templates\stats.html:43 msgid "External Recipes" msgstr "" -#: .\cookbook\templates\base.html:262 .\cookbook\templates\space.html:7 -#: .\cookbook\templates\space.html:19 +#: .\cookbook\templates\base.html:262 .\cookbook\templates\space.html:8 +#: .\cookbook\templates\space.html:20 .\cookbook\templates\space.html:150 msgid "Space Settings" msgstr "" @@ -976,11 +1121,13 @@ msgstr "" #: .\cookbook\templates\forms\edit_import_recipe.html:14 #: .\cookbook\templates\generic\edit_template.html:23 #: .\cookbook\templates\generic\new_template.html:23 -#: .\cookbook\templates\include\log_cooking.html:28 -#: .\cookbook\templates\settings.html:63 .\cookbook\templates\settings.html:105 -#: .\cookbook\templates\settings.html:123 -#: .\cookbook\templates\settings.html:195 -#: .\cookbook\templates\shopping_list.html:360 +#: .\cookbook\templates\include\log_cooking.html:30 +#: .\cookbook\templates\settings.html:70 .\cookbook\templates\settings.html:112 +#: .\cookbook\templates\settings.html:130 +#: .\cookbook\templates\settings.html:202 +#: .\cookbook\templates\settings.html:213 +#: .\cookbook\templates\shopping_list.html:311 +#: .\cookbook\templates\space.html:155 msgid "Save" msgstr "" @@ -1082,15 +1229,20 @@ msgid "Delete original file" msgstr "" #: .\cookbook\templates\generic\list_template.html:6 -#: .\cookbook\templates\generic\list_template.html:21 +#: .\cookbook\templates\generic\list_template.html:22 msgid "List" msgstr "" -#: .\cookbook\templates\generic\list_template.html:34 +#: .\cookbook\templates\generic\list_template.html:33 +#: .\cookbook\templates\shopping_list.html:33 +msgid "Try the new shopping list" +msgstr "" + +#: .\cookbook\templates\generic\list_template.html:45 msgid "Filter" msgstr "" -#: .\cookbook\templates\generic\list_template.html:39 +#: .\cookbook\templates\generic\list_template.html:50 msgid "Import all" msgstr "" @@ -1116,19 +1268,31 @@ msgstr "" msgid "Import Recipes" msgstr "" -#: .\cookbook\templates\include\log_cooking.html:7 +#: .\cookbook\templates\import.html:14 .\cookbook\templates\import.html:20 +#: .\cookbook\templates\import_response.html:7 +#: .\cookbook\templates\test.html:14 .\cookbook\templates\test.html:20 +#: .\cookbook\templates\url_import.html:29 +#: .\cookbook\templates\url_import.html:108 +#: .\cookbook\templates\url_import.html:130 +#: .\cookbook\templates\url_import.html:324 +#: .\cookbook\templates\url_import.html:618 .\cookbook\views\delete.py:89 +#: .\cookbook\views\edit.py:200 +msgid "Import" +msgstr "" + +#: .\cookbook\templates\include\log_cooking.html:9 msgid "Log Recipe Cooking" msgstr "" -#: .\cookbook\templates\include\log_cooking.html:13 +#: .\cookbook\templates\include\log_cooking.html:15 msgid "All fields are optional and can be left empty." msgstr "" -#: .\cookbook\templates\include\log_cooking.html:19 +#: .\cookbook\templates\include\log_cooking.html:21 msgid "Rating" msgstr "" -#: .\cookbook\templates\include\log_cooking.html:27 +#: .\cookbook\templates\include\log_cooking.html:29 #: .\cookbook\templates\include\recipe_open_modal.html:18 msgid "Close" msgstr "" @@ -1174,7 +1338,7 @@ msgstr "" msgid "Last viewed" msgstr "" -#: .\cookbook\templates\index.html:87 .\cookbook\templates\space.html:35 +#: .\cookbook\templates\index.html:87 .\cookbook\templates\space.html:37 #: .\cookbook\templates\stats.html:22 msgid "Recipes" msgstr "" @@ -1327,7 +1491,7 @@ msgid "Created by" msgstr "" #: .\cookbook\templates\meal_plan_entry.html:20 -#: .\cookbook\templates\shopping_list.html:261 +#: .\cookbook\templates\shopping_list.html:232 msgid "Shared with" msgstr "" @@ -1438,17 +1602,17 @@ msgstr "" #: .\cookbook\templates\recipes_table.html:19 #: .\cookbook\templates\recipes_table.html:23 -#: .\cookbook\templates\url_import.html:444 +#: .\cookbook\templates\url_import.html:447 msgid "Recipe Image" msgstr "" #: .\cookbook\templates\recipes_table.html:51 -#: .\cookbook\templates\url_import.html:449 +#: .\cookbook\templates\url_import.html:452 msgid "Preparation time ca." msgstr "" #: .\cookbook\templates\recipes_table.html:57 -#: .\cookbook\templates\url_import.html:454 +#: .\cookbook\templates\url_import.html:457 msgid "Waiting time ca." msgstr "" @@ -1466,7 +1630,7 @@ msgstr "" #: .\cookbook\templates\search_info.html:5 #: .\cookbook\templates\search_info.html:9 -#: .\cookbook\templates\settings.html:165 +#: .\cookbook\templates\settings.html:172 msgid "Search Settings" msgstr "" @@ -1637,103 +1801,111 @@ msgstr "" msgid "Search-Settings" msgstr "" -#: .\cookbook\templates\settings.html:58 +#: .\cookbook\templates\settings.html:56 +msgid "Shopping-Settings" +msgstr "" + +#: .\cookbook\templates\settings.html:65 msgid "Name Settings" msgstr "" -#: .\cookbook\templates\settings.html:66 +#: .\cookbook\templates\settings.html:73 msgid "Account Settings" msgstr "" -#: .\cookbook\templates\settings.html:68 +#: .\cookbook\templates\settings.html:75 msgid "Emails" msgstr "" -#: .\cookbook\templates\settings.html:71 +#: .\cookbook\templates\settings.html:78 #: .\cookbook\templates\socialaccount\connections.html:11 msgid "Social" msgstr "" -#: .\cookbook\templates\settings.html:84 +#: .\cookbook\templates\settings.html:91 msgid "Language" msgstr "" -#: .\cookbook\templates\settings.html:114 +#: .\cookbook\templates\settings.html:121 msgid "Style" msgstr "" -#: .\cookbook\templates\settings.html:135 +#: .\cookbook\templates\settings.html:142 msgid "API Token" msgstr "" -#: .\cookbook\templates\settings.html:136 +#: .\cookbook\templates\settings.html:143 msgid "" "You can use both basic authentication and token based authentication to " "access the REST API." msgstr "" -#: .\cookbook\templates\settings.html:153 +#: .\cookbook\templates\settings.html:160 msgid "" "Use the token as an Authorization header prefixed by the word token as shown " "in the following examples:" msgstr "" -#: .\cookbook\templates\settings.html:155 +#: .\cookbook\templates\settings.html:162 msgid "or" msgstr "" -#: .\cookbook\templates\settings.html:166 +#: .\cookbook\templates\settings.html:173 msgid "" "There are many options to configure the search depending on your personal " "preferences." msgstr "" -#: .\cookbook\templates\settings.html:167 +#: .\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 "" -#: .\cookbook\templates\settings.html:168 +#: .\cookbook\templates\settings.html:175 msgid "" "If you do want to configure the search you can read about the different " "options here." msgstr "" -#: .\cookbook\templates\settings.html:173 +#: .\cookbook\templates\settings.html:180 msgid "Fuzzy" msgstr "" -#: .\cookbook\templates\settings.html:174 +#: .\cookbook\templates\settings.html:181 msgid "" "Find what you need even if your search or the recipe contains typos. Might " "return more results than needed to make sure you find what you are looking " "for." msgstr "" -#: .\cookbook\templates\settings.html:175 +#: .\cookbook\templates\settings.html:182 msgid "This is the default behavior" msgstr "" -#: .\cookbook\templates\settings.html:176 -#: .\cookbook\templates\settings.html:184 +#: .\cookbook\templates\settings.html:183 +#: .\cookbook\templates\settings.html:191 msgid "Apply" msgstr "" -#: .\cookbook\templates\settings.html:181 +#: .\cookbook\templates\settings.html:188 msgid "Precise" msgstr "" -#: .\cookbook\templates\settings.html:182 +#: .\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 "" -#: .\cookbook\templates\settings.html:183 +#: .\cookbook\templates\settings.html:190 msgid "Perfect for large Databases" msgstr "" +#: .\cookbook\templates\settings.html:207 +msgid "Shopping Settings" +msgstr "" + #: .\cookbook\templates\setup.html:6 .\cookbook\templates\system.html:5 msgid "Cookbook Setup" msgstr "" @@ -1751,81 +1923,73 @@ msgstr "" msgid "Create Superuser account" msgstr "" -#: .\cookbook\templates\shopping_list.html:7 +#: .\cookbook\templates\shopping_list.html:8 #: .\cookbook\templates\shopping_list.html:29 -#: .\cookbook\templates\shopping_list.html:721 +#: .\cookbook\templates\shopping_list.html:663 msgid "Shopping List" msgstr "" -#: .\cookbook\templates\shopping_list.html:34 -msgid "Try the new shopping list" -msgstr "" - -#: .\cookbook\templates\shopping_list.html:63 +#: .\cookbook\templates\shopping_list.html:55 msgid "Search Recipe" msgstr "" -#: .\cookbook\templates\shopping_list.html:86 +#: .\cookbook\templates\shopping_list.html:72 msgid "Shopping Recipes" msgstr "" -#: .\cookbook\templates\shopping_list.html:90 +#: .\cookbook\templates\shopping_list.html:74 msgid "No recipes selected" msgstr "" -#: .\cookbook\templates\shopping_list.html:157 +#: .\cookbook\templates\shopping_list.html:131 msgid "Entry Mode" msgstr "" -#: .\cookbook\templates\shopping_list.html:165 +#: .\cookbook\templates\shopping_list.html:139 msgid "Add Entry" msgstr "" -#: .\cookbook\templates\shopping_list.html:181 +#: .\cookbook\templates\shopping_list.html:152 msgid "Amount" msgstr "" -#: .\cookbook\templates\shopping_list.html:194 +#: .\cookbook\templates\shopping_list.html:164 msgid "Select Unit" msgstr "" -#: .\cookbook\templates\shopping_list.html:196 -#: .\cookbook\templates\shopping_list.html:218 -#: .\cookbook\templates\shopping_list.html:248 -#: .\cookbook\templates\shopping_list.html:272 -#: .\cookbook\templates\url_import.html:500 -#: .\cookbook\templates\url_import.html:532 +#: .\cookbook\templates\shopping_list.html:166 +#: .\cookbook\templates\shopping_list.html:189 +#: .\cookbook\templates\shopping_list.html:219 +#: .\cookbook\templates\shopping_list.html:243 +#: .\cookbook\templates\url_import.html:505 +#: .\cookbook\templates\url_import.html:537 msgid "Select" msgstr "" -#: .\cookbook\templates\shopping_list.html:216 +#: .\cookbook\templates\shopping_list.html:187 msgid "Select Food" msgstr "" -#: .\cookbook\templates\shopping_list.html:247 +#: .\cookbook\templates\shopping_list.html:218 msgid "Select Supermarket" msgstr "" -#: .\cookbook\templates\shopping_list.html:271 +#: .\cookbook\templates\shopping_list.html:242 msgid "Select User" msgstr "" -#: .\cookbook\templates\shopping_list.html:290 +#: .\cookbook\templates\shopping_list.html:258 msgid "Finished" msgstr "" -#: .\cookbook\templates\shopping_list.html:303 +#: .\cookbook\templates\shopping_list.html:267 msgid "You are offline, shopping list might not syncronize." msgstr "" -#: .\cookbook\templates\shopping_list.html:368 +#: .\cookbook\templates\shopping_list.html:318 msgid "Copy/Export" msgstr "" -#: .\cookbook\templates\shopping_list.html:372 -msgid "List Prefix" -msgstr "" - #: .\cookbook\templates\socialaccount\connections.html:4 #: .\cookbook\templates\socialaccount\connections.html:15 msgid "Account Connections" @@ -1875,80 +2039,80 @@ msgstr "" msgid "Sign in using" msgstr "" -#: .\cookbook\templates\space.html:23 +#: .\cookbook\templates\space.html:25 msgid "Space:" msgstr "" -#: .\cookbook\templates\space.html:24 +#: .\cookbook\templates\space.html:26 msgid "Manage Subscription" msgstr "" -#: .\cookbook\templates\space.html:32 .\cookbook\templates\stats.html:19 +#: .\cookbook\templates\space.html:34 .\cookbook\templates\stats.html:19 msgid "Number of objects" msgstr "" -#: .\cookbook\templates\space.html:45 .\cookbook\templates\stats.html:30 +#: .\cookbook\templates\space.html:54 .\cookbook\templates\stats.html:30 msgid "Recipe Imports" msgstr "" -#: .\cookbook\templates\space.html:53 .\cookbook\templates\stats.html:38 +#: .\cookbook\templates\space.html:62 .\cookbook\templates\stats.html:38 msgid "Objects stats" msgstr "" -#: .\cookbook\templates\space.html:56 .\cookbook\templates\stats.html:41 +#: .\cookbook\templates\space.html:65 .\cookbook\templates\stats.html:41 msgid "Recipes without Keywords" msgstr "" -#: .\cookbook\templates\space.html:60 .\cookbook\templates\stats.html:45 +#: .\cookbook\templates\space.html:73 .\cookbook\templates\stats.html:45 msgid "Internal Recipes" msgstr "" -#: .\cookbook\templates\space.html:73 +#: .\cookbook\templates\space.html:89 msgid "Members" msgstr "" -#: .\cookbook\templates\space.html:77 +#: .\cookbook\templates\space.html:95 msgid "Invite User" msgstr "" -#: .\cookbook\templates\space.html:88 +#: .\cookbook\templates\space.html:107 msgid "User" msgstr "" -#: .\cookbook\templates\space.html:89 +#: .\cookbook\templates\space.html:108 msgid "Groups" msgstr "" -#: .\cookbook\templates\space.html:105 +#: .\cookbook\templates\space.html:119 msgid "admin" msgstr "" -#: .\cookbook\templates\space.html:106 +#: .\cookbook\templates\space.html:120 msgid "user" msgstr "" -#: .\cookbook\templates\space.html:107 +#: .\cookbook\templates\space.html:121 msgid "guest" msgstr "" -#: .\cookbook\templates\space.html:108 +#: .\cookbook\templates\space.html:122 msgid "remove" msgstr "" -#: .\cookbook\templates\space.html:112 +#: .\cookbook\templates\space.html:126 msgid "Update" msgstr "" -#: .\cookbook\templates\space.html:116 +#: .\cookbook\templates\space.html:130 msgid "You cannot edit yourself." msgstr "" -#: .\cookbook\templates\space.html:123 +#: .\cookbook\templates\space.html:136 msgid "There are no members in your space yet!" msgstr "" -#: .\cookbook\templates\space.html:130 .\cookbook\templates\system.html:21 -#: .\cookbook\views\lists.py:100 +#: .\cookbook\templates\space.html:143 .\cookbook\templates\system.html:21 +#: .\cookbook\views\lists.py:85 msgid "Invite Links" msgstr "" @@ -2057,166 +2221,166 @@ msgid "" " " msgstr "" -#: .\cookbook\templates\url_import.html:6 +#: .\cookbook\templates\url_import.html:8 msgid "URL Import" msgstr "" -#: .\cookbook\templates\url_import.html:31 +#: .\cookbook\templates\url_import.html:33 msgid "Drag me to your bookmarks to import recipes from anywhere" msgstr "" -#: .\cookbook\templates\url_import.html:32 +#: .\cookbook\templates\url_import.html:34 msgid "Bookmark Me!" msgstr "" -#: .\cookbook\templates\url_import.html:36 +#: .\cookbook\templates\url_import.html:38 msgid "URL" msgstr "" -#: .\cookbook\templates\url_import.html:38 +#: .\cookbook\templates\url_import.html:40 msgid "App" msgstr "" -#: .\cookbook\templates\url_import.html:62 +#: .\cookbook\templates\url_import.html:64 msgid "Enter website URL" msgstr "" -#: .\cookbook\templates\url_import.html:101 +#: .\cookbook\templates\url_import.html:104 msgid "Select recipe files to import or drop them here..." msgstr "" -#: .\cookbook\templates\url_import.html:122 +#: .\cookbook\templates\url_import.html:125 msgid "Paste json or html source here to load recipe." msgstr "" -#: .\cookbook\templates\url_import.html:150 +#: .\cookbook\templates\url_import.html:153 msgid "Preview Recipe Data" msgstr "" -#: .\cookbook\templates\url_import.html:151 +#: .\cookbook\templates\url_import.html:154 msgid "Drag recipe attributes from the right into the appropriate box below." msgstr "" -#: .\cookbook\templates\url_import.html:160 -#: .\cookbook\templates\url_import.html:177 -#: .\cookbook\templates\url_import.html:194 -#: .\cookbook\templates\url_import.html:213 -#: .\cookbook\templates\url_import.html:231 -#: .\cookbook\templates\url_import.html:246 -#: .\cookbook\templates\url_import.html:261 -#: .\cookbook\templates\url_import.html:277 -#: .\cookbook\templates\url_import.html:304 -#: .\cookbook\templates\url_import.html:355 +#: .\cookbook\templates\url_import.html:163 +#: .\cookbook\templates\url_import.html:180 +#: .\cookbook\templates\url_import.html:197 +#: .\cookbook\templates\url_import.html:216 +#: .\cookbook\templates\url_import.html:234 +#: .\cookbook\templates\url_import.html:249 +#: .\cookbook\templates\url_import.html:264 +#: .\cookbook\templates\url_import.html:280 +#: .\cookbook\templates\url_import.html:307 +#: .\cookbook\templates\url_import.html:358 msgid "Clear Contents" msgstr "" -#: .\cookbook\templates\url_import.html:162 +#: .\cookbook\templates\url_import.html:165 msgid "Text dragged here will be appended to the name." msgstr "" -#: .\cookbook\templates\url_import.html:175 +#: .\cookbook\templates\url_import.html:178 msgid "Description" msgstr "" -#: .\cookbook\templates\url_import.html:179 +#: .\cookbook\templates\url_import.html:182 msgid "Text dragged here will be appended to the description." msgstr "" -#: .\cookbook\templates\url_import.html:196 +#: .\cookbook\templates\url_import.html:199 msgid "Keywords dragged here will be appended to current list" msgstr "" -#: .\cookbook\templates\url_import.html:211 +#: .\cookbook\templates\url_import.html:214 msgid "Image" msgstr "" -#: .\cookbook\templates\url_import.html:243 +#: .\cookbook\templates\url_import.html:246 msgid "Prep Time" msgstr "" -#: .\cookbook\templates\url_import.html:258 +#: .\cookbook\templates\url_import.html:261 msgid "Cook Time" msgstr "" -#: .\cookbook\templates\url_import.html:279 +#: .\cookbook\templates\url_import.html:282 msgid "Ingredients dragged here will be appended to current list." msgstr "" -#: .\cookbook\templates\url_import.html:301 -#: .\cookbook\templates\url_import.html:572 +#: .\cookbook\templates\url_import.html:304 +#: .\cookbook\templates\url_import.html:579 msgid "Instructions" msgstr "" -#: .\cookbook\templates\url_import.html:306 +#: .\cookbook\templates\url_import.html:309 msgid "" "Recipe instructions dragged here will be appended to current instructions." msgstr "" -#: .\cookbook\templates\url_import.html:329 +#: .\cookbook\templates\url_import.html:332 msgid "Discovered Attributes" msgstr "" -#: .\cookbook\templates\url_import.html:331 +#: .\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 "" -#: .\cookbook\templates\url_import.html:348 +#: .\cookbook\templates\url_import.html:351 msgid "Show Blank Field" msgstr "" -#: .\cookbook\templates\url_import.html:353 +#: .\cookbook\templates\url_import.html:356 msgid "Blank Field" msgstr "" -#: .\cookbook\templates\url_import.html:357 +#: .\cookbook\templates\url_import.html:360 msgid "Items dragged to Blank Field will be appended." msgstr "" -#: .\cookbook\templates\url_import.html:404 +#: .\cookbook\templates\url_import.html:407 msgid "Delete Text" msgstr "" -#: .\cookbook\templates\url_import.html:417 +#: .\cookbook\templates\url_import.html:420 msgid "Delete image" msgstr "" -#: .\cookbook\templates\url_import.html:433 +#: .\cookbook\templates\url_import.html:436 msgid "Recipe Name" msgstr "" -#: .\cookbook\templates\url_import.html:437 +#: .\cookbook\templates\url_import.html:440 msgid "Recipe Description" msgstr "" -#: .\cookbook\templates\url_import.html:499 -#: .\cookbook\templates\url_import.html:531 -#: .\cookbook\templates\url_import.html:587 +#: .\cookbook\templates\url_import.html:504 +#: .\cookbook\templates\url_import.html:536 +#: .\cookbook\templates\url_import.html:596 msgid "Select one" msgstr "" -#: .\cookbook\templates\url_import.html:547 +#: .\cookbook\templates\url_import.html:554 msgid "Note" msgstr "" -#: .\cookbook\templates\url_import.html:588 +#: .\cookbook\templates\url_import.html:597 msgid "Add Keyword" msgstr "" -#: .\cookbook\templates\url_import.html:601 +#: .\cookbook\templates\url_import.html:610 msgid "All Keywords" msgstr "" -#: .\cookbook\templates\url_import.html:604 +#: .\cookbook\templates\url_import.html:613 msgid "Import all keywords, not only the ones already existing." msgstr "" -#: .\cookbook\templates\url_import.html:631 +#: .\cookbook\templates\url_import.html:640 msgid "Information" msgstr "" -#: .\cookbook\templates\url_import.html:633 +#: .\cookbook\templates\url_import.html:642 msgid "" " Only websites containing ld+json or microdata information can currently\n" " be imported. Most big recipe pages " @@ -2227,125 +2391,214 @@ msgid "" " github issues." msgstr "" -#: .\cookbook\templates\url_import.html:641 +#: .\cookbook\templates\url_import.html:650 msgid "Google ld+json Info" msgstr "" -#: .\cookbook\templates\url_import.html:644 +#: .\cookbook\templates\url_import.html:653 msgid "GitHub Issues" msgstr "" -#: .\cookbook\templates\url_import.html:646 +#: .\cookbook\templates\url_import.html:655 msgid "Recipe Markup Specification" msgstr "" -#: .\cookbook\views\api.py:83 .\cookbook\views\api.py:132 +#: .\cookbook\views\api.py:88 .\cookbook\views\api.py:170 msgid "Parameter updated_at incorrectly formatted" msgstr "" -#: .\cookbook\views\api.py:152 +#: .\cookbook\views\api.py:190 .\cookbook\views\api.py:291 #, python-brace-format msgid "No {self.basename} with id {pk} exists" msgstr "" -#: .\cookbook\views\api.py:156 +#: .\cookbook\views\api.py:194 msgid "Cannot merge with the same object!" msgstr "" -#: .\cookbook\views\api.py:163 +#: .\cookbook\views\api.py:201 #, python-brace-format msgid "No {self.basename} with id {target} exists" msgstr "" -#: .\cookbook\views\api.py:168 +#: .\cookbook\views\api.py:206 msgid "Cannot merge with child object!" msgstr "" -#: .\cookbook\views\api.py:201 +#: .\cookbook\views\api.py:239 #, python-brace-format msgid "{source.name} was merged successfully with {target.name}" msgstr "" -#: .\cookbook\views\api.py:205 +#: .\cookbook\views\api.py:244 #, python-brace-format msgid "An error occurred attempting to merge {source.name} with {target.name}" msgstr "" -#: .\cookbook\views\api.py:249 -#, python-brace-format -msgid "No {self.basename} with id {child} exists" -msgstr "" - -#: .\cookbook\views\api.py:258 +#: .\cookbook\views\api.py:300 #, python-brace-format msgid "{child.name} was moved successfully to the root." msgstr "" -#: .\cookbook\views\api.py:261 .\cookbook\views\api.py:279 +#: .\cookbook\views\api.py:303 .\cookbook\views\api.py:321 msgid "An error occurred attempting to move " msgstr "" -#: .\cookbook\views\api.py:264 +#: .\cookbook\views\api.py:306 msgid "Cannot move an object to itself!" msgstr "" -#: .\cookbook\views\api.py:270 +#: .\cookbook\views\api.py:312 #, python-brace-format msgid "No {self.basename} with id {parent} exists" msgstr "" -#: .\cookbook\views\api.py:276 +#: .\cookbook\views\api.py:318 #, python-brace-format msgid "{child.name} was moved successfully to parent {parent.name}" msgstr "" -#: .\cookbook\views\api.py:723 .\cookbook\views\data.py:42 +#: .\cookbook\views\api.py:470 +#, python-brace-format +msgid "{obj.name} was removed from the shopping list." +msgstr "" + +#: .\cookbook\views\api.py:475 .\cookbook\views\api.py:726 +#, python-brace-format +msgid "{obj.name} was added to the shopping list." +msgstr "" + +#: .\cookbook\views\api.py:587 +msgid "ID of recipe a step is part of. For multiple repeat parameter." +msgstr "" + +#: .\cookbook\views\api.py:588 +msgid "Query string matched (fuzzy) against object name." +msgstr "" + +#: .\cookbook\views\api.py:631 +msgid "" +"Query string matched (fuzzy) against recipe name. In the future also " +"fulltext search." +msgstr "" + +#: .\cookbook\views\api.py:632 +msgid "ID of keyword a recipe should have. For multiple repeat parameter." +msgstr "" + +#: .\cookbook\views\api.py:633 +msgid "ID of food a recipe should have. For multiple repeat parameter." +msgstr "" + +#: .\cookbook\views\api.py:634 +msgid "ID of unit a recipe should have." +msgstr "" + +#: .\cookbook\views\api.py:635 +msgid "Rating a recipe should have. [0 - 5]" +msgstr "" + +#: .\cookbook\views\api.py:636 +msgid "ID of book a recipe should be in. For multiple repeat parameter." +msgstr "" + +#: .\cookbook\views\api.py:637 +msgid "" +"If recipe should have all (AND=false) or any (OR=true) of the " +"provided keywords." +msgstr "" + +#: .\cookbook\views\api.py:638 +msgid "" +"If recipe should have all (AND=false) or any (OR=true) of the " +"provided foods." +msgstr "" + +#: .\cookbook\views\api.py:639 +msgid "" +"If recipe should be in all (AND=false) or any (OR=true) of the " +"provided books." +msgstr "" + +#: .\cookbook\views\api.py:640 +msgid "If only internal recipes should be returned. [true/false]" +msgstr "" + +#: .\cookbook\views\api.py:641 +msgid "Returns the results in randomized order. [true/false]" +msgstr "" + +#: .\cookbook\views\api.py:642 +msgid "Returns new results first in search results. [true/false]" +msgstr "" + +#: .\cookbook\views\api.py:768 +msgid "" +"Returns the shopping list entry with a primary key of id. Multiple values " +"allowed." +msgstr "" + +#: .\cookbook\views\api.py:771 +msgid "" +"Filter shopping list entries on checked. [true, false, both, recent]
- recent includes unchecked items and recently completed items." +msgstr "" + +#: .\cookbook\views\api.py:773 +msgid "Returns the shopping list entries sorted by supermarket category order." +msgstr "" + +#: .\cookbook\views\api.py:922 .\cookbook\views\data.py:42 #: .\cookbook\views\edit.py:129 .\cookbook\views\new.py:95 msgid "This feature is not yet available in the hosted version of tandoor!" msgstr "" -#: .\cookbook\views\api.py:745 +#: .\cookbook\views\api.py:944 msgid "Sync successful!" msgstr "" -#: .\cookbook\views\api.py:750 +#: .\cookbook\views\api.py:949 msgid "Error synchronizing with Storage" msgstr "" -#: .\cookbook\views\api.py:828 +#: .\cookbook\views\api.py:1028 msgid "Nothing to do." msgstr "" -#: .\cookbook\views\api.py:843 +#: .\cookbook\views\api.py:1043 msgid "The requested site provided malformed data and cannot be read." msgstr "" -#: .\cookbook\views\api.py:850 +#: .\cookbook\views\api.py:1050 msgid "The requested page could not be found." msgstr "" -#: .\cookbook\views\api.py:859 +#: .\cookbook\views\api.py:1068 msgid "" "The requested site does not provide any recognized data format to import the " "recipe from." msgstr "" -#: .\cookbook\views\api.py:873 +#: .\cookbook\views\api.py:1082 +msgid "Connection Refused." +msgstr "" + +#: .\cookbook\views\api.py:1091 msgid "No useable data could be found." msgstr "" -#: .\cookbook\views\api.py:889 +#: .\cookbook\views\api.py:1107 msgid "I couldn't find anything to do." msgstr "" #: .\cookbook\views\data.py:34 .\cookbook\views\data.py:129 -#: .\cookbook\views\edit.py:49 .\cookbook\views\import_export.py:73 +#: .\cookbook\views\edit.py:49 .\cookbook\views\import_export.py:80 #: .\cookbook\views\new.py:33 msgid "You have reached the maximum number of recipes for your space." msgstr "" #: .\cookbook\views\data.py:38 .\cookbook\views\data.py:133 -#: .\cookbook\views\edit.py:53 .\cookbook\views\import_export.py:77 +#: .\cookbook\views\edit.py:53 .\cookbook\views\import_export.py:84 #: .\cookbook\views\new.py:37 msgid "You have more users than allowed in your space." msgstr "" @@ -2361,7 +2614,7 @@ msgstr[1] "" msgid "Monitor" msgstr "" -#: .\cookbook\views\delete.py:125 .\cookbook\views\lists.py:86 +#: .\cookbook\views\delete.py:125 .\cookbook\views\lists.py:71 #: .\cookbook\views\new.py:101 msgid "Storage Backend" msgstr "" @@ -2379,7 +2632,7 @@ msgstr "" msgid "Bookmarks" msgstr "" -#: .\cookbook\views\delete.py:192 .\cookbook\views\new.py:235 +#: .\cookbook\views\delete.py:192 .\cookbook\views\new.py:238 msgid "Invite Link" msgstr "" @@ -2403,38 +2656,44 @@ msgstr "" msgid "Error saving changes!" msgstr "" -#: .\cookbook\views\import_export.py:99 +#: .\cookbook\views\import_export.py:106 msgid "Importing is not implemented for this provider" msgstr "" -#: .\cookbook\views\import_export.py:121 +#: .\cookbook\views\import_export.py:127 +msgid "" +"The PDF Exporter is not enabled on this instance as it is still in an " +"experimental state." +msgstr "" + +#: .\cookbook\views\import_export.py:132 msgid "Exporting is not implemented for this provider" msgstr "" -#: .\cookbook\views\lists.py:26 +#: .\cookbook\views\lists.py:25 msgid "Import Log" msgstr "" -#: .\cookbook\views\lists.py:39 +#: .\cookbook\views\lists.py:38 msgid "Discovery" msgstr "" -#: .\cookbook\views\lists.py:69 +#: .\cookbook\views\lists.py:54 msgid "Shopping Lists" msgstr "" -#: .\cookbook\views\lists.py:129 -msgid "Foods" -msgstr "" - -#: .\cookbook\views\lists.py:163 +#: .\cookbook\views\lists.py:148 msgid "Supermarkets" msgstr "" -#: .\cookbook\views\lists.py:179 +#: .\cookbook\views\lists.py:164 msgid "Shopping Categories" msgstr "" +#: .\cookbook\views\lists.py:217 +msgid "Steps" +msgstr "" + #: .\cookbook\views\lists.py:232 msgid "New Shopping List" msgstr "" @@ -2447,124 +2706,124 @@ msgstr "" msgid "There was an error importing this recipe!" msgstr "" -#: .\cookbook\views\new.py:209 +#: .\cookbook\views\new.py:212 msgid "Hello" msgstr "" -#: .\cookbook\views\new.py:209 +#: .\cookbook\views\new.py:212 msgid "You have been invited by " msgstr "" -#: .\cookbook\views\new.py:210 +#: .\cookbook\views\new.py:213 msgid " to join their Tandoor Recipes space " msgstr "" -#: .\cookbook\views\new.py:211 +#: .\cookbook\views\new.py:214 msgid "Click the following link to activate your account: " msgstr "" -#: .\cookbook\views\new.py:212 +#: .\cookbook\views\new.py:215 msgid "" "If the link does not work use the following code to manually join the space: " msgstr "" -#: .\cookbook\views\new.py:213 +#: .\cookbook\views\new.py:216 msgid "The invitation is valid until " msgstr "" -#: .\cookbook\views\new.py:214 +#: .\cookbook\views\new.py:217 msgid "" "Tandoor Recipes is an Open Source recipe manager. Check it out on GitHub " msgstr "" -#: .\cookbook\views\new.py:217 +#: .\cookbook\views\new.py:220 msgid "Tandoor Recipes Invite" msgstr "" -#: .\cookbook\views\new.py:224 +#: .\cookbook\views\new.py:227 msgid "Invite link successfully send to user." msgstr "" -#: .\cookbook\views\new.py:227 +#: .\cookbook\views\new.py:230 msgid "" "You have send to many emails, please share the link manually or wait a few " "hours." msgstr "" -#: .\cookbook\views\new.py:229 +#: .\cookbook\views\new.py:232 msgid "Email to user could not be send, please share link manually." msgstr "" -#: .\cookbook\views\views.py:127 +#: .\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 "" -#: .\cookbook\views\views.py:175 +#: .\cookbook\views\views.py:174 msgid "You do not have the required permissions to perform this action!" msgstr "" -#: .\cookbook\views\views.py:186 +#: .\cookbook\views\views.py:185 msgid "Comment saved!" msgstr "" -#: .\cookbook\views\views.py:277 +#: .\cookbook\views\views.py:276 msgid "This feature is not available in the demo version!" msgstr "" -#: .\cookbook\views\views.py:340 +#: .\cookbook\views\views.py:335 msgid "You must select at least one field to search!" msgstr "" -#: .\cookbook\views\views.py:345 +#: .\cookbook\views\views.py:340 msgid "" "To use this search method you must select at least one full text search " "field!" msgstr "" -#: .\cookbook\views\views.py:349 +#: .\cookbook\views\views.py:344 msgid "Fuzzy search is not compatible with this search method!" msgstr "" -#: .\cookbook\views\views.py:452 +#: .\cookbook\views\views.py:470 msgid "" "The setup page can only be used to create the first user! If you have " "forgotten your superuser credentials please consult the django documentation " "on how to reset passwords." msgstr "" -#: .\cookbook\views\views.py:459 +#: .\cookbook\views\views.py:477 msgid "Passwords dont match!" msgstr "" -#: .\cookbook\views\views.py:475 +#: .\cookbook\views\views.py:493 msgid "User has been created, please login!" msgstr "" -#: .\cookbook\views\views.py:491 +#: .\cookbook\views\views.py:509 msgid "Malformed Invite Link supplied!" msgstr "" -#: .\cookbook\views\views.py:498 +#: .\cookbook\views\views.py:516 msgid "You are already member of a space and therefore cannot join this one." msgstr "" -#: .\cookbook\views\views.py:509 +#: .\cookbook\views\views.py:527 msgid "Successfully joined space." msgstr "" -#: .\cookbook\views\views.py:515 +#: .\cookbook\views\views.py:533 msgid "Invite Link not valid or already used!" msgstr "" -#: .\cookbook\views\views.py:579 +#: .\cookbook\views\views.py:614 msgid "" "Reporting share links is not enabled for this instance. Please notify the " "page administrator to report problems." msgstr "" -#: .\cookbook\views\views.py:585 +#: .\cookbook\views\views.py:620 msgid "" "Recipe sharing link has been disabled! For additional information please " "contact the page administrator." diff --git a/cookbook/locale/tr/LC_MESSAGES/django.po b/cookbook/locale/tr/LC_MESSAGES/django.po index 973ae62e14..66f1d3b95c 100644 --- a/cookbook/locale/tr/LC_MESSAGES/django.po +++ b/cookbook/locale/tr/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-08 16:27+0100\n" +"POT-Creation-Date: 2022-01-18 14:52+0100\n" "PO-Revision-Date: 2020-06-02 19:28+0000\n" "Last-Translator: Emre S, 2020\n" "Language-Team: Turkish (https://www.transifex.com/django-recipes/" @@ -22,71 +22,70 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: .\cookbook\filters.py:23 .\cookbook\templates\base.html:125 -#: .\cookbook\templates\forms\ingredients.html:34 -#: .\cookbook\templates\space.html:43 .\cookbook\templates\stats.html:28 -#: .\cookbook\templates\url_import.html:274 +#: .\cookbook\filters.py:23 .\cookbook\templates\forms\ingredients.html:34 +#: .\cookbook\templates\space.html:50 .\cookbook\templates\stats.html:28 +#: .\cookbook\templates\url_import.html:277 msgid "Ingredients" msgstr "Malzemeler" -#: .\cookbook\forms.py:54 +#: .\cookbook\forms.py:56 msgid "Default unit" msgstr "" -#: .\cookbook\forms.py:55 +#: .\cookbook\forms.py:57 msgid "Use fractions" msgstr "" -#: .\cookbook\forms.py:56 +#: .\cookbook\forms.py:58 msgid "Use KJ" msgstr "" -#: .\cookbook\forms.py:57 +#: .\cookbook\forms.py:59 msgid "Theme" msgstr "" -#: .\cookbook\forms.py:58 +#: .\cookbook\forms.py:60 msgid "Navbar color" msgstr "" -#: .\cookbook\forms.py:59 +#: .\cookbook\forms.py:61 msgid "Sticky navbar" msgstr "" -#: .\cookbook\forms.py:60 +#: .\cookbook\forms.py:62 msgid "Default page" msgstr "" -#: .\cookbook\forms.py:61 +#: .\cookbook\forms.py:63 #, fuzzy #| msgid "Show recently viewed recipes on search page." msgid "Show recent recipes" msgstr "Son görüntülenen tarifleri arama sayfasında göster." -#: .\cookbook\forms.py:62 +#: .\cookbook\forms.py:64 msgid "Search style" msgstr "" -#: .\cookbook\forms.py:63 +#: .\cookbook\forms.py:65 msgid "Plan sharing" msgstr "" -#: .\cookbook\forms.py:64 +#: .\cookbook\forms.py:66 #, fuzzy #| msgid "Ingredients" msgid "Ingredient decimal places" msgstr "Malzemeler" -#: .\cookbook\forms.py:65 +#: .\cookbook\forms.py:67 msgid "Shopping list auto sync period" msgstr "" -#: .\cookbook\forms.py:66 .\cookbook\templates\recipe_view.html:21 -#: .\cookbook\templates\space.html:62 .\cookbook\templates\stats.html:47 +#: .\cookbook\forms.py:68 .\cookbook\templates\recipe_view.html:21 +#: .\cookbook\templates\space.html:77 .\cookbook\templates\stats.html:47 msgid "Comments" msgstr "" -#: .\cookbook\forms.py:70 +#: .\cookbook\forms.py:72 msgid "" "Color of the top navigation bar. Not all colors work with all themes, just " "try them out!" @@ -94,39 +93,41 @@ msgstr "" "Gezinti çubuğunun rengi. Bütün renkeler bütün temalarla çalışmayabilir, önce " "deneyin!" -#: .\cookbook\forms.py:72 +#: .\cookbook\forms.py:74 msgid "Default Unit to be used when inserting a new ingredient into a recipe." msgstr "Bir tarife yeni bir malzeme eklenirken kullanılacak Varsayılan Birim." -#: .\cookbook\forms.py:74 +#: .\cookbook\forms.py:76 msgid "" "Enables support for fractions in ingredient amounts (e.g. convert decimals " "to fractions automatically)" msgstr "" -#: .\cookbook\forms.py:76 +#: .\cookbook\forms.py:78 msgid "Display nutritional energy amounts in joules instead of calories" msgstr "" -#: .\cookbook\forms.py:78 -msgid "" -"Users with whom newly created meal plan/shopping list entries should be " -"shared by default." +#: .\cookbook\forms.py:79 +msgid "Users with whom newly created meal plans should be shared by default." msgstr "" #: .\cookbook\forms.py:80 +msgid "Users with whom to share shopping lists." +msgstr "" + +#: .\cookbook\forms.py:82 msgid "Show recently viewed recipes on search page." msgstr "Son görüntülenen tarifleri arama sayfasında göster." -#: .\cookbook\forms.py:81 +#: .\cookbook\forms.py:83 msgid "Number of decimals to round ingredients." msgstr "Malzeme birimleri için yuvarlanma basamağı." -#: .\cookbook\forms.py:82 +#: .\cookbook\forms.py:84 msgid "If you want to be able to create and see comments underneath recipes." msgstr "Tariflerin altında yorumlar oluşturup görebilmek istiyorsanız." -#: .\cookbook\forms.py:84 +#: .\cookbook\forms.py:86 .\cookbook\forms.py:493 msgid "" "Setting to 0 will disable auto sync. When viewing a shopping list the list " "is updated every set seconds to sync changes someone else might have made. " @@ -139,200 +140,312 @@ msgstr "" "fazla kişiyle alışveriş yaparken kullanışlıdır, ancak biraz mobil veri " "kullanabilir. Örnek sınırından düşükse, kaydederken sıfırlanır." -#: .\cookbook\forms.py:87 +#: .\cookbook\forms.py:89 msgid "Makes the navbar stick to the top of the page." msgstr "" -#: .\cookbook\forms.py:103 +#: .\cookbook\forms.py:90 .\cookbook\forms.py:496 +msgid "Automatically add meal plan ingredients to shopping list." +msgstr "" + +#: .\cookbook\forms.py:91 +msgid "Exclude ingredients that are on hand." +msgstr "" + +#: .\cookbook\forms.py:108 msgid "" "Both fields are optional. If none are given the username will be displayed " "instead" msgstr "" -#: .\cookbook\forms.py:124 .\cookbook\forms.py:289 -#: .\cookbook\templates\url_import.html:158 +#: .\cookbook\forms.py:129 .\cookbook\forms.py:298 +#: .\cookbook\templates\url_import.html:161 msgid "Name" msgstr "İsim" -#: .\cookbook\forms.py:125 .\cookbook\forms.py:290 -#: .\cookbook\templates\space.html:39 .\cookbook\templates\stats.html:24 -#: .\cookbook\templates\url_import.html:192 -#: .\cookbook\templates\url_import.html:578 .\cookbook\views\lists.py:112 +#: .\cookbook\forms.py:130 .\cookbook\forms.py:299 +#: .\cookbook\templates\space.html:44 .\cookbook\templates\stats.html:24 +#: .\cookbook\templates\url_import.html:195 +#: .\cookbook\templates\url_import.html:585 .\cookbook\views\lists.py:97 msgid "Keywords" msgstr "" -#: .\cookbook\forms.py:126 +#: .\cookbook\forms.py:131 msgid "Preparation time in minutes" msgstr "" -#: .\cookbook\forms.py:127 +#: .\cookbook\forms.py:132 msgid "Waiting time (cooking/baking) in minutes" msgstr "" -#: .\cookbook\forms.py:128 .\cookbook\forms.py:259 .\cookbook\forms.py:291 +#: .\cookbook\forms.py:133 .\cookbook\forms.py:267 .\cookbook\forms.py:300 msgid "Path" msgstr "" -#: .\cookbook\forms.py:129 +#: .\cookbook\forms.py:134 msgid "Storage UID" msgstr "" -#: .\cookbook\forms.py:157 +#: .\cookbook\forms.py:164 msgid "Default" msgstr "" -#: .\cookbook\forms.py:168 .\cookbook\templates\url_import.html:94 +#: .\cookbook\forms.py:175 .\cookbook\templates\url_import.html:97 msgid "" "To prevent duplicates recipes with the same name as existing ones are " "ignored. Check this box to import everything." msgstr "" -#: .\cookbook\forms.py:190 +#: .\cookbook\forms.py:197 msgid "Add your comment: " msgstr "" -#: .\cookbook\forms.py:205 +#: .\cookbook\forms.py:212 msgid "Leave empty for dropbox and enter app password for nextcloud." msgstr "" -#: .\cookbook\forms.py:212 +#: .\cookbook\forms.py:219 msgid "Leave empty for nextcloud and enter api token for dropbox." msgstr "" -#: .\cookbook\forms.py:221 +#: .\cookbook\forms.py:228 msgid "" "Leave empty for dropbox and enter only base url for nextcloud (/remote." "php/webdav/ is added automatically)" msgstr "" -#: .\cookbook\forms.py:258 .\cookbook\views\edit.py:166 +#: .\cookbook\forms.py:266 .\cookbook\views\edit.py:166 msgid "Storage" msgstr "" -#: .\cookbook\forms.py:260 +#: .\cookbook\forms.py:268 msgid "Active" msgstr "" -#: .\cookbook\forms.py:265 +#: .\cookbook\forms.py:274 msgid "Search String" msgstr "" -#: .\cookbook\forms.py:292 +#: .\cookbook\forms.py:301 msgid "File ID" msgstr "" -#: .\cookbook\forms.py:313 +#: .\cookbook\forms.py:323 msgid "You must provide at least a recipe or a title." msgstr "" -#: .\cookbook\forms.py:326 +#: .\cookbook\forms.py:336 msgid "You can list default users to share recipes with in the settings." msgstr "" -#: .\cookbook\forms.py:327 +#: .\cookbook\forms.py:337 msgid "" "You can use markdown to format this field. See the docs here" msgstr "" -#: .\cookbook\forms.py:353 +#: .\cookbook\forms.py:363 msgid "Maximum number of users for this space reached." msgstr "" -#: .\cookbook\forms.py:359 +#: .\cookbook\forms.py:369 msgid "Email address already taken!" msgstr "" -#: .\cookbook\forms.py:367 +#: .\cookbook\forms.py:377 msgid "" "An email address is not required but if present the invite link will be sent " "to the user." msgstr "" -#: .\cookbook\forms.py:382 +#: .\cookbook\forms.py:392 msgid "Name already taken." msgstr "" -#: .\cookbook\forms.py:393 +#: .\cookbook\forms.py:403 msgid "Accept Terms and Privacy" msgstr "" -#: .\cookbook\forms.py:425 +#: .\cookbook\forms.py:435 msgid "" "Determines how fuzzy a search is if it uses trigram similarity matching (e." "g. low values mean more typos are ignored)." msgstr "" -#: .\cookbook\forms.py:435 +#: .\cookbook\forms.py:445 msgid "" "Select type method of search. Click here for " "full desciption of choices." msgstr "" -#: .\cookbook\forms.py:436 +#: .\cookbook\forms.py:446 msgid "" "Use fuzzy matching on units, keywords and ingredients when editing and " "importing recipes." msgstr "" -#: .\cookbook\forms.py:438 +#: .\cookbook\forms.py:448 msgid "" "Fields to search ignoring accents. Selecting this option can improve or " "degrade search quality depending on language" msgstr "" -#: .\cookbook\forms.py:440 +#: .\cookbook\forms.py:450 msgid "" "Fields to search for partial matches. (e.g. searching for 'Pie' will return " "'pie' and 'piece' and 'soapie')" msgstr "" -#: .\cookbook\forms.py:442 +#: .\cookbook\forms.py:452 msgid "" "Fields to search for beginning of word matches. (e.g. searching for 'sa' " "will return 'salad' and 'sandwich')" msgstr "" -#: .\cookbook\forms.py:444 +#: .\cookbook\forms.py:454 msgid "" "Fields to 'fuzzy' search. (e.g. searching for 'recpie' will find 'recipe'.) " "Note: this option will conflict with 'web' and 'raw' methods of search." msgstr "" -#: .\cookbook\forms.py:446 +#: .\cookbook\forms.py:456 msgid "" "Fields to full text search. Note: 'web', 'phrase', and 'raw' search methods " "only function with fulltext fields." msgstr "" -#: .\cookbook\forms.py:450 +#: .\cookbook\forms.py:460 msgid "Search Method" msgstr "" -#: .\cookbook\forms.py:451 +#: .\cookbook\forms.py:461 msgid "Fuzzy Lookups" msgstr "" -#: .\cookbook\forms.py:452 +#: .\cookbook\forms.py:462 msgid "Ignore Accent" msgstr "" -#: .\cookbook\forms.py:453 +#: .\cookbook\forms.py:463 msgid "Partial Match" msgstr "" -#: .\cookbook\forms.py:454 +#: .\cookbook\forms.py:464 msgid "Starts Wtih" msgstr "" -#: .\cookbook\forms.py:455 +#: .\cookbook\forms.py:465 msgid "Fuzzy Search" msgstr "" -#: .\cookbook\forms.py:456 +#: .\cookbook\forms.py:466 msgid "Full Text" msgstr "" +#: .\cookbook\forms.py:491 +msgid "" +"Users will see all items you add to your shopping list. They must add you " +"to see items on their list." +msgstr "" + +#: .\cookbook\forms.py:497 +msgid "" +"When adding a meal plan to the shopping list (manually or automatically), " +"include all related recipes." +msgstr "" + +#: .\cookbook\forms.py:498 +msgid "" +"When adding a meal plan to the shopping list (manually or automatically), " +"exclude ingredients that are on hand." +msgstr "" + +#: .\cookbook\forms.py:499 +msgid "Default number of hours to delay a shopping list entry." +msgstr "" + +#: .\cookbook\forms.py:500 +msgid "Filter shopping list to only include supermarket categories." +msgstr "" + +#: .\cookbook\forms.py:501 +msgid "Days of recent shopping list entries to display." +msgstr "" + +#: .\cookbook\forms.py:502 +msgid "Mark food 'On Hand' when checked off shopping list." +msgstr "" + +#: .\cookbook\forms.py:503 +msgid "Delimiter to use for CSV exports." +msgstr "" + +#: .\cookbook\forms.py:504 +msgid "Prefix to add when copying list to the clipboard." +msgstr "" + +#: .\cookbook\forms.py:508 +msgid "Share Shopping List" +msgstr "" + +#: .\cookbook\forms.py:509 +msgid "Autosync" +msgstr "" + +#: .\cookbook\forms.py:510 +msgid "Auto Add Meal Plan" +msgstr "" + +#: .\cookbook\forms.py:511 +msgid "Exclude On Hand" +msgstr "" + +#: .\cookbook\forms.py:512 +msgid "Include Related" +msgstr "" + +#: .\cookbook\forms.py:513 +msgid "Default Delay Hours" +msgstr "" + +#: .\cookbook\forms.py:514 +msgid "Filter to Supermarket" +msgstr "" + +#: .\cookbook\forms.py:515 +msgid "Recent Days" +msgstr "" + +#: .\cookbook\forms.py:516 +msgid "CSV Delimiter" +msgstr "" + +#: .\cookbook\forms.py:517 .\cookbook\templates\shopping_list.html:322 +msgid "List Prefix" +msgstr "" + +#: .\cookbook\forms.py:518 +msgid "Auto On Hand" +msgstr "" + +#: .\cookbook\forms.py:528 +msgid "Reset Food Inheritance" +msgstr "" + +#: .\cookbook\forms.py:529 +msgid "Reset all food to inherit the fields configured." +msgstr "" + +#: .\cookbook\forms.py:541 +msgid "Fields on food that should be inherited by default." +msgstr "" + +#: .\cookbook\forms.py:542 +#, fuzzy +#| msgid "Show recently viewed recipes on search page." +msgid "Show recipe counts on search filters" +msgstr "Son görüntülenen tarifleri arama sayfasında göster." + #: .\cookbook\helper\AllAuthCustomAdapter.py:36 msgid "" "In order to prevent spam, the requested email was not send. Please wait a " @@ -340,19 +453,19 @@ msgid "" msgstr "" #: .\cookbook\helper\permission_helper.py:136 -#: .\cookbook\helper\permission_helper.py:159 .\cookbook\views\views.py:149 +#: .\cookbook\helper\permission_helper.py:159 .\cookbook\views\views.py:148 msgid "You are not logged in and therefore cannot view this page!" msgstr "" #: .\cookbook\helper\permission_helper.py:140 #: .\cookbook\helper\permission_helper.py:146 #: .\cookbook\helper\permission_helper.py:171 -#: .\cookbook\helper\permission_helper.py:216 -#: .\cookbook\helper\permission_helper.py:230 -#: .\cookbook\helper\permission_helper.py:241 -#: .\cookbook\helper\permission_helper.py:252 .\cookbook\views\data.py:47 -#: .\cookbook\views\views.py:160 .\cookbook\views\views.py:167 -#: .\cookbook\views\views.py:233 +#: .\cookbook\helper\permission_helper.py:219 +#: .\cookbook\helper\permission_helper.py:233 +#: .\cookbook\helper\permission_helper.py:244 +#: .\cookbook\helper\permission_helper.py:255 .\cookbook\views\data.py:47 +#: .\cookbook\views\views.py:159 .\cookbook\views\views.py:166 +#: .\cookbook\views\views.py:232 msgid "You do not have the required permissions to view this page!" msgstr "" @@ -362,41 +475,40 @@ msgstr "" msgid "You cannot interact with this object as it is not owned by you!" msgstr "" +#: .\cookbook\helper\recipe_search.py:473 +msgid "One of queryset or hash_key must be provided" +msgstr "" + +#: .\cookbook\helper\shopping_helper.py:54 +msgid "You must supply a recipe or mealplan" +msgstr "" + +#: .\cookbook\helper\shopping_helper.py:58 +msgid "You must supply a created_by" +msgstr "" + #: .\cookbook\helper\template_helper.py:61 #: .\cookbook\helper\template_helper.py:63 msgid "Could not parse template code." msgstr "" -#: .\cookbook\integration\integration.py:126 -#: .\cookbook\templates\import.html:14 .\cookbook\templates\import.html:20 -#: .\cookbook\templates\import_response.html:7 -#: .\cookbook\templates\test.html:14 .\cookbook\templates\test.html:20 -#: .\cookbook\templates\url_import.html:27 -#: .\cookbook\templates\url_import.html:105 -#: .\cookbook\templates\url_import.html:127 -#: .\cookbook\templates\url_import.html:321 -#: .\cookbook\templates\url_import.html:609 .\cookbook\views\delete.py:89 -#: .\cookbook\views\edit.py:200 -msgid "Import" -msgstr "" - -#: .\cookbook\integration\integration.py:208 +#: .\cookbook\integration\integration.py:200 msgid "" "Importer expected a .zip file. Did you choose the correct importer type for " "your data ?" msgstr "" -#: .\cookbook\integration\integration.py:211 +#: .\cookbook\integration\integration.py:203 msgid "" "An unexpected error occurred during the import. Please make sure you have " "uploaded a valid file." msgstr "" -#: .\cookbook\integration\integration.py:216 +#: .\cookbook\integration\integration.py:208 msgid "The following recipes were ignored because they already existed:" msgstr "" -#: .\cookbook\integration\integration.py:220 +#: .\cookbook\integration\integration.py:212 #, python-format msgid "Imported %s recipes." msgstr "" @@ -409,32 +521,32 @@ msgstr "" msgid "Nutritional Information" msgstr "" -#: .\cookbook\integration\paprika.py:53 .\cookbook\templates\url_import.html:40 +#: .\cookbook\integration\paprika.py:53 .\cookbook\templates\url_import.html:42 msgid "Source" msgstr "" -#: .\cookbook\integration\safron.py:23 -#: .\cookbook\templates\include\log_cooking.html:16 -#: .\cookbook\templates\url_import.html:228 -#: .\cookbook\templates\url_import.html:459 +#: .\cookbook\integration\saffron.py:23 +#: .\cookbook\templates\include\log_cooking.html:18 +#: .\cookbook\templates\url_import.html:231 +#: .\cookbook\templates\url_import.html:462 msgid "Servings" msgstr "" -#: .\cookbook\integration\safron.py:25 +#: .\cookbook\integration\saffron.py:25 msgid "Waiting time" msgstr "" -#: .\cookbook\integration\safron.py:27 +#: .\cookbook\integration\saffron.py:27 msgid "Preparation Time" msgstr "" -#: .\cookbook\integration\safron.py:29 .\cookbook\templates\base.html:78 +#: .\cookbook\integration\saffron.py:29 .\cookbook\templates\base.html:78 #: .\cookbook\templates\forms\ingredients.html:7 #: .\cookbook\templates\index.html:7 msgid "Cookbook" msgstr "" -#: .\cookbook\integration\safron.py:31 +#: .\cookbook\integration\saffron.py:31 msgid "Section" msgstr "" @@ -470,105 +582,136 @@ msgstr "" msgid "Other" msgstr "" -#: .\cookbook\models.py:150 +#: .\cookbook\models.py:246 msgid "" "Maximum file storage for space in MB. 0 for unlimited, -1 to disable file " "upload." msgstr "" -#: .\cookbook\models.py:202 .\cookbook\templates\search.html:7 -#: .\cookbook\templates\shopping_list.html:59 +#: .\cookbook\models.py:300 .\cookbook\templates\search.html:7 +#: .\cookbook\templates\shopping_list.html:53 msgid "Search" msgstr "" -#: .\cookbook\models.py:203 .\cookbook\templates\base.html:82 +#: .\cookbook\models.py:301 .\cookbook\templates\base.html:82 #: .\cookbook\templates\meal_plan.html:7 #: .\cookbook\templates\meal_plan_new.html:7 .\cookbook\views\delete.py:181 #: .\cookbook\views\edit.py:220 .\cookbook\views\new.py:184 msgid "Meal-Plan" msgstr "" -#: .\cookbook\models.py:204 .\cookbook\templates\base.html:90 +#: .\cookbook\models.py:302 .\cookbook\templates\base.html:90 msgid "Books" msgstr "" -#: .\cookbook\models.py:212 +#: .\cookbook\models.py:310 msgid "Small" msgstr "" -#: .\cookbook\models.py:212 +#: .\cookbook\models.py:310 msgid "Large" msgstr "" -#: .\cookbook\models.py:212 .\cookbook\templates\generic\new_template.html:6 +#: .\cookbook\models.py:310 .\cookbook\templates\generic\new_template.html:6 #: .\cookbook\templates\generic\new_template.html:14 msgid "New" msgstr "" -#: .\cookbook\models.py:396 +#: .\cookbook\models.py:512 msgid " is part of a recipe step and cannot be deleted" msgstr "" -#: .\cookbook\models.py:441 .\cookbook\templates\url_import.html:42 +#: .\cookbook\models.py:586 .\cookbook\templates\url_import.html:44 msgid "Text" msgstr "" -#: .\cookbook\models.py:441 +#: .\cookbook\models.py:586 msgid "Time" msgstr "" -#: .\cookbook\models.py:441 .\cookbook\templates\url_import.html:44 +#: .\cookbook\models.py:586 .\cookbook\templates\url_import.html:46 msgid "File" msgstr "" -#: .\cookbook\models.py:441 +#: .\cookbook\models.py:586 #: .\cookbook\templates\include\recipe_open_modal.html:7 #: .\cookbook\views\delete.py:39 .\cookbook\views\edit.py:260 #: .\cookbook\views\new.py:53 msgid "Recipe" msgstr "" -#: .\cookbook\models.py:871 .\cookbook\templates\search_info.html:28 +#: .\cookbook\models.py:1041 .\cookbook\templates\search_info.html:28 msgid "Simple" msgstr "" -#: .\cookbook\models.py:872 .\cookbook\templates\search_info.html:33 +#: .\cookbook\models.py:1042 .\cookbook\templates\search_info.html:33 msgid "Phrase" msgstr "" -#: .\cookbook\models.py:873 .\cookbook\templates\search_info.html:38 +#: .\cookbook\models.py:1043 .\cookbook\templates\search_info.html:38 msgid "Web" msgstr "" -#: .\cookbook\models.py:874 .\cookbook\templates\search_info.html:47 +#: .\cookbook\models.py:1044 .\cookbook\templates\search_info.html:47 msgid "Raw" msgstr "" -#: .\cookbook\models.py:912 +#: .\cookbook\models.py:1082 msgid "Food Alias" msgstr "" -#: .\cookbook\models.py:912 +#: .\cookbook\models.py:1082 msgid "Unit Alias" msgstr "" -#: .\cookbook\models.py:912 +#: .\cookbook\models.py:1082 msgid "Keyword Alias" msgstr "" -#: .\cookbook\serializer.py:157 +#: .\cookbook\serializer.py:175 +msgid "A user is required" +msgstr "" + +#: .\cookbook\serializer.py:195 msgid "File uploads are not enabled for this Space." msgstr "" -#: .\cookbook\serializer.py:168 +#: .\cookbook\serializer.py:206 msgid "You have reached your file upload limit." msgstr "" +#: .\cookbook\serializer.py:962 +msgid "Existing shopping list to update" +msgstr "" + +#: .\cookbook\serializer.py:964 +msgid "" +"List of ingredient IDs from the recipe to add, if not provided all " +"ingredients will be added." +msgstr "" + +#: .\cookbook\serializer.py:965 +msgid "" +"Providing a list_recipe ID and servings of 0 will delete that shopping list." +msgstr "" + +#: .\cookbook\serializer.py:973 +msgid "Amount of food to add to the shopping list" +msgstr "" + +#: .\cookbook\serializer.py:974 +msgid "ID of unit to use for the shopping list" +msgstr "" + +#: .\cookbook\serializer.py:975 +msgid "When set to true will delete all food from active shopping lists." +msgstr "" + #: .\cookbook\tables.py:35 .\cookbook\templates\generic\edit_template.html:6 #: .\cookbook\templates\generic\edit_template.html:14 #: .\cookbook\templates\recipes_table.html:82 -#: .\cookbook\templates\shopping_list.html:40 -#: .\cookbook\templates\space.html:90 +#: .\cookbook\templates\shopping_list.html:37 +#: .\cookbook\templates\space.html:109 msgid "Edit" msgstr "" @@ -704,27 +847,27 @@ msgstr "" msgid "Sign In" msgstr "" -#: .\cookbook\templates\account\login.html:32 +#: .\cookbook\templates\account\login.html:34 #: .\cookbook\templates\socialaccount\signup.html:8 #: .\cookbook\templates\socialaccount\signup.html:57 msgid "Sign Up" msgstr "" -#: .\cookbook\templates\account\login.html:36 -#: .\cookbook\templates\account\login.html:37 +#: .\cookbook\templates\account\login.html:39 +#: .\cookbook\templates\account\login.html:41 #: .\cookbook\templates\account\password_reset.html:29 msgid "Reset My Password" msgstr "" -#: .\cookbook\templates\account\login.html:37 +#: .\cookbook\templates\account\login.html:40 msgid "Lost your password?" msgstr "" -#: .\cookbook\templates\account\login.html:48 +#: .\cookbook\templates\account\login.html:52 msgid "Social Login" msgstr "" -#: .\cookbook\templates\account\login.html:49 +#: .\cookbook\templates\account\login.html:53 msgid "You can use any of the following providers to sign in." msgstr "" @@ -750,7 +893,7 @@ msgstr "" #: .\cookbook\templates\account\password_change.html:12 #: .\cookbook\templates\account\password_set.html:12 -#: .\cookbook\templates\settings.html:69 +#: .\cookbook\templates\settings.html:76 msgid "Password" msgstr "" @@ -867,15 +1010,19 @@ msgstr "" msgid "Keyword" msgstr "" +#: .\cookbook\templates\base.html:125 .\cookbook\views\lists.py:114 +msgid "Foods" +msgstr "" + #: .\cookbook\templates\base.html:137 #: .\cookbook\templates\forms\ingredients.html:24 -#: .\cookbook\templates\space.html:41 .\cookbook\templates\stats.html:26 -#: .\cookbook\views\lists.py:146 +#: .\cookbook\templates\space.html:47 .\cookbook\templates\stats.html:26 +#: .\cookbook\views\lists.py:131 msgid "Units" msgstr "" #: .\cookbook\templates\base.html:151 -#: .\cookbook\templates\shopping_list.html:237 +#: .\cookbook\templates\shopping_list.html:208 #: .\cookbook\templates\supermarket.html:7 msgid "Supermarket" msgstr "" @@ -884,11 +1031,11 @@ msgstr "" msgid "Supermarket Category" msgstr "" -#: .\cookbook\templates\base.html:175 .\cookbook\views\lists.py:195 +#: .\cookbook\templates\base.html:175 .\cookbook\views\lists.py:180 msgid "Automations" msgstr "" -#: .\cookbook\templates\base.html:189 .\cookbook\views\lists.py:215 +#: .\cookbook\templates\base.html:189 .\cookbook\views\lists.py:200 msgid "Files" msgstr "" @@ -903,7 +1050,7 @@ msgstr "" #: .\cookbook\templates\base.html:228 .\cookbook\templates\export.html:14 #: .\cookbook\templates\export.html:20 -#: .\cookbook\templates\shopping_list.html:358 +#: .\cookbook\templates\shopping_list.html:310 #: .\cookbook\templates\test2.html:14 .\cookbook\templates\test2.html:20 msgid "Export" msgstr "" @@ -913,19 +1060,19 @@ msgid "Import Recipe" msgstr "" #: .\cookbook\templates\base.html:246 -#: .\cookbook\templates\shopping_list.html:195 -#: .\cookbook\templates\shopping_list.html:217 +#: .\cookbook\templates\shopping_list.html:165 +#: .\cookbook\templates\shopping_list.html:188 msgid "Create" msgstr "" #: .\cookbook\templates\base.html:259 #: .\cookbook\templates\generic\list_template.html:14 -#: .\cookbook\templates\space.html:58 .\cookbook\templates\stats.html:43 +#: .\cookbook\templates\space.html:69 .\cookbook\templates\stats.html:43 msgid "External Recipes" msgstr "" -#: .\cookbook\templates\base.html:262 .\cookbook\templates\space.html:7 -#: .\cookbook\templates\space.html:19 +#: .\cookbook\templates\base.html:262 .\cookbook\templates\space.html:8 +#: .\cookbook\templates\space.html:20 .\cookbook\templates\space.html:150 msgid "Space Settings" msgstr "" @@ -991,11 +1138,13 @@ msgstr "" #: .\cookbook\templates\forms\edit_import_recipe.html:14 #: .\cookbook\templates\generic\edit_template.html:23 #: .\cookbook\templates\generic\new_template.html:23 -#: .\cookbook\templates\include\log_cooking.html:28 -#: .\cookbook\templates\settings.html:63 .\cookbook\templates\settings.html:105 -#: .\cookbook\templates\settings.html:123 -#: .\cookbook\templates\settings.html:195 -#: .\cookbook\templates\shopping_list.html:360 +#: .\cookbook\templates\include\log_cooking.html:30 +#: .\cookbook\templates\settings.html:70 .\cookbook\templates\settings.html:112 +#: .\cookbook\templates\settings.html:130 +#: .\cookbook\templates\settings.html:202 +#: .\cookbook\templates\settings.html:213 +#: .\cookbook\templates\shopping_list.html:311 +#: .\cookbook\templates\space.html:155 msgid "Save" msgstr "" @@ -1097,15 +1246,20 @@ msgid "Delete original file" msgstr "" #: .\cookbook\templates\generic\list_template.html:6 -#: .\cookbook\templates\generic\list_template.html:21 +#: .\cookbook\templates\generic\list_template.html:22 msgid "List" msgstr "" -#: .\cookbook\templates\generic\list_template.html:34 +#: .\cookbook\templates\generic\list_template.html:33 +#: .\cookbook\templates\shopping_list.html:33 +msgid "Try the new shopping list" +msgstr "" + +#: .\cookbook\templates\generic\list_template.html:45 msgid "Filter" msgstr "" -#: .\cookbook\templates\generic\list_template.html:39 +#: .\cookbook\templates\generic\list_template.html:50 msgid "Import all" msgstr "" @@ -1131,19 +1285,31 @@ msgstr "" msgid "Import Recipes" msgstr "" -#: .\cookbook\templates\include\log_cooking.html:7 +#: .\cookbook\templates\import.html:14 .\cookbook\templates\import.html:20 +#: .\cookbook\templates\import_response.html:7 +#: .\cookbook\templates\test.html:14 .\cookbook\templates\test.html:20 +#: .\cookbook\templates\url_import.html:29 +#: .\cookbook\templates\url_import.html:108 +#: .\cookbook\templates\url_import.html:130 +#: .\cookbook\templates\url_import.html:324 +#: .\cookbook\templates\url_import.html:618 .\cookbook\views\delete.py:89 +#: .\cookbook\views\edit.py:200 +msgid "Import" +msgstr "" + +#: .\cookbook\templates\include\log_cooking.html:9 msgid "Log Recipe Cooking" msgstr "" -#: .\cookbook\templates\include\log_cooking.html:13 +#: .\cookbook\templates\include\log_cooking.html:15 msgid "All fields are optional and can be left empty." msgstr "" -#: .\cookbook\templates\include\log_cooking.html:19 +#: .\cookbook\templates\include\log_cooking.html:21 msgid "Rating" msgstr "" -#: .\cookbook\templates\include\log_cooking.html:27 +#: .\cookbook\templates\include\log_cooking.html:29 #: .\cookbook\templates\include\recipe_open_modal.html:18 msgid "Close" msgstr "" @@ -1189,7 +1355,7 @@ msgstr "" msgid "Last viewed" msgstr "" -#: .\cookbook\templates\index.html:87 .\cookbook\templates\space.html:35 +#: .\cookbook\templates\index.html:87 .\cookbook\templates\space.html:37 #: .\cookbook\templates\stats.html:22 msgid "Recipes" msgstr "" @@ -1342,7 +1508,7 @@ msgid "Created by" msgstr "" #: .\cookbook\templates\meal_plan_entry.html:20 -#: .\cookbook\templates\shopping_list.html:261 +#: .\cookbook\templates\shopping_list.html:232 msgid "Shared with" msgstr "" @@ -1453,17 +1619,17 @@ msgstr "" #: .\cookbook\templates\recipes_table.html:19 #: .\cookbook\templates\recipes_table.html:23 -#: .\cookbook\templates\url_import.html:444 +#: .\cookbook\templates\url_import.html:447 msgid "Recipe Image" msgstr "" #: .\cookbook\templates\recipes_table.html:51 -#: .\cookbook\templates\url_import.html:449 +#: .\cookbook\templates\url_import.html:452 msgid "Preparation time ca." msgstr "" #: .\cookbook\templates\recipes_table.html:57 -#: .\cookbook\templates\url_import.html:454 +#: .\cookbook\templates\url_import.html:457 msgid "Waiting time ca." msgstr "" @@ -1481,7 +1647,7 @@ msgstr "" #: .\cookbook\templates\search_info.html:5 #: .\cookbook\templates\search_info.html:9 -#: .\cookbook\templates\settings.html:165 +#: .\cookbook\templates\settings.html:172 msgid "Search Settings" msgstr "" @@ -1652,103 +1818,111 @@ msgstr "" msgid "Search-Settings" msgstr "" -#: .\cookbook\templates\settings.html:58 +#: .\cookbook\templates\settings.html:56 +msgid "Shopping-Settings" +msgstr "" + +#: .\cookbook\templates\settings.html:65 msgid "Name Settings" msgstr "" -#: .\cookbook\templates\settings.html:66 +#: .\cookbook\templates\settings.html:73 msgid "Account Settings" msgstr "" -#: .\cookbook\templates\settings.html:68 +#: .\cookbook\templates\settings.html:75 msgid "Emails" msgstr "" -#: .\cookbook\templates\settings.html:71 +#: .\cookbook\templates\settings.html:78 #: .\cookbook\templates\socialaccount\connections.html:11 msgid "Social" msgstr "" -#: .\cookbook\templates\settings.html:84 +#: .\cookbook\templates\settings.html:91 msgid "Language" msgstr "" -#: .\cookbook\templates\settings.html:114 +#: .\cookbook\templates\settings.html:121 msgid "Style" msgstr "" -#: .\cookbook\templates\settings.html:135 +#: .\cookbook\templates\settings.html:142 msgid "API Token" msgstr "" -#: .\cookbook\templates\settings.html:136 +#: .\cookbook\templates\settings.html:143 msgid "" "You can use both basic authentication and token based authentication to " "access the REST API." msgstr "" -#: .\cookbook\templates\settings.html:153 +#: .\cookbook\templates\settings.html:160 msgid "" "Use the token as an Authorization header prefixed by the word token as shown " "in the following examples:" msgstr "" -#: .\cookbook\templates\settings.html:155 +#: .\cookbook\templates\settings.html:162 msgid "or" msgstr "" -#: .\cookbook\templates\settings.html:166 +#: .\cookbook\templates\settings.html:173 msgid "" "There are many options to configure the search depending on your personal " "preferences." msgstr "" -#: .\cookbook\templates\settings.html:167 +#: .\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 "" -#: .\cookbook\templates\settings.html:168 +#: .\cookbook\templates\settings.html:175 msgid "" "If you do want to configure the search you can read about the different " "options here." msgstr "" -#: .\cookbook\templates\settings.html:173 +#: .\cookbook\templates\settings.html:180 msgid "Fuzzy" msgstr "" -#: .\cookbook\templates\settings.html:174 +#: .\cookbook\templates\settings.html:181 msgid "" "Find what you need even if your search or the recipe contains typos. Might " "return more results than needed to make sure you find what you are looking " "for." msgstr "" -#: .\cookbook\templates\settings.html:175 +#: .\cookbook\templates\settings.html:182 msgid "This is the default behavior" msgstr "" -#: .\cookbook\templates\settings.html:176 -#: .\cookbook\templates\settings.html:184 +#: .\cookbook\templates\settings.html:183 +#: .\cookbook\templates\settings.html:191 msgid "Apply" msgstr "" -#: .\cookbook\templates\settings.html:181 +#: .\cookbook\templates\settings.html:188 msgid "Precise" msgstr "" -#: .\cookbook\templates\settings.html:182 +#: .\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 "" -#: .\cookbook\templates\settings.html:183 +#: .\cookbook\templates\settings.html:190 msgid "Perfect for large Databases" msgstr "" +#: .\cookbook\templates\settings.html:207 +msgid "Shopping Settings" +msgstr "" + #: .\cookbook\templates\setup.html:6 .\cookbook\templates\system.html:5 msgid "Cookbook Setup" msgstr "" @@ -1766,81 +1940,73 @@ msgstr "" msgid "Create Superuser account" msgstr "" -#: .\cookbook\templates\shopping_list.html:7 +#: .\cookbook\templates\shopping_list.html:8 #: .\cookbook\templates\shopping_list.html:29 -#: .\cookbook\templates\shopping_list.html:721 +#: .\cookbook\templates\shopping_list.html:663 msgid "Shopping List" msgstr "" -#: .\cookbook\templates\shopping_list.html:34 -msgid "Try the new shopping list" -msgstr "" - -#: .\cookbook\templates\shopping_list.html:63 +#: .\cookbook\templates\shopping_list.html:55 msgid "Search Recipe" msgstr "" -#: .\cookbook\templates\shopping_list.html:86 +#: .\cookbook\templates\shopping_list.html:72 msgid "Shopping Recipes" msgstr "" -#: .\cookbook\templates\shopping_list.html:90 +#: .\cookbook\templates\shopping_list.html:74 msgid "No recipes selected" msgstr "" -#: .\cookbook\templates\shopping_list.html:157 +#: .\cookbook\templates\shopping_list.html:131 msgid "Entry Mode" msgstr "" -#: .\cookbook\templates\shopping_list.html:165 +#: .\cookbook\templates\shopping_list.html:139 msgid "Add Entry" msgstr "" -#: .\cookbook\templates\shopping_list.html:181 +#: .\cookbook\templates\shopping_list.html:152 msgid "Amount" msgstr "" -#: .\cookbook\templates\shopping_list.html:194 +#: .\cookbook\templates\shopping_list.html:164 msgid "Select Unit" msgstr "" -#: .\cookbook\templates\shopping_list.html:196 -#: .\cookbook\templates\shopping_list.html:218 -#: .\cookbook\templates\shopping_list.html:248 -#: .\cookbook\templates\shopping_list.html:272 -#: .\cookbook\templates\url_import.html:500 -#: .\cookbook\templates\url_import.html:532 +#: .\cookbook\templates\shopping_list.html:166 +#: .\cookbook\templates\shopping_list.html:189 +#: .\cookbook\templates\shopping_list.html:219 +#: .\cookbook\templates\shopping_list.html:243 +#: .\cookbook\templates\url_import.html:505 +#: .\cookbook\templates\url_import.html:537 msgid "Select" msgstr "" -#: .\cookbook\templates\shopping_list.html:216 +#: .\cookbook\templates\shopping_list.html:187 msgid "Select Food" msgstr "" -#: .\cookbook\templates\shopping_list.html:247 +#: .\cookbook\templates\shopping_list.html:218 msgid "Select Supermarket" msgstr "" -#: .\cookbook\templates\shopping_list.html:271 +#: .\cookbook\templates\shopping_list.html:242 msgid "Select User" msgstr "" -#: .\cookbook\templates\shopping_list.html:290 +#: .\cookbook\templates\shopping_list.html:258 msgid "Finished" msgstr "" -#: .\cookbook\templates\shopping_list.html:303 +#: .\cookbook\templates\shopping_list.html:267 msgid "You are offline, shopping list might not syncronize." msgstr "" -#: .\cookbook\templates\shopping_list.html:368 +#: .\cookbook\templates\shopping_list.html:318 msgid "Copy/Export" msgstr "" -#: .\cookbook\templates\shopping_list.html:372 -msgid "List Prefix" -msgstr "" - #: .\cookbook\templates\socialaccount\connections.html:4 #: .\cookbook\templates\socialaccount\connections.html:15 msgid "Account Connections" @@ -1890,80 +2056,80 @@ msgstr "" msgid "Sign in using" msgstr "" -#: .\cookbook\templates\space.html:23 +#: .\cookbook\templates\space.html:25 msgid "Space:" msgstr "" -#: .\cookbook\templates\space.html:24 +#: .\cookbook\templates\space.html:26 msgid "Manage Subscription" msgstr "" -#: .\cookbook\templates\space.html:32 .\cookbook\templates\stats.html:19 +#: .\cookbook\templates\space.html:34 .\cookbook\templates\stats.html:19 msgid "Number of objects" msgstr "" -#: .\cookbook\templates\space.html:45 .\cookbook\templates\stats.html:30 +#: .\cookbook\templates\space.html:54 .\cookbook\templates\stats.html:30 msgid "Recipe Imports" msgstr "" -#: .\cookbook\templates\space.html:53 .\cookbook\templates\stats.html:38 +#: .\cookbook\templates\space.html:62 .\cookbook\templates\stats.html:38 msgid "Objects stats" msgstr "" -#: .\cookbook\templates\space.html:56 .\cookbook\templates\stats.html:41 +#: .\cookbook\templates\space.html:65 .\cookbook\templates\stats.html:41 msgid "Recipes without Keywords" msgstr "" -#: .\cookbook\templates\space.html:60 .\cookbook\templates\stats.html:45 +#: .\cookbook\templates\space.html:73 .\cookbook\templates\stats.html:45 msgid "Internal Recipes" msgstr "" -#: .\cookbook\templates\space.html:73 +#: .\cookbook\templates\space.html:89 msgid "Members" msgstr "" -#: .\cookbook\templates\space.html:77 +#: .\cookbook\templates\space.html:95 msgid "Invite User" msgstr "" -#: .\cookbook\templates\space.html:88 +#: .\cookbook\templates\space.html:107 msgid "User" msgstr "" -#: .\cookbook\templates\space.html:89 +#: .\cookbook\templates\space.html:108 msgid "Groups" msgstr "" -#: .\cookbook\templates\space.html:105 +#: .\cookbook\templates\space.html:119 msgid "admin" msgstr "" -#: .\cookbook\templates\space.html:106 +#: .\cookbook\templates\space.html:120 msgid "user" msgstr "" -#: .\cookbook\templates\space.html:107 +#: .\cookbook\templates\space.html:121 msgid "guest" msgstr "" -#: .\cookbook\templates\space.html:108 +#: .\cookbook\templates\space.html:122 msgid "remove" msgstr "" -#: .\cookbook\templates\space.html:112 +#: .\cookbook\templates\space.html:126 msgid "Update" msgstr "" -#: .\cookbook\templates\space.html:116 +#: .\cookbook\templates\space.html:130 msgid "You cannot edit yourself." msgstr "" -#: .\cookbook\templates\space.html:123 +#: .\cookbook\templates\space.html:136 msgid "There are no members in your space yet!" msgstr "" -#: .\cookbook\templates\space.html:130 .\cookbook\templates\system.html:21 -#: .\cookbook\views\lists.py:100 +#: .\cookbook\templates\space.html:143 .\cookbook\templates\system.html:21 +#: .\cookbook\views\lists.py:85 msgid "Invite Links" msgstr "" @@ -2072,166 +2238,166 @@ msgid "" " " msgstr "" -#: .\cookbook\templates\url_import.html:6 +#: .\cookbook\templates\url_import.html:8 msgid "URL Import" msgstr "" -#: .\cookbook\templates\url_import.html:31 +#: .\cookbook\templates\url_import.html:33 msgid "Drag me to your bookmarks to import recipes from anywhere" msgstr "" -#: .\cookbook\templates\url_import.html:32 +#: .\cookbook\templates\url_import.html:34 msgid "Bookmark Me!" msgstr "" -#: .\cookbook\templates\url_import.html:36 +#: .\cookbook\templates\url_import.html:38 msgid "URL" msgstr "" -#: .\cookbook\templates\url_import.html:38 +#: .\cookbook\templates\url_import.html:40 msgid "App" msgstr "" -#: .\cookbook\templates\url_import.html:62 +#: .\cookbook\templates\url_import.html:64 msgid "Enter website URL" msgstr "" -#: .\cookbook\templates\url_import.html:101 +#: .\cookbook\templates\url_import.html:104 msgid "Select recipe files to import or drop them here..." msgstr "" -#: .\cookbook\templates\url_import.html:122 +#: .\cookbook\templates\url_import.html:125 msgid "Paste json or html source here to load recipe." msgstr "" -#: .\cookbook\templates\url_import.html:150 +#: .\cookbook\templates\url_import.html:153 msgid "Preview Recipe Data" msgstr "" -#: .\cookbook\templates\url_import.html:151 +#: .\cookbook\templates\url_import.html:154 msgid "Drag recipe attributes from the right into the appropriate box below." msgstr "" -#: .\cookbook\templates\url_import.html:160 -#: .\cookbook\templates\url_import.html:177 -#: .\cookbook\templates\url_import.html:194 -#: .\cookbook\templates\url_import.html:213 -#: .\cookbook\templates\url_import.html:231 -#: .\cookbook\templates\url_import.html:246 -#: .\cookbook\templates\url_import.html:261 -#: .\cookbook\templates\url_import.html:277 -#: .\cookbook\templates\url_import.html:304 -#: .\cookbook\templates\url_import.html:355 +#: .\cookbook\templates\url_import.html:163 +#: .\cookbook\templates\url_import.html:180 +#: .\cookbook\templates\url_import.html:197 +#: .\cookbook\templates\url_import.html:216 +#: .\cookbook\templates\url_import.html:234 +#: .\cookbook\templates\url_import.html:249 +#: .\cookbook\templates\url_import.html:264 +#: .\cookbook\templates\url_import.html:280 +#: .\cookbook\templates\url_import.html:307 +#: .\cookbook\templates\url_import.html:358 msgid "Clear Contents" msgstr "" -#: .\cookbook\templates\url_import.html:162 +#: .\cookbook\templates\url_import.html:165 msgid "Text dragged here will be appended to the name." msgstr "" -#: .\cookbook\templates\url_import.html:175 +#: .\cookbook\templates\url_import.html:178 msgid "Description" msgstr "" -#: .\cookbook\templates\url_import.html:179 +#: .\cookbook\templates\url_import.html:182 msgid "Text dragged here will be appended to the description." msgstr "" -#: .\cookbook\templates\url_import.html:196 +#: .\cookbook\templates\url_import.html:199 msgid "Keywords dragged here will be appended to current list" msgstr "" -#: .\cookbook\templates\url_import.html:211 +#: .\cookbook\templates\url_import.html:214 msgid "Image" msgstr "" -#: .\cookbook\templates\url_import.html:243 +#: .\cookbook\templates\url_import.html:246 msgid "Prep Time" msgstr "" -#: .\cookbook\templates\url_import.html:258 +#: .\cookbook\templates\url_import.html:261 msgid "Cook Time" msgstr "" -#: .\cookbook\templates\url_import.html:279 +#: .\cookbook\templates\url_import.html:282 msgid "Ingredients dragged here will be appended to current list." msgstr "" -#: .\cookbook\templates\url_import.html:301 -#: .\cookbook\templates\url_import.html:572 +#: .\cookbook\templates\url_import.html:304 +#: .\cookbook\templates\url_import.html:579 msgid "Instructions" msgstr "" -#: .\cookbook\templates\url_import.html:306 +#: .\cookbook\templates\url_import.html:309 msgid "" "Recipe instructions dragged here will be appended to current instructions." msgstr "" -#: .\cookbook\templates\url_import.html:329 +#: .\cookbook\templates\url_import.html:332 msgid "Discovered Attributes" msgstr "" -#: .\cookbook\templates\url_import.html:331 +#: .\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 "" -#: .\cookbook\templates\url_import.html:348 +#: .\cookbook\templates\url_import.html:351 msgid "Show Blank Field" msgstr "" -#: .\cookbook\templates\url_import.html:353 +#: .\cookbook\templates\url_import.html:356 msgid "Blank Field" msgstr "" -#: .\cookbook\templates\url_import.html:357 +#: .\cookbook\templates\url_import.html:360 msgid "Items dragged to Blank Field will be appended." msgstr "" -#: .\cookbook\templates\url_import.html:404 +#: .\cookbook\templates\url_import.html:407 msgid "Delete Text" msgstr "" -#: .\cookbook\templates\url_import.html:417 +#: .\cookbook\templates\url_import.html:420 msgid "Delete image" msgstr "" -#: .\cookbook\templates\url_import.html:433 +#: .\cookbook\templates\url_import.html:436 msgid "Recipe Name" msgstr "" -#: .\cookbook\templates\url_import.html:437 +#: .\cookbook\templates\url_import.html:440 msgid "Recipe Description" msgstr "" -#: .\cookbook\templates\url_import.html:499 -#: .\cookbook\templates\url_import.html:531 -#: .\cookbook\templates\url_import.html:587 +#: .\cookbook\templates\url_import.html:504 +#: .\cookbook\templates\url_import.html:536 +#: .\cookbook\templates\url_import.html:596 msgid "Select one" msgstr "" -#: .\cookbook\templates\url_import.html:547 +#: .\cookbook\templates\url_import.html:554 msgid "Note" msgstr "" -#: .\cookbook\templates\url_import.html:588 +#: .\cookbook\templates\url_import.html:597 msgid "Add Keyword" msgstr "" -#: .\cookbook\templates\url_import.html:601 +#: .\cookbook\templates\url_import.html:610 msgid "All Keywords" msgstr "" -#: .\cookbook\templates\url_import.html:604 +#: .\cookbook\templates\url_import.html:613 msgid "Import all keywords, not only the ones already existing." msgstr "" -#: .\cookbook\templates\url_import.html:631 +#: .\cookbook\templates\url_import.html:640 msgid "Information" msgstr "" -#: .\cookbook\templates\url_import.html:633 +#: .\cookbook\templates\url_import.html:642 msgid "" " Only websites containing ld+json or microdata information can currently\n" " be imported. Most big recipe pages " @@ -2242,125 +2408,214 @@ msgid "" " github issues." msgstr "" -#: .\cookbook\templates\url_import.html:641 +#: .\cookbook\templates\url_import.html:650 msgid "Google ld+json Info" msgstr "" -#: .\cookbook\templates\url_import.html:644 +#: .\cookbook\templates\url_import.html:653 msgid "GitHub Issues" msgstr "" -#: .\cookbook\templates\url_import.html:646 +#: .\cookbook\templates\url_import.html:655 msgid "Recipe Markup Specification" msgstr "" -#: .\cookbook\views\api.py:83 .\cookbook\views\api.py:132 +#: .\cookbook\views\api.py:88 .\cookbook\views\api.py:170 msgid "Parameter updated_at incorrectly formatted" msgstr "" -#: .\cookbook\views\api.py:152 +#: .\cookbook\views\api.py:190 .\cookbook\views\api.py:291 #, python-brace-format msgid "No {self.basename} with id {pk} exists" msgstr "" -#: .\cookbook\views\api.py:156 +#: .\cookbook\views\api.py:194 msgid "Cannot merge with the same object!" msgstr "" -#: .\cookbook\views\api.py:163 +#: .\cookbook\views\api.py:201 #, python-brace-format msgid "No {self.basename} with id {target} exists" msgstr "" -#: .\cookbook\views\api.py:168 +#: .\cookbook\views\api.py:206 msgid "Cannot merge with child object!" msgstr "" -#: .\cookbook\views\api.py:201 +#: .\cookbook\views\api.py:239 #, python-brace-format msgid "{source.name} was merged successfully with {target.name}" msgstr "" -#: .\cookbook\views\api.py:205 +#: .\cookbook\views\api.py:244 #, python-brace-format msgid "An error occurred attempting to merge {source.name} with {target.name}" msgstr "" -#: .\cookbook\views\api.py:249 -#, python-brace-format -msgid "No {self.basename} with id {child} exists" -msgstr "" - -#: .\cookbook\views\api.py:258 +#: .\cookbook\views\api.py:300 #, python-brace-format msgid "{child.name} was moved successfully to the root." msgstr "" -#: .\cookbook\views\api.py:261 .\cookbook\views\api.py:279 +#: .\cookbook\views\api.py:303 .\cookbook\views\api.py:321 msgid "An error occurred attempting to move " msgstr "" -#: .\cookbook\views\api.py:264 +#: .\cookbook\views\api.py:306 msgid "Cannot move an object to itself!" msgstr "" -#: .\cookbook\views\api.py:270 +#: .\cookbook\views\api.py:312 #, python-brace-format msgid "No {self.basename} with id {parent} exists" msgstr "" -#: .\cookbook\views\api.py:276 +#: .\cookbook\views\api.py:318 #, python-brace-format msgid "{child.name} was moved successfully to parent {parent.name}" msgstr "" -#: .\cookbook\views\api.py:723 .\cookbook\views\data.py:42 +#: .\cookbook\views\api.py:470 +#, python-brace-format +msgid "{obj.name} was removed from the shopping list." +msgstr "" + +#: .\cookbook\views\api.py:475 .\cookbook\views\api.py:726 +#, python-brace-format +msgid "{obj.name} was added to the shopping list." +msgstr "" + +#: .\cookbook\views\api.py:587 +msgid "ID of recipe a step is part of. For multiple repeat parameter." +msgstr "" + +#: .\cookbook\views\api.py:588 +msgid "Query string matched (fuzzy) against object name." +msgstr "" + +#: .\cookbook\views\api.py:631 +msgid "" +"Query string matched (fuzzy) against recipe name. In the future also " +"fulltext search." +msgstr "" + +#: .\cookbook\views\api.py:632 +msgid "ID of keyword a recipe should have. For multiple repeat parameter." +msgstr "" + +#: .\cookbook\views\api.py:633 +msgid "ID of food a recipe should have. For multiple repeat parameter." +msgstr "" + +#: .\cookbook\views\api.py:634 +msgid "ID of unit a recipe should have." +msgstr "" + +#: .\cookbook\views\api.py:635 +msgid "Rating a recipe should have. [0 - 5]" +msgstr "" + +#: .\cookbook\views\api.py:636 +msgid "ID of book a recipe should be in. For multiple repeat parameter." +msgstr "" + +#: .\cookbook\views\api.py:637 +msgid "" +"If recipe should have all (AND=false) or any (OR=true) of the " +"provided keywords." +msgstr "" + +#: .\cookbook\views\api.py:638 +msgid "" +"If recipe should have all (AND=false) or any (OR=true) of the " +"provided foods." +msgstr "" + +#: .\cookbook\views\api.py:639 +msgid "" +"If recipe should be in all (AND=false) or any (OR=true) of the " +"provided books." +msgstr "" + +#: .\cookbook\views\api.py:640 +msgid "If only internal recipes should be returned. [true/false]" +msgstr "" + +#: .\cookbook\views\api.py:641 +msgid "Returns the results in randomized order. [true/false]" +msgstr "" + +#: .\cookbook\views\api.py:642 +msgid "Returns new results first in search results. [true/false]" +msgstr "" + +#: .\cookbook\views\api.py:768 +msgid "" +"Returns the shopping list entry with a primary key of id. Multiple values " +"allowed." +msgstr "" + +#: .\cookbook\views\api.py:771 +msgid "" +"Filter shopping list entries on checked. [true, false, both, recent]
- recent includes unchecked items and recently completed items." +msgstr "" + +#: .\cookbook\views\api.py:773 +msgid "Returns the shopping list entries sorted by supermarket category order." +msgstr "" + +#: .\cookbook\views\api.py:922 .\cookbook\views\data.py:42 #: .\cookbook\views\edit.py:129 .\cookbook\views\new.py:95 msgid "This feature is not yet available in the hosted version of tandoor!" msgstr "" -#: .\cookbook\views\api.py:745 +#: .\cookbook\views\api.py:944 msgid "Sync successful!" msgstr "" -#: .\cookbook\views\api.py:750 +#: .\cookbook\views\api.py:949 msgid "Error synchronizing with Storage" msgstr "" -#: .\cookbook\views\api.py:828 +#: .\cookbook\views\api.py:1028 msgid "Nothing to do." msgstr "" -#: .\cookbook\views\api.py:843 +#: .\cookbook\views\api.py:1043 msgid "The requested site provided malformed data and cannot be read." msgstr "" -#: .\cookbook\views\api.py:850 +#: .\cookbook\views\api.py:1050 msgid "The requested page could not be found." msgstr "" -#: .\cookbook\views\api.py:859 +#: .\cookbook\views\api.py:1068 msgid "" "The requested site does not provide any recognized data format to import the " "recipe from." msgstr "" -#: .\cookbook\views\api.py:873 +#: .\cookbook\views\api.py:1082 +msgid "Connection Refused." +msgstr "" + +#: .\cookbook\views\api.py:1091 msgid "No useable data could be found." msgstr "" -#: .\cookbook\views\api.py:889 +#: .\cookbook\views\api.py:1107 msgid "I couldn't find anything to do." msgstr "" #: .\cookbook\views\data.py:34 .\cookbook\views\data.py:129 -#: .\cookbook\views\edit.py:49 .\cookbook\views\import_export.py:73 +#: .\cookbook\views\edit.py:49 .\cookbook\views\import_export.py:80 #: .\cookbook\views\new.py:33 msgid "You have reached the maximum number of recipes for your space." msgstr "" #: .\cookbook\views\data.py:38 .\cookbook\views\data.py:133 -#: .\cookbook\views\edit.py:53 .\cookbook\views\import_export.py:77 +#: .\cookbook\views\edit.py:53 .\cookbook\views\import_export.py:84 #: .\cookbook\views\new.py:37 msgid "You have more users than allowed in your space." msgstr "" @@ -2376,7 +2631,7 @@ msgstr[1] "" msgid "Monitor" msgstr "" -#: .\cookbook\views\delete.py:125 .\cookbook\views\lists.py:86 +#: .\cookbook\views\delete.py:125 .\cookbook\views\lists.py:71 #: .\cookbook\views\new.py:101 msgid "Storage Backend" msgstr "" @@ -2394,7 +2649,7 @@ msgstr "" msgid "Bookmarks" msgstr "" -#: .\cookbook\views\delete.py:192 .\cookbook\views\new.py:235 +#: .\cookbook\views\delete.py:192 .\cookbook\views\new.py:238 msgid "Invite Link" msgstr "" @@ -2418,38 +2673,44 @@ msgstr "" msgid "Error saving changes!" msgstr "" -#: .\cookbook\views\import_export.py:99 +#: .\cookbook\views\import_export.py:106 msgid "Importing is not implemented for this provider" msgstr "" -#: .\cookbook\views\import_export.py:121 +#: .\cookbook\views\import_export.py:127 +msgid "" +"The PDF Exporter is not enabled on this instance as it is still in an " +"experimental state." +msgstr "" + +#: .\cookbook\views\import_export.py:132 msgid "Exporting is not implemented for this provider" msgstr "" -#: .\cookbook\views\lists.py:26 +#: .\cookbook\views\lists.py:25 msgid "Import Log" msgstr "" -#: .\cookbook\views\lists.py:39 +#: .\cookbook\views\lists.py:38 msgid "Discovery" msgstr "" -#: .\cookbook\views\lists.py:69 +#: .\cookbook\views\lists.py:54 msgid "Shopping Lists" msgstr "" -#: .\cookbook\views\lists.py:129 -msgid "Foods" -msgstr "" - -#: .\cookbook\views\lists.py:163 +#: .\cookbook\views\lists.py:148 msgid "Supermarkets" msgstr "" -#: .\cookbook\views\lists.py:179 +#: .\cookbook\views\lists.py:164 msgid "Shopping Categories" msgstr "" +#: .\cookbook\views\lists.py:217 +msgid "Steps" +msgstr "" + #: .\cookbook\views\lists.py:232 msgid "New Shopping List" msgstr "" @@ -2462,124 +2723,124 @@ msgstr "" msgid "There was an error importing this recipe!" msgstr "" -#: .\cookbook\views\new.py:209 +#: .\cookbook\views\new.py:212 msgid "Hello" msgstr "" -#: .\cookbook\views\new.py:209 +#: .\cookbook\views\new.py:212 msgid "You have been invited by " msgstr "" -#: .\cookbook\views\new.py:210 +#: .\cookbook\views\new.py:213 msgid " to join their Tandoor Recipes space " msgstr "" -#: .\cookbook\views\new.py:211 +#: .\cookbook\views\new.py:214 msgid "Click the following link to activate your account: " msgstr "" -#: .\cookbook\views\new.py:212 +#: .\cookbook\views\new.py:215 msgid "" "If the link does not work use the following code to manually join the space: " msgstr "" -#: .\cookbook\views\new.py:213 +#: .\cookbook\views\new.py:216 msgid "The invitation is valid until " msgstr "" -#: .\cookbook\views\new.py:214 +#: .\cookbook\views\new.py:217 msgid "" "Tandoor Recipes is an Open Source recipe manager. Check it out on GitHub " msgstr "" -#: .\cookbook\views\new.py:217 +#: .\cookbook\views\new.py:220 msgid "Tandoor Recipes Invite" msgstr "" -#: .\cookbook\views\new.py:224 +#: .\cookbook\views\new.py:227 msgid "Invite link successfully send to user." msgstr "" -#: .\cookbook\views\new.py:227 +#: .\cookbook\views\new.py:230 msgid "" "You have send to many emails, please share the link manually or wait a few " "hours." msgstr "" -#: .\cookbook\views\new.py:229 +#: .\cookbook\views\new.py:232 msgid "Email to user could not be send, please share link manually." msgstr "" -#: .\cookbook\views\views.py:127 +#: .\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 "" -#: .\cookbook\views\views.py:175 +#: .\cookbook\views\views.py:174 msgid "You do not have the required permissions to perform this action!" msgstr "" -#: .\cookbook\views\views.py:186 +#: .\cookbook\views\views.py:185 msgid "Comment saved!" msgstr "" -#: .\cookbook\views\views.py:277 +#: .\cookbook\views\views.py:276 msgid "This feature is not available in the demo version!" msgstr "" -#: .\cookbook\views\views.py:340 +#: .\cookbook\views\views.py:335 msgid "You must select at least one field to search!" msgstr "" -#: .\cookbook\views\views.py:345 +#: .\cookbook\views\views.py:340 msgid "" "To use this search method you must select at least one full text search " "field!" msgstr "" -#: .\cookbook\views\views.py:349 +#: .\cookbook\views\views.py:344 msgid "Fuzzy search is not compatible with this search method!" msgstr "" -#: .\cookbook\views\views.py:452 +#: .\cookbook\views\views.py:470 msgid "" "The setup page can only be used to create the first user! If you have " "forgotten your superuser credentials please consult the django documentation " "on how to reset passwords." msgstr "" -#: .\cookbook\views\views.py:459 +#: .\cookbook\views\views.py:477 msgid "Passwords dont match!" msgstr "" -#: .\cookbook\views\views.py:475 +#: .\cookbook\views\views.py:493 msgid "User has been created, please login!" msgstr "" -#: .\cookbook\views\views.py:491 +#: .\cookbook\views\views.py:509 msgid "Malformed Invite Link supplied!" msgstr "" -#: .\cookbook\views\views.py:498 +#: .\cookbook\views\views.py:516 msgid "You are already member of a space and therefore cannot join this one." msgstr "" -#: .\cookbook\views\views.py:509 +#: .\cookbook\views\views.py:527 msgid "Successfully joined space." msgstr "" -#: .\cookbook\views\views.py:515 +#: .\cookbook\views\views.py:533 msgid "Invite Link not valid or already used!" msgstr "" -#: .\cookbook\views\views.py:579 +#: .\cookbook\views\views.py:614 msgid "" "Reporting share links is not enabled for this instance. Please notify the " "page administrator to report problems." msgstr "" -#: .\cookbook\views\views.py:585 +#: .\cookbook\views\views.py:620 msgid "" "Recipe sharing link has been disabled! For additional information please " "contact the page administrator." diff --git a/cookbook/locale/zh_CN/LC_MESSAGES/django.mo b/cookbook/locale/zh_CN/LC_MESSAGES/django.mo index 44f79fccca..acd79c340c 100644 Binary files a/cookbook/locale/zh_CN/LC_MESSAGES/django.mo and b/cookbook/locale/zh_CN/LC_MESSAGES/django.mo differ diff --git a/cookbook/locale/zh_CN/LC_MESSAGES/django.po b/cookbook/locale/zh_CN/LC_MESSAGES/django.po index 215748f5b8..b1a09da134 100644 --- a/cookbook/locale/zh_CN/LC_MESSAGES/django.po +++ b/cookbook/locale/zh_CN/LC_MESSAGES/django.po @@ -7,9 +7,9 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-08 16:27+0100\n" -"PO-Revision-Date: 2021-08-20 19:28+0000\n" -"Last-Translator: Danny Tsui \n" +"POT-Creation-Date: 2022-01-18 14:52+0100\n" +"PO-Revision-Date: 2022-01-22 03:30+0000\n" +"Last-Translator: 糖多 <1365143958@qq.com>\n" "Language-Team: Chinese (Simplified) \n" "Language: zh_CN\n" @@ -17,121 +17,109 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.7.2\n" +"X-Generator: Weblate 4.8\n" -#: .\cookbook\filters.py:23 .\cookbook\templates\base.html:125 -#: .\cookbook\templates\forms\ingredients.html:34 -#: .\cookbook\templates\space.html:43 .\cookbook\templates\stats.html:28 -#: .\cookbook\templates\url_import.html:274 +#: .\cookbook\filters.py:23 .\cookbook\templates\forms\ingredients.html:34 +#: .\cookbook\templates\space.html:50 .\cookbook\templates\stats.html:28 +#: .\cookbook\templates\url_import.html:277 msgid "Ingredients" msgstr "材料" -#: .\cookbook\forms.py:54 -#, fuzzy -#| msgid "Default" +#: .\cookbook\forms.py:56 msgid "Default unit" -msgstr "预置" +msgstr "默认单位" -#: .\cookbook\forms.py:55 -#, fuzzy -#| msgid "Section" +#: .\cookbook\forms.py:57 msgid "Use fractions" -msgstr "节" +msgstr "使用分数" -#: .\cookbook\forms.py:56 +#: .\cookbook\forms.py:58 msgid "Use KJ" -msgstr "" +msgstr "使用千焦" -#: .\cookbook\forms.py:57 +#: .\cookbook\forms.py:59 msgid "Theme" -msgstr "" +msgstr "主题" -#: .\cookbook\forms.py:58 +#: .\cookbook\forms.py:60 msgid "Navbar color" -msgstr "" +msgstr "导航栏颜色" -#: .\cookbook\forms.py:59 +#: .\cookbook\forms.py:61 msgid "Sticky navbar" -msgstr "" +msgstr "悬浮导航栏" -#: .\cookbook\forms.py:60 -#, fuzzy -#| msgid "Default" +#: .\cookbook\forms.py:62 msgid "Default page" -msgstr "预置" +msgstr "默认页面" -#: .\cookbook\forms.py:61 -#, fuzzy -#| msgid "Recipe" +#: .\cookbook\forms.py:63 msgid "Show recent recipes" -msgstr "菜谱" +msgstr "显示最近的菜谱" -#: .\cookbook\forms.py:62 -#, fuzzy -#| msgid "Search" +#: .\cookbook\forms.py:64 msgid "Search style" -msgstr "搜索" +msgstr "搜索风格" -#: .\cookbook\forms.py:63 +#: .\cookbook\forms.py:65 msgid "Plan sharing" -msgstr "" +msgstr "计划分享" -#: .\cookbook\forms.py:64 -#, fuzzy -#| msgid "Ingredients" +#: .\cookbook\forms.py:66 msgid "Ingredient decimal places" -msgstr "材料" +msgstr "材料小数位" -#: .\cookbook\forms.py:65 +#: .\cookbook\forms.py:67 msgid "Shopping list auto sync period" -msgstr "" +msgstr "购物清单自动同步周期" -#: .\cookbook\forms.py:66 .\cookbook\templates\recipe_view.html:21 -#: .\cookbook\templates\space.html:62 .\cookbook\templates\stats.html:47 +#: .\cookbook\forms.py:68 .\cookbook\templates\recipe_view.html:21 +#: .\cookbook\templates\space.html:77 .\cookbook\templates\stats.html:47 msgid "Comments" -msgstr "" +msgstr "评论" -#: .\cookbook\forms.py:70 +#: .\cookbook\forms.py:72 msgid "" "Color of the top navigation bar. Not all colors work with all themes, just " "try them out!" msgstr "" "顶部导航栏的颜色。并非所有的颜色都适用于所有的主题,只要试一试就可以了!" -#: .\cookbook\forms.py:72 +#: .\cookbook\forms.py:74 msgid "Default Unit to be used when inserting a new ingredient into a recipe." msgstr "在配方中插入新原料时使用的默认单位。" -#: .\cookbook\forms.py:74 +#: .\cookbook\forms.py:76 msgid "" "Enables support for fractions in ingredient amounts (e.g. convert decimals " "to fractions automatically)" msgstr "启用对原料数量的分数支持(例如自动将小数转换为分数)" -#: .\cookbook\forms.py:76 +#: .\cookbook\forms.py:78 msgid "Display nutritional energy amounts in joules instead of calories" -msgstr "" +msgstr "用焦耳来显示营养能量而不是卡路里" -#: .\cookbook\forms.py:78 -#, fuzzy -msgid "" -"Users with whom newly created meal plan/shopping list entries should be " -"shared by default." -msgstr "默认情况下,新创建的膳食计划/购物清单条目应与之共享的用户。" +#: .\cookbook\forms.py:79 +msgid "Users with whom newly created meal plans should be shared by default." +msgstr "默认情况下,新创建的膳食计划应与之共享的用户。" #: .\cookbook\forms.py:80 +msgid "Users with whom to share shopping lists." +msgstr "与之共享购物清单的用户。" + +#: .\cookbook\forms.py:82 msgid "Show recently viewed recipes on search page." msgstr "在搜索页面上显示最近查看的菜谱。" -#: .\cookbook\forms.py:81 +#: .\cookbook\forms.py:83 msgid "Number of decimals to round ingredients." msgstr "四舍五入成分的小数点数目。" -#: .\cookbook\forms.py:82 +#: .\cookbook\forms.py:84 msgid "If you want to be able to create and see comments underneath recipes." msgstr "如果你希望能够在菜谱下面创建并看到评论。" -#: .\cookbook\forms.py:84 +#: .\cookbook\forms.py:86 .\cookbook\forms.py:493 msgid "" "Setting to 0 will disable auto sync. When viewing a shopping list the list " "is updated every set seconds to sync changes someone else might have made. " @@ -142,209 +130,313 @@ msgstr "" "人可能做出的改变。在与多人一起购物时很有用,但可能会消耗一点移动数据。如果低" "于实例限制,它将在保存时被重置。" -#: .\cookbook\forms.py:87 +#: .\cookbook\forms.py:89 msgid "Makes the navbar stick to the top of the page." -msgstr "使导航条粘在页面的顶部。" +msgstr "使导航栏悬浮在页面的顶部。" + +#: .\cookbook\forms.py:90 .\cookbook\forms.py:496 +msgid "Automatically add meal plan ingredients to shopping list." +msgstr "自动将膳食计划原料添加到购物清单中。" -#: .\cookbook\forms.py:103 +#: .\cookbook\forms.py:91 +msgid "Exclude ingredients that are on hand." +msgstr "排除现有材料。" + +#: .\cookbook\forms.py:108 msgid "" "Both fields are optional. If none are given the username will be displayed " "instead" msgstr "这两个字段都是可选的。如果没有给出,将显示用户名" -#: .\cookbook\forms.py:124 .\cookbook\forms.py:289 -#: .\cookbook\templates\url_import.html:158 +#: .\cookbook\forms.py:129 .\cookbook\forms.py:298 +#: .\cookbook\templates\url_import.html:161 msgid "Name" -msgstr "名称" +msgstr "名字" -#: .\cookbook\forms.py:125 .\cookbook\forms.py:290 -#: .\cookbook\templates\space.html:39 .\cookbook\templates\stats.html:24 -#: .\cookbook\templates\url_import.html:192 -#: .\cookbook\templates\url_import.html:578 .\cookbook\views\lists.py:112 +#: .\cookbook\forms.py:130 .\cookbook\forms.py:299 +#: .\cookbook\templates\space.html:44 .\cookbook\templates\stats.html:24 +#: .\cookbook\templates\url_import.html:195 +#: .\cookbook\templates\url_import.html:585 .\cookbook\views\lists.py:97 msgid "Keywords" -msgstr "关键字" +msgstr "关键词" -#: .\cookbook\forms.py:126 +#: .\cookbook\forms.py:131 msgid "Preparation time in minutes" -msgstr "准备时间(分钟)" +msgstr "准备时间(分钟)" -#: .\cookbook\forms.py:127 +#: .\cookbook\forms.py:132 msgid "Waiting time (cooking/baking) in minutes" -msgstr "等候时间(分钟)" +msgstr "等候(烹饪、烘焙等)时间(分钟)" -#: .\cookbook\forms.py:128 .\cookbook\forms.py:259 .\cookbook\forms.py:291 +#: .\cookbook\forms.py:133 .\cookbook\forms.py:267 .\cookbook\forms.py:300 msgid "Path" msgstr "路径" -#: .\cookbook\forms.py:129 +#: .\cookbook\forms.py:134 msgid "Storage UID" msgstr "存储 UID" -#: .\cookbook\forms.py:157 +#: .\cookbook\forms.py:164 msgid "Default" -msgstr "预置" +msgstr "默认" -#: .\cookbook\forms.py:168 .\cookbook\templates\url_import.html:94 +#: .\cookbook\forms.py:175 .\cookbook\templates\url_import.html:97 msgid "" "To prevent duplicates recipes with the same name as existing ones are " "ignored. Check this box to import everything." -msgstr "為了防止與現有菜谱同名的重複菜谱被忽略。勾选此框以导入所有内容。" +msgstr "为防止重复,忽略与现有同名的菜谱。选中此框可导入所有内容(危险操作,请先备份)。" -#: .\cookbook\forms.py:190 +#: .\cookbook\forms.py:197 msgid "Add your comment: " -msgstr "发表评论: " +msgstr "发表评论: " -#: .\cookbook\forms.py:205 +#: .\cookbook\forms.py:212 msgid "Leave empty for dropbox and enter app password for nextcloud." -msgstr "dropbox留空和为nextcloud输入应用密码。" +msgstr "Dropbox 留空并输入 Nextcloud 应用密码。" -#: .\cookbook\forms.py:212 +#: .\cookbook\forms.py:219 msgid "Leave empty for nextcloud and enter api token for dropbox." -msgstr "" +msgstr "Nextcloud 留空并输入 Dropbox API 令牌。" -#: .\cookbook\forms.py:221 +#: .\cookbook\forms.py:228 msgid "" "Leave empty for dropbox and enter only base url for nextcloud (/remote." "php/webdav/ is added automatically)" -msgstr "" +msgstr "Dropbox 留空并输入基础 Nextcloud 网址(/remote.php/webdav/ 会自动添加)" -#: .\cookbook\forms.py:258 .\cookbook\views\edit.py:166 +#: .\cookbook\forms.py:266 .\cookbook\views\edit.py:166 msgid "Storage" -msgstr "" +msgstr "存储" -#: .\cookbook\forms.py:260 +#: .\cookbook\forms.py:268 msgid "Active" -msgstr "" +msgstr "活跃" -#: .\cookbook\forms.py:265 +#: .\cookbook\forms.py:274 msgid "Search String" msgstr "搜索字符串" -#: .\cookbook\forms.py:292 +#: .\cookbook\forms.py:301 msgid "File ID" msgstr "文件编号" -#: .\cookbook\forms.py:313 +#: .\cookbook\forms.py:323 msgid "You must provide at least a recipe or a title." msgstr "你必须至少提供一份菜谱或一个标题。" -#: .\cookbook\forms.py:326 +#: .\cookbook\forms.py:336 msgid "You can list default users to share recipes with in the settings." -msgstr "你可以在设置中列出默认用户来分享食谱。" +msgstr "你可以在设置中列出默认用户来分享菜谱。" -#: .\cookbook\forms.py:327 +#: .\cookbook\forms.py:337 msgid "" "You can use markdown to format this field. See the docs here" -msgstr "" +msgstr "可以使用 Markdown 设置此字段格式。查看文档" -#: .\cookbook\forms.py:353 +#: .\cookbook\forms.py:363 msgid "Maximum number of users for this space reached." msgstr "已达到该空间的最大用户数。" -#: .\cookbook\forms.py:359 +#: .\cookbook\forms.py:369 msgid "Email address already taken!" -msgstr "电子邮件地址已被注册!" +msgstr "电子邮件地址已被注册!" -#: .\cookbook\forms.py:367 -#, fuzzy -#| msgid "" -#| "An email address is not required but if present the invite link will be " -#| "send to the user." +#: .\cookbook\forms.py:377 msgid "" "An email address is not required but if present the invite link will be sent " "to the user." msgstr "电子邮件地址不是必需的,但如果存在,邀请链接将被发送给用户。" -#: .\cookbook\forms.py:382 +#: .\cookbook\forms.py:392 msgid "Name already taken." msgstr "名字已被占用。" -#: .\cookbook\forms.py:393 +#: .\cookbook\forms.py:403 msgid "Accept Terms and Privacy" -msgstr "接受条款细则及私隐政策" +msgstr "接受条款及隐私政策" -#: .\cookbook\forms.py:425 +#: .\cookbook\forms.py:435 msgid "" "Determines how fuzzy a search is if it uses trigram similarity matching (e." "g. low values mean more typos are ignored)." -msgstr "" +msgstr "确定使用三元图相似性匹配时搜索的模糊程度(例如,较低的值意味着忽略更多的打字错误)。" -#: .\cookbook\forms.py:435 +#: .\cookbook\forms.py:445 +#, fuzzy msgid "" "Select type method of search. Click here for " "full desciption of choices." -msgstr "" +msgstr "选择搜索类型方法。点击此处 查看选项的完整说明。" -#: .\cookbook\forms.py:436 +#: .\cookbook\forms.py:446 msgid "" "Use fuzzy matching on units, keywords and ingredients when editing and " "importing recipes." -msgstr "" +msgstr "编辑和导入菜谱时,对单位、关键词和材料使用模糊匹配。" -#: .\cookbook\forms.py:438 +#: .\cookbook\forms.py:448 msgid "" "Fields to search ignoring accents. Selecting this option can improve or " "degrade search quality depending on language" -msgstr "" +msgstr "忽略搜索字段的重音。此选项会因语言差异导致搜索质量产生变化" -#: .\cookbook\forms.py:440 +#: .\cookbook\forms.py:450 msgid "" "Fields to search for partial matches. (e.g. searching for 'Pie' will return " "'pie' and 'piece' and 'soapie')" -msgstr "" +msgstr "用于搜索部分匹配的字段。(如搜索“Pie”会返回“pie”、“piece”和“soapie”)" -#: .\cookbook\forms.py:442 +#: .\cookbook\forms.py:452 msgid "" "Fields to search for beginning of word matches. (e.g. searching for 'sa' " "will return 'salad' and 'sandwich')" -msgstr "" +msgstr "用于搜索开头匹配的字段。(如搜索“sa”会返回“salad”和“sandwich”)" -#: .\cookbook\forms.py:444 +#: .\cookbook\forms.py:454 msgid "" "Fields to 'fuzzy' search. (e.g. searching for 'recpie' will find 'recipe'.) " "Note: this option will conflict with 'web' and 'raw' methods of search." -msgstr "" +msgstr "“模糊”搜索字段。(例如搜索“recpie”将会找到“recipe”。)注意:此选项将与“web”和“raw”搜索方法冲突。" -#: .\cookbook\forms.py:446 +#: .\cookbook\forms.py:456 msgid "" "Fields to full text search. Note: 'web', 'phrase', and 'raw' search methods " "only function with fulltext fields." -msgstr "" +msgstr "全文搜索字段。“web”、“phrase”和“raw”搜索方法仅适用于全文字段。" -#: .\cookbook\forms.py:450 -#, fuzzy -#| msgid "Search" +#: .\cookbook\forms.py:460 msgid "Search Method" -msgstr "搜索" +msgstr "搜索方法" -#: .\cookbook\forms.py:451 +#: .\cookbook\forms.py:461 msgid "Fuzzy Lookups" -msgstr "" +msgstr "模糊查找" -#: .\cookbook\forms.py:452 +#: .\cookbook\forms.py:462 msgid "Ignore Accent" -msgstr "" +msgstr "忽略重音" -#: .\cookbook\forms.py:453 +#: .\cookbook\forms.py:463 msgid "Partial Match" -msgstr "" +msgstr "部分匹配" -#: .\cookbook\forms.py:454 +#: .\cookbook\forms.py:464 msgid "Starts Wtih" -msgstr "" +msgstr "起始于" -#: .\cookbook\forms.py:455 -#, fuzzy -#| msgid "Search" +#: .\cookbook\forms.py:465 msgid "Fuzzy Search" -msgstr "搜索" +msgstr "模糊搜索" -#: .\cookbook\forms.py:456 -#, fuzzy -#| msgid "Text" +#: .\cookbook\forms.py:466 msgid "Full Text" -msgstr "文本" +msgstr "全文" + +#: .\cookbook\forms.py:491 +msgid "" +"Users will see all items you add to your shopping list. They must add you " +"to see items on their list." +msgstr "用户将看到你添加到购物清单中的所有商品。他们必须将你添加到列表才能看到他们清单上的项目。" + +#: .\cookbook\forms.py:497 +msgid "" +"When adding a meal plan to the shopping list (manually or automatically), " +"include all related recipes." +msgstr "将膳食计划(手动或自动)添加到购物清单时,包括所有相关菜谱。" + +#: .\cookbook\forms.py:498 +msgid "" +"When adding a meal plan to the shopping list (manually or automatically), " +"exclude ingredients that are on hand." +msgstr "将膳食计划(手动或自动)添加到购物清单时,排除现有材料。" + +#: .\cookbook\forms.py:499 +msgid "Default number of hours to delay a shopping list entry." +msgstr "延迟购物清单条目的默认小时数。" + +#: .\cookbook\forms.py:500 +msgid "Filter shopping list to only include supermarket categories." +msgstr "筛选购物清单仅包括超市类型。" + +#: .\cookbook\forms.py:501 +#, fuzzy +msgid "Days of recent shopping list entries to display." +msgstr "显示最近几天的购物清单条目。" + +#: .\cookbook\forms.py:502 +msgid "Mark food 'On Hand' when checked off shopping list." +msgstr "在核对购物清单时,将食物标记为“入手”。" + +#: .\cookbook\forms.py:503 +msgid "Delimiter to use for CSV exports." +msgstr "用于 CSV 导出的分隔符。" + +#: .\cookbook\forms.py:504 +msgid "Prefix to add when copying list to the clipboard." +msgstr "将清单复制到剪贴板时要添加的前缀。" + +#: .\cookbook\forms.py:508 +msgid "Share Shopping List" +msgstr "分享购物清单" + +#: .\cookbook\forms.py:509 +msgid "Autosync" +msgstr "自动同步" + +#: .\cookbook\forms.py:510 +msgid "Auto Add Meal Plan" +msgstr "自动添加膳食计划" + +#: .\cookbook\forms.py:511 +msgid "Exclude On Hand" +msgstr "排除现有" + +#: .\cookbook\forms.py:512 +msgid "Include Related" +msgstr "包括相关" + +#: .\cookbook\forms.py:513 +msgid "Default Delay Hours" +msgstr "默认延迟时间" + +#: .\cookbook\forms.py:514 +#, fuzzy +#| msgid "Supermarket" +msgid "Filter to Supermarket" +msgstr "筛选到超市" + +#: .\cookbook\forms.py:515 +msgid "Recent Days" +msgstr "最近几天" + +#: .\cookbook\forms.py:516 +msgid "CSV Delimiter" +msgstr "CSV 分隔符" + +#: .\cookbook\forms.py:517 .\cookbook\templates\shopping_list.html:322 +msgid "List Prefix" +msgstr "清单前缀" + +#: .\cookbook\forms.py:518 +msgid "Auto On Hand" +msgstr "自动入手" + +#: .\cookbook\forms.py:528 +msgid "Reset Food Inheritance" +msgstr "重置食物材料" + +#: .\cookbook\forms.py:529 +msgid "Reset all food to inherit the fields configured." +msgstr "重置所有食物以继承配置的字段。" + +#: .\cookbook\forms.py:541 +msgid "Fields on food that should be inherited by default." +msgstr "默认情况下应继承的食物上的字段。" + +#: .\cookbook\forms.py:542 +msgid "Show recipe counts on search filters" +msgstr "显示搜索筛选器上的菜谱计数" #: .\cookbook\helper\AllAuthCustomAdapter.py:36 msgid "" @@ -353,64 +445,62 @@ msgid "" msgstr "为了防止垃圾邮件,所要求的电子邮件没有被发送。请等待几分钟后再试。" #: .\cookbook\helper\permission_helper.py:136 -#: .\cookbook\helper\permission_helper.py:159 .\cookbook\views\views.py:149 +#: .\cookbook\helper\permission_helper.py:159 .\cookbook\views\views.py:148 msgid "You are not logged in and therefore cannot view this page!" -msgstr "你没有登录,因此不能查看这个页面!" +msgstr "你没有登录,因此不能查看这个页面!" #: .\cookbook\helper\permission_helper.py:140 #: .\cookbook\helper\permission_helper.py:146 #: .\cookbook\helper\permission_helper.py:171 -#: .\cookbook\helper\permission_helper.py:216 -#: .\cookbook\helper\permission_helper.py:230 -#: .\cookbook\helper\permission_helper.py:241 -#: .\cookbook\helper\permission_helper.py:252 .\cookbook\views\data.py:47 -#: .\cookbook\views\views.py:160 .\cookbook\views\views.py:167 -#: .\cookbook\views\views.py:233 +#: .\cookbook\helper\permission_helper.py:219 +#: .\cookbook\helper\permission_helper.py:233 +#: .\cookbook\helper\permission_helper.py:244 +#: .\cookbook\helper\permission_helper.py:255 .\cookbook\views\data.py:47 +#: .\cookbook\views\views.py:159 .\cookbook\views\views.py:166 +#: .\cookbook\views\views.py:232 msgid "You do not have the required permissions to view this page!" -msgstr "你没有必要的权限来查看这个页面!" +msgstr "你没有必要的权限来查看这个页面!" #: .\cookbook\helper\permission_helper.py:164 #: .\cookbook\helper\permission_helper.py:187 #: .\cookbook\helper\permission_helper.py:202 -#, fuzzy msgid "You cannot interact with this object as it is not owned by you!" -msgstr "你不能与这个对象进行互动,因为它不属于你!" +msgstr "你不能与此对象交互,因为它不属于你!" + +#: .\cookbook\helper\recipe_search.py:473 +msgid "One of queryset or hash_key must be provided" +msgstr "必须提供 queryset 或 hash_key 之一" + +#: .\cookbook\helper\shopping_helper.py:54 +msgid "You must supply a recipe or mealplan" +msgstr "你必须提供菜谱或膳食计划" + +#: .\cookbook\helper\shopping_helper.py:58 +msgid "You must supply a created_by" +msgstr "你必须提供创建者" #: .\cookbook\helper\template_helper.py:61 #: .\cookbook\helper\template_helper.py:63 msgid "Could not parse template code." msgstr "无法解析模板代码。" -#: .\cookbook\integration\integration.py:126 -#: .\cookbook\templates\import.html:14 .\cookbook\templates\import.html:20 -#: .\cookbook\templates\import_response.html:7 -#: .\cookbook\templates\test.html:14 .\cookbook\templates\test.html:20 -#: .\cookbook\templates\url_import.html:27 -#: .\cookbook\templates\url_import.html:105 -#: .\cookbook\templates\url_import.html:127 -#: .\cookbook\templates\url_import.html:321 -#: .\cookbook\templates\url_import.html:609 .\cookbook\views\delete.py:89 -#: .\cookbook\views\edit.py:200 -msgid "Import" -msgstr "导入" - -#: .\cookbook\integration\integration.py:208 +#: .\cookbook\integration\integration.py:200 msgid "" "Importer expected a .zip file. Did you choose the correct importer type for " "your data ?" -msgstr "输入者需要一个.zip文件。你为你的数据选择了正确的导入器类型吗?" +msgstr "需要一个 .zip 文件。你是否为数据选择了正确的导入器类型?" -#: .\cookbook\integration\integration.py:211 +#: .\cookbook\integration\integration.py:203 msgid "" "An unexpected error occurred during the import. Please make sure you have " "uploaded a valid file." msgstr "在导入过程中发生了一个意外的错误。请确认你已经上传了一个有效的文件。" -#: .\cookbook\integration\integration.py:216 +#: .\cookbook\integration\integration.py:208 msgid "The following recipes were ignored because they already existed:" msgstr "以下菜谱被忽略了,因为它们已经存在了:" -#: .\cookbook\integration\integration.py:220 +#: .\cookbook\integration\integration.py:212 #, python-format msgid "Imported %s recipes." msgstr "导入了%s菜谱。" @@ -421,52 +511,52 @@ msgstr "说明" #: .\cookbook\integration\paprika.py:49 msgid "Nutritional Information" -msgstr "营养资料" +msgstr "营养信息" -#: .\cookbook\integration\paprika.py:53 .\cookbook\templates\url_import.html:40 +#: .\cookbook\integration\paprika.py:53 .\cookbook\templates\url_import.html:42 msgid "Source" msgstr "来源" -#: .\cookbook\integration\safron.py:23 -#: .\cookbook\templates\include\log_cooking.html:16 -#: .\cookbook\templates\url_import.html:228 -#: .\cookbook\templates\url_import.html:459 +#: .\cookbook\integration\saffron.py:23 +#: .\cookbook\templates\include\log_cooking.html:18 +#: .\cookbook\templates\url_import.html:231 +#: .\cookbook\templates\url_import.html:462 msgid "Servings" msgstr "份量" -#: .\cookbook\integration\safron.py:25 +#: .\cookbook\integration\saffron.py:25 msgid "Waiting time" msgstr "等待时间" -#: .\cookbook\integration\safron.py:27 +#: .\cookbook\integration\saffron.py:27 msgid "Preparation Time" msgstr "准备时间" -#: .\cookbook\integration\safron.py:29 .\cookbook\templates\base.html:78 +#: .\cookbook\integration\saffron.py:29 .\cookbook\templates\base.html:78 #: .\cookbook\templates\forms\ingredients.html:7 #: .\cookbook\templates\index.html:7 msgid "Cookbook" -msgstr "食谱" +msgstr "菜谱" -#: .\cookbook\integration\safron.py:31 +#: .\cookbook\integration\saffron.py:31 msgid "Section" -msgstr "节" +msgstr "部分" #: .\cookbook\management\commands\rebuildindex.py:14 msgid "Rebuilds full text search index on Recipe" -msgstr "" +msgstr "在菜谱上重建全文搜索索引" #: .\cookbook\management\commands\rebuildindex.py:18 msgid "Only Postgress databases use full text search, no index to rebuild" -msgstr "" +msgstr "仅 Postgress 数据库使用全文搜索,没有重建索引" #: .\cookbook\management\commands\rebuildindex.py:29 msgid "Recipe index rebuild complete." -msgstr "" +msgstr "菜谱索引重建完成。" #: .\cookbook\management\commands\rebuildindex.py:31 msgid "Recipe index rebuild failed." -msgstr "" +msgstr "菜谱索引重建失败。" #: .\cookbook\migrations\0047_auto_20200602_1133.py:14 msgid "Breakfast" @@ -484,109 +574,136 @@ msgstr "晚餐" msgid "Other" msgstr "其他" -#: .\cookbook\models.py:150 +#: .\cookbook\models.py:246 msgid "" "Maximum file storage for space in MB. 0 for unlimited, -1 to disable file " "upload." -msgstr "空间的最大文件存储量,单位为MB。0表示无限制,-1表示禁止文件上传。" +msgstr "空间的最大文件存储量,单位为 MB。0表示无限制,-1表示禁止上传文件。" -#: .\cookbook\models.py:202 .\cookbook\templates\search.html:7 -#: .\cookbook\templates\shopping_list.html:59 +#: .\cookbook\models.py:300 .\cookbook\templates\search.html:7 +#: .\cookbook\templates\shopping_list.html:53 msgid "Search" msgstr "搜索" -#: .\cookbook\models.py:203 .\cookbook\templates\base.html:82 +#: .\cookbook\models.py:301 .\cookbook\templates\base.html:82 #: .\cookbook\templates\meal_plan.html:7 #: .\cookbook\templates\meal_plan_new.html:7 .\cookbook\views\delete.py:181 #: .\cookbook\views\edit.py:220 .\cookbook\views\new.py:184 msgid "Meal-Plan" -msgstr "餐单" +msgstr "膳食计划" -#: .\cookbook\models.py:204 .\cookbook\templates\base.html:90 +#: .\cookbook\models.py:302 .\cookbook\templates\base.html:90 msgid "Books" msgstr "书籍" -#: .\cookbook\models.py:212 +#: .\cookbook\models.py:310 msgid "Small" msgstr "小" -#: .\cookbook\models.py:212 +#: .\cookbook\models.py:310 msgid "Large" msgstr "大" -#: .\cookbook\models.py:212 .\cookbook\templates\generic\new_template.html:6 +#: .\cookbook\models.py:310 .\cookbook\templates\generic\new_template.html:6 #: .\cookbook\templates\generic\new_template.html:14 msgid "New" msgstr "新" -#: .\cookbook\models.py:396 +#: .\cookbook\models.py:512 msgid " is part of a recipe step and cannot be deleted" -msgstr "" +msgstr " 是菜谱步骤的一部分,不能删除" -#: .\cookbook\models.py:441 .\cookbook\templates\url_import.html:42 +#: .\cookbook\models.py:586 .\cookbook\templates\url_import.html:44 msgid "Text" msgstr "文本" -#: .\cookbook\models.py:441 +#: .\cookbook\models.py:586 msgid "Time" msgstr "时间" -#: .\cookbook\models.py:441 .\cookbook\templates\url_import.html:44 +#: .\cookbook\models.py:586 .\cookbook\templates\url_import.html:46 msgid "File" msgstr "文件" -#: .\cookbook\models.py:441 +#: .\cookbook\models.py:586 #: .\cookbook\templates\include\recipe_open_modal.html:7 #: .\cookbook\views\delete.py:39 .\cookbook\views\edit.py:260 #: .\cookbook\views\new.py:53 msgid "Recipe" msgstr "菜谱" -#: .\cookbook\models.py:871 .\cookbook\templates\search_info.html:28 +#: .\cookbook\models.py:1041 .\cookbook\templates\search_info.html:28 msgid "Simple" -msgstr "" +msgstr "简明" -#: .\cookbook\models.py:872 .\cookbook\templates\search_info.html:33 +#: .\cookbook\models.py:1042 .\cookbook\templates\search_info.html:33 msgid "Phrase" -msgstr "" +msgstr "短语" -#: .\cookbook\models.py:873 .\cookbook\templates\search_info.html:38 +#: .\cookbook\models.py:1043 .\cookbook\templates\search_info.html:38 msgid "Web" -msgstr "" +msgstr "网络" -#: .\cookbook\models.py:874 .\cookbook\templates\search_info.html:47 +#: .\cookbook\models.py:1044 .\cookbook\templates\search_info.html:47 msgid "Raw" -msgstr "" +msgstr "原始" -#: .\cookbook\models.py:912 -#, fuzzy -#| msgid "Food" +#: .\cookbook\models.py:1082 msgid "Food Alias" -msgstr "食物" +msgstr "食物别名" -#: .\cookbook\models.py:912 +#: .\cookbook\models.py:1082 msgid "Unit Alias" -msgstr "" +msgstr "单位别名" -#: .\cookbook\models.py:912 -#, fuzzy -#| msgid "Keywords" +#: .\cookbook\models.py:1082 msgid "Keyword Alias" -msgstr "关键字" +msgstr "关键词别名" -#: .\cookbook\serializer.py:157 +#: .\cookbook\serializer.py:175 +msgid "A user is required" +msgstr "需要一个用户" + +#: .\cookbook\serializer.py:195 msgid "File uploads are not enabled for this Space." -msgstr "文件不能上载此空间。" +msgstr "未为此空间启用文件上传。" -#: .\cookbook\serializer.py:168 +#: .\cookbook\serializer.py:206 msgid "You have reached your file upload limit." -msgstr "你已达到文件上载的上限。" +msgstr "你已达到文件上传的限制。" + +#: .\cookbook\serializer.py:962 +msgid "Existing shopping list to update" +msgstr "要更新现有的购物清单" + +#: .\cookbook\serializer.py:964 +msgid "" +"List of ingredient IDs from the recipe to add, if not provided all " +"ingredients will be added." +msgstr "要添加的菜谱中材料识别符列表,不提供则添加所有材料。" + +#: .\cookbook\serializer.py:965 +msgid "" +"Providing a list_recipe ID and servings of 0 will delete that shopping list." +msgstr "提供一个菜谱列表识别符或份数为0将删除该购物清单。" + +#: .\cookbook\serializer.py:973 +msgid "Amount of food to add to the shopping list" +msgstr "要添加到购物清单中的食物数量" + +#: .\cookbook\serializer.py:974 +msgid "ID of unit to use for the shopping list" +msgstr "用于购物清单的单位识别符" + +#: .\cookbook\serializer.py:975 +msgid "When set to true will delete all food from active shopping lists." +msgstr "当设置为 true 时,将从活动的购物列表中删除所有食物。" #: .\cookbook\tables.py:35 .\cookbook\templates\generic\edit_template.html:6 #: .\cookbook\templates\generic\edit_template.html:14 #: .\cookbook\templates\recipes_table.html:82 -#: .\cookbook\templates\shopping_list.html:40 -#: .\cookbook\templates\space.html:90 +#: .\cookbook\templates\shopping_list.html:37 +#: .\cookbook\templates\space.html:109 msgid "Edit" msgstr "编辑" @@ -608,7 +725,7 @@ msgstr "找不到你要找的页面。" #: .\cookbook\templates\404.html:33 msgid "Take me Home" -msgstr "带我回家" +msgstr "回到主页" #: .\cookbook\templates\404.html:35 msgid "Report a Bug" @@ -634,7 +751,7 @@ msgstr "电子邮件" #: .\cookbook\templates\account\email.html:19 msgid "The following e-mail addresses are associated with your account:" -msgstr "以下电子邮件地址与您的账户相关联:" +msgstr "以下电子邮件地址与你的帐号相关联:" #: .\cookbook\templates\account\email.html:36 msgid "Verified" @@ -666,15 +783,13 @@ msgstr "移除" #: .\cookbook\templates\account\email.html:58 msgid "Warning:" -msgstr "警告:" +msgstr "警告:" #: .\cookbook\templates\account\email.html:58 msgid "" "You currently do not have any e-mail address set up. You should really add " "an e-mail address so you can receive notifications, reset your password, etc." -msgstr "" -"你目前没有设置任何电子邮件地址。你真的应该添加一个电子邮件地址,这样你就可以" -"收到通知,重置你的密码,等等。" +msgstr "你目前没有设置任何电子邮件地址。你真的应该添加一个电子邮件地址,这样你就可以收到通知,重置你的密码等等。" #: .\cookbook\templates\account\email.html:64 msgid "Add E-mail Address" @@ -701,6 +816,10 @@ msgid "" "for user %(user_display)s\n" " ." msgstr "" +"请确认\n" +" %(email)s 是用户 %(user_display)s " +"的电子邮件地址\n" +" ." #: .\cookbook\templates\account\email_confirm.html:22 #: .\cookbook\templates\generic\delete_template.html:71 @@ -714,6 +833,8 @@ msgid "" " issue a new e-mail confirmation " "request." msgstr "" +"此电子邮件确认链接已过期或无效。请\n" +" 发起新的电子邮件确认请求。" #: .\cookbook\templates\account\login.html:8 .\cookbook\templates\base.html:289 msgid "Login" @@ -724,41 +845,41 @@ msgstr "登录" #: .\cookbook\templates\account\signup.html:69 #: .\cookbook\templates\account\signup_closed.html:15 msgid "Sign In" -msgstr "登入" +msgstr "登录" -#: .\cookbook\templates\account\login.html:32 +#: .\cookbook\templates\account\login.html:34 #: .\cookbook\templates\socialaccount\signup.html:8 #: .\cookbook\templates\socialaccount\signup.html:57 msgid "Sign Up" msgstr "注册" -#: .\cookbook\templates\account\login.html:36 -#: .\cookbook\templates\account\login.html:37 +#: .\cookbook\templates\account\login.html:39 +#: .\cookbook\templates\account\login.html:41 #: .\cookbook\templates\account\password_reset.html:29 msgid "Reset My Password" msgstr "重置我的密码" -#: .\cookbook\templates\account\login.html:37 +#: .\cookbook\templates\account\login.html:40 msgid "Lost your password?" msgstr "遗失密码?" -#: .\cookbook\templates\account\login.html:48 +#: .\cookbook\templates\account\login.html:52 msgid "Social Login" -msgstr "社交登录" +msgstr "关联登录" -#: .\cookbook\templates\account\login.html:49 +#: .\cookbook\templates\account\login.html:53 msgid "You can use any of the following providers to sign in." -msgstr "你可以使用以下任何一个供应商来登录。" +msgstr "你可以使用以下任意提供程序来登录。" #: .\cookbook\templates\account\logout.html:5 #: .\cookbook\templates\account\logout.html:9 #: .\cookbook\templates\account\logout.html:18 msgid "Sign Out" -msgstr "登出" +msgstr "退出" #: .\cookbook\templates\account\logout.html:11 msgid "Are you sure you want to sign out?" -msgstr "你确定你要登出吗?" +msgstr "你确定要退出吗?" #: .\cookbook\templates\account\password_change.html:6 #: .\cookbook\templates\account\password_change.html:16 @@ -772,7 +893,7 @@ msgstr "更改密码" #: .\cookbook\templates\account\password_change.html:12 #: .\cookbook\templates\account\password_set.html:12 -#: .\cookbook\templates\settings.html:69 +#: .\cookbook\templates\settings.html:76 msgid "Password" msgstr "密码" @@ -803,11 +924,12 @@ msgstr "该实例上的密码重置被禁用。" msgid "" "We have sent you an e-mail. Please contact us if you do not receive it " "within a few minutes." -msgstr "我们已经向您发送了一封电子邮件。如果你在几分钟内没有收到,请联系我们。" +msgstr "我们已经向你发送了一封电子邮件。如果你在几分钟内没有收到,请联系我们。" #: .\cookbook\templates\account\password_reset_from_key.html:13 +#, fuzzy msgid "Bad Token" -msgstr "" +msgstr "坏令牌" #: .\cookbook\templates\account\password_reset_from_key.html:25 #, python-format @@ -817,17 +939,17 @@ msgid "" " Please request a new " "password reset." msgstr "" +"密码重置链接无效,可能是因为它已经被使用。\n" +" 请重新请求 重设密码。" #: .\cookbook\templates\account\password_reset_from_key.html:33 -#, fuzzy -#| msgid "Change Password" msgid "change password" msgstr "更改密码" #: .\cookbook\templates\account\password_reset_from_key.html:36 #: .\cookbook\templates\account\password_reset_from_key_done.html:19 msgid "Your password is now changed." -msgstr "" +msgstr "你的密码现在更改了。" #: .\cookbook\templates\account\password_set.html:6 #: .\cookbook\templates\account\password_set.html:16 @@ -841,7 +963,7 @@ msgstr "注册" #: .\cookbook\templates\account\signup.html:12 msgid "Create an Account" -msgstr "创建账户" +msgstr "创建帐号" #: .\cookbook\templates\account\signup.html:42 #: .\cookbook\templates\socialaccount\signup.html:33 @@ -869,12 +991,12 @@ msgstr "创建用户" #: .\cookbook\templates\account\signup.html:69 msgid "Already have an account?" -msgstr "已有账户?" +msgstr "已有帐号?" #: .\cookbook\templates\account\signup_closed.html:5 #: .\cookbook\templates\account\signup_closed.html:11 msgid "Sign Up Closed" -msgstr "注册关闭" +msgstr "注册已关闭" #: .\cookbook\templates\account\signup_closed.html:13 msgid "We are sorry, but the sign up is currently closed." @@ -883,7 +1005,7 @@ msgstr "我们很抱歉,但目前注册已经结束。" #: .\cookbook\templates\api_info.html:5 .\cookbook\templates\base.html:279 #: .\cookbook\templates\rest_framework\api.html:11 msgid "API Documentation" -msgstr "API文档" +msgstr "应用程序接口文档" #: .\cookbook\templates\base.html:86 msgid "Shopping" @@ -893,32 +1015,34 @@ msgstr "购物" msgid "Keyword" msgstr "关键词" +#: .\cookbook\templates\base.html:125 .\cookbook\views\lists.py:114 +msgid "Foods" +msgstr "食物" + #: .\cookbook\templates\base.html:137 #: .\cookbook\templates\forms\ingredients.html:24 -#: .\cookbook\templates\space.html:41 .\cookbook\templates\stats.html:26 -#: .\cookbook\views\lists.py:146 +#: .\cookbook\templates\space.html:47 .\cookbook\templates\stats.html:26 +#: .\cookbook\views\lists.py:131 msgid "Units" -msgstr "" +msgstr "单位" #: .\cookbook\templates\base.html:151 -#: .\cookbook\templates\shopping_list.html:237 +#: .\cookbook\templates\shopping_list.html:208 #: .\cookbook\templates\supermarket.html:7 msgid "Supermarket" msgstr "超市" #: .\cookbook\templates\base.html:163 -#, fuzzy -#| msgid "Supermarket" msgid "Supermarket Category" -msgstr "超市" +msgstr "超市类型" -#: .\cookbook\templates\base.html:175 .\cookbook\views\lists.py:195 +#: .\cookbook\templates\base.html:175 .\cookbook\views\lists.py:180 msgid "Automations" -msgstr "" +msgstr "自动化" -#: .\cookbook\templates\base.html:189 .\cookbook\views\lists.py:215 +#: .\cookbook\templates\base.html:189 .\cookbook\views\lists.py:200 msgid "Files" -msgstr "" +msgstr "文件" #: .\cookbook\templates\base.html:201 msgid "Batch Edit" @@ -927,157 +1051,155 @@ msgstr "批量编辑" #: .\cookbook\templates\base.html:213 .\cookbook\templates\history.html:6 #: .\cookbook\templates\history.html:14 msgid "History" -msgstr "" +msgstr "历史" #: .\cookbook\templates\base.html:228 .\cookbook\templates\export.html:14 #: .\cookbook\templates\export.html:20 -#: .\cookbook\templates\shopping_list.html:358 +#: .\cookbook\templates\shopping_list.html:310 #: .\cookbook\templates\test2.html:14 .\cookbook\templates\test2.html:20 msgid "Export" -msgstr "" +msgstr "导出" #: .\cookbook\templates\base.html:244 .\cookbook\templates\index.html:47 msgid "Import Recipe" -msgstr "" +msgstr "导入菜谱" #: .\cookbook\templates\base.html:246 -#: .\cookbook\templates\shopping_list.html:195 -#: .\cookbook\templates\shopping_list.html:217 +#: .\cookbook\templates\shopping_list.html:165 +#: .\cookbook\templates\shopping_list.html:188 msgid "Create" -msgstr "" +msgstr "创建" #: .\cookbook\templates\base.html:259 #: .\cookbook\templates\generic\list_template.html:14 -#: .\cookbook\templates\space.html:58 .\cookbook\templates\stats.html:43 +#: .\cookbook\templates\space.html:69 .\cookbook\templates\stats.html:43 msgid "External Recipes" -msgstr "" +msgstr "外部菜谱" -#: .\cookbook\templates\base.html:262 .\cookbook\templates\space.html:7 -#: .\cookbook\templates\space.html:19 +#: .\cookbook\templates\base.html:262 .\cookbook\templates\space.html:8 +#: .\cookbook\templates\space.html:20 .\cookbook\templates\space.html:150 msgid "Space Settings" -msgstr "" +msgstr "空间设置" #: .\cookbook\templates\base.html:267 .\cookbook\templates\system.html:13 msgid "System" -msgstr "" +msgstr "系统" #: .\cookbook\templates\base.html:269 msgid "Admin" -msgstr "" +msgstr "管理员" #: .\cookbook\templates\base.html:273 msgid "Markdown Guide" -msgstr "" +msgstr "Markdown 手册" #: .\cookbook\templates\base.html:275 msgid "GitHub" -msgstr "" +msgstr "GitHub" #: .\cookbook\templates\base.html:277 msgid "Translate Tandoor" -msgstr "" +msgstr "翻译筒状泥炉<_<" #: .\cookbook\templates\base.html:281 msgid "API Browser" -msgstr "" +msgstr "应用程序接口浏览器" #: .\cookbook\templates\base.html:284 msgid "Log out" -msgstr "" +msgstr "退出" #: .\cookbook\templates\batch\edit.html:6 msgid "Batch edit Category" -msgstr "" +msgstr "批量编辑类型" #: .\cookbook\templates\batch\edit.html:15 msgid "Batch edit Recipes" -msgstr "" +msgstr "批量编辑菜谱" #: .\cookbook\templates\batch\edit.html:20 msgid "Add the specified keywords to all recipes containing a word" -msgstr "" +msgstr "将指定的关键词添加到包含单词的所有菜谱中" #: .\cookbook\templates\batch\monitor.html:6 .\cookbook\views\edit.py:82 msgid "Sync" -msgstr "" +msgstr "同步" #: .\cookbook\templates\batch\monitor.html:10 msgid "Manage watched Folders" -msgstr "" +msgstr "管理关注的文件夹" #: .\cookbook\templates\batch\monitor.html:14 msgid "" "On this Page you can manage all storage folder locations that should be " "monitored and synced." -msgstr "" +msgstr "在此页面上,你可以管理应该监视和同步的所有存储文件夹位置。" #: .\cookbook\templates\batch\monitor.html:16 msgid "The path must be in the following format" -msgstr "" +msgstr "路径必须采用以下格式" #: .\cookbook\templates\batch\monitor.html:20 #: .\cookbook\templates\forms\edit_import_recipe.html:14 #: .\cookbook\templates\generic\edit_template.html:23 #: .\cookbook\templates\generic\new_template.html:23 -#: .\cookbook\templates\include\log_cooking.html:28 -#: .\cookbook\templates\settings.html:63 .\cookbook\templates\settings.html:105 -#: .\cookbook\templates\settings.html:123 -#: .\cookbook\templates\settings.html:195 -#: .\cookbook\templates\shopping_list.html:360 +#: .\cookbook\templates\include\log_cooking.html:30 +#: .\cookbook\templates\settings.html:70 .\cookbook\templates\settings.html:112 +#: .\cookbook\templates\settings.html:130 +#: .\cookbook\templates\settings.html:202 +#: .\cookbook\templates\settings.html:213 +#: .\cookbook\templates\shopping_list.html:311 +#: .\cookbook\templates\space.html:155 msgid "Save" -msgstr "" +msgstr "保存" #: .\cookbook\templates\batch\monitor.html:21 msgid "Manage External Storage" -msgstr "" +msgstr "管理外部存储" #: .\cookbook\templates\batch\monitor.html:28 msgid "Sync Now!" -msgstr "" +msgstr "现在同步!" #: .\cookbook\templates\batch\monitor.html:29 -#, fuzzy -#| msgid "Recipe" msgid "Show Recipes" -msgstr "菜谱" +msgstr "显示菜谱" #: .\cookbook\templates\batch\monitor.html:30 -#, fuzzy -#| msgid "Social Login" msgid "Show Log" -msgstr "社交登录" +msgstr "显示记录" #: .\cookbook\templates\batch\waiting.html:4 #: .\cookbook\templates\batch\waiting.html:10 msgid "Importing Recipes" -msgstr "" +msgstr "导入配方" #: .\cookbook\templates\batch\waiting.html:28 msgid "" "This can take a few minutes, depending on the number of recipes in sync, " "please wait." -msgstr "" +msgstr "这可能需要几分钟,取决于同步的菜谱数量,请等待。" #: .\cookbook\templates\books.html:7 msgid "Recipe Books" -msgstr "" +msgstr "菜谱书" #: .\cookbook\templates\export.html:6 .\cookbook\templates\test2.html:6 msgid "Export Recipes" -msgstr "" +msgstr "导出菜谱" #: .\cookbook\templates\forms\edit_import_recipe.html:5 #: .\cookbook\templates\forms\edit_import_recipe.html:9 msgid "Import new Recipe" -msgstr "" +msgstr "导入新菜谱" #: .\cookbook\templates\forms\edit_internal_recipe.html:7 msgid "Edit Recipe" -msgstr "" +msgstr "编辑菜谱" #: .\cookbook\templates\forms\ingredients.html:15 msgid "Edit Ingredients" -msgstr "" +msgstr "编辑材料" #: .\cookbook\templates\forms\ingredients.html:16 msgid "" @@ -1089,104 +1211,125 @@ msgid "" "them.\n" " " msgstr "" +"\n" +" 如果两个(或更多)单位或材料应该是相同的,则可使用以下形式。\n" +" 它合并了两个单位或材料,并使用它们更新所有菜谱。\n" +" " #: .\cookbook\templates\forms\ingredients.html:26 msgid "Are you sure that you want to merge these two units?" -msgstr "" +msgstr "你确定要合并这两个单位吗?" #: .\cookbook\templates\forms\ingredients.html:31 #: .\cookbook\templates\forms\ingredients.html:40 msgid "Merge" -msgstr "" +msgstr "合并" #: .\cookbook\templates\forms\ingredients.html:36 msgid "Are you sure that you want to merge these two ingredients?" -msgstr "" +msgstr "你确定要合并这两种材料吗?" #: .\cookbook\templates\generic\delete_template.html:21 #, python-format msgid "Are you sure you want to delete the %(title)s: %(object)s " -msgstr "" +msgstr "你确定要删除 %(title)s:%(object)s " #: .\cookbook\templates\generic\delete_template.html:26 msgid "Protected" -msgstr "" +msgstr "受保护的" #: .\cookbook\templates\generic\delete_template.html:41 msgid "Cascade" -msgstr "" +msgstr "串联" #: .\cookbook\templates\generic\delete_template.html:72 msgid "Cancel" -msgstr "" +msgstr "取消" #: .\cookbook\templates\generic\edit_template.html:32 msgid "View" -msgstr "" +msgstr "查看" #: .\cookbook\templates\generic\edit_template.html:36 msgid "Delete original file" -msgstr "" +msgstr "删除原文件" #: .\cookbook\templates\generic\list_template.html:6 -#: .\cookbook\templates\generic\list_template.html:21 +#: .\cookbook\templates\generic\list_template.html:22 msgid "List" -msgstr "" +msgstr "清单" + +#: .\cookbook\templates\generic\list_template.html:33 +#: .\cookbook\templates\shopping_list.html:33 +msgid "Try the new shopping list" +msgstr "试试新的购物清单" -#: .\cookbook\templates\generic\list_template.html:34 +#: .\cookbook\templates\generic\list_template.html:45 msgid "Filter" -msgstr "" +msgstr "筛选" -#: .\cookbook\templates\generic\list_template.html:39 +#: .\cookbook\templates\generic\list_template.html:50 msgid "Import all" -msgstr "" +msgstr "全部导入" #: .\cookbook\templates\generic\table_template.html:76 #: .\cookbook\templates\recipes_table.html:121 msgid "previous" -msgstr "" +msgstr "之前" #: .\cookbook\templates\generic\table_template.html:98 #: .\cookbook\templates\recipes_table.html:143 msgid "next" -msgstr "" +msgstr "之后" #: .\cookbook\templates\history.html:20 msgid "View Log" -msgstr "" +msgstr "查看记录" #: .\cookbook\templates\history.html:24 msgid "Cook Log" -msgstr "" +msgstr "烹饪记录" #: .\cookbook\templates\import.html:6 .\cookbook\templates\test.html:6 msgid "Import Recipes" -msgstr "" +msgstr "导入菜谱" + +#: .\cookbook\templates\import.html:14 .\cookbook\templates\import.html:20 +#: .\cookbook\templates\import_response.html:7 +#: .\cookbook\templates\test.html:14 .\cookbook\templates\test.html:20 +#: .\cookbook\templates\url_import.html:29 +#: .\cookbook\templates\url_import.html:108 +#: .\cookbook\templates\url_import.html:130 +#: .\cookbook\templates\url_import.html:324 +#: .\cookbook\templates\url_import.html:618 .\cookbook\views\delete.py:89 +#: .\cookbook\views\edit.py:200 +msgid "Import" +msgstr "导入" -#: .\cookbook\templates\include\log_cooking.html:7 +#: .\cookbook\templates\include\log_cooking.html:9 msgid "Log Recipe Cooking" -msgstr "" +msgstr "菜谱烹饪记录" -#: .\cookbook\templates\include\log_cooking.html:13 +#: .\cookbook\templates\include\log_cooking.html:15 msgid "All fields are optional and can be left empty." -msgstr "" +msgstr "所有字段都是可选的,可以留空。" -#: .\cookbook\templates\include\log_cooking.html:19 +#: .\cookbook\templates\include\log_cooking.html:21 msgid "Rating" -msgstr "" +msgstr "评分" -#: .\cookbook\templates\include\log_cooking.html:27 +#: .\cookbook\templates\include\log_cooking.html:29 #: .\cookbook\templates\include\recipe_open_modal.html:18 msgid "Close" -msgstr "" +msgstr "关闭" #: .\cookbook\templates\include\recipe_open_modal.html:32 msgid "Open Recipe" -msgstr "" +msgstr "打开菜谱" #: .\cookbook\templates\include\storage_backend_warning.html:4 msgid "Security Warning" -msgstr "" +msgstr "安全警告" #: .\cookbook\templates\include\storage_backend_warning.html:5 msgid "" @@ -1200,40 +1343,45 @@ msgid "" "can be used.\n" " " msgstr "" +"\n" +" 密码和令牌字段在数据库中存储为明文。\n" +" 这是必要的,因为它们需要发出应用程序接口请求,但这也增加了被窃取的风险。
\n" +" 为了限制可能的损害,可以使用访问受限的令牌或帐户。\n" +" " #: .\cookbook\templates\index.html:29 msgid "Search recipe ..." -msgstr "" +msgstr "搜索菜谱……" #: .\cookbook\templates\index.html:44 msgid "New Recipe" -msgstr "" +msgstr "新菜谱" #: .\cookbook\templates\index.html:53 msgid "Advanced Search" -msgstr "" +msgstr "高级搜索" #: .\cookbook\templates\index.html:57 msgid "Reset Search" -msgstr "" +msgstr "重置搜索" #: .\cookbook\templates\index.html:85 msgid "Last viewed" -msgstr "" +msgstr "最近查看" -#: .\cookbook\templates\index.html:87 .\cookbook\templates\space.html:35 +#: .\cookbook\templates\index.html:87 .\cookbook\templates\space.html:37 #: .\cookbook\templates\stats.html:22 msgid "Recipes" -msgstr "" +msgstr "菜谱" #: .\cookbook\templates\index.html:94 msgid "Log in to view recipes" -msgstr "" +msgstr "登录查看菜谱" #: .\cookbook\templates\markdown_info.html:5 #: .\cookbook\templates\markdown_info.html:13 msgid "Markdown Info" -msgstr "" +msgstr "Markdown 信息" #: .\cookbook\templates\markdown_info.html:14 msgid "" @@ -1250,54 +1398,62 @@ msgid "" "below.\n" " " msgstr "" +"\n" +" Markdown 是轻量标记语言,很方便格式化纯文本。\n" +" 本站使用 Python Markdown 库转换你的文本信息成好看的 HTML。\n" +" 完整的 Markdown 文档可 点击这里 查看。\n" +" 下面可以找到一个不完整但很可能够用的文档。\n" +" " #: .\cookbook\templates\markdown_info.html:25 msgid "Headers" -msgstr "" +msgstr "标题" #: .\cookbook\templates\markdown_info.html:54 msgid "Formatting" -msgstr "" +msgstr "格式化" #: .\cookbook\templates\markdown_info.html:56 #: .\cookbook\templates\markdown_info.html:72 msgid "Line breaks are inserted by adding two spaces after the end of a line" -msgstr "" +msgstr "通过在行尾后添加两个空格插入换行符" #: .\cookbook\templates\markdown_info.html:57 #: .\cookbook\templates\markdown_info.html:73 msgid "or by leaving a blank line inbetween." -msgstr "" +msgstr "或者在中间留一个空行。" #: .\cookbook\templates\markdown_info.html:59 #: .\cookbook\templates\markdown_info.html:74 msgid "This text is bold" -msgstr "" +msgstr "这个文本是粗体的" #: .\cookbook\templates\markdown_info.html:60 #: .\cookbook\templates\markdown_info.html:75 msgid "This text is italic" -msgstr "" +msgstr "这个文本是斜体的" #: .\cookbook\templates\markdown_info.html:61 #: .\cookbook\templates\markdown_info.html:77 msgid "Blockquotes are also possible" -msgstr "" +msgstr "块引用也可以" #: .\cookbook\templates\markdown_info.html:84 msgid "Lists" -msgstr "" +msgstr "列表" #: .\cookbook\templates\markdown_info.html:85 msgid "" "Lists can ordered or unorderd. It is important to leave a blank line " "before the list!" -msgstr "" +msgstr "列表可以是有序或无序的。重要的是 在列表前留下一个空行!" #: .\cookbook\templates\markdown_info.html:87 #: .\cookbook\templates\markdown_info.html:108 msgid "Ordered List" -msgstr "" +msgstr "有序列表" #: .\cookbook\templates\markdown_info.html:89 #: .\cookbook\templates\markdown_info.html:90 @@ -1306,12 +1462,12 @@ msgstr "" #: .\cookbook\templates\markdown_info.html:111 #: .\cookbook\templates\markdown_info.html:112 msgid "unordered list item" -msgstr "" +msgstr "无序列表项" #: .\cookbook\templates\markdown_info.html:93 #: .\cookbook\templates\markdown_info.html:114 msgid "Unordered List" -msgstr "" +msgstr "无序列表" #: .\cookbook\templates\markdown_info.html:95 #: .\cookbook\templates\markdown_info.html:96 @@ -1320,26 +1476,26 @@ msgstr "" #: .\cookbook\templates\markdown_info.html:117 #: .\cookbook\templates\markdown_info.html:118 msgid "ordered list item" -msgstr "" +msgstr "有序列表项" #: .\cookbook\templates\markdown_info.html:125 msgid "Images & Links" -msgstr "" +msgstr "图片和链接" #: .\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 "" +msgstr "链接可以使用 Markdown 格式化。此应用程序还允许粘贴链接到 markdown 字段而无需格式化。" #: .\cookbook\templates\markdown_info.html:132 #: .\cookbook\templates\markdown_info.html:145 msgid "This will become an image" -msgstr "" +msgstr "这将变成一个图像" #: .\cookbook\templates\markdown_info.html:152 msgid "Tables" -msgstr "" +msgstr "表格" #: .\cookbook\templates\markdown_info.html:153 msgid "" @@ -1347,177 +1503,178 @@ msgid "" "editor like this one." msgstr "" +"Markdown 表格难以手写。推荐使用像 这个 " +"的表格编辑器。" #: .\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 "表格" #: .\cookbook\templates\markdown_info.html:155 #: .\cookbook\templates\markdown_info.html:172 msgid "Header" -msgstr "" +msgstr "头部" #: .\cookbook\templates\markdown_info.html:157 #: .\cookbook\templates\markdown_info.html:178 msgid "Cell" -msgstr "" +msgstr "单元格" #: .\cookbook\templates\meal_plan_entry.html:6 msgid "Meal Plan View" -msgstr "" +msgstr "膳食计划视图" #: .\cookbook\templates\meal_plan_entry.html:18 msgid "Created by" -msgstr "" +msgstr "创建者" #: .\cookbook\templates\meal_plan_entry.html:20 -#: .\cookbook\templates\shopping_list.html:261 +#: .\cookbook\templates\shopping_list.html:232 msgid "Shared with" -msgstr "" +msgstr "分享自" #: .\cookbook\templates\meal_plan_entry.html:48 #: .\cookbook\templates\recipes_table.html:64 msgid "Last cooked" -msgstr "" +msgstr "最近烹饪" #: .\cookbook\templates\meal_plan_entry.html:50 msgid "Never cooked before." -msgstr "" +msgstr "从来没有烹饪。" #: .\cookbook\templates\meal_plan_entry.html:76 msgid "Other meals on this day" -msgstr "" +msgstr "这天的其他餐点" #: .\cookbook\templates\no_groups_info.html:5 #: .\cookbook\templates\no_groups_info.html:12 msgid "No Permissions" -msgstr "" +msgstr "没有权限" #: .\cookbook\templates\no_groups_info.html:17 msgid "You do not have any groups and therefor cannot use this application." -msgstr "" +msgstr "你没有任何组,因此无法使用此应用程序。" #: .\cookbook\templates\no_groups_info.html:18 #: .\cookbook\templates\no_perm_info.html:15 msgid "Please contact your administrator." -msgstr "" +msgstr "请联系你的管理员。" #: .\cookbook\templates\no_perm_info.html:5 #: .\cookbook\templates\no_perm_info.html:12 msgid "No Permission" -msgstr "" +msgstr "没有权限" #: .\cookbook\templates\no_perm_info.html:15 msgid "" "You do not have the required permissions to view this page or perform this " "action." -msgstr "" +msgstr "你没有必要的权限来查看此页面或执行此操作。" #: .\cookbook\templates\no_space_info.html:6 #: .\cookbook\templates\no_space_info.html:13 msgid "No Space" -msgstr "" +msgstr "没有空间" #: .\cookbook\templates\no_space_info.html:17 msgid "" "Recipes, foods, shopping lists and more are organized in spaces of one or " "more people." -msgstr "" +msgstr "菜谱、食物、购物清单等都组织在一个人或多个人的空间中。" #: .\cookbook\templates\no_space_info.html:18 msgid "" "You can either be invited into an existing space or create your own one." -msgstr "" +msgstr "你可以被邀请进入现有空间,也可以创建自己的空间。" #: .\cookbook\templates\no_space_info.html:31 #: .\cookbook\templates\no_space_info.html:40 msgid "Join Space" -msgstr "" +msgstr "加入空间" #: .\cookbook\templates\no_space_info.html:34 msgid "Join an existing space." -msgstr "" +msgstr "加入一个现有的空间。" #: .\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 "" +msgstr "要加入一个现有的空间,要么输入你的邀请令牌,要么单击空间所有者发送给你的邀请链接。" #: .\cookbook\templates\no_space_info.html:48 #: .\cookbook\templates\no_space_info.html:56 msgid "Create Space" -msgstr "" +msgstr "创建空间" #: .\cookbook\templates\no_space_info.html:51 msgid "Create your own recipe space." -msgstr "" +msgstr "创建你自己的菜谱空间。" #: .\cookbook\templates\no_space_info.html:52 msgid "Start your own recipe space and invite other users to it." -msgstr "" +msgstr "创建自己的食谱空间,并邀请其他用户加入。" #: .\cookbook\templates\offline.html:6 msgid "Offline" -msgstr "" +msgstr "离线" #: .\cookbook\templates\offline.html:19 msgid "You are currently offline!" -msgstr "" +msgstr "你目前处于离线状态!" #: .\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 "" +msgstr "下面列出的菜谱可以离线查看,因为你最近已经查看过了。请记住,数据可能是过时的。" #: .\cookbook\templates\recipe_view.html:26 msgid "by" -msgstr "" +msgstr "评论者" #: .\cookbook\templates\recipe_view.html:44 .\cookbook\views\delete.py:147 #: .\cookbook\views\edit.py:180 msgid "Comment" -msgstr "" +msgstr "评论" #: .\cookbook\templates\recipes_table.html:19 #: .\cookbook\templates\recipes_table.html:23 -#: .\cookbook\templates\url_import.html:444 +#: .\cookbook\templates\url_import.html:447 msgid "Recipe Image" -msgstr "" +msgstr "菜谱图像" #: .\cookbook\templates\recipes_table.html:51 -#: .\cookbook\templates\url_import.html:449 +#: .\cookbook\templates\url_import.html:452 msgid "Preparation time ca." -msgstr "" +msgstr "准备时间约" #: .\cookbook\templates\recipes_table.html:57 -#: .\cookbook\templates\url_import.html:454 +#: .\cookbook\templates\url_import.html:457 msgid "Waiting time ca." -msgstr "" +msgstr "等待时间约" #: .\cookbook\templates\recipes_table.html:60 msgid "External" -msgstr "" +msgstr "外部" #: .\cookbook\templates\recipes_table.html:86 msgid "Log Cooking" -msgstr "" +msgstr "烹饪记录" #: .\cookbook\templates\rest_framework\api.html:5 msgid "Recipe Home" -msgstr "" +msgstr "菜谱主页" #: .\cookbook\templates\search_info.html:5 #: .\cookbook\templates\search_info.html:9 -#: .\cookbook\templates\settings.html:165 -#, fuzzy -#| msgid "Search String" +#: .\cookbook\templates\settings.html:172 msgid "Search Settings" -msgstr "搜索字符串" +msgstr "搜索设置" #: .\cookbook\templates\search_info.html:10 msgid "" @@ -1530,12 +1687,15 @@ msgid "" "only available if you are using Postgres for your database.\n" " " msgstr "" +"\n" +" 创造最佳的搜索体验非常复杂,并且对您的个人配置有很大影响。\n" +" 改变任何搜索设置都可能对搜索结果的速度和质量产生重大影响。\n" +" 只有在数据库使用 Postgres 时,才可以使用搜索方法、卦和全文搜索配置。\n" +" " #: .\cookbook\templates\search_info.html:19 -#, fuzzy -#| msgid "Search" msgid "Search Methods" -msgstr "搜索" +msgstr "搜索方法" #: .\cookbook\templates\search_info.html:23 msgid "" @@ -1551,6 +1711,12 @@ msgid "" "html#TEXTSEARCH-PARSING-QUERIES>Postgresql's website.\n" " " msgstr "" +" \n" +" 全文搜索尝试规范化提供的单词以匹配常见变体。例如:“forked”、“forking”、“forks”都将归为“fork”。\n" +" 下面将介绍几种可用的方法,可以控制搜索多个单词时搜索行为的反应。\n" +" 关于这些操作的完整技术细节可以在 Postgresql的网站 上查看。\n" +" " #: .\cookbook\templates\search_info.html:29 msgid "" @@ -1562,6 +1728,10 @@ msgid "" "selected for a full text search.\n" " " msgstr "" +" \n" +" 简单搜索会忽略标点符号和常用词,如“the”、“a”、“and”。并将根据需要处理单独的单词。\n" +" 搜索“apple or flour”将会在全文搜索中返回任意包含“apple”和“flour”的菜谱。\n" +" " #: .\cookbook\templates\search_info.html:34 msgid "" @@ -1617,10 +1787,8 @@ msgid "" msgstr "" #: .\cookbook\templates\search_info.html:69 -#, fuzzy -#| msgid "Search" msgid "Search Fields" -msgstr "搜索" +msgstr "搜索字段" #: .\cookbook\templates\search_info.html:73 msgid "" @@ -1658,10 +1826,8 @@ msgid "" msgstr "" #: .\cookbook\templates\search_info.html:95 -#, fuzzy -#| msgid "Search" msgid "Search Index" -msgstr "搜索" +msgstr "搜索索引" #: .\cookbook\templates\search_info.html:99 msgid "" @@ -1678,234 +1844,234 @@ msgstr "" #: .\cookbook\templates\settings.html:28 msgid "Account" -msgstr "" +msgstr "帐号" #: .\cookbook\templates\settings.html:35 msgid "Preferences" -msgstr "" +msgstr "首选项" #: .\cookbook\templates\settings.html:42 msgid "API-Settings" -msgstr "" +msgstr "应用程序接口设置" #: .\cookbook\templates\settings.html:49 -#, fuzzy -#| msgid "Search String" msgid "Search-Settings" -msgstr "搜索字符串" +msgstr "搜索设置" + +#: .\cookbook\templates\settings.html:56 +msgid "Shopping-Settings" +msgstr "购物设置" -#: .\cookbook\templates\settings.html:58 +#: .\cookbook\templates\settings.html:65 msgid "Name Settings" -msgstr "" +msgstr "名字设置" -#: .\cookbook\templates\settings.html:66 +#: .\cookbook\templates\settings.html:73 msgid "Account Settings" -msgstr "" +msgstr "帐号设置" -#: .\cookbook\templates\settings.html:68 +#: .\cookbook\templates\settings.html:75 msgid "Emails" -msgstr "" +msgstr "电子邮件" -#: .\cookbook\templates\settings.html:71 +#: .\cookbook\templates\settings.html:78 #: .\cookbook\templates\socialaccount\connections.html:11 msgid "Social" -msgstr "" +msgstr "社交" -#: .\cookbook\templates\settings.html:84 +#: .\cookbook\templates\settings.html:91 msgid "Language" -msgstr "" +msgstr "语言" -#: .\cookbook\templates\settings.html:114 +#: .\cookbook\templates\settings.html:121 msgid "Style" -msgstr "" +msgstr "样式" -#: .\cookbook\templates\settings.html:135 +#: .\cookbook\templates\settings.html:142 msgid "API Token" -msgstr "" +msgstr "应用程序接口令牌" -#: .\cookbook\templates\settings.html:136 +#: .\cookbook\templates\settings.html:143 msgid "" "You can use both basic authentication and token based authentication to " "access the REST API." -msgstr "" +msgstr "您可以使用基本身份验证和基于令牌的身份验证来访问表现层状态转换应用程序接口(REST API)。" -#: .\cookbook\templates\settings.html:153 +#: .\cookbook\templates\settings.html:160 msgid "" "Use the token as an Authorization header prefixed by the word token as shown " "in the following examples:" msgstr "" -#: .\cookbook\templates\settings.html:155 +#: .\cookbook\templates\settings.html:162 msgid "or" -msgstr "" +msgstr "或" -#: .\cookbook\templates\settings.html:166 +#: .\cookbook\templates\settings.html:173 msgid "" "There are many options to configure the search depending on your personal " "preferences." -msgstr "" +msgstr "根据个人偏好,有许多选项可以配置搜索。" -#: .\cookbook\templates\settings.html:167 +#: .\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 "" +msgstr "通常你 不需要 配置它们中的任何一个,只需使用默认设置或以下预设值之一。" -#: .\cookbook\templates\settings.html:168 +#: .\cookbook\templates\settings.html:175 msgid "" "If you do want to configure the search you can read about the different " "options here." -msgstr "" +msgstr "如果你想要配置搜索,可以在 这里 阅读不同的选项。" -#: .\cookbook\templates\settings.html:173 +#: .\cookbook\templates\settings.html:180 msgid "Fuzzy" -msgstr "" +msgstr "模糊" -#: .\cookbook\templates\settings.html:174 +#: .\cookbook\templates\settings.html:181 msgid "" "Find what you need even if your search or the recipe contains typos. Might " "return more results than needed to make sure you find what you are looking " "for." -msgstr "" +msgstr "即使你的搜索或菜谱中有拼写错误,也要找到你需要的东西。可能会返回比需要更多的结果,以确保你找到所需的内容。" -#: .\cookbook\templates\settings.html:175 +#: .\cookbook\templates\settings.html:182 msgid "This is the default behavior" -msgstr "" +msgstr "这是默认行为" -#: .\cookbook\templates\settings.html:176 -#: .\cookbook\templates\settings.html:184 +#: .\cookbook\templates\settings.html:183 +#: .\cookbook\templates\settings.html:191 msgid "Apply" -msgstr "" +msgstr "应用" -#: .\cookbook\templates\settings.html:181 +#: .\cookbook\templates\settings.html:188 msgid "Precise" -msgstr "" +msgstr "精确" -#: .\cookbook\templates\settings.html:182 +#: .\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 "" +msgstr "允许对搜索结果进行精细控制,但如果出现太多拼写错误,则可能不会返回结果。" -#: .\cookbook\templates\settings.html:183 +#: .\cookbook\templates\settings.html:190 msgid "Perfect for large Databases" -msgstr "" +msgstr "非常适合大型数据库" + +#: .\cookbook\templates\settings.html:207 +msgid "Shopping Settings" +msgstr "购物设置" #: .\cookbook\templates\setup.html:6 .\cookbook\templates\system.html:5 msgid "Cookbook Setup" -msgstr "" +msgstr "安装菜谱" #: .\cookbook\templates\setup.html:14 msgid "Setup" -msgstr "" +msgstr "安装" #: .\cookbook\templates\setup.html:15 msgid "" "To start using this application you must first create a superuser account." -msgstr "" +msgstr "要开始使用这个应用程序,你必须先创建一个超级用户帐号。" #: .\cookbook\templates\setup.html:20 msgid "Create Superuser account" -msgstr "" +msgstr "创建超级用户帐号" -#: .\cookbook\templates\shopping_list.html:7 +#: .\cookbook\templates\shopping_list.html:8 #: .\cookbook\templates\shopping_list.html:29 -#: .\cookbook\templates\shopping_list.html:721 +#: .\cookbook\templates\shopping_list.html:663 msgid "Shopping List" -msgstr "" +msgstr "采购单" -#: .\cookbook\templates\shopping_list.html:34 -msgid "Try the new shopping list" -msgstr "" - -#: .\cookbook\templates\shopping_list.html:63 +#: .\cookbook\templates\shopping_list.html:55 msgid "Search Recipe" -msgstr "" +msgstr "搜索菜谱" -#: .\cookbook\templates\shopping_list.html:86 +#: .\cookbook\templates\shopping_list.html:72 msgid "Shopping Recipes" -msgstr "" +msgstr "购物菜谱" -#: .\cookbook\templates\shopping_list.html:90 +#: .\cookbook\templates\shopping_list.html:74 msgid "No recipes selected" -msgstr "" +msgstr "没选择菜谱" -#: .\cookbook\templates\shopping_list.html:157 +#: .\cookbook\templates\shopping_list.html:131 +#, fuzzy msgid "Entry Mode" -msgstr "" +msgstr "条目模式" -#: .\cookbook\templates\shopping_list.html:165 +#: .\cookbook\templates\shopping_list.html:139 +#, fuzzy msgid "Add Entry" -msgstr "" +msgstr "添加条目" -#: .\cookbook\templates\shopping_list.html:181 +#: .\cookbook\templates\shopping_list.html:152 msgid "Amount" -msgstr "" +msgstr "数量" -#: .\cookbook\templates\shopping_list.html:194 +#: .\cookbook\templates\shopping_list.html:164 msgid "Select Unit" -msgstr "" - -#: .\cookbook\templates\shopping_list.html:196 -#: .\cookbook\templates\shopping_list.html:218 -#: .\cookbook\templates\shopping_list.html:248 -#: .\cookbook\templates\shopping_list.html:272 -#: .\cookbook\templates\url_import.html:500 -#: .\cookbook\templates\url_import.html:532 +msgstr "选择单位" + +#: .\cookbook\templates\shopping_list.html:166 +#: .\cookbook\templates\shopping_list.html:189 +#: .\cookbook\templates\shopping_list.html:219 +#: .\cookbook\templates\shopping_list.html:243 +#: .\cookbook\templates\url_import.html:505 +#: .\cookbook\templates\url_import.html:537 msgid "Select" -msgstr "" +msgstr "选择" -#: .\cookbook\templates\shopping_list.html:216 +#: .\cookbook\templates\shopping_list.html:187 msgid "Select Food" -msgstr "" +msgstr "选择食物" -#: .\cookbook\templates\shopping_list.html:247 +#: .\cookbook\templates\shopping_list.html:218 msgid "Select Supermarket" -msgstr "" +msgstr "选择超市" -#: .\cookbook\templates\shopping_list.html:271 +#: .\cookbook\templates\shopping_list.html:242 msgid "Select User" -msgstr "" +msgstr "选择用户" -#: .\cookbook\templates\shopping_list.html:290 +#: .\cookbook\templates\shopping_list.html:258 msgid "Finished" -msgstr "" +msgstr "完成" -#: .\cookbook\templates\shopping_list.html:303 +#: .\cookbook\templates\shopping_list.html:267 msgid "You are offline, shopping list might not syncronize." -msgstr "" +msgstr "你已离线,购物清单可能无法同步。" -#: .\cookbook\templates\shopping_list.html:368 +#: .\cookbook\templates\shopping_list.html:318 msgid "Copy/Export" -msgstr "" - -#: .\cookbook\templates\shopping_list.html:372 -msgid "List Prefix" -msgstr "" +msgstr "复制或导出" #: .\cookbook\templates\socialaccount\connections.html:4 #: .\cookbook\templates\socialaccount\connections.html:15 msgid "Account Connections" -msgstr "" +msgstr "帐号连接" #: .\cookbook\templates\socialaccount\connections.html:18 msgid "" "You can sign in to your account using any of the following third party\n" " accounts:" -msgstr "" +msgstr "你可以使用以下任何第三方帐号登录你的帐号:" #: .\cookbook\templates\socialaccount\connections.html:52 msgid "" "You currently have no social network accounts connected to this account." -msgstr "" +msgstr "你目前没有与此帐号连接的社交网络帐号。" #: .\cookbook\templates\socialaccount\connections.html:55 msgid "Add a 3rd Party Account" -msgstr "" +msgstr "添加第三方帐号" #: .\cookbook\templates\socialaccount\signup.html:5 msgid "Signup" -msgstr "" +msgstr "注册" #: .\cookbook\templates\socialaccount\signup.html:10 #, python-format @@ -1932,98 +2098,98 @@ msgstr "" msgid "Sign in using" msgstr "" -#: .\cookbook\templates\space.html:23 +#: .\cookbook\templates\space.html:25 msgid "Space:" -msgstr "" +msgstr "空间:" -#: .\cookbook\templates\space.html:24 +#: .\cookbook\templates\space.html:26 msgid "Manage Subscription" -msgstr "" +msgstr "管理订阅" -#: .\cookbook\templates\space.html:32 .\cookbook\templates\stats.html:19 +#: .\cookbook\templates\space.html:34 .\cookbook\templates\stats.html:19 msgid "Number of objects" msgstr "" -#: .\cookbook\templates\space.html:45 .\cookbook\templates\stats.html:30 +#: .\cookbook\templates\space.html:54 .\cookbook\templates\stats.html:30 msgid "Recipe Imports" msgstr "" -#: .\cookbook\templates\space.html:53 .\cookbook\templates\stats.html:38 +#: .\cookbook\templates\space.html:62 .\cookbook\templates\stats.html:38 msgid "Objects stats" msgstr "" -#: .\cookbook\templates\space.html:56 .\cookbook\templates\stats.html:41 +#: .\cookbook\templates\space.html:65 .\cookbook\templates\stats.html:41 msgid "Recipes without Keywords" msgstr "" -#: .\cookbook\templates\space.html:60 .\cookbook\templates\stats.html:45 +#: .\cookbook\templates\space.html:73 .\cookbook\templates\stats.html:45 msgid "Internal Recipes" -msgstr "" +msgstr "内部菜谱" -#: .\cookbook\templates\space.html:73 +#: .\cookbook\templates\space.html:89 msgid "Members" -msgstr "" +msgstr "成员" -#: .\cookbook\templates\space.html:77 +#: .\cookbook\templates\space.html:95 msgid "Invite User" -msgstr "" +msgstr "邀请用户" -#: .\cookbook\templates\space.html:88 +#: .\cookbook\templates\space.html:107 msgid "User" -msgstr "" +msgstr "用户" -#: .\cookbook\templates\space.html:89 +#: .\cookbook\templates\space.html:108 msgid "Groups" -msgstr "" +msgstr "群组" -#: .\cookbook\templates\space.html:105 +#: .\cookbook\templates\space.html:119 msgid "admin" -msgstr "" +msgstr "管理" -#: .\cookbook\templates\space.html:106 +#: .\cookbook\templates\space.html:120 msgid "user" -msgstr "" +msgstr "用户" -#: .\cookbook\templates\space.html:107 +#: .\cookbook\templates\space.html:121 msgid "guest" -msgstr "" +msgstr "访客" -#: .\cookbook\templates\space.html:108 +#: .\cookbook\templates\space.html:122 msgid "remove" -msgstr "" +msgstr "删除" -#: .\cookbook\templates\space.html:112 +#: .\cookbook\templates\space.html:126 msgid "Update" -msgstr "" +msgstr "更新" -#: .\cookbook\templates\space.html:116 +#: .\cookbook\templates\space.html:130 msgid "You cannot edit yourself." -msgstr "" +msgstr "你不能编辑自己。" -#: .\cookbook\templates\space.html:123 +#: .\cookbook\templates\space.html:136 msgid "There are no members in your space yet!" -msgstr "" +msgstr "你的空间里还没有成员!" -#: .\cookbook\templates\space.html:130 .\cookbook\templates\system.html:21 -#: .\cookbook\views\lists.py:100 +#: .\cookbook\templates\space.html:143 .\cookbook\templates\system.html:21 +#: .\cookbook\views\lists.py:85 msgid "Invite Links" -msgstr "" +msgstr "邀请链接" #: .\cookbook\templates\stats.html:4 msgid "Stats" -msgstr "" +msgstr "统计数据" #: .\cookbook\templates\stats.html:10 msgid "Statistics" -msgstr "" +msgstr "统计数据" #: .\cookbook\templates\system.html:22 msgid "Show Links" -msgstr "" +msgstr "显示链接" #: .\cookbook\templates\system.html:32 msgid "System Information" -msgstr "" +msgstr "系统信息" #: .\cookbook\templates\system.html:34 msgid "" @@ -2035,20 +2201,27 @@ msgid "" "recipes/releases\">here.\n" " " msgstr "" +"\n" +" Django Recipes 是一个开源应用程序。\n" +" 你可以在 GitHub " +"中找到。\n" +" 更新日志在 这里。\n" +" " #: .\cookbook\templates\system.html:48 msgid "Media Serving" -msgstr "" +msgstr "媒体服务" #: .\cookbook\templates\system.html:49 .\cookbook\templates\system.html:64 #: .\cookbook\templates\system.html:80 msgid "Warning" -msgstr "" +msgstr "警告" #: .\cookbook\templates\system.html:49 .\cookbook\templates\system.html:64 #: .\cookbook\templates\system.html:80 .\cookbook\templates\system.html:95 msgid "Ok" -msgstr "" +msgstr "好的" #: .\cookbook\templates\system.html:51 msgid "" @@ -2059,15 +2232,19 @@ msgid "" " your installation.\n" " " msgstr "" +"不推荐 使用 gunicorn/python 提供媒体文件。\n" +" 请按照 这里 描述的步骤操作更新安装。\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 "一切都好!" #: .\cookbook\templates\system.html:62 msgid "Secret Key" -msgstr "" +msgstr "密钥" #: .\cookbook\templates\system.html:66 msgid "" @@ -2084,7 +2261,7 @@ msgstr "" #: .\cookbook\templates\system.html:78 msgid "Debug Mode" -msgstr "" +msgstr "调试模式" #: .\cookbook\templates\system.html:82 msgid "" @@ -2099,11 +2276,11 @@ msgstr "" #: .\cookbook\templates\system.html:93 msgid "Database" -msgstr "" +msgstr "数据库" #: .\cookbook\templates\system.html:95 msgid "Info" -msgstr "" +msgstr "信息" #: .\cookbook\templates\system.html:97 msgid "" @@ -2114,166 +2291,166 @@ msgid "" " " msgstr "" -#: .\cookbook\templates\url_import.html:6 +#: .\cookbook\templates\url_import.html:8 msgid "URL Import" -msgstr "" +msgstr "链接导入" -#: .\cookbook\templates\url_import.html:31 +#: .\cookbook\templates\url_import.html:33 msgid "Drag me to your bookmarks to import recipes from anywhere" -msgstr "" +msgstr "将我拖到书签以从任何地方导入食谱" -#: .\cookbook\templates\url_import.html:32 +#: .\cookbook\templates\url_import.html:34 msgid "Bookmark Me!" -msgstr "" +msgstr "给我加书签!" -#: .\cookbook\templates\url_import.html:36 +#: .\cookbook\templates\url_import.html:38 msgid "URL" -msgstr "" +msgstr "链接" -#: .\cookbook\templates\url_import.html:38 +#: .\cookbook\templates\url_import.html:40 msgid "App" -msgstr "" +msgstr "应用程序" -#: .\cookbook\templates\url_import.html:62 +#: .\cookbook\templates\url_import.html:64 msgid "Enter website URL" -msgstr "" +msgstr "输入网站链接" -#: .\cookbook\templates\url_import.html:101 +#: .\cookbook\templates\url_import.html:104 msgid "Select recipe files to import or drop them here..." -msgstr "" +msgstr "选择要导入的菜谱文件或将其放到此处……" -#: .\cookbook\templates\url_import.html:122 +#: .\cookbook\templates\url_import.html:125 msgid "Paste json or html source here to load recipe." -msgstr "" +msgstr "将 json 或 html 源代码粘贴到此处以加载菜谱。" -#: .\cookbook\templates\url_import.html:150 +#: .\cookbook\templates\url_import.html:153 msgid "Preview Recipe Data" -msgstr "" +msgstr "预览菜谱数据" -#: .\cookbook\templates\url_import.html:151 +#: .\cookbook\templates\url_import.html:154 msgid "Drag recipe attributes from the right into the appropriate box below." -msgstr "" - -#: .\cookbook\templates\url_import.html:160 -#: .\cookbook\templates\url_import.html:177 -#: .\cookbook\templates\url_import.html:194 -#: .\cookbook\templates\url_import.html:213 -#: .\cookbook\templates\url_import.html:231 -#: .\cookbook\templates\url_import.html:246 -#: .\cookbook\templates\url_import.html:261 -#: .\cookbook\templates\url_import.html:277 -#: .\cookbook\templates\url_import.html:304 -#: .\cookbook\templates\url_import.html:355 +msgstr "将菜谱属性从右侧拖动到下面相应的框中。" + +#: .\cookbook\templates\url_import.html:163 +#: .\cookbook\templates\url_import.html:180 +#: .\cookbook\templates\url_import.html:197 +#: .\cookbook\templates\url_import.html:216 +#: .\cookbook\templates\url_import.html:234 +#: .\cookbook\templates\url_import.html:249 +#: .\cookbook\templates\url_import.html:264 +#: .\cookbook\templates\url_import.html:280 +#: .\cookbook\templates\url_import.html:307 +#: .\cookbook\templates\url_import.html:358 msgid "Clear Contents" msgstr "清除内容" -#: .\cookbook\templates\url_import.html:162 +#: .\cookbook\templates\url_import.html:165 msgid "Text dragged here will be appended to the name." -msgstr "" +msgstr "拖动到此处的文本将附加到名称中。" -#: .\cookbook\templates\url_import.html:175 +#: .\cookbook\templates\url_import.html:178 msgid "Description" -msgstr "" +msgstr "描述" -#: .\cookbook\templates\url_import.html:179 +#: .\cookbook\templates\url_import.html:182 msgid "Text dragged here will be appended to the description." -msgstr "" +msgstr "拖动到此处的文本将附加到描述中。" -#: .\cookbook\templates\url_import.html:196 +#: .\cookbook\templates\url_import.html:199 msgid "Keywords dragged here will be appended to current list" -msgstr "" +msgstr "拖动到这里的关键字将被添加到当前列表" -#: .\cookbook\templates\url_import.html:211 +#: .\cookbook\templates\url_import.html:214 msgid "Image" -msgstr "影像" +msgstr "图片" -#: .\cookbook\templates\url_import.html:243 +#: .\cookbook\templates\url_import.html:246 msgid "Prep Time" msgstr "准备时间" -#: .\cookbook\templates\url_import.html:258 +#: .\cookbook\templates\url_import.html:261 msgid "Cook Time" msgstr "烹调时间" -#: .\cookbook\templates\url_import.html:279 +#: .\cookbook\templates\url_import.html:282 msgid "Ingredients dragged here will be appended to current list." -msgstr "" +msgstr "拖动到这里的材料将被添加到当前列表。" -#: .\cookbook\templates\url_import.html:301 -#: .\cookbook\templates\url_import.html:572 +#: .\cookbook\templates\url_import.html:304 +#: .\cookbook\templates\url_import.html:579 msgid "Instructions" -msgstr "" +msgstr "说明" -#: .\cookbook\templates\url_import.html:306 +#: .\cookbook\templates\url_import.html:309 msgid "" "Recipe instructions dragged here will be appended to current instructions." msgstr "" -#: .\cookbook\templates\url_import.html:329 +#: .\cookbook\templates\url_import.html:332 msgid "Discovered Attributes" msgstr "" -#: .\cookbook\templates\url_import.html:331 +#: .\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 "" -#: .\cookbook\templates\url_import.html:348 +#: .\cookbook\templates\url_import.html:351 msgid "Show Blank Field" msgstr "显示空白域" -#: .\cookbook\templates\url_import.html:353 +#: .\cookbook\templates\url_import.html:356 msgid "Blank Field" msgstr "空白域" -#: .\cookbook\templates\url_import.html:357 +#: .\cookbook\templates\url_import.html:360 msgid "Items dragged to Blank Field will be appended." msgstr "" -#: .\cookbook\templates\url_import.html:404 +#: .\cookbook\templates\url_import.html:407 msgid "Delete Text" msgstr "删除文本" -#: .\cookbook\templates\url_import.html:417 +#: .\cookbook\templates\url_import.html:420 msgid "Delete image" msgstr "删除影像" -#: .\cookbook\templates\url_import.html:433 +#: .\cookbook\templates\url_import.html:436 msgid "Recipe Name" msgstr "菜谱名称" -#: .\cookbook\templates\url_import.html:437 +#: .\cookbook\templates\url_import.html:440 msgid "Recipe Description" msgstr "菜谱描述" -#: .\cookbook\templates\url_import.html:499 -#: .\cookbook\templates\url_import.html:531 -#: .\cookbook\templates\url_import.html:587 +#: .\cookbook\templates\url_import.html:504 +#: .\cookbook\templates\url_import.html:536 +#: .\cookbook\templates\url_import.html:596 msgid "Select one" msgstr "选择一项" -#: .\cookbook\templates\url_import.html:547 +#: .\cookbook\templates\url_import.html:554 msgid "Note" -msgstr "" +msgstr "笔记" -#: .\cookbook\templates\url_import.html:588 +#: .\cookbook\templates\url_import.html:597 msgid "Add Keyword" -msgstr "" +msgstr "添加关键词" -#: .\cookbook\templates\url_import.html:601 +#: .\cookbook\templates\url_import.html:610 msgid "All Keywords" -msgstr "所有关键字" +msgstr "所有关键词" -#: .\cookbook\templates\url_import.html:604 +#: .\cookbook\templates\url_import.html:613 msgid "Import all keywords, not only the ones already existing." -msgstr "导入所有关键字,并不只是现有的。" +msgstr "导入所有关键词,并不只是现有的。" -#: .\cookbook\templates\url_import.html:631 +#: .\cookbook\templates\url_import.html:640 msgid "Information" -msgstr "" +msgstr "更多信息" -#: .\cookbook\templates\url_import.html:633 +#: .\cookbook\templates\url_import.html:642 msgid "" " Only websites containing ld+json or microdata information can currently\n" " be imported. Most big recipe pages " @@ -2284,141 +2461,229 @@ msgid "" " github issues." msgstr "" -#: .\cookbook\templates\url_import.html:641 +#: .\cookbook\templates\url_import.html:650 msgid "Google ld+json Info" msgstr "" -#: .\cookbook\templates\url_import.html:644 +#: .\cookbook\templates\url_import.html:653 msgid "GitHub Issues" -msgstr "GitHub问题" +msgstr "GitHub 问题" -#: .\cookbook\templates\url_import.html:646 +#: .\cookbook\templates\url_import.html:655 msgid "Recipe Markup Specification" -msgstr "" +msgstr "菜谱标记规范" -#: .\cookbook\views\api.py:83 .\cookbook\views\api.py:132 +#: .\cookbook\views\api.py:88 .\cookbook\views\api.py:170 msgid "Parameter updated_at incorrectly formatted" -msgstr "" +msgstr "参数 updated_at 格式不正确" -#: .\cookbook\views\api.py:152 +#: .\cookbook\views\api.py:190 .\cookbook\views\api.py:291 #, python-brace-format msgid "No {self.basename} with id {pk} exists" msgstr "" -#: .\cookbook\views\api.py:156 +#: .\cookbook\views\api.py:194 msgid "Cannot merge with the same object!" -msgstr "" +msgstr "无法与同一对象合并!" -#: .\cookbook\views\api.py:163 +#: .\cookbook\views\api.py:201 #, python-brace-format msgid "No {self.basename} with id {target} exists" msgstr "" -#: .\cookbook\views\api.py:168 +#: .\cookbook\views\api.py:206 msgid "Cannot merge with child object!" -msgstr "" +msgstr "无法与子对象合并!" -#: .\cookbook\views\api.py:201 +#: .\cookbook\views\api.py:239 #, python-brace-format msgid "{source.name} was merged successfully with {target.name}" -msgstr "" +msgstr "{source.name} 已成功与 {target.name} 合并" -#: .\cookbook\views\api.py:205 +#: .\cookbook\views\api.py:244 #, python-brace-format msgid "An error occurred attempting to merge {source.name} with {target.name}" -msgstr "" - -#: .\cookbook\views\api.py:249 -#, python-brace-format -msgid "No {self.basename} with id {child} exists" -msgstr "" +msgstr "视图合并 {source.name} 和 {target.name} 时出错" -#: .\cookbook\views\api.py:258 +#: .\cookbook\views\api.py:300 #, python-brace-format msgid "{child.name} was moved successfully to the root." -msgstr "" +msgstr "{child.name} 已成功移动到根目录。" -#: .\cookbook\views\api.py:261 .\cookbook\views\api.py:279 +#: .\cookbook\views\api.py:303 .\cookbook\views\api.py:321 msgid "An error occurred attempting to move " -msgstr "" +msgstr "尝试移动时出错 " -#: .\cookbook\views\api.py:264 +#: .\cookbook\views\api.py:306 msgid "Cannot move an object to itself!" -msgstr "" +msgstr "无法将对象移动到自身!" -#: .\cookbook\views\api.py:270 +#: .\cookbook\views\api.py:312 #, python-brace-format msgid "No {self.basename} with id {parent} exists" msgstr "" -#: .\cookbook\views\api.py:276 +#: .\cookbook\views\api.py:318 #, python-brace-format msgid "{child.name} was moved successfully to parent {parent.name}" +msgstr "{child.name} 成功移动到父节点 {parent.name}" + +#: .\cookbook\views\api.py:470 +#, python-brace-format +msgid "{obj.name} was removed from the shopping list." +msgstr "{obj.name} 已从购物清单中删除。" + +#: .\cookbook\views\api.py:475 .\cookbook\views\api.py:726 +#, python-brace-format +msgid "{obj.name} was added to the shopping list." +msgstr "{obj.name} 已添加到购物清单中。" + +#: .\cookbook\views\api.py:587 +msgid "ID of recipe a step is part of. For multiple repeat parameter." +msgstr "" + +#: .\cookbook\views\api.py:588 +msgid "Query string matched (fuzzy) against object name." +msgstr "" + +#: .\cookbook\views\api.py:631 +msgid "" +"Query string matched (fuzzy) against recipe name. In the future also " +"fulltext search." +msgstr "" + +#: .\cookbook\views\api.py:632 +msgid "ID of keyword a recipe should have. For multiple repeat parameter." +msgstr "" + +#: .\cookbook\views\api.py:633 +msgid "ID of food a recipe should have. For multiple repeat parameter." +msgstr "" + +#: .\cookbook\views\api.py:634 +msgid "ID of unit a recipe should have." +msgstr "" + +#: .\cookbook\views\api.py:635 +msgid "Rating a recipe should have. [0 - 5]" +msgstr "" + +#: .\cookbook\views\api.py:636 +msgid "ID of book a recipe should be in. For multiple repeat parameter." msgstr "" -#: .\cookbook\views\api.py:723 .\cookbook\views\data.py:42 +#: .\cookbook\views\api.py:637 +msgid "" +"If recipe should have all (AND=false) or any (OR=true) of the " +"provided keywords." +msgstr "" + +#: .\cookbook\views\api.py:638 +msgid "" +"If recipe should have all (AND=false) or any (OR=true) of the " +"provided foods." +msgstr "" + +#: .\cookbook\views\api.py:639 +msgid "" +"If recipe should be in all (AND=false) or any (OR=true) of the " +"provided books." +msgstr "" + +#: .\cookbook\views\api.py:640 +msgid "If only internal recipes should be returned. [true/false]" +msgstr "" + +#: .\cookbook\views\api.py:641 +msgid "Returns the results in randomized order. [true/false]" +msgstr "" + +#: .\cookbook\views\api.py:642 +msgid "Returns new results first in search results. [true/false]" +msgstr "" + +#: .\cookbook\views\api.py:768 +msgid "" +"Returns the shopping list entry with a primary key of id. Multiple values " +"allowed." +msgstr "" + +#: .\cookbook\views\api.py:771 +msgid "" +"Filter shopping list entries on checked. [true, false, both, recent]
- recent includes unchecked items and recently completed items." +msgstr "" + +#: .\cookbook\views\api.py:773 +msgid "Returns the shopping list entries sorted by supermarket category order." +msgstr "" + +#: .\cookbook\views\api.py:922 .\cookbook\views\data.py:42 #: .\cookbook\views\edit.py:129 .\cookbook\views\new.py:95 msgid "This feature is not yet available in the hosted version of tandoor!" msgstr "" -#: .\cookbook\views\api.py:745 +#: .\cookbook\views\api.py:944 msgid "Sync successful!" -msgstr "" +msgstr "同步成功!" -#: .\cookbook\views\api.py:750 +#: .\cookbook\views\api.py:949 msgid "Error synchronizing with Storage" -msgstr "" +msgstr "与存储同步时出错" -#: .\cookbook\views\api.py:828 +#: .\cookbook\views\api.py:1028 msgid "Nothing to do." -msgstr "" +msgstr "无事可做。" -#: .\cookbook\views\api.py:843 +#: .\cookbook\views\api.py:1043 msgid "The requested site provided malformed data and cannot be read." -msgstr "" +msgstr "请求的站点提供了格式错误的数据,无法读取。" -#: .\cookbook\views\api.py:850 +#: .\cookbook\views\api.py:1050 msgid "The requested page could not be found." -msgstr "" +msgstr "找不到请求的页面。" -#: .\cookbook\views\api.py:859 +#: .\cookbook\views\api.py:1068 msgid "" "The requested site does not provide any recognized data format to import the " "recipe from." -msgstr "" +msgstr "请求的站点未提供任何可识别的数据格式,无法从中导入菜谱。" -#: .\cookbook\views\api.py:873 +#: .\cookbook\views\api.py:1082 +msgid "Connection Refused." +msgstr "连接被拒绝。" + +#: .\cookbook\views\api.py:1091 msgid "No useable data could be found." -msgstr "" +msgstr "找不到可用的数据。" -#: .\cookbook\views\api.py:889 +#: .\cookbook\views\api.py:1107 msgid "I couldn't find anything to do." -msgstr "" +msgstr "无所事事。" #: .\cookbook\views\data.py:34 .\cookbook\views\data.py:129 -#: .\cookbook\views\edit.py:49 .\cookbook\views\import_export.py:73 +#: .\cookbook\views\edit.py:49 .\cookbook\views\import_export.py:80 #: .\cookbook\views\new.py:33 msgid "You have reached the maximum number of recipes for your space." -msgstr "" +msgstr "你已经达到了空间的菜谱的最大数量。" #: .\cookbook\views\data.py:38 .\cookbook\views\data.py:133 -#: .\cookbook\views\edit.py:53 .\cookbook\views\import_export.py:77 +#: .\cookbook\views\edit.py:53 .\cookbook\views\import_export.py:84 #: .\cookbook\views\new.py:37 msgid "You have more users than allowed in your space." -msgstr "" +msgstr "你的空间中的用户数超过了允许的数量。" #: .\cookbook\views\data.py:111 #, 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] "批量编辑完成。%(count)d 个菜谱已更新。" #: .\cookbook\views\delete.py:101 msgid "Monitor" msgstr "监测" -#: .\cookbook\views\delete.py:125 .\cookbook\views\lists.py:86 +#: .\cookbook\views\delete.py:125 .\cookbook\views\lists.py:71 #: .\cookbook\views\new.py:101 msgid "Storage Backend" msgstr "存储后端" @@ -2430,210 +2695,209 @@ msgstr "" #: .\cookbook\views\delete.py:158 msgid "Recipe Book" -msgstr "" +msgstr "菜谱书" #: .\cookbook\views\delete.py:170 msgid "Bookmarks" msgstr "书签" -#: .\cookbook\views\delete.py:192 .\cookbook\views\new.py:235 +#: .\cookbook\views\delete.py:192 .\cookbook\views\new.py:238 msgid "Invite Link" -msgstr "" +msgstr "邀请链接" #: .\cookbook\views\edit.py:125 msgid "You cannot edit this storage!" -msgstr "" +msgstr "你不能编辑此存储空间!" #: .\cookbook\views\edit.py:149 +#, fuzzy msgid "Storage saved!" msgstr "存储已存储!" #: .\cookbook\views\edit.py:155 msgid "There was an error updating this storage backend!" -msgstr "" +msgstr "更新此存储后端时出错!" #: .\cookbook\views\edit.py:248 msgid "Changes saved!" -msgstr "更改已保存!" +msgstr "更改已保存!" #: .\cookbook\views\edit.py:252 msgid "Error saving changes!" -msgstr "" +msgstr "保存更改时出错!" -#: .\cookbook\views\import_export.py:99 +#: .\cookbook\views\import_export.py:106 msgid "Importing is not implemented for this provider" -msgstr "" +msgstr "此提供程序未实现导入" -#: .\cookbook\views\import_export.py:121 +#: .\cookbook\views\import_export.py:127 +msgid "" +"The PDF Exporter is not enabled on this instance as it is still in an " +"experimental state." +msgstr "此实例上未启用 PDF 导出器,因为它仍处于实验状态。" + +#: .\cookbook\views\import_export.py:132 msgid "Exporting is not implemented for this provider" -msgstr "" +msgstr "此提供程序未实现导出" -#: .\cookbook\views\lists.py:26 +#: .\cookbook\views\lists.py:25 msgid "Import Log" -msgstr "" +msgstr "导入日志" -#: .\cookbook\views\lists.py:39 +#: .\cookbook\views\lists.py:38 msgid "Discovery" msgstr "探索" -#: .\cookbook\views\lists.py:69 +#: .\cookbook\views\lists.py:54 msgid "Shopping Lists" msgstr "购物清单" -#: .\cookbook\views\lists.py:129 -#, fuzzy -#| msgid "Food" -msgid "Foods" -msgstr "食物" - -#: .\cookbook\views\lists.py:163 -#, fuzzy -#| msgid "Supermarket" +#: .\cookbook\views\lists.py:148 msgid "Supermarkets" msgstr "超市" -#: .\cookbook\views\lists.py:179 -#, fuzzy -#| msgid "Shopping Lists" +#: .\cookbook\views\lists.py:164 msgid "Shopping Categories" -msgstr "购物清单" +msgstr "购物类别" + +#: .\cookbook\views\lists.py:217 +msgid "Steps" +msgstr "步骤" #: .\cookbook\views\lists.py:232 -#, fuzzy -#| msgid "Shopping Lists" msgid "New Shopping List" -msgstr "购物清单" +msgstr "新购物清单" #: .\cookbook\views\new.py:126 msgid "Imported new recipe!" -msgstr "" +msgstr "导入新菜谱!" #: .\cookbook\views\new.py:129 msgid "There was an error importing this recipe!" -msgstr "" +msgstr "导入此菜谱时出错!" -#: .\cookbook\views\new.py:209 +#: .\cookbook\views\new.py:212 msgid "Hello" msgstr "你好" -#: .\cookbook\views\new.py:209 +#: .\cookbook\views\new.py:212 msgid "You have been invited by " msgstr "" -#: .\cookbook\views\new.py:210 +#: .\cookbook\views\new.py:213 msgid " to join their Tandoor Recipes space " msgstr "" -#: .\cookbook\views\new.py:211 +#: .\cookbook\views\new.py:214 msgid "Click the following link to activate your account: " msgstr "" -#: .\cookbook\views\new.py:212 +#: .\cookbook\views\new.py:215 msgid "" "If the link does not work use the following code to manually join the space: " msgstr "" -#: .\cookbook\views\new.py:213 +#: .\cookbook\views\new.py:216 msgid "The invitation is valid until " msgstr "邀请有效期至 " -#: .\cookbook\views\new.py:214 +#: .\cookbook\views\new.py:217 msgid "" "Tandoor Recipes is an Open Source recipe manager. Check it out on GitHub " msgstr "" -#: .\cookbook\views\new.py:217 +#: .\cookbook\views\new.py:220 msgid "Tandoor Recipes Invite" msgstr "" -#: .\cookbook\views\new.py:224 +#: .\cookbook\views\new.py:227 msgid "Invite link successfully send to user." msgstr "" -#: .\cookbook\views\new.py:227 +#: .\cookbook\views\new.py:230 msgid "" "You have send to many emails, please share the link manually or wait a few " "hours." msgstr "" -#: .\cookbook\views\new.py:229 +#: .\cookbook\views\new.py:232 msgid "Email to user could not be send, please share link manually." msgstr "" -#: .\cookbook\views\views.py:127 +#: .\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 "" -#: .\cookbook\views\views.py:175 +#: .\cookbook\views\views.py:174 msgid "You do not have the required permissions to perform this action!" msgstr "" -#: .\cookbook\views\views.py:186 +#: .\cookbook\views\views.py:185 msgid "Comment saved!" -msgstr "评论已保存!" +msgstr "评论已保存!" -#: .\cookbook\views\views.py:277 +#: .\cookbook\views\views.py:276 msgid "This feature is not available in the demo version!" -msgstr "" +msgstr "此功能在演示版本中不可用!" -#: .\cookbook\views\views.py:340 +#: .\cookbook\views\views.py:335 msgid "You must select at least one field to search!" -msgstr "" +msgstr "你必须至少选择一个字段进行搜索!" -#: .\cookbook\views\views.py:345 +#: .\cookbook\views\views.py:340 msgid "" "To use this search method you must select at least one full text search " "field!" -msgstr "" +msgstr "要使用此搜索方法,至少选择一个全文搜索字段!" -#: .\cookbook\views\views.py:349 +#: .\cookbook\views\views.py:344 msgid "Fuzzy search is not compatible with this search method!" -msgstr "" +msgstr "模糊搜索与此搜索方法不兼容!" -#: .\cookbook\views\views.py:452 +#: .\cookbook\views\views.py:470 msgid "" "The setup page can only be used to create the first user! If you have " "forgotten your superuser credentials please consult the django documentation " "on how to reset passwords." -msgstr "" +msgstr "设置页面只能用于创建第一个用户!如果您忘记了超级用户凭据,请参阅 Django 文档,了解如何重置密码。" -#: .\cookbook\views\views.py:459 +#: .\cookbook\views\views.py:477 msgid "Passwords dont match!" -msgstr "密码不匹配!" +msgstr "密码不匹配!" -#: .\cookbook\views\views.py:475 +#: .\cookbook\views\views.py:493 msgid "User has been created, please login!" -msgstr "用户已创建,請登录!" +msgstr "用户已创建,请登录!" -#: .\cookbook\views\views.py:491 +#: .\cookbook\views\views.py:509 msgid "Malformed Invite Link supplied!" -msgstr "" +msgstr "提供了格式错误的邀请链接!" -#: .\cookbook\views\views.py:498 +#: .\cookbook\views\views.py:516 msgid "You are already member of a space and therefore cannot join this one." msgstr "你已是空间的成员,因此未能加入。" -#: .\cookbook\views\views.py:509 +#: .\cookbook\views\views.py:527 msgid "Successfully joined space." msgstr "成功加入空间。" -#: .\cookbook\views\views.py:515 +#: .\cookbook\views\views.py:533 msgid "Invite Link not valid or already used!" -msgstr "邀请连结无效或已使用!" +msgstr "邀请链接无效或已使用!" -#: .\cookbook\views\views.py:579 +#: .\cookbook\views\views.py:614 msgid "" "Reporting share links is not enabled for this instance. Please notify the " "page administrator to report problems." -msgstr "" +msgstr "未为此实例启用报告共享链接。请通知页面管理员报告问题。" -#: .\cookbook\views\views.py:585 +#: .\cookbook\views\views.py:620 msgid "" "Recipe sharing link has been disabled! For additional information please " "contact the page administrator." -msgstr "" +msgstr "菜谱共享链接已被禁用!有关更多信息,请与页面管理员联系。" #~ msgid "New Unit" #~ msgstr "新单位" @@ -2658,9 +2922,6 @@ msgstr "" #~ msgid "Old Food" #~ msgstr "旧的食品" -#~ msgid "Food that should be replaced." -#~ msgstr "食品应被取代." - #~ msgid "Utensils" #~ msgstr "厨具" diff --git a/cookbook/management/commands/rebuildindex.py b/cookbook/management/commands/rebuildindex.py index 425727df2f..6ca4038cdf 100644 --- a/cookbook/management/commands/rebuildindex.py +++ b/cookbook/management/commands/rebuildindex.py @@ -15,7 +15,7 @@ class Command(BaseCommand): def handle(self, *args, **options): if settings.DATABASES['default']['ENGINE'] not in ['django.db.backends.postgresql_psycopg2', 'django.db.backends.postgresql']: - self.stdout.write(self.style.WARNING(_('Only Postgress databases use full text search, no index to rebuild'))) + self.stdout.write(self.style.WARNING(_('Only Postgresql databases use full text search, no index to rebuild'))) try: language = DICTIONARY.get(translation.get_language(), 'simple') diff --git a/cookbook/migrations/0143_build_full_text_index.py b/cookbook/migrations/0143_build_full_text_index.py index ca58fb0e19..927eaa94c6 100644 --- a/cookbook/migrations/0143_build_full_text_index.py +++ b/cookbook/migrations/0143_build_full_text_index.py @@ -2,13 +2,15 @@ import annoying.fields from django.conf import settings from django.contrib.postgres.indexes import GinIndex -from django.contrib.postgres.search import SearchVectorField, SearchVector +from django.contrib.postgres.search import SearchVector, SearchVectorField from django.db import migrations, models from django.db.models import deletion -from django_scopes import scopes_disabled from django.utils import translation +from django_scopes import scopes_disabled + from cookbook.managers import DICTIONARY -from cookbook.models import Recipe, Step, Index, PermissionModelMixin, nameSearchField, allSearchFields +from cookbook.models import (Index, PermissionModelMixin, Recipe, Step, allSearchFields, + nameSearchField) def set_default_search_vector(apps, schema_editor): @@ -16,8 +18,6 @@ def set_default_search_vector(apps, schema_editor): return language = DICTIONARY.get(translation.get_language(), 'simple') with scopes_disabled(): - # TODO this approach doesn't work terribly well if multiple languages are in use - # I'm also uncertain about forcing unaccent here Recipe.objects.all().update( name_search_vector=SearchVector('name__unaccent', weight='A', config=language), desc_search_vector=SearchVector('description__unaccent', weight='B', config=language) diff --git a/cookbook/migrations/0159_add_shoppinglistentry_fields.py b/cookbook/migrations/0159_add_shoppinglistentry_fields.py new file mode 100644 index 0000000000..32b0c9ce58 --- /dev/null +++ b/cookbook/migrations/0159_add_shoppinglistentry_fields.py @@ -0,0 +1,144 @@ +# Generated by Django 3.2.7 on 2021-10-01 20:52 + +import django.db.models.deletion +import django.utils.timezone +from django.conf import settings +from django.db import migrations, models +from django_scopes import scopes_disabled + +from cookbook.models import PermissionModelMixin, ShoppingListEntry + + +def copy_values_to_sle(apps, schema_editor): + with scopes_disabled(): + entries = ShoppingListEntry.objects.all() + for entry in entries: + if entry.shoppinglist_set.first(): + entry.created_by = entry.shoppinglist_set.first().created_by + entry.space = entry.shoppinglist_set.first().space + if entries: + ShoppingListEntry.objects.bulk_update(entries, ["created_by", "space", ]) + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('cookbook', '0158_userpreference_use_kj'), + ] + + operations = [ + migrations.AddField( + model_name='shoppinglistentry', + name='completed_at', + field=models.DateTimeField(blank=True, null=True), + ), + migrations.AddField( + model_name='shoppinglistentry', + name='created_at', + field=models.DateTimeField(auto_now_add=True, default=django.utils.timezone.now), + preserve_default=False, + ), + migrations.AddField( + model_name='shoppinglistentry', + name='created_by', + field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='auth.user'), + preserve_default=False, + ), + migrations.AddField( + model_name='userpreference', + name='shopping_share', + field=models.ManyToManyField(blank=True, related_name='shopping_share', to=settings.AUTH_USER_MODEL), + ), + migrations.AddField( + model_name='shoppinglistentry', + name='space', + field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='cookbook.space'), + preserve_default=False, + ), + migrations.AddField( + model_name='shoppinglistrecipe', + name='mealplan', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='cookbook.mealplan'), + ), + migrations.AddField( + model_name='shoppinglistrecipe', + name='name', + field=models.CharField(blank=True, default='', max_length=32), + ), + migrations.AddField( + model_name='shoppinglistentry', + name='ingredient', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='cookbook.ingredient'), + ), + migrations.AlterField( + model_name='shoppinglistentry', + name='unit', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='cookbook.unit'), + ), + migrations.AddField( + model_name='userpreference', + name='mealplan_autoadd_shopping', + field=models.BooleanField(default=False), + ), + migrations.AddField( + model_name='userpreference', + name='mealplan_autoexclude_onhand', + field=models.BooleanField(default=True), + ), + migrations.AlterField( + model_name='shoppinglistentry', + name='list_recipe', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='entries', to='cookbook.shoppinglistrecipe'), + ), + migrations.CreateModel( + name='FoodInheritField', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('field', models.CharField(max_length=32, unique=True)), + ('name', models.CharField(max_length=64, unique=True)), + ], + bases=(models.Model, PermissionModelMixin), + ), + migrations.AddField( + model_name='userpreference', + name='mealplan_autoinclude_related', + field=models.BooleanField(default=True), + ), + migrations.AddField( + model_name='food', + name='inherit_fields', + field=models.ManyToManyField(blank=True, to='cookbook.FoodInheritField'), + ), + migrations.AddField( + model_name='space', + name='food_inherit', + field=models.ManyToManyField(blank=True, to='cookbook.FoodInheritField'), + ), + migrations.AddField( + model_name='shoppinglistentry', + name='delay_until', + field=models.DateTimeField(blank=True, null=True), + ), + migrations.AddField( + model_name='userpreference', + name='default_delay', + field=models.DecimalField(decimal_places=4, default=4, max_digits=8), + ), + migrations.AddField( + model_name='userpreference', + name='filter_to_supermarket', + field=models.BooleanField(default=False), + ), + migrations.AddField( + model_name='userpreference', + name='shopping_recent_days', + field=models.PositiveIntegerField(default=7), + ), + migrations.RenameField( + model_name='food', + old_name='ignore_shopping', + new_name='food_onhand', + ), + migrations.RunPython(copy_values_to_sle), + ] diff --git a/cookbook/migrations/0160_delete_shoppinglist_orphans.py b/cookbook/migrations/0160_delete_shoppinglist_orphans.py new file mode 100644 index 0000000000..26e0865648 --- /dev/null +++ b/cookbook/migrations/0160_delete_shoppinglist_orphans.py @@ -0,0 +1,50 @@ +# Generated by Django 3.2.7 on 2021-10-01 22:34 + +import datetime +from datetime import timedelta + +import django.db.models.deletion +from django.conf import settings +from django.db import migrations, models +from django.utils import timezone +from django.utils.timezone import utc +from django_scopes import scopes_disabled + +from cookbook.models import FoodInheritField, ShoppingListEntry + + +def delete_orphaned_sle(apps, schema_editor): + with scopes_disabled(): + # shopping list entry is orphaned - delete it + ShoppingListEntry.objects.filter(shoppinglist=None).delete() + + +def create_inheritfields(apps, schema_editor): + FoodInheritField.objects.create(name='Supermarket Category', field='supermarket_category') + FoodInheritField.objects.create(name='On Hand', field='food_onhand') + FoodInheritField.objects.create(name='Diet', field='diet') + FoodInheritField.objects.create(name='Substitute', field='substitute') + FoodInheritField.objects.create(name='Substitute Children', field='substitute_children') + FoodInheritField.objects.create(name='Substitute Siblings', field='substitute_siblings') + + +def set_completed_at(apps, schema_editor): + today_start = timezone.now().replace(hour=0, minute=0, second=0) + # arbitrary - keeping all of the closed shopping list items out of the 'recent' view + month_ago = today_start - timedelta(days=30) + with scopes_disabled(): + ShoppingListEntry.objects.filter(checked=True).update(completed_at=month_ago) + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('cookbook', '0159_add_shoppinglistentry_fields'), + ] + + operations = [ + migrations.RunPython(delete_orphaned_sle), + migrations.RunPython(create_inheritfields), + migrations.RunPython(set_completed_at), + ] diff --git a/cookbook/migrations/0161_alter_shoppinglistentry_food.py b/cookbook/migrations/0161_alter_shoppinglistentry_food.py new file mode 100644 index 0000000000..ab56535450 --- /dev/null +++ b/cookbook/migrations/0161_alter_shoppinglistentry_food.py @@ -0,0 +1,19 @@ +# Generated by Django 3.2.8 on 2021-11-03 23:19 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('cookbook', '0160_delete_shoppinglist_orphans'), + ] + + operations = [ + migrations.AlterField( + model_name='shoppinglistentry', + name='food', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='shopping_entries', to='cookbook.food'), + ), + ] diff --git a/cookbook/migrations/0162_userpreference_csv_delim.py b/cookbook/migrations/0162_userpreference_csv_delim.py new file mode 100644 index 0000000000..b7e4e548ba --- /dev/null +++ b/cookbook/migrations/0162_userpreference_csv_delim.py @@ -0,0 +1,23 @@ +# Generated by Django 3.2.9 on 2021-11-30 22:00 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('cookbook', '0161_alter_shoppinglistentry_food'), + ] + + operations = [ + migrations.AddField( + model_name='userpreference', + name='csv_delim', + field=models.CharField(default=',', max_length=2), + ), + migrations.AddField( + model_name='userpreference', + name='csv_prefix', + field=models.CharField(blank=True, max_length=10), + ), + ] diff --git a/cookbook/migrations/0163_auto_20220105_0758.py b/cookbook/migrations/0163_auto_20220105_0758.py new file mode 100644 index 0000000000..b7d67cd187 --- /dev/null +++ b/cookbook/migrations/0163_auto_20220105_0758.py @@ -0,0 +1,41 @@ +# Generated by Django 3.2.10 on 2022-01-05 13:58 + +from django.conf import settings +from django.db import migrations, models + +from cookbook.models import FoodInheritField + + +def rename_inherit_field(apps, schema_editor): + x = FoodInheritField.objects.filter(name='On Hand', field='food_onhand').first() + if x: + x.name = "Ignore Shopping" + x.field = "ignore_shopping" + x.save() + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('cookbook', '0162_userpreference_csv_delim'), + ] + + operations = [ + migrations.AddField( + model_name='food', + name='onhand_users', + field=models.ManyToManyField(blank=True, to=settings.AUTH_USER_MODEL), + ), + migrations.AddField( + model_name='userpreference', + name='shopping_add_onhand', + field=models.BooleanField(default=True), + ), + migrations.RenameField( + model_name='food', + old_name='food_onhand', + new_name='ignore_shopping', + ), + migrations.RunPython(rename_inherit_field), + ] diff --git a/cookbook/migrations/0164_space_show_facet_count.py b/cookbook/migrations/0164_space_show_facet_count.py new file mode 100644 index 0000000000..fbab0961b3 --- /dev/null +++ b/cookbook/migrations/0164_space_show_facet_count.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.11 on 2022-01-17 22:23 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('cookbook', '0163_auto_20220105_0758'), + ] + + operations = [ + migrations.AddField( + model_name='space', + name='show_facet_count', + field=models.BooleanField(default=False), + ), + ] diff --git a/cookbook/migrations/0165_remove_step_type.py b/cookbook/migrations/0165_remove_step_type.py new file mode 100644 index 0000000000..3eca515fc4 --- /dev/null +++ b/cookbook/migrations/0165_remove_step_type.py @@ -0,0 +1,17 @@ +# Generated by Django 3.2.11 on 2022-01-18 19:19 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('cookbook', '0164_space_show_facet_count'), + ] + + operations = [ + migrations.RemoveField( + model_name='step', + name='type', + ), + ] diff --git a/cookbook/migrations/0166_alter_userpreference_shopping_add_onhand.py b/cookbook/migrations/0166_alter_userpreference_shopping_add_onhand.py new file mode 100644 index 0000000000..2ae2352c8e --- /dev/null +++ b/cookbook/migrations/0166_alter_userpreference_shopping_add_onhand.py @@ -0,0 +1,26 @@ +# Generated by Django 3.2.11 on 2022-01-20 14:39 + +from django.db import migrations, models +from django_scopes import scopes_disabled + + +def add_default_trigram(apps, schema_editor): + with scopes_disabled(): + UserPreference = apps.get_model('cookbook', 'UserPreference') + + UserPreference.objects.all().update(shopping_add_onhand=False) + + +class Migration(migrations.Migration): + dependencies = [ + ('cookbook', '0165_remove_step_type'), + ] + + operations = [ + migrations.AlterField( + model_name='userpreference', + name='shopping_add_onhand', + field=models.BooleanField(default=False), + ), + migrations.RunPython(add_default_trigram), + ] diff --git a/cookbook/migrations/0167_userpreference_left_handed.py b/cookbook/migrations/0167_userpreference_left_handed.py new file mode 100644 index 0000000000..23fb0f4af9 --- /dev/null +++ b/cookbook/migrations/0167_userpreference_left_handed.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.11 on 2022-01-20 22:31 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('cookbook', '0166_alter_userpreference_shopping_add_onhand'), + ] + + operations = [ + migrations.AddField( + model_name='userpreference', + name='left_handed', + field=models.BooleanField(default=False), + ), + ] diff --git a/cookbook/models.py b/cookbook/models.py index aed927bde7..fef3ab8386 100644 --- a/cookbook/models.py +++ b/cookbook/models.py @@ -35,7 +35,20 @@ def get_user_name(self): return self.username +def get_shopping_share(self): + # get list of users that shared shopping list with user. Django ORM forbids this type of query, so raw is required + return User.objects.raw(' '.join([ + 'SELECT auth_user.id FROM auth_user', + 'INNER JOIN cookbook_userpreference', + 'ON (auth_user.id = cookbook_userpreference.user_id)', + 'INNER JOIN cookbook_userpreference_shopping_share', + 'ON (cookbook_userpreference.user_id = cookbook_userpreference_shopping_share.userpreference_id)', + 'WHERE cookbook_userpreference_shopping_share.user_id ={}'.format(self.id) + ])) + + auth.models.User.add_to_class('get_user_name', get_user_name) +auth.models.User.add_to_class('get_shopping_share', get_shopping_share) def get_model_name(model): @@ -54,6 +67,9 @@ def get_or_create(self, *args, **kwargs): except self.model.DoesNotExist: with scopes_disabled(): try: + defaults = kwargs.pop('defaults', None) + if defaults: + kwargs = {**kwargs, **defaults} # ManyToMany fields can't be set this way, so pop them out to save for later fields = [field.name for field in self.model._meta.get_fields() if issubclass(type(field), ManyToManyField)] many_to_many = {field: kwargs.pop(field) for field in list(kwargs) if field in fields} @@ -61,7 +77,10 @@ def get_or_create(self, *args, **kwargs): for field in many_to_many: field_model = getattr(obj, field).model for related_obj in many_to_many[field]: - getattr(obj, field).add(field_model.objects.get(**dict(related_obj))) + if isinstance(related_obj, User): + getattr(obj, field).add(field_model.objects.get(id=related_obj.id)) + else: + getattr(obj, field).add(field_model.objects.get(**dict(related_obj))) return obj, True except IntegrityError as e: if 'Key (path)' in e.args[0]: @@ -78,6 +97,13 @@ def __str__(self): else: return f"{self.name}" + # MP_Tree move uses raw SQL to execute move, override behavior to force a save triggering post_save signal + def move(self, *args, **kwargs): + super().move(*args, **kwargs) + # treebeard bypasses ORM, need to retrieve the object again to avoid writing previous state back to disk + obj = self.__class__.objects.get(id=self.id) + obj.save() + @property def parent(self): parent = self.get_parent() @@ -124,6 +150,48 @@ def add_root(self, **kwargs): with scopes_disabled(): return super().add_root(**kwargs) + # i'm 99% sure there is a more idiomatic way to do this subclassing MP_NodeQuerySet + @staticmethod + def include_descendants(queryset=None, filter=None): + """ + :param queryset: Model Queryset to add descendants + :param filter: Filter (exclude) the descendants nodes with the provided Q filter + """ + descendants = Q() + # TODO filter the queryset nodes to exclude descendants of objects in the queryset + nodes = queryset.values('path', 'depth') + for node in nodes: + descendants |= Q(path__startswith=node['path'], depth__gt=node['depth']) + + return queryset.model.objects.filter(Q(id__in=queryset.values_list('id')) | descendants) + + def exclude_descendants(queryset=None, filter=None): + """ + :param queryset: Model Queryset to add descendants + :param filter: Filter (include) the descendants nodes with the provided Q filter + """ + descendants = Q() + # TODO filter the queryset nodes to exclude descendants of objects in the queryset + nodes = queryset.values('path', 'depth') + for node in nodes: + descendants |= Q(path__startswith=node['path'], depth__gt=node['depth']) + + return queryset.model.objects.filter(id__in=queryset.values_list('id')).exclude(descendants) + + def include_ancestors(queryset=None): + """ + :param queryset: Model Queryset to add ancestors + :param filter: Filter (include) the ancestors nodes with the provided Q filter + """ + + queryset = queryset.annotate(root=Substr('path', 1, queryset.model.steplen)) + nodes = list(set(queryset.values_list('root', 'depth'))) + + ancestors = Q() + for node in nodes: + ancestors |= Q(path__startswith=node[0], depth__lt=node[1]) + return queryset.model.objects.filter(Q(id__in=queryset.values_list('id')) | ancestors) + class Meta: abstract = True @@ -157,6 +225,18 @@ def get_space(self): raise NotImplementedError('get space for method not implemented and standard fields not available') +class FoodInheritField(models.Model, PermissionModelMixin): + field = models.CharField(max_length=32, unique=True) + name = models.CharField(max_length=64, unique=True) + + def __str__(self): + return _(self.name) + + @staticmethod + def get_name(self): + return _(self.name) + + class Space(ExportModelOperationsMixin('space'), models.Model): name = models.CharField(max_length=128, default='Default') created_by = models.ForeignKey(User, on_delete=models.PROTECT, null=True) @@ -167,6 +247,8 @@ class Space(ExportModelOperationsMixin('space'), models.Model): max_users = models.IntegerField(default=0) allow_sharing = models.BooleanField(default=True) demo = models.BooleanField(default=False) + food_inherit = models.ManyToManyField(FoodInheritField, blank=True) + show_facet_count = models.BooleanField(default=False) def __str__(self): return self.name @@ -245,10 +327,23 @@ class UserPreference(models.Model, PermissionModelMixin): plan_share = models.ManyToManyField( User, blank=True, related_name='plan_share_default' ) + shopping_share = models.ManyToManyField( + User, blank=True, related_name='shopping_share' + ) ingredient_decimals = models.IntegerField(default=2) comments = models.BooleanField(default=COMMENT_PREF_DEFAULT) shopping_auto_sync = models.IntegerField(default=5) sticky_navbar = models.BooleanField(default=STICKY_NAV_PREF_DEFAULT) + mealplan_autoadd_shopping = models.BooleanField(default=False) + mealplan_autoexclude_onhand = models.BooleanField(default=True) + mealplan_autoinclude_related = models.BooleanField(default=True) + shopping_add_onhand = models.BooleanField(default=False) + filter_to_supermarket = models.BooleanField(default=False) + left_handed = models.BooleanField(default=False) + default_delay = models.DecimalField(default=4, max_digits=8, decimal_places=4) + shopping_recent_days = models.PositiveIntegerField(default=7) + csv_delim = models.CharField(max_length=2, default=",") + csv_prefix = models.CharField(max_length=10, blank=True,) created_at = models.DateTimeField(auto_now_add=True) space = models.ForeignKey(Space, on_delete=models.CASCADE, null=True) @@ -363,8 +458,8 @@ class Keyword(ExportModelOperationsMixin('keyword'), TreeModel, PermissionModelM name = models.CharField(max_length=64) icon = models.CharField(max_length=16, blank=True, null=True) description = models.TextField(default="", blank=True) - created_at = models.DateTimeField(auto_now_add=True) - updated_at = models.DateTimeField(auto_now=True) + created_at = models.DateTimeField(auto_now_add=True) # TODO deprecate + updated_at = models.DateTimeField(auto_now=True) # TODO deprecate space = models.ForeignKey(Space, on_delete=models.CASCADE) objects = ScopedManager(space='space', _manager_class=TreeManager) @@ -393,13 +488,19 @@ class Meta: class Food(ExportModelOperationsMixin('food'), TreeModel, PermissionModelMixin): + # exclude fields not implemented yet + inheritable_fields = FoodInheritField.objects.exclude(field__in=['diet', 'substitute', 'substitute_children', 'substitute_siblings']) + + # WARNING: Food inheritance relies on post_save signals, avoid using UPDATE to update Food objects unless you intend to bypass those signals if SORT_TREE_BY_NAME: node_order_by = ['name'] name = models.CharField(max_length=128, validators=[MinLengthValidator(1)]) recipe = models.ForeignKey('Recipe', null=True, blank=True, on_delete=models.SET_NULL) - supermarket_category = models.ForeignKey(SupermarketCategory, null=True, blank=True, on_delete=models.SET_NULL) - ignore_shopping = models.BooleanField(default=False) + supermarket_category = models.ForeignKey(SupermarketCategory, null=True, blank=True, on_delete=models.SET_NULL) # inherited field + ignore_shopping = models.BooleanField(default=False) # inherited field + onhand_users = models.ManyToManyField(User, blank=True) description = models.TextField(default='', blank=True) + inherit_fields = models.ManyToManyField(FoodInheritField, blank=True) space = models.ForeignKey(Space, on_delete=models.CASCADE) objects = ScopedManager(space='space', _manager_class=TreeManager) @@ -413,6 +514,35 @@ def delete(self): else: return super().delete() + @staticmethod + def reset_inheritance(space=None): + # resets inherited fields to the space defaults and updates all inherited fields to root object values + inherit = space.food_inherit.all() + + # remove all inherited fields from food + Through = Food.objects.filter(space=space).first().inherit_fields.through + Through.objects.all().delete() + # food is going to inherit attributes + if space.food_inherit.all().count() > 0: + # ManyToMany cannot be updated through an UPDATE operation + for i in inherit: + Through.objects.bulk_create([ + Through(food_id=x, foodinheritfield_id=i.id) + for x in Food.objects.filter(space=space).values_list('id', flat=True) + ]) + + inherit = inherit.values_list('field', flat=True) + if 'ignore_shopping' in inherit: + # get food at root that have children that need updated + Food.include_descendants(queryset=Food.objects.filter(depth=1, numchild__gt=0, space=space, ignore_shopping=True)).update(ignore_shopping=True) + Food.include_descendants(queryset=Food.objects.filter(depth=1, numchild__gt=0, space=space, ignore_shopping=False)).update(ignore_shopping=False) + if 'supermarket_category' in inherit: + # when supermarket_category is null or blank assuming it is not set and not intended to be blank for all descedants + # find top node that has category set + category_roots = Food.exclude_descendants(queryset=Food.objects.filter(supermarket_category__isnull=False, numchild__gt=0, space=space)) + for root in category_roots: + root.get_descendants().update(supermarket_category=root.supermarket_category) + class Meta: constraints = [ models.UniqueConstraint(fields=['space', 'name'], name='f_unique_name_per_space') @@ -447,17 +577,7 @@ class Meta: class Step(ExportModelOperationsMixin('step'), models.Model, PermissionModelMixin): - TEXT = 'TEXT' - TIME = 'TIME' - FILE = 'FILE' - RECIPE = 'RECIPE' - name = models.CharField(max_length=128, default='', blank=True) - type = models.CharField( - choices=((TEXT, _('Text')), (TIME, _('Time')), (FILE, _('File')), (RECIPE, _('Recipe')),), - default=TEXT, - max_length=16 - ) instruction = models.TextField(blank=True) ingredients = models.ManyToManyField(Ingredient, blank=True) time = models.IntegerField(default=0, blank=True) @@ -489,9 +609,7 @@ class NutritionInformation(models.Model, PermissionModelMixin): ) proteins = models.DecimalField(default=0, decimal_places=16, max_digits=32) calories = models.DecimalField(default=0, decimal_places=16, max_digits=32) - source = models.CharField( - max_length=512, default="", null=True, blank=True - ) + source = models.CharField( max_length=512, default="", null=True, blank=True) space = models.ForeignKey(Space, on_delete=models.CASCADE) objects = ScopedManager(space='space') @@ -500,6 +618,15 @@ def __str__(self): return f'Nutrition {self.pk}' +# class NutritionType(models.Model, PermissionModelMixin): +# name = models.CharField(max_length=128) +# icon = models.CharField(max_length=16, blank=True, null=True) +# description = models.CharField(max_length=512, blank=True, null=True) +# +# space = models.ForeignKey(Space, on_delete=models.CASCADE) +# objects = ScopedManager(space='space') + + class Recipe(ExportModelOperationsMixin('recipe'), models.Model, PermissionModelMixin): name = models.CharField(max_length=128) description = models.CharField(max_length=512, blank=True, null=True) @@ -534,6 +661,21 @@ class Recipe(ExportModelOperationsMixin('recipe'), models.Model, PermissionModel def __str__(self): return self.name + def get_related_recipes(self, levels=1): + # recipes for step recipe + step_recipes = Q(id__in=self.steps.exclude(step_recipe=None).values_list('step_recipe')) + # recipes for foods + food_recipes = Q(id__in=Food.objects.filter(ingredient__step__recipe=self).exclude(recipe=None).values_list('recipe')) + related_recipes = Recipe.objects.filter(step_recipes | food_recipes) + if levels == 1: + return related_recipes + + # this can loop over multiple levels if you update the value of related_recipes at each step (maybe an array?) + # for now keeping it at 2 levels max, should be sufficient in 99.9% of scenarios + sub_step_recipes = Q(id__in=Step.objects.filter(recipe__in=related_recipes.values_list('steps')).exclude(step_recipe=None).values_list('step_recipe')) + sub_food_recipes = Q(id__in=Food.objects.filter(ingredient__step__recipe__in=related_recipes).exclude(recipe=None).values_list('recipe')) + return Recipe.objects.filter(Q(id__in=related_recipes.values_list('id')) | sub_step_recipes | sub_food_recipes) + class Meta(): indexes = ( GinIndex(fields=["name_search_vector"]), @@ -660,8 +802,10 @@ def __str__(self): class ShoppingListRecipe(ExportModelOperationsMixin('shopping_list_recipe'), models.Model, PermissionModelMixin): - recipe = models.ForeignKey(Recipe, on_delete=models.CASCADE, null=True, blank=True) + name = models.CharField(max_length=32, blank=True, default='') + recipe = models.ForeignKey(Recipe, on_delete=models.CASCADE, null=True, blank=True) # TODO make required after old shoppinglist deprecated servings = models.DecimalField(default=1, max_digits=8, decimal_places=4) + mealplan = models.ForeignKey(MealPlan, on_delete=models.CASCADE, null=True, blank=True) objects = ScopedManager(space='recipe__space') @@ -677,20 +821,26 @@ def __str__(self): def get_owner(self): try: - return self.shoppinglist_set.first().created_by + return getattr(self.entries.first(), 'created_by', None) or getattr(self.shoppinglist_set.first(), 'created_by', None) except AttributeError: return None class ShoppingListEntry(ExportModelOperationsMixin('shopping_list_entry'), models.Model, PermissionModelMixin): - list_recipe = models.ForeignKey(ShoppingListRecipe, on_delete=models.CASCADE, null=True, blank=True) - food = models.ForeignKey(Food, on_delete=models.CASCADE) - unit = models.ForeignKey(Unit, on_delete=models.CASCADE, null=True, blank=True) + list_recipe = models.ForeignKey(ShoppingListRecipe, on_delete=models.CASCADE, null=True, blank=True, related_name='entries') + food = models.ForeignKey(Food, on_delete=models.CASCADE, related_name='shopping_entries') + unit = models.ForeignKey(Unit, on_delete=models.SET_NULL, null=True, blank=True) + ingredient = models.ForeignKey(Ingredient, on_delete=models.CASCADE, null=True, blank=True) amount = models.DecimalField(default=0, decimal_places=16, max_digits=32) order = models.IntegerField(default=0) checked = models.BooleanField(default=False) + created_by = models.ForeignKey(User, on_delete=models.CASCADE) + created_at = models.DateTimeField(auto_now_add=True) + completed_at = models.DateTimeField(null=True, blank=True) + delay_until = models.DateTimeField(null=True, blank=True) - objects = ScopedManager(space='shoppinglist__space') + space = models.ForeignKey(Space, on_delete=models.CASCADE) + objects = ScopedManager(space='space') @staticmethod def get_space_key(): @@ -702,12 +852,14 @@ def get_space(self): def __str__(self): return f'Shopping list entry {self.id}' + # TODO deprecate def get_shared(self): return self.shoppinglist_set.first().shared.all() + # TODO deprecate def get_owner(self): try: - return self.shoppinglist_set.first().created_by + return self.created_by or self.shoppinglist_set.first().created_by except AttributeError: return None diff --git a/cookbook/provider/nextcloud.py b/cookbook/provider/nextcloud.py index d67c02446a..b1d3191939 100644 --- a/cookbook/provider/nextcloud.py +++ b/cookbook/provider/nextcloud.py @@ -29,7 +29,11 @@ def import_all(monitor): client = Nextcloud.get_client(monitor.storage) files = client.list(monitor.path) - files.pop(0) # remove first element because its the folder itself + + try: + files.pop(0) # remove first element because its the folder itself + except IndexError: + pass # folder is empty, no recipes will be imported import_count = 0 for file in files: diff --git a/cookbook/serializer.py b/cookbook/serializer.py index 20c6fec21b..6fa745a297 100644 --- a/cookbook/serializer.py +++ b/cookbook/serializer.py @@ -10,21 +10,30 @@ from drf_writable_nested import UniqueFieldsMixin, WritableNestedModelSerializer from rest_framework import serializers from rest_framework.exceptions import NotFound, ValidationError - -from cookbook.models import (Automation, BookmarkletImport, Comment, CookLog, Food, ImportLog, - Ingredient, Keyword, MealPlan, MealType, NutritionInformation, Recipe, - RecipeBook, RecipeBookEntry, RecipeImport, ShareLink, ShoppingList, - ShoppingListEntry, ShoppingListRecipe, Step, Storage, Supermarket, - SupermarketCategory, SupermarketCategoryRelation, Sync, SyncLog, Unit, - UserFile, UserPreference, ViewLog) +from rest_framework.fields import empty + +from cookbook.helper.HelperFunctions import str2bool +from cookbook.helper.shopping_helper import list_from_recipe +from cookbook.models import (Automation, BookmarkletImport, Comment, CookLog, Food, + FoodInheritField, ImportLog, Ingredient, Keyword, MealPlan, MealType, + NutritionInformation, Recipe, RecipeBook, RecipeBookEntry, + RecipeImport, ShareLink, ShoppingList, ShoppingListEntry, + ShoppingListRecipe, Step, Storage, Supermarket, SupermarketCategory, + SupermarketCategoryRelation, Sync, SyncLog, Unit, UserFile, + UserPreference, ViewLog) from cookbook.templatetags.custom_tags import markdown +from recipes.settings import MEDIA_URL class ExtendedRecipeMixin(serializers.ModelSerializer): # adds image and recipe count to serializer when query param extended=1 - image = serializers.SerializerMethodField('get_image') - numrecipe = serializers.SerializerMethodField('count_recipes') + # ORM path to this object from Recipe recipe_filter = None + # list of ORM paths to any image + images = None + + image = serializers.SerializerMethodField('get_image') + numrecipe = serializers.ReadOnlyField(source='count_recipes_test') def get_fields(self, *args, **kwargs): fields = super().get_fields(*args, **kwargs) @@ -34,12 +43,9 @@ def get_fields(self, *args, **kwargs): api_serializer = None # extended values are computationally expensive and not needed in normal circumstances try: - if bool(int( - 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: - pass - except KeyError: + except (AttributeError, KeyError) as e: pass try: del fields['image'] @@ -49,21 +55,8 @@ def get_fields(self, *args, **kwargs): return fields def get_image(self, obj): - # TODO add caching - recipes = Recipe.objects.filter(**{self.recipe_filter: obj}, space=obj.space).exclude( - image__isnull=True).exclude(image__exact='') - try: - if recipes.count() == 0 and obj.has_children(): - obj__in = self.recipe_filter + '__in' - recipes = Recipe.objects.filter(**{obj__in: obj.get_descendants()}, space=obj.space).exclude( - image__isnull=True).exclude(image__exact='') # if no recipes found - check whole tree - except AttributeError: - # probably not a tree - pass - if recipes.count() != 0: - return random.choice(recipes).image.url - else: - return None + if obj.recipe_image: + return MEDIA_URL + obj.recipe_image def count_recipes(self, obj): return Recipe.objects.filter(**{self.recipe_filter: obj}, space=obj.space).count() @@ -92,9 +85,27 @@ def to_internal_value(self, data): raise ValidationError('A valid number is required') +class CustomOnHandField(serializers.Field): + def get_attribute(self, instance): + return instance + + def to_representation(self, obj): + shared_users = None + if request := self.context.get('request', None): + shared_users = getattr(request, '_shared_users', None) + if shared_users is None: + shared_users = [x.id for x in list(self.context['request'].user.get_shopping_share())] + [self.context['request'].user.id] + return obj.onhand_users.filter(id__in=shared_users).exists() + + def to_internal_value(self, data): + return data + + class SpaceFilterSerializer(serializers.ListSerializer): def to_representation(self, data): + if self.context.get('request', None) is None: + return if (type(data) == QuerySet and data.query.is_sliced): # if query is sliced it came from api request not nested serializer return super().to_representation(data) @@ -136,20 +147,43 @@ class Meta: fields = ('id', 'username') -class UserPreferenceSerializer(serializers.ModelSerializer): - plan_share = UserNameSerializer(many=True, read_only=True) +class FoodInheritFieldSerializer(WritableNestedModelSerializer): + name = serializers.CharField(allow_null=True, allow_blank=True, required=False) + field = serializers.CharField(allow_null=True, allow_blank=True, required=False) def create(self, validated_data): - if validated_data['user'] != self.context['request'].user: + # don't allow writing to FoodInheritField via API + return FoodInheritField.objects.get(**validated_data) + + def update(self, instance, validated_data): + # don't allow writing to FoodInheritField via API + return FoodInheritField.objects.get(**validated_data) + + class Meta: + model = FoodInheritField + fields = ('id', 'name', 'field', ) + read_only_fields = ['id'] + + +class UserPreferenceSerializer(WritableNestedModelSerializer): + 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) + + def create(self, validated_data): + if not validated_data.get('user', None): + raise ValidationError(_('A user is required')) + if (validated_data['user'] != self.context['request'].user): raise NotFound() return super().create(validated_data) class Meta: model = UserPreference fields = ( - 'user', 'theme', 'nav_color', 'default_unit', 'default_page', - 'search_style', 'show_recent', 'plan_share', 'ingredient_decimals', - 'comments' + 'user', 'theme', 'nav_color', 'default_unit', 'default_page', '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' ) @@ -255,25 +289,11 @@ class Meta: class KeywordSerializer(UniqueFieldsMixin, ExtendedRecipeMixin): label = serializers.SerializerMethodField('get_label') - # image = serializers.SerializerMethodField('get_image') - # numrecipe = serializers.SerializerMethodField('count_recipes') recipe_filter = 'keywords' def get_label(self, obj): return str(obj) - # def get_image(self, obj): - # recipes = obj.recipe_set.all().filter(space=obj.space).exclude(image__isnull=True).exclude(image__exact='') - # if recipes.count() == 0 and obj.has_children(): - # recipes = Recipe.objects.filter(keywords__in=obj.get_descendants(), space=obj.space).exclude(image__isnull=True).exclude(image__exact='') # if no recipes found - check whole tree - # if recipes.count() != 0: - # return random.choice(recipes).image.url - # else: - # return None - - # def count_recipes(self, obj): - # return obj.recipe_set.filter(space=self.context['request'].space).all().count() - def create(self, validated_data): # since multi select tags dont have id's # duplicate names might be routed to create @@ -286,26 +306,13 @@ class Meta: model = Keyword fields = ( 'id', 'name', 'icon', 'label', 'description', 'image', 'parent', 'numchild', 'numrecipe', 'created_at', - 'updated_at') - read_only_fields = ('id', 'numchild', 'parent', 'image') + 'updated_at', 'full_name') + read_only_fields = ('id', 'label', 'numchild', 'parent', 'image') class UnitSerializer(UniqueFieldsMixin, ExtendedRecipeMixin): - # image = serializers.SerializerMethodField('get_image') - # numrecipe = serializers.SerializerMethodField('count_recipes') recipe_filter = 'steps__ingredients__unit' - # def get_image(self, obj): - # recipes = Recipe.objects.filter(steps__ingredients__unit=obj, space=obj.space).exclude(image__isnull=True).exclude(image__exact='') - - # if recipes.count() != 0: - # return random.choice(recipes).image.url - # else: - # return None - - # def count_recipes(self, obj): - # return Recipe.objects.filter(steps__ingredients__unit=obj, space=obj.space).count() - def create(self, validated_data): validated_data['name'] = validated_data['name'].strip() validated_data['space'] = self.context['request'].space @@ -369,27 +376,16 @@ class Meta: class FoodSerializer(UniqueFieldsMixin, WritableNestedModelSerializer, ExtendedRecipeMixin): supermarket_category = SupermarketCategorySerializer(allow_null=True, required=False) recipe = RecipeSimpleSerializer(allow_null=True, required=False) - # image = serializers.SerializerMethodField('get_image') - # numrecipe = serializers.SerializerMethodField('count_recipes') - recipe_filter = 'steps__ingredients__food' + # shopping = serializers.SerializerMethodField('get_shopping_status') + shopping = serializers.ReadOnlyField(source='shopping_status') + inherit_fields = FoodInheritFieldSerializer(many=True, allow_null=True, required=False) + food_onhand = CustomOnHandField(required=False, allow_null=True) - # def get_image(self, obj): - # if obj.recipe and obj.space == obj.recipe.space: - # if obj.recipe.image and obj.recipe.image != '': - # return obj.recipe.image.url - # # if food is not also a recipe, look for recipe images that use the food - # recipes = Recipe.objects.filter(steps__ingredients__food=obj, space=obj.space).exclude(image__isnull=True).exclude(image__exact='') - # # if no recipes found - check whole tree - # if recipes.count() == 0 and obj.has_children(): - # recipes = Recipe.objects.filter(steps__ingredients__food__in=obj.get_descendants(), space=obj.space).exclude(image__isnull=True).exclude(image__exact='') - - # if recipes.count() != 0: - # return random.choice(recipes).image.url - # else: - # return None + recipe_filter = 'steps__ingredients__food' + images = ['recipe__image'] - # def count_recipes(self, obj): - # return Recipe.objects.filter(steps__ingredients__food=obj, space=obj.space).count() + # def get_shopping_status(self, obj): + # return ShoppingListEntry.objects.filter(space=obj.space, food=obj, checked=False).count() > 0 def create(self, validated_data): validated_data['name'] = validated_data['name'].strip() @@ -399,20 +395,43 @@ def create(self, validated_data): validated_data['supermarket_category'], sc_created = SupermarketCategory.objects.get_or_create( name=validated_data.pop('supermarket_category')['name'], space=self.context['request'].space) + onhand = validated_data.pop('food_onhand', None) + + # assuming if on hand for user also onhand for shopping_share users + if not onhand is None: + shared_users = [user := self.context['request'].user] + list(user.userpreference.shopping_share.all()) + if self.instance: + onhand_users = self.instance.onhand_users.all() + else: + onhand_users = [] + if onhand: + validated_data['onhand_users'] = list(onhand_users) + shared_users + else: + validated_data['onhand_users'] = list(set(onhand_users) - set(shared_users)) + obj, created = Food.objects.get_or_create(**validated_data) return obj def update(self, instance, validated_data): - validated_data['name'] = validated_data['name'].strip() + if name := validated_data.get('name', None): + validated_data['name'] = name.strip() + # assuming if on hand for user also onhand for shopping_share users + onhand = validated_data.get('food_onhand', None) + if not onhand is None: + shared_users = [user := self.context['request'].user] + list(user.userpreference.shopping_share.all()) + if onhand: + validated_data['onhand_users'] = list(self.instance.onhand_users.all()) + shared_users + else: + validated_data['onhand_users'] = list(set(self.instance.onhand_users.all()) - set(shared_users)) return super(FoodSerializer, self).update(instance, validated_data) class Meta: model = Food fields = ( - 'id', 'name', 'description', 'recipe', 'ignore_shopping', 'supermarket_category', 'image', 'parent', - 'numchild', - 'numrecipe') - read_only_fields = ('id', 'numchild', 'parent', 'image') + 'id', 'name', 'description', 'shopping', 'recipe', 'food_onhand', 'supermarket_category', + 'image', 'parent', 'numchild', 'numrecipe', 'inherit_fields', 'full_name' + ) + read_only_fields = ('id', 'numchild', 'parent', 'image', 'numrecipe') class IngredientSerializer(WritableNestedModelSerializer): @@ -457,12 +476,12 @@ def get_step_recipe_data(self, obj): # check if root type is recipe to prevent infinite recursion # can be improved later to allow multi level embedding if obj.step_recipe and type(self.parent.root) == RecipeSerializer: - return StepRecipeSerializer(obj.step_recipe).data + return StepRecipeSerializer(obj.step_recipe, context={'request': self.context['request']}).data class Meta: model = Step fields = ( - 'id', 'name', 'type', 'instruction', 'ingredients', 'ingredients_markdown', + 'id', 'name', 'instruction', 'ingredients', 'ingredients_markdown', 'ingredients_vue', 'time', 'order', 'show_as_header', 'file', 'step_recipe', 'step_recipe_data', 'numrecipe' ) @@ -478,6 +497,10 @@ class Meta: class NutritionInformationSerializer(serializers.ModelSerializer): + carbohydrates = CustomDecimalField() + fats = CustomDecimalField() + proteins = CustomDecimalField() + calories = CustomDecimalField() def create(self, validated_data): validated_data['space'] = self.context['request'].space @@ -501,7 +524,7 @@ def get_recipe_rating(self, obj): def get_recipe_last_cooked(self, obj): try: - last = obj.cooklog_set.filter(created_by=self.context['request'].user).last() + last = obj.cooklog_set.filter(created_by=self.context['request'].user).order_by('created_at').last() if last: return last.created_at except TypeError: @@ -510,7 +533,7 @@ def get_recipe_last_cooked(self, obj): # TODO make days of new recipe a setting def is_recipe_new(self, obj): - if obj.created_at > (timezone.now() - timedelta(days=7)): + if getattr(obj, 'new_recipe', None) or obj.created_at > (timezone.now() - timedelta(days=7)): return True else: return False @@ -521,6 +544,7 @@ class RecipeOverviewSerializer(RecipeBaseSerializer): rating = serializers.SerializerMethodField('get_recipe_rating') last_cooked = serializers.SerializerMethodField('get_recipe_last_cooked') new = serializers.SerializerMethodField('is_recipe_new') + recent = serializers.ReadOnlyField() def create(self, validated_data): pass @@ -533,7 +557,7 @@ class Meta: fields = ( 'id', 'name', 'description', 'image', 'keywords', 'working_time', 'waiting_time', 'created_by', 'created_at', 'updated_at', - 'internal', 'servings', 'servings_text', 'rating', 'last_cooked', 'new' + 'internal', 'servings', 'servings_text', 'rating', 'last_cooked', 'new', 'recent' ) read_only_fields = ['image', 'created_by', 'created_at'] @@ -621,53 +645,136 @@ class MealPlanSerializer(SpacedModelSerializer, WritableNestedModelSerializer): meal_type_name = serializers.ReadOnlyField(source='meal_type.name') # TODO deprecate once old meal plan was removed note_markdown = serializers.SerializerMethodField('get_note_markdown') servings = CustomDecimalField() - shared = UserNameSerializer(many=True) + shared = UserNameSerializer(many=True, required=False, allow_null=True) + shopping = serializers.SerializerMethodField('in_shopping') def get_note_markdown(self, obj): return markdown(obj.note) + def in_shopping(self, obj): + return ShoppingListRecipe.objects.filter(mealplan=obj.id).exists() + def create(self, validated_data): validated_data['created_by'] = self.context['request'].user - return super().create(validated_data) + mealplan = super().create(validated_data) + if self.context['request'].data.get('addshopping', False): + list_from_recipe(mealplan=mealplan, servings=validated_data['servings'], created_by=validated_data['created_by'], space=validated_data['space']) + return mealplan class Meta: model = MealPlan fields = ( 'id', 'title', 'recipe', 'servings', 'note', 'note_markdown', 'date', 'meal_type', 'created_by', 'shared', 'recipe_name', - 'meal_type_name' + 'meal_type_name', 'shopping' ) read_only_fields = ('created_by',) +# TODO deprecate class ShoppingListRecipeSerializer(serializers.ModelSerializer): + name = serializers.SerializerMethodField('get_name') # should this be done at the front end? recipe_name = serializers.ReadOnlyField(source='recipe.name') + mealplan_note = serializers.ReadOnlyField(source='mealplan.note') servings = CustomDecimalField() + 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 + 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})' + + def update(self, instance, validated_data): + if 'servings' in validated_data: + list_from_recipe( + list_recipe=instance, + servings=validated_data['servings'], + created_by=self.context['request'].user, + space=self.context['request'].space + ) + return super().update(instance, validated_data) + class Meta: model = ShoppingListRecipe - fields = ('id', 'recipe', 'recipe_name', 'servings') + fields = ('id', 'recipe_name', 'name', 'recipe', 'mealplan', 'servings', 'mealplan_note') read_only_fields = ('id',) class ShoppingListEntrySerializer(WritableNestedModelSerializer): food = FoodSerializer(allow_null=True) unit = UnitSerializer(allow_null=True, required=False) + ingredient_note = serializers.ReadOnlyField(source='ingredient.note') + recipe_mealplan = ShoppingListRecipeSerializer(source='list_recipe', read_only=True) amount = CustomDecimalField() + created_by = UserNameSerializer(read_only=True) + completed_at = serializers.DateTimeField(allow_null=True, required=False) + + def get_fields(self, *args, **kwargs): + fields = super().get_fields(*args, **kwargs) + + # autosync values are only needed for frequent 'checked' value updating + if self.context['request'] and bool(int(self.context['request'].query_params.get('autosync', False))): + for f in list(set(fields) - set(['id', 'checked'])): + del fields[f] + return fields + + def run_validation(self, data): + if self.root.instance.__class__.__name__ == 'ShoppingListEntry': + if ( + data.get('checked', False) + and self.root.instance + and not self.root.instance.checked + ): + # if checked flips from false to true set completed datetime + data['completed_at'] = timezone.now() + + elif not data.get('checked', False): + # if not checked set completed to None + data['completed_at'] = None + else: + # otherwise don't write anything + if 'completed_at' in data: + del data['completed_at'] + + return super().run_validation(data) + + def create(self, validated_data): + validated_data['space'] = self.context['request'].space + validated_data['created_by'] = self.context['request'].user + return super().create(validated_data) + + def update(self, instance, validated_data): + user = self.context['request'].user + # update the onhand for food if shopping_add_onhand is True + if user.userpreference.shopping_add_onhand: + if checked := validated_data.get('checked', None): + instance.food.onhand_users.add(*user.userpreference.shopping_share.all(), user) + elif checked == False: + instance.food.onhand_users.remove(*user.userpreference.shopping_share.all(), user) + return super().update(instance, validated_data) class Meta: model = ShoppingListEntry fields = ( - 'id', 'list_recipe', 'food', 'unit', 'amount', 'order', 'checked' + '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',) +# TODO deprecate class ShoppingListEntryCheckedSerializer(serializers.ModelSerializer): class Meta: model = ShoppingListEntry fields = ('id', 'checked') +# TODO deprecate class ShoppingListSerializer(WritableNestedModelSerializer): recipes = ShoppingListRecipeSerializer(many=True, allow_null=True) entries = ShoppingListEntrySerializer(many=True, allow_null=True) @@ -688,6 +795,7 @@ class Meta: read_only_fields = ('id', 'created_by',) +# TODO deprecate class ShoppingListAutoSyncSerializer(WritableNestedModelSerializer): entries = ShoppingListEntryCheckedSerializer(many=True, allow_null=True) @@ -757,7 +865,7 @@ class Meta: # CORS, REST and Scopes aren't currently working -# Scopes are evaluating before REST has authenticated the user assiging a None space +# Scopes are evaluating before REST has authenticated the user assigning a None space # I've made the change below to fix the bookmarklet, other serializers likely need a similar/better fix class BookmarkletImportSerializer(serializers.ModelSerializer): def create(self, validated_data): @@ -802,7 +910,7 @@ class FoodExportSerializer(FoodSerializer): class Meta: model = Food - fields = ('name', 'ignore_shopping', 'supermarket_category') + fields = ('name', 'ignore_shopping', 'supermarket_category',) class IngredientExportSerializer(WritableNestedModelSerializer): @@ -828,7 +936,7 @@ def create(self, validated_data): class Meta: model = Step - fields = ('name', 'type', 'instruction', 'ingredients', 'time', 'order', 'show_as_header') + fields = ('name', 'instruction', 'ingredients', 'time', 'order', 'show_as_header') class RecipeExportSerializer(WritableNestedModelSerializer): @@ -847,3 +955,24 @@ def create(self, validated_data): validated_data['created_by'] = self.context['request'].user validated_data['space'] = self.context['request'].space return super().create(validated_data) + + +class RecipeShoppingUpdateSerializer(serializers.ModelSerializer): + 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.")) + + class Meta: + model = Recipe + fields = ['id', 'list_recipe', 'ingredients', 'servings', ] + + +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.")) + + class Meta: + model = Recipe + fields = ['id', 'amount', 'unit', 'delete', ] diff --git a/cookbook/signals.py b/cookbook/signals.py index dc820c113d..d763b89778 100644 --- a/cookbook/signals.py +++ b/cookbook/signals.py @@ -1,47 +1,131 @@ +from decimal import Decimal +from functools import wraps + +from django.conf import settings from django.contrib.postgres.search import SearchVector from django.db.models.signals import post_save from django.dispatch import receiver from django.utils import translation -from cookbook.models import Recipe, Step +from cookbook.helper.shopping_helper import list_from_recipe from cookbook.managers import DICTIONARY +from cookbook.models import (Food, FoodInheritField, Ingredient, MealPlan, Recipe, + ShoppingListEntry, Step) + +SQLITE = True +if settings.DATABASES['default']['ENGINE'] in ['django.db.backends.postgresql_psycopg2', + 'django.db.backends.postgresql']: + SQLITE = False + +# wraps a signal with the ability to set 'skip_signal' to avoid creating recursive signals + + +def skip_signal(signal_func): + @wraps(signal_func) + def _decorator(sender, instance, **kwargs): + if not instance: + return None + if hasattr(instance, 'skip_signal'): + return None + return signal_func(sender, instance, **kwargs) + return _decorator -# TODO there is probably a way to generalize this @receiver(post_save, sender=Recipe) +@skip_signal def update_recipe_search_vector(sender, instance=None, created=False, **kwargs): - if not instance: - return - - # needed to ensure search vector update doesn't trigger recursion - if hasattr(instance, '_dirty'): + if SQLITE: return - language = DICTIONARY.get(translation.get_language(), 'simple') instance.name_search_vector = SearchVector('name__unaccent', weight='A', config=language) instance.desc_search_vector = SearchVector('description__unaccent', weight='C', config=language) - try: - instance._dirty = True + instance.skip_signal = True instance.save() finally: - del instance._dirty + del instance.skip_signal @receiver(post_save, sender=Step) +@skip_signal def update_step_search_vector(sender, instance=None, created=False, **kwargs): - if not instance: + if SQLITE: return - - # needed to ensure search vector update doesn't trigger recursion - if hasattr(instance, '_dirty'): - return - language = DICTIONARY.get(translation.get_language(), 'simple') instance.search_vector = SearchVector('instruction__unaccent', weight='B', config=language) - try: - instance._dirty = True + instance.skip_signal = True instance.save() finally: - del instance._dirty + del instance.skip_signal + + +@receiver(post_save, sender=Food) +@skip_signal +def update_food_inheritance(sender, instance=None, created=False, **kwargs): + if not instance: + return + + inherit = instance.inherit_fields.all() + # nothing to apply from parent and nothing to apply to children + if (not instance.parent or inherit.count() == 0) and instance.numchild == 0: + return + + inherit = inherit.values_list('field', flat=True) + # apply changes from parent to instance for each inherited field + if instance.parent and inherit.count() > 0: + parent = instance.get_parent() + if 'ignore_shopping' in inherit: + instance.ignore_shopping = parent.ignore_shopping + # if supermarket_category is not set, do not cascade - if this becomes non-intuitive can change + if 'supermarket_category' in inherit and parent.supermarket_category: + instance.supermarket_category = parent.supermarket_category + try: + instance.skip_signal = True + instance.save() + finally: + del instance.skip_signal + + # TODO figure out how to generalize this + # apply changes to direct children - depend on save signals for those objects to cascade inheritance down + _save = [] + for child in instance.get_children().filter(inherit_fields__field='ignore_shopping'): + child.ignore_shopping = instance.ignore_shopping + _save.append(child) + # don't cascade empty supermarket category + if instance.supermarket_category: + # apply changes to direct children - depend on save signals for those objects to cascade inheritance down + for child in instance.get_children().filter(inherit_fields__field='supermarket_category'): + child.supermarket_category = instance.supermarket_category + _save.append(child) + for child in set(_save): + child.save() + + +@receiver(post_save, sender=MealPlan) +def auto_add_shopping(sender, instance=None, created=False, weak=False, **kwargs): + user = instance.get_owner() + if not user.userpreference.mealplan_autoadd_shopping: + return + + if not created and instance.shoppinglistrecipe_set.exists(): + for x in instance.shoppinglistrecipe_set.all(): + if instance.servings != x.servings: + list_recipe = list_from_recipe(list_recipe=x, servings=instance.servings, space=instance.space) + elif created: + # if creating a mealplan - perform shopping list activities + kwargs = { + 'mealplan': instance, + 'space': instance.space, + 'created_by': user, + 'servings': instance.servings + } + list_recipe = list_from_recipe(**kwargs) + + +# user = self.context['request'].user +# if user.userpreference.shopping_add_onhand: +# if checked := validated_data.get('checked', None): +# instance.food.onhand_users.add(*user.userpreference.shopping_share.all(), user) +# elif checked == False: +# instance.food.onhand_users.remove(*user.userpreference.shopping_share.all(), user) diff --git a/cookbook/static/django_js_reverse/reverse.js b/cookbook/static/django_js_reverse/reverse.js index af9a0e1dfc..437faa00af 100644 --- a/cookbook/static/django_js_reverse/reverse.js +++ b/cookbook/static/django_js_reverse/reverse.js @@ -1,4 +1,4 @@ -this.Urls=(function(){"use strict";var data={"urls":[["account_change_password",[["accounts/password/change/",[]]]],["account_confirm_email",[["accounts/confirm-email/%(key)s/",["key"]]]],["account_email",[["accounts/email/",[]]]],["account_email_verification_sent",[["accounts/confirm-email/",[]]]],["account_inactive",[["accounts/inactive/",[]]]],["account_login",[["accounts/login/",[]]]],["account_logout",[["accounts/logout/",[]]]],["account_reset_password",[["accounts/password/reset/",[]]]],["account_reset_password_done",[["accounts/password/reset/done/",[]]]],["account_reset_password_from_key",[["accounts/password/reset/key/%(uidb36)s-%(key)s/",["uidb36","key"]]]],["account_reset_password_from_key_done",[["accounts/password/reset/key/done/",[]]]],["account_set_password",[["accounts/password/set/",[]]]],["account_signup",[["accounts/signup/",[]]]],["admin:account_emailaddress_add",[["admin/account/emailaddress/add/",[]]]],["admin:account_emailaddress_change",[["admin/account/emailaddress/%(object_id)s/change/",["object_id"]]]],["admin:account_emailaddress_changelist",[["admin/account/emailaddress/",[]]]],["admin:account_emailaddress_delete",[["admin/account/emailaddress/%(object_id)s/delete/",["object_id"]]]],["admin:account_emailaddress_history",[["admin/account/emailaddress/%(object_id)s/history/",["object_id"]]]],["admin:app_list",[["admin/%(app_label)s/",["app_label"]]]],["admin:auth_user_add",[["admin/auth/user/add/",[]]]],["admin:auth_user_change",[["admin/auth/user/%(object_id)s/change/",["object_id"]]]],["admin:auth_user_changelist",[["admin/auth/user/",[]]]],["admin:auth_user_delete",[["admin/auth/user/%(object_id)s/delete/",["object_id"]]]],["admin:auth_user_history",[["admin/auth/user/%(object_id)s/history/",["object_id"]]]],["admin:auth_user_password_change",[["admin/auth/user/%(id)s/password/",["id"]]]],["admin:authtoken_tokenproxy_add",[["admin/authtoken/tokenproxy/add/",[]]]],["admin:authtoken_tokenproxy_change",[["admin/authtoken/tokenproxy/%(object_id)s/change/",["object_id"]]]],["admin:authtoken_tokenproxy_changelist",[["admin/authtoken/tokenproxy/",[]]]],["admin:authtoken_tokenproxy_delete",[["admin/authtoken/tokenproxy/%(object_id)s/delete/",["object_id"]]]],["admin:authtoken_tokenproxy_history",[["admin/authtoken/tokenproxy/%(object_id)s/history/",["object_id"]]]],["admin:autocomplete",[["admin/autocomplete/",[]]]],["admin:cookbook_bookmarkletimport_add",[["admin/cookbook/bookmarkletimport/add/",[]]]],["admin:cookbook_bookmarkletimport_change",[["admin/cookbook/bookmarkletimport/%(object_id)s/change/",["object_id"]]]],["admin:cookbook_bookmarkletimport_changelist",[["admin/cookbook/bookmarkletimport/",[]]]],["admin:cookbook_bookmarkletimport_delete",[["admin/cookbook/bookmarkletimport/%(object_id)s/delete/",["object_id"]]]],["admin:cookbook_bookmarkletimport_history",[["admin/cookbook/bookmarkletimport/%(object_id)s/history/",["object_id"]]]],["admin:cookbook_comment_add",[["admin/cookbook/comment/add/",[]]]],["admin:cookbook_comment_change",[["admin/cookbook/comment/%(object_id)s/change/",["object_id"]]]],["admin:cookbook_comment_changelist",[["admin/cookbook/comment/",[]]]],["admin:cookbook_comment_delete",[["admin/cookbook/comment/%(object_id)s/delete/",["object_id"]]]],["admin:cookbook_comment_history",[["admin/cookbook/comment/%(object_id)s/history/",["object_id"]]]],["admin:cookbook_cooklog_add",[["admin/cookbook/cooklog/add/",[]]]],["admin:cookbook_cooklog_change",[["admin/cookbook/cooklog/%(object_id)s/change/",["object_id"]]]],["admin:cookbook_cooklog_changelist",[["admin/cookbook/cooklog/",[]]]],["admin:cookbook_cooklog_delete",[["admin/cookbook/cooklog/%(object_id)s/delete/",["object_id"]]]],["admin:cookbook_cooklog_history",[["admin/cookbook/cooklog/%(object_id)s/history/",["object_id"]]]],["admin:cookbook_food_add",[["admin/cookbook/food/add/",[]]]],["admin:cookbook_food_change",[["admin/cookbook/food/%(object_id)s/change/",["object_id"]]]],["admin:cookbook_food_changelist",[["admin/cookbook/food/",[]]]],["admin:cookbook_food_delete",[["admin/cookbook/food/%(object_id)s/delete/",["object_id"]]]],["admin:cookbook_food_history",[["admin/cookbook/food/%(object_id)s/history/",["object_id"]]]],["admin:cookbook_importlog_add",[["admin/cookbook/importlog/add/",[]]]],["admin:cookbook_importlog_change",[["admin/cookbook/importlog/%(object_id)s/change/",["object_id"]]]],["admin:cookbook_importlog_changelist",[["admin/cookbook/importlog/",[]]]],["admin:cookbook_importlog_delete",[["admin/cookbook/importlog/%(object_id)s/delete/",["object_id"]]]],["admin:cookbook_importlog_history",[["admin/cookbook/importlog/%(object_id)s/history/",["object_id"]]]],["admin:cookbook_ingredient_add",[["admin/cookbook/ingredient/add/",[]]]],["admin:cookbook_ingredient_change",[["admin/cookbook/ingredient/%(object_id)s/change/",["object_id"]]]],["admin:cookbook_ingredient_changelist",[["admin/cookbook/ingredient/",[]]]],["admin:cookbook_ingredient_delete",[["admin/cookbook/ingredient/%(object_id)s/delete/",["object_id"]]]],["admin:cookbook_ingredient_history",[["admin/cookbook/ingredient/%(object_id)s/history/",["object_id"]]]],["admin:cookbook_invitelink_add",[["admin/cookbook/invitelink/add/",[]]]],["admin:cookbook_invitelink_change",[["admin/cookbook/invitelink/%(object_id)s/change/",["object_id"]]]],["admin:cookbook_invitelink_changelist",[["admin/cookbook/invitelink/",[]]]],["admin:cookbook_invitelink_delete",[["admin/cookbook/invitelink/%(object_id)s/delete/",["object_id"]]]],["admin:cookbook_invitelink_history",[["admin/cookbook/invitelink/%(object_id)s/history/",["object_id"]]]],["admin:cookbook_keyword_add",[["admin/cookbook/keyword/add/",[]]]],["admin:cookbook_keyword_change",[["admin/cookbook/keyword/%(object_id)s/change/",["object_id"]]]],["admin:cookbook_keyword_changelist",[["admin/cookbook/keyword/",[]]]],["admin:cookbook_keyword_delete",[["admin/cookbook/keyword/%(object_id)s/delete/",["object_id"]]]],["admin:cookbook_keyword_history",[["admin/cookbook/keyword/%(object_id)s/history/",["object_id"]]]],["admin:cookbook_mealplan_add",[["admin/cookbook/mealplan/add/",[]]]],["admin:cookbook_mealplan_change",[["admin/cookbook/mealplan/%(object_id)s/change/",["object_id"]]]],["admin:cookbook_mealplan_changelist",[["admin/cookbook/mealplan/",[]]]],["admin:cookbook_mealplan_delete",[["admin/cookbook/mealplan/%(object_id)s/delete/",["object_id"]]]],["admin:cookbook_mealplan_history",[["admin/cookbook/mealplan/%(object_id)s/history/",["object_id"]]]],["admin:cookbook_mealtype_add",[["admin/cookbook/mealtype/add/",[]]]],["admin:cookbook_mealtype_change",[["admin/cookbook/mealtype/%(object_id)s/change/",["object_id"]]]],["admin:cookbook_mealtype_changelist",[["admin/cookbook/mealtype/",[]]]],["admin:cookbook_mealtype_delete",[["admin/cookbook/mealtype/%(object_id)s/delete/",["object_id"]]]],["admin:cookbook_mealtype_history",[["admin/cookbook/mealtype/%(object_id)s/history/",["object_id"]]]],["admin:cookbook_nutritioninformation_add",[["admin/cookbook/nutritioninformation/add/",[]]]],["admin:cookbook_nutritioninformation_change",[["admin/cookbook/nutritioninformation/%(object_id)s/change/",["object_id"]]]],["admin:cookbook_nutritioninformation_changelist",[["admin/cookbook/nutritioninformation/",[]]]],["admin:cookbook_nutritioninformation_delete",[["admin/cookbook/nutritioninformation/%(object_id)s/delete/",["object_id"]]]],["admin:cookbook_nutritioninformation_history",[["admin/cookbook/nutritioninformation/%(object_id)s/history/",["object_id"]]]],["admin:cookbook_recipe_add",[["admin/cookbook/recipe/add/",[]]]],["admin:cookbook_recipe_change",[["admin/cookbook/recipe/%(object_id)s/change/",["object_id"]]]],["admin:cookbook_recipe_changelist",[["admin/cookbook/recipe/",[]]]],["admin:cookbook_recipe_delete",[["admin/cookbook/recipe/%(object_id)s/delete/",["object_id"]]]],["admin:cookbook_recipe_history",[["admin/cookbook/recipe/%(object_id)s/history/",["object_id"]]]],["admin:cookbook_recipebook_add",[["admin/cookbook/recipebook/add/",[]]]],["admin:cookbook_recipebook_change",[["admin/cookbook/recipebook/%(object_id)s/change/",["object_id"]]]],["admin:cookbook_recipebook_changelist",[["admin/cookbook/recipebook/",[]]]],["admin:cookbook_recipebook_delete",[["admin/cookbook/recipebook/%(object_id)s/delete/",["object_id"]]]],["admin:cookbook_recipebook_history",[["admin/cookbook/recipebook/%(object_id)s/history/",["object_id"]]]],["admin:cookbook_recipebookentry_add",[["admin/cookbook/recipebookentry/add/",[]]]],["admin:cookbook_recipebookentry_change",[["admin/cookbook/recipebookentry/%(object_id)s/change/",["object_id"]]]],["admin:cookbook_recipebookentry_changelist",[["admin/cookbook/recipebookentry/",[]]]],["admin:cookbook_recipebookentry_delete",[["admin/cookbook/recipebookentry/%(object_id)s/delete/",["object_id"]]]],["admin:cookbook_recipebookentry_history",[["admin/cookbook/recipebookentry/%(object_id)s/history/",["object_id"]]]],["admin:cookbook_recipeimport_add",[["admin/cookbook/recipeimport/add/",[]]]],["admin:cookbook_recipeimport_change",[["admin/cookbook/recipeimport/%(object_id)s/change/",["object_id"]]]],["admin:cookbook_recipeimport_changelist",[["admin/cookbook/recipeimport/",[]]]],["admin:cookbook_recipeimport_delete",[["admin/cookbook/recipeimport/%(object_id)s/delete/",["object_id"]]]],["admin:cookbook_recipeimport_history",[["admin/cookbook/recipeimport/%(object_id)s/history/",["object_id"]]]],["admin:cookbook_searchpreference_add",[["admin/cookbook/searchpreference/add/",[]]]],["admin:cookbook_searchpreference_change",[["admin/cookbook/searchpreference/%(object_id)s/change/",["object_id"]]]],["admin:cookbook_searchpreference_changelist",[["admin/cookbook/searchpreference/",[]]]],["admin:cookbook_searchpreference_delete",[["admin/cookbook/searchpreference/%(object_id)s/delete/",["object_id"]]]],["admin:cookbook_searchpreference_history",[["admin/cookbook/searchpreference/%(object_id)s/history/",["object_id"]]]],["admin:cookbook_sharelink_add",[["admin/cookbook/sharelink/add/",[]]]],["admin:cookbook_sharelink_change",[["admin/cookbook/sharelink/%(object_id)s/change/",["object_id"]]]],["admin:cookbook_sharelink_changelist",[["admin/cookbook/sharelink/",[]]]],["admin:cookbook_sharelink_delete",[["admin/cookbook/sharelink/%(object_id)s/delete/",["object_id"]]]],["admin:cookbook_sharelink_history",[["admin/cookbook/sharelink/%(object_id)s/history/",["object_id"]]]],["admin:cookbook_shoppinglist_add",[["admin/cookbook/shoppinglist/add/",[]]]],["admin:cookbook_shoppinglist_change",[["admin/cookbook/shoppinglist/%(object_id)s/change/",["object_id"]]]],["admin:cookbook_shoppinglist_changelist",[["admin/cookbook/shoppinglist/",[]]]],["admin:cookbook_shoppinglist_delete",[["admin/cookbook/shoppinglist/%(object_id)s/delete/",["object_id"]]]],["admin:cookbook_shoppinglist_history",[["admin/cookbook/shoppinglist/%(object_id)s/history/",["object_id"]]]],["admin:cookbook_shoppinglistentry_add",[["admin/cookbook/shoppinglistentry/add/",[]]]],["admin:cookbook_shoppinglistentry_change",[["admin/cookbook/shoppinglistentry/%(object_id)s/change/",["object_id"]]]],["admin:cookbook_shoppinglistentry_changelist",[["admin/cookbook/shoppinglistentry/",[]]]],["admin:cookbook_shoppinglistentry_delete",[["admin/cookbook/shoppinglistentry/%(object_id)s/delete/",["object_id"]]]],["admin:cookbook_shoppinglistentry_history",[["admin/cookbook/shoppinglistentry/%(object_id)s/history/",["object_id"]]]],["admin:cookbook_shoppinglistrecipe_add",[["admin/cookbook/shoppinglistrecipe/add/",[]]]],["admin:cookbook_shoppinglistrecipe_change",[["admin/cookbook/shoppinglistrecipe/%(object_id)s/change/",["object_id"]]]],["admin:cookbook_shoppinglistrecipe_changelist",[["admin/cookbook/shoppinglistrecipe/",[]]]],["admin:cookbook_shoppinglistrecipe_delete",[["admin/cookbook/shoppinglistrecipe/%(object_id)s/delete/",["object_id"]]]],["admin:cookbook_shoppinglistrecipe_history",[["admin/cookbook/shoppinglistrecipe/%(object_id)s/history/",["object_id"]]]],["admin:cookbook_space_add",[["admin/cookbook/space/add/",[]]]],["admin:cookbook_space_change",[["admin/cookbook/space/%(object_id)s/change/",["object_id"]]]],["admin:cookbook_space_changelist",[["admin/cookbook/space/",[]]]],["admin:cookbook_space_delete",[["admin/cookbook/space/%(object_id)s/delete/",["object_id"]]]],["admin:cookbook_space_history",[["admin/cookbook/space/%(object_id)s/history/",["object_id"]]]],["admin:cookbook_step_add",[["admin/cookbook/step/add/",[]]]],["admin:cookbook_step_change",[["admin/cookbook/step/%(object_id)s/change/",["object_id"]]]],["admin:cookbook_step_changelist",[["admin/cookbook/step/",[]]]],["admin:cookbook_step_delete",[["admin/cookbook/step/%(object_id)s/delete/",["object_id"]]]],["admin:cookbook_step_history",[["admin/cookbook/step/%(object_id)s/history/",["object_id"]]]],["admin:cookbook_storage_add",[["admin/cookbook/storage/add/",[]]]],["admin:cookbook_storage_change",[["admin/cookbook/storage/%(object_id)s/change/",["object_id"]]]],["admin:cookbook_storage_changelist",[["admin/cookbook/storage/",[]]]],["admin:cookbook_storage_delete",[["admin/cookbook/storage/%(object_id)s/delete/",["object_id"]]]],["admin:cookbook_storage_history",[["admin/cookbook/storage/%(object_id)s/history/",["object_id"]]]],["admin:cookbook_supermarket_add",[["admin/cookbook/supermarket/add/",[]]]],["admin:cookbook_supermarket_change",[["admin/cookbook/supermarket/%(object_id)s/change/",["object_id"]]]],["admin:cookbook_supermarket_changelist",[["admin/cookbook/supermarket/",[]]]],["admin:cookbook_supermarket_delete",[["admin/cookbook/supermarket/%(object_id)s/delete/",["object_id"]]]],["admin:cookbook_supermarket_history",[["admin/cookbook/supermarket/%(object_id)s/history/",["object_id"]]]],["admin:cookbook_supermarketcategory_add",[["admin/cookbook/supermarketcategory/add/",[]]]],["admin:cookbook_supermarketcategory_change",[["admin/cookbook/supermarketcategory/%(object_id)s/change/",["object_id"]]]],["admin:cookbook_supermarketcategory_changelist",[["admin/cookbook/supermarketcategory/",[]]]],["admin:cookbook_supermarketcategory_delete",[["admin/cookbook/supermarketcategory/%(object_id)s/delete/",["object_id"]]]],["admin:cookbook_supermarketcategory_history",[["admin/cookbook/supermarketcategory/%(object_id)s/history/",["object_id"]]]],["admin:cookbook_sync_add",[["admin/cookbook/sync/add/",[]]]],["admin:cookbook_sync_change",[["admin/cookbook/sync/%(object_id)s/change/",["object_id"]]]],["admin:cookbook_sync_changelist",[["admin/cookbook/sync/",[]]]],["admin:cookbook_sync_delete",[["admin/cookbook/sync/%(object_id)s/delete/",["object_id"]]]],["admin:cookbook_sync_history",[["admin/cookbook/sync/%(object_id)s/history/",["object_id"]]]],["admin:cookbook_synclog_add",[["admin/cookbook/synclog/add/",[]]]],["admin:cookbook_synclog_change",[["admin/cookbook/synclog/%(object_id)s/change/",["object_id"]]]],["admin:cookbook_synclog_changelist",[["admin/cookbook/synclog/",[]]]],["admin:cookbook_synclog_delete",[["admin/cookbook/synclog/%(object_id)s/delete/",["object_id"]]]],["admin:cookbook_synclog_history",[["admin/cookbook/synclog/%(object_id)s/history/",["object_id"]]]],["admin:cookbook_telegrambot_add",[["admin/cookbook/telegrambot/add/",[]]]],["admin:cookbook_telegrambot_change",[["admin/cookbook/telegrambot/%(object_id)s/change/",["object_id"]]]],["admin:cookbook_telegrambot_changelist",[["admin/cookbook/telegrambot/",[]]]],["admin:cookbook_telegrambot_delete",[["admin/cookbook/telegrambot/%(object_id)s/delete/",["object_id"]]]],["admin:cookbook_telegrambot_history",[["admin/cookbook/telegrambot/%(object_id)s/history/",["object_id"]]]],["admin:cookbook_unit_add",[["admin/cookbook/unit/add/",[]]]],["admin:cookbook_unit_change",[["admin/cookbook/unit/%(object_id)s/change/",["object_id"]]]],["admin:cookbook_unit_changelist",[["admin/cookbook/unit/",[]]]],["admin:cookbook_unit_delete",[["admin/cookbook/unit/%(object_id)s/delete/",["object_id"]]]],["admin:cookbook_unit_history",[["admin/cookbook/unit/%(object_id)s/history/",["object_id"]]]],["admin:cookbook_userfile_add",[["admin/cookbook/userfile/add/",[]]]],["admin:cookbook_userfile_change",[["admin/cookbook/userfile/%(object_id)s/change/",["object_id"]]]],["admin:cookbook_userfile_changelist",[["admin/cookbook/userfile/",[]]]],["admin:cookbook_userfile_delete",[["admin/cookbook/userfile/%(object_id)s/delete/",["object_id"]]]],["admin:cookbook_userfile_history",[["admin/cookbook/userfile/%(object_id)s/history/",["object_id"]]]],["admin:cookbook_userpreference_add",[["admin/cookbook/userpreference/add/",[]]]],["admin:cookbook_userpreference_change",[["admin/cookbook/userpreference/%(object_id)s/change/",["object_id"]]]],["admin:cookbook_userpreference_changelist",[["admin/cookbook/userpreference/",[]]]],["admin:cookbook_userpreference_delete",[["admin/cookbook/userpreference/%(object_id)s/delete/",["object_id"]]]],["admin:cookbook_userpreference_history",[["admin/cookbook/userpreference/%(object_id)s/history/",["object_id"]]]],["admin:cookbook_viewlog_add",[["admin/cookbook/viewlog/add/",[]]]],["admin:cookbook_viewlog_change",[["admin/cookbook/viewlog/%(object_id)s/change/",["object_id"]]]],["admin:cookbook_viewlog_changelist",[["admin/cookbook/viewlog/",[]]]],["admin:cookbook_viewlog_delete",[["admin/cookbook/viewlog/%(object_id)s/delete/",["object_id"]]]],["admin:cookbook_viewlog_history",[["admin/cookbook/viewlog/%(object_id)s/history/",["object_id"]]]],["admin:index",[["admin/",[]]]],["admin:javascript-catalog",[["admin/cookbook/food/jsi18n/",[]],["admin/cookbook/keyword/jsi18n/",[]]]],["admin:jsi18n",[["admin/jsi18n/",[]]]],["admin:login",[["admin/login/",[]]]],["admin:logout",[["admin/logout/",[]]]],["admin:password_change",[["admin/password_change/",[]]]],["admin:password_change_done",[["admin/password_change/done/",[]]]],["admin:sites_site_add",[["admin/sites/site/add/",[]]]],["admin:sites_site_change",[["admin/sites/site/%(object_id)s/change/",["object_id"]]]],["admin:sites_site_changelist",[["admin/sites/site/",[]]]],["admin:sites_site_delete",[["admin/sites/site/%(object_id)s/delete/",["object_id"]]]],["admin:sites_site_history",[["admin/sites/site/%(object_id)s/history/",["object_id"]]]],["admin:socialaccount_socialaccount_add",[["admin/socialaccount/socialaccount/add/",[]]]],["admin:socialaccount_socialaccount_change",[["admin/socialaccount/socialaccount/%(object_id)s/change/",["object_id"]]]],["admin:socialaccount_socialaccount_changelist",[["admin/socialaccount/socialaccount/",[]]]],["admin:socialaccount_socialaccount_delete",[["admin/socialaccount/socialaccount/%(object_id)s/delete/",["object_id"]]]],["admin:socialaccount_socialaccount_history",[["admin/socialaccount/socialaccount/%(object_id)s/history/",["object_id"]]]],["admin:socialaccount_socialapp_add",[["admin/socialaccount/socialapp/add/",[]]]],["admin:socialaccount_socialapp_change",[["admin/socialaccount/socialapp/%(object_id)s/change/",["object_id"]]]],["admin:socialaccount_socialapp_changelist",[["admin/socialaccount/socialapp/",[]]]],["admin:socialaccount_socialapp_delete",[["admin/socialaccount/socialapp/%(object_id)s/delete/",["object_id"]]]],["admin:socialaccount_socialapp_history",[["admin/socialaccount/socialapp/%(object_id)s/history/",["object_id"]]]],["admin:socialaccount_socialtoken_add",[["admin/socialaccount/socialtoken/add/",[]]]],["admin:socialaccount_socialtoken_change",[["admin/socialaccount/socialtoken/%(object_id)s/change/",["object_id"]]]],["admin:socialaccount_socialtoken_changelist",[["admin/socialaccount/socialtoken/",[]]]],["admin:socialaccount_socialtoken_delete",[["admin/socialaccount/socialtoken/%(object_id)s/delete/",["object_id"]]]],["admin:socialaccount_socialtoken_history",[["admin/socialaccount/socialtoken/%(object_id)s/history/",["object_id"]]]],["admin:view_on_site",[["admin/r/%(content_type_id)s/%(object_id)s/",["content_type_id","object_id"]]]],["api:api-root",[["api/.%(format)s",["format"]],["api/",[]]]],["api:automation-detail",[["api/automation/%(pk)s.%(format)s",["pk","format"]],["api/automation/%(pk)s/",["pk"]]]],["api:automation-list",[["api/automation.%(format)s",["format"]],["api/automation/",[]]]],["api:bookmarkletimport-detail",[["api/bookmarklet-import/%(pk)s.%(format)s",["pk","format"]],["api/bookmarklet-import/%(pk)s/",["pk"]]]],["api:bookmarkletimport-list",[["api/bookmarklet-import.%(format)s",["format"]],["api/bookmarklet-import/",[]]]],["api:cooklog-detail",[["api/cook-log/%(pk)s.%(format)s",["pk","format"]],["api/cook-log/%(pk)s/",["pk"]]]],["api:cooklog-list",[["api/cook-log.%(format)s",["format"]],["api/cook-log/",[]]]],["api:food-detail",[["api/food/%(pk)s.%(format)s",["pk","format"]],["api/food/%(pk)s/",["pk"]]]],["api:food-list",[["api/food.%(format)s",["format"]],["api/food/",[]]]],["api:food-merge",[["api/food/%(pk)s/merge/%(target)s.%(format)s",["pk","target","format"]],["api/food/%(pk)s/merge/%(target)s/",["pk","target"]]]],["api:food-move",[["api/food/%(pk)s/move/%(parent)s.%(format)s",["pk","parent","format"]],["api/food/%(pk)s/move/%(parent)s/",["pk","parent"]]]],["api:importlog-detail",[["api/import-log/%(pk)s.%(format)s",["pk","format"]],["api/import-log/%(pk)s/",["pk"]]]],["api:importlog-list",[["api/import-log.%(format)s",["format"]],["api/import-log/",[]]]],["api:ingredient-detail",[["api/ingredient/%(pk)s.%(format)s",["pk","format"]],["api/ingredient/%(pk)s/",["pk"]]]],["api:ingredient-list",[["api/ingredient.%(format)s",["format"]],["api/ingredient/",[]]]],["api:keyword-detail",[["api/keyword/%(pk)s.%(format)s",["pk","format"]],["api/keyword/%(pk)s/",["pk"]]]],["api:keyword-list",[["api/keyword.%(format)s",["format"]],["api/keyword/",[]]]],["api:keyword-merge",[["api/keyword/%(pk)s/merge/%(target)s.%(format)s",["pk","target","format"]],["api/keyword/%(pk)s/merge/%(target)s/",["pk","target"]]]],["api:keyword-move",[["api/keyword/%(pk)s/move/%(parent)s.%(format)s",["pk","parent","format"]],["api/keyword/%(pk)s/move/%(parent)s/",["pk","parent"]]]],["api:mealplan-detail",[["api/meal-plan/%(pk)s.%(format)s",["pk","format"]],["api/meal-plan/%(pk)s/",["pk"]]]],["api:mealplan-list",[["api/meal-plan.%(format)s",["format"]],["api/meal-plan/",[]]]],["api:mealtype-detail",[["api/meal-type/%(pk)s.%(format)s",["pk","format"]],["api/meal-type/%(pk)s/",["pk"]]]],["api:mealtype-list",[["api/meal-type.%(format)s",["format"]],["api/meal-type/",[]]]],["api:recipe-detail",[["api/recipe/%(pk)s.%(format)s",["pk","format"]],["api/recipe/%(pk)s/",["pk"]]]],["api:recipe-image",[["api/recipe/%(pk)s/image.%(format)s",["pk","format"]],["api/recipe/%(pk)s/image/",["pk"]]]],["api:recipe-list",[["api/recipe.%(format)s",["format"]],["api/recipe/",[]]]],["api:recipebook-detail",[["api/recipe-book/%(pk)s.%(format)s",["pk","format"]],["api/recipe-book/%(pk)s/",["pk"]]]],["api:recipebook-list",[["api/recipe-book.%(format)s",["format"]],["api/recipe-book/",[]]]],["api:recipebookentry-detail",[["api/recipe-book-entry/%(pk)s.%(format)s",["pk","format"]],["api/recipe-book-entry/%(pk)s/",["pk"]]]],["api:recipebookentry-list",[["api/recipe-book-entry.%(format)s",["format"]],["api/recipe-book-entry/",[]]]],["api:shoppinglist-detail",[["api/shopping-list/%(pk)s.%(format)s",["pk","format"]],["api/shopping-list/%(pk)s/",["pk"]]]],["api:shoppinglist-list",[["api/shopping-list.%(format)s",["format"]],["api/shopping-list/",[]]]],["api:shoppinglistentry-detail",[["api/shopping-list-entry/%(pk)s.%(format)s",["pk","format"]],["api/shopping-list-entry/%(pk)s/",["pk"]]]],["api:shoppinglistentry-list",[["api/shopping-list-entry.%(format)s",["format"]],["api/shopping-list-entry/",[]]]],["api:shoppinglistrecipe-detail",[["api/shopping-list-recipe/%(pk)s.%(format)s",["pk","format"]],["api/shopping-list-recipe/%(pk)s/",["pk"]]]],["api:shoppinglistrecipe-list",[["api/shopping-list-recipe.%(format)s",["format"]],["api/shopping-list-recipe/",[]]]],["api:step-detail",[["api/step/%(pk)s.%(format)s",["pk","format"]],["api/step/%(pk)s/",["pk"]]]],["api:step-list",[["api/step.%(format)s",["format"]],["api/step/",[]]]],["api:storage-detail",[["api/storage/%(pk)s.%(format)s",["pk","format"]],["api/storage/%(pk)s/",["pk"]]]],["api:storage-list",[["api/storage.%(format)s",["format"]],["api/storage/",[]]]],["api:supermarket-detail",[["api/supermarket/%(pk)s.%(format)s",["pk","format"]],["api/supermarket/%(pk)s/",["pk"]]]],["api:supermarket-list",[["api/supermarket.%(format)s",["format"]],["api/supermarket/",[]]]],["api:supermarketcategory-detail",[["api/supermarket-category/%(pk)s.%(format)s",["pk","format"]],["api/supermarket-category/%(pk)s/",["pk"]]]],["api:supermarketcategory-list",[["api/supermarket-category.%(format)s",["format"]],["api/supermarket-category/",[]]]],["api:supermarketcategoryrelation-detail",[["api/supermarket-category-relation/%(pk)s.%(format)s",["pk","format"]],["api/supermarket-category-relation/%(pk)s/",["pk"]]]],["api:supermarketcategoryrelation-list",[["api/supermarket-category-relation.%(format)s",["format"]],["api/supermarket-category-relation/",[]]]],["api:sync-detail",[["api/sync/%(pk)s.%(format)s",["pk","format"]],["api/sync/%(pk)s/",["pk"]]]],["api:sync-list",[["api/sync.%(format)s",["format"]],["api/sync/",[]]]],["api:synclog-detail",[["api/sync-log/%(pk)s.%(format)s",["pk","format"]],["api/sync-log/%(pk)s/",["pk"]]]],["api:synclog-list",[["api/sync-log.%(format)s",["format"]],["api/sync-log/",[]]]],["api:unit-detail",[["api/unit/%(pk)s.%(format)s",["pk","format"]],["api/unit/%(pk)s/",["pk"]]]],["api:unit-list",[["api/unit.%(format)s",["format"]],["api/unit/",[]]]],["api:unit-merge",[["api/unit/%(pk)s/merge/%(target)s.%(format)s",["pk","target","format"]],["api/unit/%(pk)s/merge/%(target)s/",["pk","target"]]]],["api:userfile-detail",[["api/user-file/%(pk)s.%(format)s",["pk","format"]],["api/user-file/%(pk)s/",["pk"]]]],["api:userfile-list",[["api/user-file.%(format)s",["format"]],["api/user-file/",[]]]],["api:username-detail",[["api/user-name/%(pk)s.%(format)s",["pk","format"]],["api/user-name/%(pk)s/",["pk"]]]],["api:username-list",[["api/user-name.%(format)s",["format"]],["api/user-name/",[]]]],["api:userpreference-detail",[["api/user-preference/%(pk)s.%(format)s",["pk","format"]],["api/user-preference/%(pk)s/",["pk"]]]],["api:userpreference-list",[["api/user-preference.%(format)s",["format"]],["api/user-preference/",[]]]],["api:viewlog-detail",[["api/view-log/%(pk)s.%(format)s",["pk","format"]],["api/view-log/%(pk)s/",["pk"]]]],["api:viewlog-list",[["api/view-log.%(format)s",["format"]],["api/view-log/",[]]]],["api_backup",[["api/backup/",[]]]],["api_get_external_file_link",[["api/get_external_file_link/%(recipe_id)s/",["recipe_id"]]]],["api_get_facets",[["api/get_facets/",[]]]],["api_get_plan_ical",[["api/plan-ical/%(from_date)s/%(to_date)s/",["from_date","to_date"]]]],["api_get_recipe_file",[["api/get_recipe_file/%(recipe_id)s/",["recipe_id"]]]],["api_ingredient_from_string",[["api/ingredient-from-string/",[]]]],["api_log_cooking",[["api/log_cooking/%(recipe_id)s/",["recipe_id"]]]],["api_recipe_from_source",[["api/recipe-from-source/",[]]]],["api_share_link",[["api/share-link/%(pk)s",["pk"]]]],["api_sync",[["api/sync_all/",[]]]],["change_space_member",[["space/member/%(user_id)s/%(space_id)s/%(group)s",["user_id","space_id","group"]]]],["dal_food",[["dal/food/",[]]]],["dal_keyword",[["dal/keyword/",[]]]],["dal_unit",[["dal/unit/",[]]]],["data_batch_edit",[["data/batch/edit",[]]]],["data_batch_import",[["data/batch/import",[]]]],["data_import_url",[["data/import/url",[]]]],["data_stats",[["data/statistics",[]]]],["data_sync",[["data/sync",[]]]],["data_sync_wait",[["data/sync/wait",[]]]],["delete_comment",[["delete/comment/%(pk)s/",["pk"]]]],["delete_invite_link",[["delete/invite-link/%(pk)s/",["pk"]]]],["delete_meal_plan",[["delete/meal-plan/%(pk)s/",["pk"]]]],["delete_recipe",[["delete/recipe/%(pk)s/",["pk"]]]],["delete_recipe_book",[["delete/recipe-book/%(pk)s/",["pk"]]]],["delete_recipe_book_entry",[["delete/recipe-book-entry/%(pk)s/",["pk"]]]],["delete_recipe_import",[["delete/recipe-import/%(pk)s/",["pk"]]]],["delete_recipe_source",[["delete/recipe-source/%(pk)s/",["pk"]]]],["delete_storage",[["delete/storage/%(pk)s/",["pk"]]]],["delete_sync",[["delete/sync/%(pk)s/",["pk"]]]],["docs_api",[["docs/api/",[]]]],["docs_markdown",[["docs/markdown/",[]]]],["docs_search",[["docs/search/",[]]]],["edit_comment",[["edit/comment/%(pk)s/",["pk"]]]],["edit_convert_recipe",[["edit/recipe/convert/%(pk)s/",["pk"]]]],["edit_external_recipe",[["edit/recipe/external/%(pk)s/",["pk"]]]],["edit_internal_recipe",[["edit/recipe/internal/%(pk)s/",["pk"]]]],["edit_meal_plan",[["edit/meal-plan/%(pk)s/",["pk"]]]],["edit_recipe",[["edit/recipe/%(pk)s/",["pk"]]]],["edit_storage",[["edit/storage/%(pk)s/",["pk"]]]],["edit_sync",[["edit/sync/%(pk)s/",["pk"]]]],["index",[["",[]]]],["javascript-catalog",[["jsi18n/",[]]]],["js_reverse",[["jsreverse.json",[]]]],["list_automation",[["list/automation/",[]]]],["list_food",[["list/food/",[]]]],["list_invite_link",[["list/invite-link/",[]]]],["list_keyword",[["list/keyword/",[]]]],["list_recipe_import",[["list/recipe-import/",[]]]],["list_shopping_list",[["list/shopping-list/",[]]]],["list_step",[["list/step/",[]]]],["list_storage",[["list/storage/",[]]]],["list_supermarket",[["list/supermarket/",[]]]],["list_supermarket_category",[["list/supermarket-category/",[]]]],["list_sync_log",[["list/sync-log/",[]]]],["list_unit",[["list/unit/",[]]]],["list_user_file",[["list/user-file/",[]]]],["new_invite_link",[["new/invite-link/",[]]]],["new_meal_plan",[["new/meal-plan/",[]]]],["new_recipe",[["new/recipe/",[]]]],["new_recipe_import",[["new/recipe-import/%(import_id)s/",["import_id"]]]],["new_share_link",[["new/share-link/%(pk)s/",["pk"]]]],["new_storage",[["new/storage/",[]]]],["openapi-schema",[["openapi/",[]]]],["rest_framework:login",[["api-auth/login/",[]]]],["rest_framework:logout",[["api-auth/logout/",[]]]],["service_worker",[["service-worker.js",[]]]],["set_language",[["i18n/setlang/",[]]]],["socialaccount_connections",[["accounts/social/connections/",[]]]],["socialaccount_login_cancelled",[["accounts/social/login/cancelled/",[]]]],["socialaccount_login_error",[["accounts/social/login/error/",[]]]],["socialaccount_signup",[["accounts/social/signup/",[]]]],["telegram_hook",[["telegram/hook/%(token)s/",["token"]]]],["telegram_remove",[["telegram/remove/%(pk)s",["pk"]]]],["telegram_setup",[["telegram/setup/%(pk)s",["pk"]]]],["view_books",[["books/",[]]]],["view_export",[["export/",[]]]],["view_history",[["history/",[]]]],["view_import",[["import/",[]]]],["view_import_response",[["import-response/%(pk)s/",["pk"]]]],["view_invite",[["invite/%(token)s",["token"]]]],["view_no_group",[["no-group",[]]]],["view_no_perm",[["no-perm",[]]]],["view_no_space",[["no-space",[]]]],["view_offline",[["offline/",[]]]],["view_plan",[["plan/",[]]]],["view_plan_entry",[["plan/entry/%(pk)s",["pk"]]]],["view_recipe",[["view/recipe/%(pk)s/%(share)s",["pk","share"]],["view/recipe/%(pk)s",["pk"]]]],["view_report_share_abuse",[["abuse/%(token)s",["token"]]]],["view_search",[["search/",[]]]],["view_search_v2",[["search/v2/",[]]]],["view_settings",[["settings/",[]]]],["view_setup",[["setup/",[]]]],["view_shopping",[["shopping/%(pk)s",["pk"]],["shopping/",[]]]],["view_shopping_latest",[["shopping/latest/",[]]]],["view_shopping_new",[["shopping/new/",[]]]],["view_signup",[["signup/%(token)s",["token"]]]],["view_space",[["space/",[]]]],["view_supermarket",[["supermarket/",[]]]],["view_system",[["system/",[]]]],["web_manifest",[["manifest.json",[]]]]],"prefix":"/"};function factory(d){var url_patterns=d.urls;var url_prefix=d.prefix;var Urls={};var self_url_patterns={};var _get_url=function(url_pattern){return function(){var _arguments,index,url,url_arg,url_args,_i,_len,_ref,_ref_list,match_ref,provided_keys,build_kwargs;_arguments=arguments;_ref_list=self_url_patterns[url_pattern];if(arguments.length==1&&typeof(arguments[0])=="object"){var provided_keys_list=Object.keys(arguments[0]);provided_keys={};for(_i=0;_i{% trans "Sign In" %}

-
+
@@ -44,7 +48,7 @@

{% trans "Sign In" %}

{% if socialaccount_providers %}
-
+
{% trans "Social Login" %}
{% trans 'You can use any of the following providers to sign in.' %} @@ -62,5 +66,8 @@
{% trans "Social Login" %}
{% endif %} + {% endblock %} \ No newline at end of file diff --git a/cookbook/templates/account/signup.html b/cookbook/templates/account/signup.html index 2750af9735..baceb2cb15 100644 --- a/cookbook/templates/account/signup.html +++ b/cookbook/templates/account/signup.html @@ -71,4 +71,8 @@

{% trans "Create an Account" %}

+ + {% endblock %} \ No newline at end of file diff --git a/cookbook/templates/base.html b/cookbook/templates/base.html index b88570f4da..ce70c6cfca 100644 --- a/cookbook/templates/base.html +++ b/cookbook/templates/base.html @@ -122,7 +122,7 @@
- {% trans 'Ingredients' %} + {% trans 'Foods' %}
@@ -339,7 +339,6 @@ {% user_prefs request as prefs%} {{ prefs|json_script:'user_preference' }} - {% block script %} diff --git a/cookbook/templates/generic/checklist_template.html b/cookbook/templates/generic/checklist_template.html deleted file mode 100644 index e58ab5f724..0000000000 --- a/cookbook/templates/generic/checklist_template.html +++ /dev/null @@ -1,32 +0,0 @@ -{% extends "base.html" %} -{% load render_bundle from webpack_loader %} -{% load static %} -{% load i18n %} -{% comment %} {% load l10n %} {% endcomment %} -{% block title %}{{ title }}{% endblock %} - -{% block content_fluid %} - -
- -
- - -{% endblock %} - - -{% block script %} - {{ config | json_script:"model_config" }} - - {% if debug %} - - {% else %} - - {% endif %} - - - - {% render_bundle 'checklist_view' %} -{% endblock %} \ No newline at end of file diff --git a/cookbook/templates/generic/list_template.html b/cookbook/templates/generic/list_template.html index 673d9103e2..7d4be443df 100644 --- a/cookbook/templates/generic/list_template.html +++ b/cookbook/templates/generic/list_template.html @@ -18,12 +18,23 @@ {% endif %}
-

{{ title }} {% trans 'List' %} - {% if create_url %} - + +

{{ title }} {% trans 'List' %} + {% if create_url %} + + + {% endif %} +

+ + {% if request.resolver_match.url_name in 'list_shopping_list' %} + + + - {% endif %} -

+ + {% endif %} {% if filter %}
diff --git a/cookbook/templates/include/log_cooking.html b/cookbook/templates/include/log_cooking.html index b7549f190e..3c586c9487 100644 --- a/cookbook/templates/include/log_cooking.html +++ b/cookbook/templates/include/log_cooking.html @@ -1,4 +1,5 @@ {% load i18n %} +{% comment %} TODO: Deprecate {% endcomment %}