diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md.bak similarity index 100% rename from .github/ISSUE_TEMPLATE/bug_report.md rename to .github/ISSUE_TEMPLATE/bug_report.md.bak diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 000000000..e5e1c3bea --- /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 000000000..f867d5c8d --- /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/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 000000000..ad823cfac --- /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 000000000..55c904ee5 --- /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 000000000..aeba4fbd2 --- /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/cookbook/forms.py b/cookbook/forms.py index 0780826c0..78e50cf81 100644 --- a/cookbook/forms.py +++ b/cookbook/forms.py @@ -358,8 +358,8 @@ class InviteLinkForm(forms.ModelForm): def clean(self): space = self.cleaned_data['space'] - if space.max_users != 0 and (UserPreference.objects.filter(space=space).count() + InviteLink.objects.filter( - space=space).filter(valid_until__gte=datetime.today()).count()) >= space.max_users: + if space.max_users != 0 and (UserPreference.objects.filter(space=space).count() + + InviteLink.objects.filter(valid_until__gte=datetime.today(), used_by=None, space=space).count()) >= space.max_users: raise ValidationError(_('Maximum number of users for this space reached.')) def clean_email(self): diff --git a/cookbook/locale/fr/LC_MESSAGES/django.po b/cookbook/locale/fr/LC_MESSAGES/django.po index 01c314c7a..b182a589a 100644 --- a/cookbook/locale/fr/LC_MESSAGES/django.po +++ b/cookbook/locale/fr/LC_MESSAGES/django.po @@ -14,10 +14,10 @@ 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" -"Language-Team: French \n" +"PO-Revision-Date: 2022-01-16 07:06+0000\n" +"Last-Translator: Josselin du PLESSIS \n" +"Language-Team: French \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -33,66 +33,52 @@ msgid "Ingredients" msgstr "Ingrédients" #: .\cookbook\forms.py:54 -#, fuzzy -#| msgid "Default" msgid "Default unit" -msgstr "Par défaut" +msgstr "Unité par défaut" #: .\cookbook\forms.py:55 -#, fuzzy -#| msgid "System Information" msgid "Use fractions" -msgstr "Informations système" +msgstr "Utiliser les fractions" #: .\cookbook\forms.py:56 msgid "Use KJ" -msgstr "" +msgstr "Utiliser les kJ" #: .\cookbook\forms.py:57 msgid "Theme" -msgstr "" +msgstr "Thème" #: .\cookbook\forms.py:58 msgid "Navbar color" -msgstr "" +msgstr "Couleur de la barre de navigation" #: .\cookbook\forms.py:59 msgid "Sticky navbar" -msgstr "" +msgstr "Barre de navigation permanente" #: .\cookbook\forms.py:60 -#, fuzzy -#| msgid "Default" msgid "Default page" -msgstr "Par défaut" +msgstr "Page par défaut" #: .\cookbook\forms.py:61 -#, fuzzy -#| msgid "Shopping Recipes" msgid "Show recent recipes" -msgstr "Recettes dans le panier" +msgstr "Montrer les recettes récentes" #: .\cookbook\forms.py:62 -#, fuzzy -#| msgid "Search" msgid "Search style" msgstr "Rechercher" #: .\cookbook\forms.py:63 msgid "Plan sharing" -msgstr "" +msgstr "Partage du planificateur" #: .\cookbook\forms.py:64 -#, fuzzy -#| msgid "Ingredients" 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" 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 @@ -124,6 +110,8 @@ msgstr "" #: .\cookbook\forms.py:76 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 "" @@ -242,7 +230,7 @@ msgstr "Stockage" #: .\cookbook\forms.py:260 msgid "Active" -msgstr "" +msgstr "Actif" #: .\cookbook\forms.py:265 msgid "Search String" @@ -279,16 +267,12 @@ 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." 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 msgid "Name already taken." @@ -303,62 +287,81 @@ 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 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 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 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 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 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 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 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" msgid "Search Method" -msgstr "Rechercher" +msgstr "Méthode de recherche" #: .\cookbook\forms.py:451 msgid "Fuzzy Lookups" -msgstr "" +msgstr "Recherches floues" #: .\cookbook\forms.py:452 msgid "Ignore Accent" -msgstr "" +msgstr "Ignorer les accents" #: .\cookbook\forms.py:453 msgid "Partial Match" @@ -369,16 +372,12 @@ msgid "Starts Wtih" msgstr "Commence par" #: .\cookbook\forms.py:455 -#, fuzzy -#| msgid "Search" msgid "Fuzzy Search" -msgstr "Rechercher" +msgstr "Recherche floue" #: .\cookbook\forms.py:456 -#, fuzzy -#| msgid "Text" msgid "Full Text" -msgstr "Texte" +msgstr "Plein texte" #: .\cookbook\helper\AllAuthCustomAdapter.py:36 msgid "" @@ -495,19 +494,21 @@ 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" @@ -560,11 +561,11 @@ msgstr "Grand" #: .\cookbook\models.py:212 .\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 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 msgid "Text" @@ -587,37 +588,31 @@ msgstr "Recette" #: .\cookbook\models.py:871 .\cookbook\templates\search_info.html:28 msgid "Simple" -msgstr "" +msgstr "Simple" #: .\cookbook\models.py:872 .\cookbook\templates\search_info.html:33 msgid "Phrase" -msgstr "" +msgstr "Phrase" #: .\cookbook\models.py:873 .\cookbook\templates\search_info.html:38 msgid "Web" -msgstr "" +msgstr "Internet" #: .\cookbook\models.py:874 .\cookbook\templates\search_info.html:47 msgid "Raw" -msgstr "" +msgstr "Brut" #: .\cookbook\models.py:912 -#, fuzzy -#| msgid "Food" msgid "Food Alias" -msgstr "Aliment" +msgstr "Ingrédient équivalent" #: .\cookbook\models.py:912 -#, fuzzy -#| msgid "Units" msgid "Unit Alias" -msgstr "Unités" +msgstr "Unité" #: .\cookbook\models.py:912 -#, fuzzy -#| msgid "Keywords" msgid "Keyword Alias" -msgstr "Mots-clés" +msgstr "Alias de mot-clé" #: .\cookbook\serializer.py:157 msgid "File uploads are not enabled for this Space." @@ -744,7 +739,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 +755,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" @@ -856,10 +853,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 +864,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 @@ -959,16 +956,12 @@ 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" msgid "Automations" -msgstr "Information" +msgstr "Automatisations" #: .\cookbook\templates\base.html:189 .\cookbook\views\lists.py:215 msgid "Files" @@ -1029,7 +1022,7 @@ msgstr "GitHub" #: .\cookbook\templates\base.html:277 msgid "Translate Tandoor" -msgstr "" +msgstr "Traduire Tandoor" #: .\cookbook\templates\base.html:281 msgid "API Browser" @@ -1084,26 +1077,20 @@ 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 +1139,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 +1163,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" @@ -1269,9 +1256,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" " " @@ -1327,13 +1314,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 @@ -1621,10 +1609,8 @@ 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" msgid "Search Settings" -msgstr "Texte recherché" +msgstr "Paramètres de recherche" #: .\cookbook\templates\search_info.html:10 msgid "" @@ -1637,12 +1623,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 +1651,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 +1674,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 +1693,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 +1719,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 +1745,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 +1765,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 +1815,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 +1868,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,10 +1893,8 @@ 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:58 msgid "Name Settings" @@ -1855,22 +1950,29 @@ 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 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 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 msgid "Fuzzy" -msgstr "" +msgstr "Flou" #: .\cookbook\templates\settings.html:174 msgid "" @@ -1878,29 +1980,34 @@ msgid "" "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 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 msgid "Apply" -msgstr "" +msgstr "Appliquer" #: .\cookbook\templates\settings.html:181 msgid "Precise" -msgstr "" +msgstr "Préciser" #: .\cookbook\templates\settings.html:182 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 msgid "Perfect for large Databases" -msgstr "" +msgstr "Parfait pour les grandes bases de données" #: .\cookbook\templates\setup.html:6 .\cookbook\templates\system.html:5 msgid "Cookbook Setup" @@ -1928,10 +2035,8 @@ 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" +msgstr "Essayer la nouvelle liste de courses" #: .\cookbook\templates\shopping_list.html:63 msgid "Search Recipe" @@ -2008,8 +2113,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 +2138,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 @@ -2190,8 +2296,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 +2323,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 +2347,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,8 +2370,9 @@ 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 @@ -2279,11 +2390,11 @@ msgstr "Mettez-moi en favori !" #: .\cookbook\templates\url_import.html:36 msgid "URL" -msgstr "" +msgstr "URL" #: .\cookbook\templates\url_import.html:38 msgid "App" -msgstr "" +msgstr "App" #: .\cookbook\templates\url_import.html:62 msgid "Enter website URL" @@ -2440,12 +2551,14 @@ 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 msgid "Google ld+json Info" @@ -2466,7 +2579,7 @@ msgstr "Le paramètre « update_at » n'est pas correctement formatté" #: .\cookbook\views\api.py:152 #, 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 msgid "Cannot merge with the same object!" @@ -2475,58 +2588,58 @@ msgstr "Un objet ne peut être fusionné avec lui-même !" #: .\cookbook\views\api.py:163 #, 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!" 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 #, 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 #, 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 "" +msgstr "Il n'existe pas de {self.basename} avec l'id {child}" #: .\cookbook\views\api.py:258 #, 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 msgid "An error occurred attempting to move " -msgstr "" +msgstr "Une erreur s'est produite en essayant de déplacer " #: .\cookbook\views\api.py:264 msgid "Cannot move an object to itself!" -msgstr "" +msgstr "Impossible de déplacer un objet vers lui-même !" #: .\cookbook\views\api.py:270 #, 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 #, python-brace-format msgid "{child.name} was moved successfully to parent {parent.name}" -msgstr "" +msgstr "{child.name} a été déplacé avec succès vers le parent {parent.name}" #: .\cookbook\views\api.py:723 .\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 msgid "Sync successful!" @@ -2655,28 +2768,20 @@ msgid "Shopping Lists" msgstr "Listes de course" #: .\cookbook\views\lists.py:129 -#, fuzzy -#| msgid "Food" msgid "Foods" -msgstr "Aliment" +msgstr "Aliments" #: .\cookbook\views\lists.py:163 -#, fuzzy -#| msgid "Supermarket" msgid "Supermarkets" -msgstr "Supermarché" +msgstr "Supermarchés" #: .\cookbook\views\lists.py:179 -#, fuzzy -#| msgid "Shopping Recipes" msgid "Shopping Categories" -msgstr "Recettes dans le panier" +msgstr "Catégories de courses" #: .\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!" @@ -2766,16 +2871,20 @@ msgstr "Cette fonctionnalité n'est pas disponible dans la version d'essai !" #: .\cookbook\views\views.py:340 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 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 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 msgid "" diff --git a/cookbook/locale/it/LC_MESSAGES/django.po b/cookbook/locale/it/LC_MESSAGES/django.po index 761e133a3..1abfc620e 100644 --- a/cookbook/locale/it/LC_MESSAGES/django.po +++ b/cookbook/locale/it/LC_MESSAGES/django.po @@ -12,7 +12,7 @@ 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" +"PO-Revision-Date: 2022-01-17 07:56+0000\n" "Last-Translator: Oliver Cervera \n" "Language-Team: Italian \n" @@ -260,10 +260,6 @@ 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." msgid "" "An email address is not required but if present the invite link will be sent " "to the user." @@ -840,6 +836,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" @@ -932,10 +932,8 @@ msgid "Supermarket Category" msgstr "Categoria Supermercato" #: .\cookbook\templates\base.html:175 .\cookbook\views\lists.py:195 -#, fuzzy -#| msgid "Information" msgid "Automations" -msgstr "Informazioni" +msgstr "Automazioni" #: .\cookbook\templates\base.html:189 .\cookbook\views\lists.py:215 msgid "Files" @@ -1842,6 +1840,9 @@ msgid "" "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 msgid "This is the default behavior" @@ -1864,7 +1865,7 @@ msgstr "" #: .\cookbook\templates\settings.html:183 msgid "Perfect for large Databases" -msgstr "" +msgstr "Perfetto per database grandi" #: .\cookbook\templates\setup.html:6 .\cookbook\templates\system.html:5 msgid "Cookbook Setup" diff --git a/cookbook/locale/zh_CN/LC_MESSAGES/django.po b/cookbook/locale/zh_CN/LC_MESSAGES/django.po index 215748f5b..a1f38d6af 100644 --- a/cookbook/locale/zh_CN/LC_MESSAGES/django.po +++ b/cookbook/locale/zh_CN/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ 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" +"PO-Revision-Date: 2022-01-16 07:06+0000\n" +"Last-Translator: 糖多 <1365143958@qq.com>\n" "Language-Team: Chinese (Simplified) \n" "Language: zh_CN\n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.7.2\n" +"X-Generator: Weblate 4.8\n" #: .\cookbook\filters.py:23 .\cookbook\templates\base.html:125 #: .\cookbook\templates\forms\ingredients.html:34 @@ -1173,12 +1173,12 @@ msgstr "" #: .\cookbook\templates\include\log_cooking.html:19 msgid "Rating" -msgstr "" +msgstr "评分" #: .\cookbook\templates\include\log_cooking.html:27 #: .\cookbook\templates\include\recipe_open_modal.html:18 msgid "Close" -msgstr "" +msgstr "关闭" #: .\cookbook\templates\include\recipe_open_modal.html:32 msgid "Open Recipe" diff --git a/docs/faq.md b/docs/faq.md index 16ef0472d..768f19fad 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -2,7 +2,23 @@ There are several questions and issues that come up from time to time. Here are Please note that the existence of some questions is due the application not being perfect in some parts. Many of those shortcomings are planned to be fixed in future release but simply could not be addressed yet due to time limits. -## CSRF Errors +## Is there a Tandoor app? +Tandoor can be installed as a progressive web app (PWA) on mobile and desktop devices. The PWA stores recently accessed recipes locally for offline use. + +### Mobile browsers + +#### Safari (iPhone/iPad) +Open Tandoor, click Safari's share button, select `Add to Home Screen` + +### Desktop browsers + +#### Google Chrome +Open Tandoor, open the menu behind the three vertical dots at the top right, select `Install Tandoor Recipes...` + +#### Microsoft Edge +Open Tandoor, open the menu behind the three horizontal dots at the top right, select `Apps > Install Tandoor Recipes` + +## Why am I getting CSRF Errors? If you are getting CSRF Errors this is most likely due to a reverse proxy not passing the correct headers. If you are using swag by linuxserver you might need `proxy_set_header X-Forwarded-Proto $scheme;` in your nginx config. @@ -10,15 +26,15 @@ If you are using a plain ngix you might need `proxy_set_header Host $http_host;` Further discussions can be found in this [Issue #518](https://github.com/vabene1111/recipes/issues/518) -## Images not loading -If images are not loading this might be related to the same issue as the CSRF Errors. -A discussion about that can be found [Issue #452](https://github.com/vabene1111/recipes/issues/452) +## Why are images not loading? +If images are not loading this might be related to the same issue as the CSRF errors (see above). +A discussion about that can be found at [Issue #452](https://github.com/vabene1111/recipes/issues/452) The other common issue is that the recommended nginx container is removed from the deployment stack. If removed, the nginx webserver needs to be replaced by something else that servers the /mediafiles/ directory or `GUNICORN_MEDIA` needs to be enabled to allow media serving by the application container itself. -## User Creation +## How can I create users? To create a new user click on your name (top right corner) and select system. There click on invite links and create a new invite link. It is not possible to create users through the admin because users must be assigned a default group and space. @@ -28,7 +44,7 @@ To change a users space you need to go to the admin and select User Infos. If you use an external auth provider or proxy authentication make sure to specify a default group and space in the environment configuration. -## Spaces +## What are spaces? Spaces are a feature used to separate one installation of Tandoor into several parts. In technical terms it is a multi tenant system. @@ -39,11 +55,16 @@ If you want to host the collection of your friends family or your neighbor you c Sharing between spaces is currently not possible but is planned for future releases. -## Create Admin user / reset passwords -To create a superuser or reset a lost password if access to the container is lost you need to +## How can I reset passwords? +To reset a lost password if access to the container is lost you need to 1. execute into the container using `docker-compose exec web_recipes sh` 2. activate the virtual environment `source venv/bin/activate` -3. run `python manage.py createsuperuser` and follow the steps shown. +3. run `python manage.py changepassword ` and follow the steps shown. -To change a password enter `python manage.py changepassword ` in step 3. \ No newline at end of file +## How can I add an admin user? +To create a superuser you need to + +1. execute into the container using `docker-compose exec web_recipes sh` +2. activate the virtual environment `source venv/bin/activate` +3. run `python manage.py createsuperuser` and follow the steps shown. \ No newline at end of file diff --git a/docs/features/authentication.md b/docs/features/authentication.md index 6390e91ef..0f6114889 100644 --- a/docs/features/authentication.md +++ b/docs/features/authentication.md @@ -32,7 +32,7 @@ as environment files loaded by docker compose don't support multiple lines for a Take the example configuration from the allauth docs, fill in your settings and then inline the whole object (you can use a service like [www.freeformatter.com](https://www.freeformatter.com/json-formatter.html) for formatting). -Assign it to the `SOCIALACCOUNT_PROVIDERS` variable. +Assign it to the additional `SOCIALACCOUNT_PROVIDERS` variable. ```ini SOCIALACCOUNT_PROVIDERS={"nextcloud":{"SERVER":"https://nextcloud.example.org"}} @@ -56,6 +56,25 @@ Use the superuser account to grant permissions to the newly created users. I do not have a ton of experience with using various single signon providers and also cannot test all of them. If you have any Feedback or issues let me know. +### Third-party authentication example +Keycloak is a popular IAM solution and integration is straight forward thanks to Django Allauth. This example can also be used as reference for other third-party authentication solutions, as documented by Allauth. + +At Keycloak, create a new client and assign a `Client-ID`, this client comes with a `Secret-Key`. Both values are required later on. Make sure to define the correct Redirection-URL for the service, for example `https://tandoor.example.com/*`. Depending on your Keycloak setup, you need to assign roles and groups to grant access to the service. + +To enable Keycloak as a sign in option, set those variables to define the social provider and specify its configuration: +```ini +SOCIAL_PROVIDERS=allauth.socialaccount.providers.keycloak +SOCIALACCOUNT_PROVIDERS='{ "keycloak": { "KEYCLOAK_URL": "https://auth.example.com/", "KEYCLOAK_REALM": "master" } }' +``` + +1. Restart the service, login as superuser and open the `Admin` page. +2. Make sure that the correct `Domain Name` is defined at `Sites`. +3. Select `Social Application` and chose `Keycloak` from the provider list. +4. Provide an arbitrary name for your authentication provider, and enter the `Client-ID` and `Secret Key` values obtained from Keycloak earlier. +5. Make sure to add your `Site` to the list of available sites and save the new `Social Application`. + +You are now able to sign in using Keycloak. + ### Linking accounts To link an account to an already existing normal user go to the settings page of the user and link it. Here you can also unlink your account if you no longer want to use a social login method. diff --git a/vue/src/apps/MealPlanView/MealPlanView.vue b/vue/src/apps/MealPlanView/MealPlanView.vue index a6fd2b124..85485d4e7 100644 --- a/vue/src/apps/MealPlanView/MealPlanView.vue +++ b/vue/src/apps/MealPlanView/MealPlanView.vue @@ -54,14 +54,20 @@
{{ $t("Planner_Settings") }}
- - + + - - + + - - + + @@ -73,19 +79,25 @@
{{ $t("Meal_Types") }}
- - + +
- +
- {{ meal_type.icon }} {{ meal_type.name + {{ meal_type.icon }} {{ + meal_type.name }} + >
@@ -93,20 +105,29 @@
- +
- +
- +
- + {{ $t("Default") }} - - + +
@@ -127,7 +148,15 @@ openEntryEdit(contextData.originalItem.entry) " > - {{ $t("Edit") }} + {{ + $t("Edit") + }} + + + + {{ $t("Recipe") }} - {{ $t("Move") }} + + {{ $t("Move") }} - {{ $t("Move") }} + + {{ $t("Move") }} - {{ $t("Add_to_Shopping") }} + + {{ $t("Add_to_Shopping") }} - {{ $t("Delete") }} + + {{ $t("Delete") }} @@ -198,10 +231,12 @@
+ > {{ $t("Open") }} - {{ $t("Clear") }} + + {{ $t("Clear") }} +
@@ -209,37 +244,46 @@
-
+
- +
- +
-
- + - + - +
@@ -250,7 +294,7 @@