From 22057cad199175aa052f7819ccf2460d1a2b6c9d Mon Sep 17 00:00:00 2001 From: Hayden <64056131+hay-kot@users.noreply.github.com> Date: Fri, 23 Aug 2024 11:09:56 -0500 Subject: [PATCH 01/98] chore(l10n): New Crowdin updates (#4087) --- frontend/lang/messages/de-DE.json | 68 +++++++++---------- frontend/lang/messages/el-GR.json | 66 +++++++++--------- frontend/lang/messages/fi-FI.json | 50 +++++++------- frontend/lang/messages/fr-FR.json | 62 ++++++++--------- frontend/lang/messages/hu-HU.json | 2 +- frontend/lang/messages/it-IT.json | 2 +- frontend/lang/messages/nl-NL.json | 42 ++++++------ frontend/lang/messages/sl-SI.json | 62 ++++++++--------- .../seed/resources/labels/locales/el-GR.json | 4 +- .../seed/resources/units/locales/it-IT.json | 54 +++++++-------- 10 files changed, 206 insertions(+), 206 deletions(-) diff --git a/frontend/lang/messages/de-DE.json b/frontend/lang/messages/de-DE.json index d34aef0baeb..6061ef19643 100644 --- a/frontend/lang/messages/de-DE.json +++ b/frontend/lang/messages/de-DE.json @@ -8,7 +8,7 @@ "database-type": "Datenbanktyp", "database-url": "Datenbank URL", "default-group": "Standardgruppe", - "default-household": "Default Household", + "default-household": "Standardhaushalt", "demo": "Demo", "demo-status": "Demostatus", "development": "Entwicklung", @@ -239,7 +239,7 @@ "keep-my-recipes-private-description": "Setzt deine Gruppe und alle Rezepte standardmäßig privat. Du kannst dies später jederzeit ändern." }, "manage-members": "Mitglieder verwalten", - "manage-members-description": "Manage the permissions of the members in your household. {manage} allows the user to access the data-management page, and {invite} allows the user to generate invitation links for other users. Group owners cannot change their own permissions.", + "manage-members-description": "Verwalte die Mitgliederberechtigungen in deinem Haushalt. {manage} erlaubt den Benutzern, auf die Datenverwaltungsseite zuzugreifen. {invite} erlaubt Benutzern, Einladungslinks für andere Benutzer zu erstellen. Gruppenbesitzer können nicht ihre eigenen Berechtigungen ändern.", "manage": "Verwalten", "invite": "Einladen", "looking-to-update-your-profile": "Möchtest du dein Profil aktualisieren?", @@ -247,7 +247,7 @@ "default-recipe-preferences": "Standard Rezept-Einstellungen", "group-preferences": "Gruppeneinstellungen", "private-group": "Private Gruppe", - "private-group-description": "Setting your group to private will default all public view options to default. This overrides any individual households or recipes public view settings.", + "private-group-description": "Wenn du deine Gruppe auf privat stellst, werden alle Einstellungen für den öffentlichen Zugriff zurückgesetzt. Individuelle Einstellungen für einzelne Haushalte oder Rezepte werden überschrieben.", "enable-public-access": "Öffentlichen Zugriff aktivieren", "enable-public-access-description": "Gruppenrezepte standardmäßig öffentlich machen und es Besuchern erlauben, Rezepte ohne Anmeldung anzuzeigen", "allow-users-outside-of-your-group-to-see-your-recipes": "Erlaube Benutzern außerhalb deiner Gruppe deine Rezepte zu sehen", @@ -261,36 +261,36 @@ "disable-users-from-commenting-on-recipes": "Kommentieren von Rezepten deaktivieren", "disable-users-from-commenting-on-recipes-description": "Blendet den Kommentarbereich auf der Rezeptseite aus und deaktiviert die Kommentarfunktion", "disable-organizing-recipe-ingredients-by-units-and-food": "Getrennte Eingabe von Menge und Einheiten in der Zutatenliste deaktivieren", - "disable-organizing-recipe-ingredients-by-units-and-food-description": "Hides the Food, Unit, and Amount fields for ingredients and treats ingredients as plain text fields", + "disable-organizing-recipe-ingredients-by-units-and-food-description": "Verwendet für Zutaten reine Textfelder und blendet die Lebensmittel-, Einheiten- und Mengenfelder aus", "general-preferences": "Allgemeine Einstellungen", "group-recipe-preferences": "Gruppen-Rezept-Einstellungen", "report": "Bericht", "report-with-id": "Bericht-ID: {id}", "group-management": "Gruppenverwaltung", - "admin-group-management": "Admin: Gruppenverwaltung", + "admin-group-management": "Administrator Gruppenverwaltung", "admin-group-management-text": "Änderungen an dieser Gruppe sind sofort wirksam.", "group-id-value": "Gruppen ID: {0}", - "total-households": "Total Households" + "total-households": "Haushalte insgesamt" }, "household": { - "household": "Household", - "households": "Households", - "user-household": "User Household", - "create-household": "Create Household", - "household-name": "Household Name", - "household-group": "Household Group", - "household-management": "Household Management", - "manage-households": "Manage Households", - "admin-household-management": "Admin Household Management", - "admin-household-management-text": "Changes to this household will be reflected immediately.", - "household-id-value": "Household Id: {0}", - "private-household": "Private Household", - "private-household-description": "Setting your household to private will default all public view options to default. This overrides any individual recipes public view settings.", - "household-recipe-preferences": "Household Recipe Preferences", - "default-recipe-preferences-description": "These are the default settings when a new recipe is created in your household. These can be changed for individual recipes in the recipe settings menu.", - "allow-users-outside-of-your-household-to-see-your-recipes": "Allow users outside of your household to see your recipes", - "allow-users-outside-of-your-household-to-see-your-recipes-description": "When enabled you can use a public share link to share specific recipes without authorizing the user. When disabled, you can only share recipes with users who are in your household or with a pre-generated private link", - "household-preferences": "Household Preferences" + "household": "Haushalt", + "households": "Haushalte", + "user-household": "Haushalt des Benutzers", + "create-household": "Haushalt erstellen", + "household-name": "Haushalt Name", + "household-group": "Haushalt Gruppe", + "household-management": "Haushalt Verwaltung", + "manage-households": "Haushalte verwalten", + "admin-household-management": "Administrator Haushaltverwaltung", + "admin-household-management-text": "Änderungen an diesem Haushalt sind sofort wirksam.", + "household-id-value": "Haushalt ID: {0}", + "private-household": "Privater Haushalt", + "private-household-description": "Wenn du deinen Haushalt auf privat stellst, werden alle Einstellungen für den öffentlichen Zugriff zurückgesetzt. Individuelle Einstellungen für einzelne Rezepte werden überschrieben.", + "household-recipe-preferences": "Haushalt Rezept-Einstellungen", + "default-recipe-preferences-description": "Das sind die Standardeinstellungen, wenn ein neues Rezept in deinem Haushalt erstellt wird. Sie können für einzelne Rezepte in den Rezepteinstellungen geändert werden.", + "allow-users-outside-of-your-household-to-see-your-recipes": "Erlaube Benutzern außerhalb deines Haushalts, deine Rezepte zu sehen", + "allow-users-outside-of-your-household-to-see-your-recipes-description": "Wenn aktiviert, kannst du einen öffentlichen Link verwenden, um ausgewählte Rezepte zu teilen, ohne dass Benutzer sich anmelden müssen. Wenn deaktiviert, kannst du nur Rezepte mit Benutzern in deinem Haushalt teilen oder einen vorher erstellten privaten Link verwenden", + "household-preferences": "Haushalt Konfiguration" }, "meal-plan": { "create-a-new-meal-plan": "Neue Mahlzeit planen", @@ -939,7 +939,7 @@ "reset-password": "Passwort zurücksetzen", "sign-in": "Einloggen", "total-mealplans": "Alle Essenspläne", - "total-users": "Alle Benutzer", + "total-users": "Benutzer insgesamt", "upload-photo": "Foto hochladen", "use-8-characters-or-more-for-your-password": "Benutze 8 oder mehr Zeichen für das Passwort", "user-created": "Benutzer angelegt", @@ -1252,8 +1252,8 @@ "account-summary-description": "Hier ist eine Zusammenfassung der Details deiner Gruppe.", "group-statistics": "Gruppenstatistik", "group-statistics-description": "Deine Gruppenstatistik gibt dir einen Einblick, wie du Mealie verwendest.", - "household-statistics": "Household Statistics", - "household-statistics-description": "Your Household Statistics provide some insight how you're using Mealie.", + "household-statistics": "Haushalt Statistik", + "household-statistics-description": "Deine Haushaltsstatistik gibt dir einen Einblick, wie du Mealie verwendest.", "storage-capacity": "Speicherplatz", "storage-capacity-description": "Dein Speicherplatz wird anhand der Bilder und Anhänge berechnet, die du hochgeladen hast.", "personal": "Persönlich", @@ -1261,15 +1261,15 @@ "user-settings": "Benutzereinstellungen", "user-settings-description": "Verwalte deine Einstellungen, ändere dein Passwort und aktualisiere deine E-Mail-Adresse.", "api-tokens-description": "Verwalte deine API Token für den Zugriff von externen Anwendungen.", - "group-description": "Diese Elemente werden innerhalb deiner Gruppe geteilt. Änderungen wirken sich auf die gesamte Gruppe aus!", + "group-description": "Diese Einstellungen betreffen deine Gruppe. Änderungen wirken sich auf die gesamte Gruppe aus!", "group-settings": "Gruppen-Einstellungen", - "group-settings-description": "Manage your common group settings, like privacy settings.", - "household-description": "These items are shared within your household. Editing one of them will change it for the whole household!", - "household-settings": "Household Settings", - "household-settings-description": "Manage your household settings, like mealplan and privacy settings.", + "group-settings-description": "Verwalte deine allgemeinen Gruppeneinstellungen wie Essenspläne und Privatsphäre.", + "household-description": "Diese Einstellungen betreffen deinen Haushalt. Änderung wirken sich auf den gesamten Haushalt aus!", + "household-settings": "Haushalt Einstellungen", + "household-settings-description": "Verwalte deine Haushaltseinstellungen wie zum Beispiel Essenspläne und Privatsphäre.", "cookbooks-description": "Verwalte eine Sammlung mit Rezept-Kategorien und erstelle Seiten für sie.", "members": "Mitglieder", - "members-description": "See who's in your household and manage their permissions.", + "members-description": "Erfahre, wer in deinem Haushalt ist und verwalte deren Berechtigungen.", "webhooks-description": "Richte Webhooks ein, die an Tagen mit geplanten Mahlzeiten ausgelöst werden.", "notifiers": "Benachrichtigungen", "notifiers-description": "Richte E-Mail und Push-Benachrichtigungen ein, die bei bestimmten Ereignissen ausgelöst werden.", @@ -1304,7 +1304,7 @@ "require-all-tools": "Alle Utensilien erforderlich", "cookbook-name": "Kochbuch Name", "cookbook-with-name": "Kochbuch {0}", - "household-cookbook-name": "{0} Cookbook {1}", + "household-cookbook-name": "{0} Kochbuch {1}", "create-a-cookbook": "Ein Kochbuch erstellen", "cookbook": "Kochbuch" } diff --git a/frontend/lang/messages/el-GR.json b/frontend/lang/messages/el-GR.json index 9c47372a3d0..8292d2a8de4 100644 --- a/frontend/lang/messages/el-GR.json +++ b/frontend/lang/messages/el-GR.json @@ -8,7 +8,7 @@ "database-type": "Τύπος βάσης δεδομένων", "database-url": "URL Βάσης Δεδομένων", "default-group": "Προεπιλεγμένη ομάδα", - "default-household": "Default Household", + "default-household": "Προεπιλεγμένο νοικοκυριό", "demo": "Επίδειξη", "demo-status": "Κατάσταση επίδειξης", "development": "Ανάπτυξη", @@ -239,7 +239,7 @@ "keep-my-recipes-private-description": "Ορίζει την ομάδα σας και όλες τις συνταγές ιδιωτικές από προεπιλογή. Μπορείτε πάντα να το αλλάξετε αργότερα." }, "manage-members": "Διαχείριση Μελών", - "manage-members-description": "Manage the permissions of the members in your household. {manage} allows the user to access the data-management page, and {invite} allows the user to generate invitation links for other users. Group owners cannot change their own permissions.", + "manage-members-description": "Διαχειριστείτε τα δικαιώματα των μελών στις ομάδες σας. Το {manage} επιτρέπει στο χρήστη να έχει πρόσβαση στη σελίδα διαχείρισης δεδομένων. Το {invite} επιτρέπει στο χρήστη να δημιουργήσει συνδέσμους πρόσκληση για άλλους χρήστες. Οι ιδιοκτήτες ομάδων δεν μπορούν να αλλάξουν τα δικά τους δικαιώματα.", "manage": "Διαχείριση", "invite": "Προσκαλέστε", "looking-to-update-your-profile": "Ψάχνετε να ενημερώσετε το προφίλ σας;", @@ -247,7 +247,7 @@ "default-recipe-preferences": "Προεπιλεγμένες Προτιμήσεις Συνταγών", "group-preferences": "Προτιμήσεις Ομάδας", "private-group": "Ιδιωτική Ομάδα", - "private-group-description": "Setting your group to private will default all public view options to default. This overrides any individual households or recipes public view settings.", + "private-group-description": "Η ρύθμιση της ομάδας σας σε ιδιωτική θα ορίσει όλες τις ρυθμίσεις δημόσιας προβολής στις προεπιλογές τους. Αυτό παρακάμπτει τις ρυθμίσεις δημόσιας προβολής ενός μεμονομένου νοικοκυριού ή μιας μεμονωμένης συνταγής.", "enable-public-access": "Ενεργοποίηση Δημόσιας Πρόσβασης", "enable-public-access-description": "Κάντε τις συνταγές της ομάδας δημόσιες από προεπιλογή, και επιτρέψτε στους επισκέπτες να δουν συνταγές χωρίς σύνδεση", "allow-users-outside-of-your-group-to-see-your-recipes": "Επιτρέψτε στους χρήστες εκτός της ομάδας σας να δουν τις συνταγές σας", @@ -261,7 +261,7 @@ "disable-users-from-commenting-on-recipes": "Απενεργοποίηση σχολιασμού χρηστών σε συνταγές", "disable-users-from-commenting-on-recipes-description": "Κρύβει το τμήμα σχολίων στη σελίδα συνταγών και απενεργοποιεί τον σχολιασμό", "disable-organizing-recipe-ingredients-by-units-and-food": "Απενεργοποίηση οργάνωση των συστατικών συνταγή ανά μονάδα και τρόφιμο", - "disable-organizing-recipe-ingredients-by-units-and-food-description": "Hides the Food, Unit, and Amount fields for ingredients and treats ingredients as plain text fields", + "disable-organizing-recipe-ingredients-by-units-and-food-description": "Κρύβει τα πεδία Τρόφιμο, Μονάδα, και Ποσότητα για συστατικά και αντιμετωπίζει τα συστατικά ως απλά πεδία κειμένου", "general-preferences": "Γενικές προτιμήσεις", "group-recipe-preferences": "Προτιμήσεις Συνταγών Ομάδας", "report": "Αναφορά", @@ -270,27 +270,27 @@ "admin-group-management": "Διαχείριση Ομάδας Διαχειριστών", "admin-group-management-text": "Οι αλλαγές σε αυτή την ομάδα θα αντικατοπτρίζονται αμέσως.", "group-id-value": "ID ομάδας: {0}", - "total-households": "Total Households" + "total-households": "Σύνολο νοικοκυριών" }, "household": { - "household": "Household", - "households": "Households", - "user-household": "User Household", - "create-household": "Create Household", - "household-name": "Household Name", - "household-group": "Household Group", - "household-management": "Household Management", - "manage-households": "Manage Households", - "admin-household-management": "Admin Household Management", - "admin-household-management-text": "Changes to this household will be reflected immediately.", - "household-id-value": "Household Id: {0}", - "private-household": "Private Household", - "private-household-description": "Setting your household to private will default all public view options to default. This overrides any individual recipes public view settings.", - "household-recipe-preferences": "Household Recipe Preferences", - "default-recipe-preferences-description": "These are the default settings when a new recipe is created in your household. These can be changed for individual recipes in the recipe settings menu.", - "allow-users-outside-of-your-household-to-see-your-recipes": "Allow users outside of your household to see your recipes", - "allow-users-outside-of-your-household-to-see-your-recipes-description": "When enabled you can use a public share link to share specific recipes without authorizing the user. When disabled, you can only share recipes with users who are in your household or with a pre-generated private link", - "household-preferences": "Household Preferences" + "household": "Νοικοκυριό", + "households": "Νοικοκυριά", + "user-household": "Νοικοκυριό χρήστη", + "create-household": "Δημιουργία νοικοκυριού", + "household-name": "Ονομα νοικοκυριού", + "household-group": "Ομάδα νοικοκυριού", + "household-management": "Διαχείριση νοικοκυριού", + "manage-households": "Διαχείριση νοικοκυριών", + "admin-household-management": "Διαχείριση νοικοκυριού διαχειριστή", + "admin-household-management-text": "Οι αλλαγές σε αυτό το νοικοκυριό θα αντικατοπτρίζονται αμέσως.", + "household-id-value": "ID νοικοκυριού: {0}", + "private-household": "Ιδιωτικό νοικοκυριό", + "private-household-description": "Η ρύθμιση του νοικοκυριού σας σε ιδιωτικό θα ορίσει όλες τις ρυθμίσες δημόσιας προβολής στις προεπιλογές τους. Αυτό παρακάμπτει τις επιλογές δημόσιας προβολής μιας μεμονωμένης συνταγής.", + "household-recipe-preferences": "Προτιμήσεις συνταγών νοικοκυριού", + "default-recipe-preferences-description": "Αυτές είναι οι προεπιλεγμένες ρυθμίσεις όταν δημιουργείται μια νέα συνταγή στο νοικοκυριό σας. Μπορούν να αλλάξουν για μεμονωμένες συνταγές στο μενού ρυθμίσεων συνταγών.", + "allow-users-outside-of-your-household-to-see-your-recipes": "Επιτρέψτε στους χρήστες εκτός του νοικοκυριού σας να δουν τις συνταγές σας", + "allow-users-outside-of-your-household-to-see-your-recipes-description": "Οταν είναι ενεργοποιημένο, μπορείτε να χρησιμοποιήσετε έναν σύνδεσμο κοινής χρήσης για να μοιραστείτε συγκεκριμένες συνταγές χωρίς να εξουσιοδοτήσετε τον χρήστη. Οταν είναι απενεργοποιημένο, μπορείτε να μοιραστείτε συνταγές μόνο με χρήστες που βρίσκονται στο νοικοκυριό σας ή με έναν προ-δημιουργήμένο ιδιωτικό σύνδεσμο", + "household-preferences": "Προτιμήσεις νοικοκυριού" }, "meal-plan": { "create-a-new-meal-plan": "Δημιουργία νέου σχεδίου γεύματος", @@ -1250,10 +1250,10 @@ "get-public-link": "Λήψη δημόσιου συνδέσμου", "account-summary": "Σύνοψη λογαριασμού", "account-summary-description": "Ακολουθεί μια περίληψη των πληροφοριών της ομάδας σας.", - "group-statistics": "Ομαδοποιημένα Στατιστικά", - "group-statistics-description": "Τα Ομαδοποιημένα Στατιστικά σας παρέχουν μια εικόνα για το πώς χρησιμοποιείτε το Mealie.", - "household-statistics": "Household Statistics", - "household-statistics-description": "Your Household Statistics provide some insight how you're using Mealie.", + "group-statistics": "Στατιστικά ομάδων", + "group-statistics-description": "Τα Στατιστικά Ομάδων σας παρέχουν μια εικόνα για το πώς χρησιμοποιείτε το Mealie.", + "household-statistics": "Στατιστικά νοικοκυριού", + "household-statistics-description": "Τα Στατιστικά Νοικοκυριού σας παρέχουν μια εικόνα για το πώς χρησιμοποιείτε το Mealie.", "storage-capacity": "Χωρητικότητα μονάδας αποθήκευσης", "storage-capacity-description": "Η χωρητικότητα της μονάδας αποθήκευσης είναι ένας υπολογισμός των εικόνων και των στοιχείων που έχετε μεταφορτώσει.", "personal": "Ατομικά", @@ -1263,13 +1263,13 @@ "api-tokens-description": "Διαχειριστείτε τα API Tokens σας για πρόσβαση από εξωτερικές εφαρμογές.", "group-description": "Αυτά τα αντικείμενα μοιράζονται μέσα στην ομάδα σας. Η επεξεργασία ενός από αυτά θα το αλλάξει για ολόκληρη την ομάδα!", "group-settings": "Ρυθμίσεις ομάδας", - "group-settings-description": "Manage your common group settings, like privacy settings.", - "household-description": "These items are shared within your household. Editing one of them will change it for the whole household!", - "household-settings": "Household Settings", - "household-settings-description": "Manage your household settings, like mealplan and privacy settings.", + "group-settings-description": "Διαχειριστείτε τις κοινές ρυθμίσεις της ομάδας σας, όπως τις ρυθμίσεις απορρήτου.", + "household-description": "Αυτά τα αντικείμενα μοιράζονται μέσα στο νοικοκυριό σας. Η επεξεργασία ενός από αυτά θα το αλλάξει για ολόκληρο το νοικοκυριό!", + "household-settings": "Ρυθμίσεις νοικοκυριού", + "household-settings-description": "Διαχειριστείτε τις ρυθμίσεις του νοικοκυριού σας, όπως το πρόγραμμα γευμάτων και τις ρυθμίσεις απορρήτου.", "cookbooks-description": "Διαχειριστείτε μια συλλογή κατηγοριών συνταγών και δημιουργήστε σελίδες για αυτές.", "members": "Μέλη", - "members-description": "See who's in your household and manage their permissions.", + "members-description": "Δείτε ποιοι βρίσκονται στο νοικοκυριό σας και διαχειριστείτε τα δικαιώματά τους.", "webhooks-description": "Ρυθμίστε webhooks που πυροδοτούνται τις ημέρες που έχετε προγραμματισμένα προγράμματα γευμάτων.", "notifiers": "Ειδοποιητές", "notifiers-description": "Setup email and push notifications that trigger on specific events.", @@ -1304,7 +1304,7 @@ "require-all-tools": "Απαιτούνται όλα τα εργαλεία", "cookbook-name": "Ονομα βιβλίου μαγειρικής", "cookbook-with-name": "Βιβλίο Μαγειρικής {0}", - "household-cookbook-name": "{0} Cookbook {1}", + "household-cookbook-name": "{0} Βιβλίο Μαγειρικής {1}", "create-a-cookbook": "Δημιουργία ενός βιβλίου μαγειρικής", "cookbook": "Βιβλίο Μαγειρικής" } diff --git a/frontend/lang/messages/fi-FI.json b/frontend/lang/messages/fi-FI.json index 171d42b702e..db28c8994d0 100644 --- a/frontend/lang/messages/fi-FI.json +++ b/frontend/lang/messages/fi-FI.json @@ -8,7 +8,7 @@ "database-type": "Tietokannan tyyppi", "database-url": "Tietokannan URL", "default-group": "Oletusryhmä", - "default-household": "Default Household", + "default-household": "Oletuskotitalous", "demo": "Demo", "demo-status": "Demon tila", "development": "Kehitys", @@ -270,27 +270,27 @@ "admin-group-management": "Ylläpitoryhmien hallinta", "admin-group-management-text": "Muutokset tähän ryhmään tulevat näkymään välittömästi.", "group-id-value": "Ryhmän tunniste: {0}", - "total-households": "Total Households" + "total-households": "Kotitaloudet Yhteensä" }, "household": { - "household": "Household", - "households": "Households", - "user-household": "User Household", - "create-household": "Create Household", - "household-name": "Household Name", - "household-group": "Household Group", - "household-management": "Household Management", - "manage-households": "Manage Households", - "admin-household-management": "Admin Household Management", - "admin-household-management-text": "Changes to this household will be reflected immediately.", - "household-id-value": "Household Id: {0}", - "private-household": "Private Household", + "household": "Kotitalous", + "households": "Kotitaloudet", + "user-household": "Käyttäjä Kotitalous", + "create-household": "Luo Kotitalous", + "household-name": "Kotitalouden Nimi", + "household-group": "Kotitalouden Ryhmä", + "household-management": "Kotitalouksien Hallinta", + "manage-households": "Hallitse Kotitalouksia", + "admin-household-management": "Kotitalouksien Hallinta", + "admin-household-management-text": "Muutokset tähän kotitalouteen astuvat välittömästi voimaan.", + "household-id-value": "Kotitalouden tunniste: {0}", + "private-household": "Yksityinen Kotitalous", "private-household-description": "Setting your household to private will default all public view options to default. This overrides any individual recipes public view settings.", - "household-recipe-preferences": "Household Recipe Preferences", + "household-recipe-preferences": "Kotitalouksien reseptiasetukset", "default-recipe-preferences-description": "These are the default settings when a new recipe is created in your household. These can be changed for individual recipes in the recipe settings menu.", - "allow-users-outside-of-your-household-to-see-your-recipes": "Allow users outside of your household to see your recipes", + "allow-users-outside-of-your-household-to-see-your-recipes": "Salli kotitalouden ulkopuolisten käyttäjien nähdä reseptit", "allow-users-outside-of-your-household-to-see-your-recipes-description": "When enabled you can use a public share link to share specific recipes without authorizing the user. When disabled, you can only share recipes with users who are in your household or with a pre-generated private link", - "household-preferences": "Household Preferences" + "household-preferences": "Kotitalouksien asetukset" }, "meal-plan": { "create-a-new-meal-plan": "Luo uusi ateriasuunnitelma", @@ -1252,8 +1252,8 @@ "account-summary-description": "Tässä on yhteenveto ryhmäsi tiedoista.", "group-statistics": "Ryhmätilastot", "group-statistics-description": "Ryhmätilaston avulla saat tietoa siitä, miten käytät Mealietä.", - "household-statistics": "Household Statistics", - "household-statistics-description": "Your Household Statistics provide some insight how you're using Mealie.", + "household-statistics": "Kotitalouksien tilastot", + "household-statistics-description": "Kotitalouden tilastot tarjoavat joitakin oivalluksia miten käytät Mealietä.", "storage-capacity": "Tallennustila", "storage-capacity-description": "Tallennuskapasiteetti on laskettu niistä kuvista ja resursseista, jotka olet ladannut.", "personal": "Henkilökohtainen", @@ -1263,13 +1263,13 @@ "api-tokens-description": "Hallitse ulkoisten sovellusten API-tunnisteitasi.", "group-description": "Nämä kohteet on jaettu ryhmässäsi. Yhden muokkaaminen muuttaa sitä koko ryhmälle!", "group-settings": "Ryhmäasetukset", - "group-settings-description": "Manage your common group settings, like privacy settings.", - "household-description": "These items are shared within your household. Editing one of them will change it for the whole household!", - "household-settings": "Household Settings", - "household-settings-description": "Manage your household settings, like mealplan and privacy settings.", + "group-settings-description": "Hallitse yleisiä ryhmäasetuksia, kuten yksityisyysasetuksia.", + "household-description": "Nämä kohteet on jaettu kotitalouteesi. Yhden muokkaaminen muuttaa sitä koko ryhmälle!", + "household-settings": "Kotitalouden asetukset", + "household-settings-description": "Hallitse kotitalouden asetuksia, kuten ateriasuunnitelmaa ja yksityisyysasetuksia.", "cookbooks-description": "Hallinnoi reseptikategorioiden kokoelmaa ja luo sivuja niitä varten.", "members": "Jäsenet", - "members-description": "See who's in your household and manage their permissions.", + "members-description": "Katso kuka tai ketkä ovat kotitaloudessasi ja hallitse heidän oikeuksia.", "webhooks-description": "Aseta Webhookit, jotka käynistävät niinä päivinä, jolloin sinulla on ateriasuunnitelma ajastettuna.", "notifiers": "Ilmoitukset", "notifiers-description": "Määritä sähköposti- ja push-ilmoitukset, jotka käynnistävät tiettyjä tapahtumia.", @@ -1304,7 +1304,7 @@ "require-all-tools": "Vaadi Kaikki Työkalut", "cookbook-name": "Keittokirjan Nimi", "cookbook-with-name": "Keittokirja {0}", - "household-cookbook-name": "{0} Cookbook {1}", + "household-cookbook-name": "{0} Keittokirja {1}", "create-a-cookbook": "Luo keittokirja", "cookbook": "Keittokirja" } diff --git a/frontend/lang/messages/fr-FR.json b/frontend/lang/messages/fr-FR.json index 0dd5df4af7f..7aca6687faa 100644 --- a/frontend/lang/messages/fr-FR.json +++ b/frontend/lang/messages/fr-FR.json @@ -8,7 +8,7 @@ "database-type": "Type de base de données", "database-url": "URL de la base de données", "default-group": "Groupe par défaut", - "default-household": "Default Household", + "default-household": "Foyer par défaut", "demo": "Oui", "demo-status": "Mode démo", "development": "Développement", @@ -239,7 +239,7 @@ "keep-my-recipes-private-description": "Définit votre groupe et toutes les recettes par défaut sur privé. Vous pouvez toujours changer cela plus tard." }, "manage-members": "Gestion des membres", - "manage-members-description": "Manage the permissions of the members in your household. {manage} allows the user to access the data-management page, and {invite} allows the user to generate invitation links for other users. Group owners cannot change their own permissions.", + "manage-members-description": "Gérez les permissions des membres de votre foyer. {manage} donne l’accès à la page de gestion des données à l’utilisateur, et {invite} lui permet de générer des liens d’invitation pour d’autres utilisateurs. Les propriétaires de groupe ne peuvent pas changer leurs propres permissions.", "manage": "Gérer", "invite": "Inviter", "looking-to-update-your-profile": "Vous cherchez à mettre à jour votre profil ?", @@ -247,7 +247,7 @@ "default-recipe-preferences": "Préférences de recette par défaut", "group-preferences": "Préférences du groupe", "private-group": "Groupe privé", - "private-group-description": "Setting your group to private will default all public view options to default. This overrides any individual households or recipes public view settings.", + "private-group-description": "Rendre votre groupe privé va réinitialiser toutes les options de vue publique à leur valeur par défaut. Cela écrase les paramètres individuels de vue publique de tous les foyers ou recettes.", "enable-public-access": "Activer l’accès public", "enable-public-access-description": "Les recettes de groupes deviennent publiques par défaut, cela permet aux visiteurs de les voir sans s’identifier", "allow-users-outside-of-your-group-to-see-your-recipes": "Autoriser les utilisateurs en dehors de votre groupe à voir vos recettes", @@ -261,7 +261,7 @@ "disable-users-from-commenting-on-recipes": "Désactiver les commentaires utilisateur sur les recettes", "disable-users-from-commenting-on-recipes-description": "Masque la section commentaires sur la page de recette et désactive les commentaires", "disable-organizing-recipe-ingredients-by-units-and-food": "Désactiver l'organisation des ingrédients de recette par unité et aliment", - "disable-organizing-recipe-ingredients-by-units-and-food-description": "Hides the Food, Unit, and Amount fields for ingredients and treats ingredients as plain text fields", + "disable-organizing-recipe-ingredients-by-units-and-food-description": "Masque les champs Aliment, Unité et Quantité pour les ingrédients et considère les ingrédients comme des champs de texte simple", "general-preferences": "Préférences générales", "group-recipe-preferences": "Préférences de recette du groupe", "report": "Rapport", @@ -270,27 +270,27 @@ "admin-group-management": "Administration des groupes", "admin-group-management-text": "Les modifications apportées à ce groupe seront immédiatement prises en compte.", "group-id-value": "ID groupe : {0}", - "total-households": "Total Households" + "total-households": "Nombre de foyers" }, "household": { - "household": "Household", - "households": "Households", - "user-household": "User Household", - "create-household": "Create Household", - "household-name": "Household Name", - "household-group": "Household Group", - "household-management": "Household Management", - "manage-households": "Manage Households", - "admin-household-management": "Admin Household Management", - "admin-household-management-text": "Changes to this household will be reflected immediately.", - "household-id-value": "Household Id: {0}", - "private-household": "Private Household", - "private-household-description": "Setting your household to private will default all public view options to default. This overrides any individual recipes public view settings.", - "household-recipe-preferences": "Household Recipe Preferences", - "default-recipe-preferences-description": "These are the default settings when a new recipe is created in your household. These can be changed for individual recipes in the recipe settings menu.", - "allow-users-outside-of-your-household-to-see-your-recipes": "Allow users outside of your household to see your recipes", - "allow-users-outside-of-your-household-to-see-your-recipes-description": "When enabled you can use a public share link to share specific recipes without authorizing the user. When disabled, you can only share recipes with users who are in your household or with a pre-generated private link", - "household-preferences": "Household Preferences" + "household": "Foyer", + "households": "Foyers", + "user-household": "Utilisateur du foyer", + "create-household": "Créer un foyer", + "household-name": "Nom du foyer", + "household-group": "Groupe du foyer", + "household-management": "Gestion du foyer", + "manage-households": "Gérer les foyers", + "admin-household-management": "Administration du foyer", + "admin-household-management-text": "Les changements apportés à ce foyer seront immédiatement pris en compte.", + "household-id-value": "Identifiant du foyer : {0}", + "private-household": "Foyer privé", + "private-household-description": "Rendre votre foyer privé va réinitialiser toutes les options de vue publique à leur valeur par défaut. Cela écrase les paramètres individuels de vue publique d'une recette.", + "household-recipe-preferences": "Préférences de recette du foyer", + "default-recipe-preferences-description": "Ce sont les paramètres par défaut utilisés pour la création d’une nouvelle recette dans votre foyer. Ils peuvent être modifiés individuellement dans le menu de configuration des recettes.", + "allow-users-outside-of-your-household-to-see-your-recipes": "Autoriser les utilisateurs en dehors de votre foyer à voir vos recettes", + "allow-users-outside-of-your-household-to-see-your-recipes-description": "Si activé, vous pouvez utiliser un lien de partage public pour partager des recettes spécifiques sans autoriser l'utilisateur. Lorsque cette option est désactivée, vous ne pouvez partager des recettes qu'avec les utilisateurs qui sont dans votre foyer ou avec un lien privé pré-généré", + "household-preferences": "Préférences du foyer" }, "meal-plan": { "create-a-new-meal-plan": "Créer un nouveau menu", @@ -1252,8 +1252,8 @@ "account-summary-description": "Voici un résumé des informations de votre groupe.", "group-statistics": "Statistiques du groupe", "group-statistics-description": "Les statistiques de votre groupe vous donnent un aperçu de la façon dont vous utilisez Mealie.", - "household-statistics": "Household Statistics", - "household-statistics-description": "Your Household Statistics provide some insight how you're using Mealie.", + "household-statistics": "Statistiques du foyer", + "household-statistics-description": "Vos statistiques du foyer fournissent un aperçu sur la façon dont vous utilisez Mealie.", "storage-capacity": "Capacité de stockage", "storage-capacity-description": "Votre capacité de stockage est un calcul des images et des ressources que vous avez téléchargées.", "personal": "Personnel", @@ -1263,13 +1263,13 @@ "api-tokens-description": "Gérez vos jetons API pour un accès à partir d'applications externes.", "group-description": "Ces éléments sont partagés au sein de votre groupe. Un changement impactera l'ensemble du groupe !", "group-settings": "Paramètres de groupe", - "group-settings-description": "Manage your common group settings, like privacy settings.", - "household-description": "These items are shared within your household. Editing one of them will change it for the whole household!", - "household-settings": "Household Settings", - "household-settings-description": "Manage your household settings, like mealplan and privacy settings.", + "group-settings-description": "Gérez vos paramètres communs au groupe, comme les paramètres de confidentialité.", + "household-description": "Ces éléments sont partagés au sein de votre foyer. Un changement impactera l’ensemble du foyer !", + "household-settings": "Paramètres du foyer", + "household-settings-description": "Gérez les paramètres de votre foyer, comme les paramètres de menu ou de confidentialité.", "cookbooks-description": "Gérez une collection de catégories de recettes et générez des pages.", "members": "Membres", - "members-description": "See who's in your household and manage their permissions.", + "members-description": "Voyez qui est dans votre foyer et gérez leurs permissions.", "webhooks-description": "Configurez les webhooks qui se déclenchent les jours où il y a un plan au menu.", "notifiers": "Notifications", "notifiers-description": "Configurer les e-mails et les notifications push qui se déclenchent sur des événements spécifiques.", @@ -1304,7 +1304,7 @@ "require-all-tools": "Nécessite tous les ustensiles", "cookbook-name": "Nom du livre de recettes", "cookbook-with-name": "Livre de recettes {0}", - "household-cookbook-name": "{0} Cookbook {1}", + "household-cookbook-name": "{0} Livre de cuisine {1}", "create-a-cookbook": "Créer un livre de cuisine", "cookbook": "Livre de recettes" } diff --git a/frontend/lang/messages/hu-HU.json b/frontend/lang/messages/hu-HU.json index cfaf8fa4e15..052f4c01a72 100644 --- a/frontend/lang/messages/hu-HU.json +++ b/frontend/lang/messages/hu-HU.json @@ -1304,7 +1304,7 @@ "require-all-tools": "Minden szükséges eszköz", "cookbook-name": "Szakácskönyv neve", "cookbook-with-name": "Szakácskönyv {0}", - "household-cookbook-name": "{0} Cookbook {1}", + "household-cookbook-name": "{0} Szakácskönyv {1}", "create-a-cookbook": "Szakácskönyv létrehozása", "cookbook": "Szakácskönyv" } diff --git a/frontend/lang/messages/it-IT.json b/frontend/lang/messages/it-IT.json index 704b8d1ea10..20bf91bb02f 100644 --- a/frontend/lang/messages/it-IT.json +++ b/frontend/lang/messages/it-IT.json @@ -8,7 +8,7 @@ "database-type": "Tipo Database", "database-url": "URL Database", "default-group": "Gruppo Predefinito", - "default-household": "Default Household", + "default-household": "Famiglia Predefinita", "demo": "Demo", "demo-status": "Stato Demo", "development": "In Sviluppo", diff --git a/frontend/lang/messages/nl-NL.json b/frontend/lang/messages/nl-NL.json index 9454dec9699..f54f8ebe8df 100644 --- a/frontend/lang/messages/nl-NL.json +++ b/frontend/lang/messages/nl-NL.json @@ -8,7 +8,7 @@ "database-type": "Databasetype", "database-url": "Database URL", "default-group": "Standaardgroep", - "default-household": "Default Household", + "default-household": "Standaard huishouden", "demo": "Demo", "demo-status": "Demostatus", "development": "Ontwikkeling", @@ -239,7 +239,7 @@ "keep-my-recipes-private-description": "Stelt je groep en alle recepten standaard privé in. Je kunt dit later nog wijzigen." }, "manage-members": "Beheer leden", - "manage-members-description": "Manage the permissions of the members in your household. {manage} allows the user to access the data-management page, and {invite} allows the user to generate invitation links for other users. Group owners cannot change their own permissions.", + "manage-members-description": "Beheer de rechten van de leden in uw groepen. {manage} geeft de gebruiker toegang tot de data-managementpagina {invite} geeft de gebruiker de mogelijkheid uitnodigingslinks voor andere gebruikers te maken. Groepseigenaren kunnen hun eigen rechten niet wijzigen.", "manage": "Beheer", "invite": "Uitnodigen", "looking-to-update-your-profile": "Wil je je profiel bijwerken?", @@ -247,7 +247,7 @@ "default-recipe-preferences": "Standaardvoorkeuren voor recepten", "group-preferences": "Groepsvoorkeuren", "private-group": "Privé-groep", - "private-group-description": "Setting your group to private will default all public view options to default. This overrides any individual households or recipes public view settings.", + "private-group-description": "Instellen van je groep op privé, zet alle publieke weergaveopties naar standaard. Dit overschrijft de instellingen per recept.", "enable-public-access": "Openbare toegang inschakelen", "enable-public-access-description": "Maak groepsrecepten standaard openbaar en laat bezoekers recepten zien zonder aan te melden", "allow-users-outside-of-your-group-to-see-your-recipes": "Sta gebruikers buiten je groep toe om je recepten te zien", @@ -261,7 +261,7 @@ "disable-users-from-commenting-on-recipes": "Gebruikersreacties op recepten uitschakelen", "disable-users-from-commenting-on-recipes-description": "Als dit is ingeschakeld zie je geen reacties op dit recept en kunnen bezoekers ook geen reacties achterlaten", "disable-organizing-recipe-ingredients-by-units-and-food": "Het organiseren van receptingrediënten met eenheden en levensmiddelen uitschakelen", - "disable-organizing-recipe-ingredients-by-units-and-food-description": "Hides the Food, Unit, and Amount fields for ingredients and treats ingredients as plain text fields", + "disable-organizing-recipe-ingredients-by-units-and-food-description": "Als dit is ingeschakeld zijn levensmiddelen, eenheden en hoeveelheden verborgen en worden ingrediënten als gewone tekstvelden behandeld", "general-preferences": "Algemene voorkeuren", "group-recipe-preferences": "Receptvoorkeuren voor groep", "report": "Rapport", @@ -270,25 +270,25 @@ "admin-group-management": "Beheerdergroep-beheer", "admin-group-management-text": "Wijzigingen in deze groep zijn meteen zichtbaar.", "group-id-value": "Groeps-id: {0}", - "total-households": "Total Households" + "total-households": "Totaal aantal huishoudens" }, "household": { - "household": "Household", - "households": "Households", - "user-household": "User Household", - "create-household": "Create Household", - "household-name": "Household Name", - "household-group": "Household Group", - "household-management": "Household Management", - "manage-households": "Manage Households", - "admin-household-management": "Admin Household Management", - "admin-household-management-text": "Changes to this household will be reflected immediately.", - "household-id-value": "Household Id: {0}", - "private-household": "Private Household", - "private-household-description": "Setting your household to private will default all public view options to default. This overrides any individual recipes public view settings.", - "household-recipe-preferences": "Household Recipe Preferences", - "default-recipe-preferences-description": "These are the default settings when a new recipe is created in your household. These can be changed for individual recipes in the recipe settings menu.", - "allow-users-outside-of-your-household-to-see-your-recipes": "Allow users outside of your household to see your recipes", + "household": "Huishouden", + "households": "Huishoudens", + "user-household": "Gebruiker Huishouden", + "create-household": "Maak Huishouden", + "household-name": "Huishouden Naam", + "household-group": "Huishouden groep", + "household-management": "Beheer van huishoudens", + "manage-households": "Huishoudens beheren", + "admin-household-management": "Beheerder van huishoudens", + "admin-household-management-text": "Wijzigingen in dit huishouden zijn meteen zichtbaar.", + "household-id-value": "Huishouden Id: {0}", + "private-household": "Privé huishouden", + "private-household-description": "Instellen van je groep op privé, zet alle publieke weergaveopties naar standaard. Dit overschrijft de instellingen per recept.", + "household-recipe-preferences": "Receptvoorkeuren voor groep", + "default-recipe-preferences-description": "Dit zijn de standaardinstellingen als er een nieuw recept in je groep wordt gemaakt. Deze kunnen worden gewijzigd voor individuele recepten in het menu recepteninstellingen.", + "allow-users-outside-of-your-household-to-see-your-recipes": "Sta gebruikers buiten je groep toe om je recepten te zien", "allow-users-outside-of-your-household-to-see-your-recipes-description": "When enabled you can use a public share link to share specific recipes without authorizing the user. When disabled, you can only share recipes with users who are in your household or with a pre-generated private link", "household-preferences": "Household Preferences" }, diff --git a/frontend/lang/messages/sl-SI.json b/frontend/lang/messages/sl-SI.json index 3a92def3197..b3a80520580 100644 --- a/frontend/lang/messages/sl-SI.json +++ b/frontend/lang/messages/sl-SI.json @@ -8,7 +8,7 @@ "database-type": "Tip podatkovne baze", "database-url": "URL naslov podatkovne baze", "default-group": "Privzeta skupina", - "default-household": "Default Household", + "default-household": "Privzeto gospodinjstvo", "demo": "Testno", "demo-status": "Status testa", "development": "Razvoj", @@ -239,7 +239,7 @@ "keep-my-recipes-private-description": "Nastavi vaše skupine in vse recepte privzeto kot privatni. Kasneje lahko to vedno spremenite." }, "manage-members": "Urejanje članov", - "manage-members-description": "Manage the permissions of the members in your household. {manage} allows the user to access the data-management page, and {invite} allows the user to generate invitation links for other users. Group owners cannot change their own permissions.", + "manage-members-description": "Upravljajte dovoljenja članov v vašem gospodinjstvu. {manage} omogoča uporabniku dostop do strani za upravljanje podatkov, {invite} pa uporabniku omogoča ustvarjanje povezav za povabila za druge uporabnike. Lastniki skupine ne morejo spremeniti lastnih dovoljenj.", "manage": "Upravljaj", "invite": "Povabi", "looking-to-update-your-profile": "Želiš posodobiti svoj profil?", @@ -247,7 +247,7 @@ "default-recipe-preferences": "Privzete nastavitve za recepte", "group-preferences": "Nastavitve za skupine", "private-group": "Zasebna skupina", - "private-group-description": "Setting your group to private will default all public view options to default. This overrides any individual households or recipes public view settings.", + "private-group-description": "Če svojo skupino nastavite na zasebno, bodo privzete vse možnosti javnega pogleda. To preglasi vsa posamezna gospodinjstva ali nastavitve javnega pogleda receptov.", "enable-public-access": "Omogoči javni dostop", "enable-public-access-description": "Skupinski recepti naj bodo privzeto javni, obiskovalcem omogoči ogled receptov brez prijave", "allow-users-outside-of-your-group-to-see-your-recipes": "Dovoli uporabnikom zunaj tvoje skupine, da vidijo tvoje recepte", @@ -261,7 +261,7 @@ "disable-users-from-commenting-on-recipes": "Onemogoči komentiranje na recepte", "disable-users-from-commenting-on-recipes-description": "Skrij sekcijo s komentarji na strani z recepti in onemogoči komentiranje", "disable-organizing-recipe-ingredients-by-units-and-food": "Izključi organizacijo recepta po enotah in živilih", - "disable-organizing-recipe-ingredients-by-units-and-food-description": "Hides the Food, Unit, and Amount fields for ingredients and treats ingredients as plain text fields", + "disable-organizing-recipe-ingredients-by-units-and-food-description": "Skrije polja Hrana, Enota in Količina za sestavine in sestavine obravnava kot polja z navadnim besedilom", "general-preferences": "Splošne nastavitve", "group-recipe-preferences": "Nastavitve receptov v skupini", "report": "Prijavi", @@ -270,27 +270,27 @@ "admin-group-management": "Skrbniško upravljanje skupine", "admin-group-management-text": "Spremembe v tej skupini se poznajo takoj.", "group-id-value": "ID skupine: {0}", - "total-households": "Total Households" + "total-households": "Skupaj gospodinjstev" }, "household": { - "household": "Household", - "households": "Households", - "user-household": "User Household", - "create-household": "Create Household", - "household-name": "Household Name", - "household-group": "Household Group", - "household-management": "Household Management", - "manage-households": "Manage Households", - "admin-household-management": "Admin Household Management", - "admin-household-management-text": "Changes to this household will be reflected immediately.", - "household-id-value": "Household Id: {0}", - "private-household": "Private Household", - "private-household-description": "Setting your household to private will default all public view options to default. This overrides any individual recipes public view settings.", - "household-recipe-preferences": "Household Recipe Preferences", - "default-recipe-preferences-description": "These are the default settings when a new recipe is created in your household. These can be changed for individual recipes in the recipe settings menu.", - "allow-users-outside-of-your-household-to-see-your-recipes": "Allow users outside of your household to see your recipes", - "allow-users-outside-of-your-household-to-see-your-recipes-description": "When enabled you can use a public share link to share specific recipes without authorizing the user. When disabled, you can only share recipes with users who are in your household or with a pre-generated private link", - "household-preferences": "Household Preferences" + "household": "Gospodinjstvo", + "households": "Gospodinjstva", + "user-household": "Uporabniško gospodinjstvo", + "create-household": "Ustvari gospodinjstvo", + "household-name": "Ime gospodinjstva", + "household-group": "Skupina gospodinjstva", + "household-management": "Upravljanje gospodinjstva", + "manage-households": "Upravljanje gospodinjstev", + "admin-household-management": "Administratorsko upravljanje gospodinjstva", + "admin-household-management-text": "Spremembe tega gospodinjstva se bodo takoj odrazile.", + "household-id-value": "ID gospodinjstva: {0}", + "private-household": "Zasebno gospodinjstvo", + "private-household-description": "Če svoje gospodinjstvo nastavite na zasebno, bodo privzete vse možnosti javnega pogleda. To preglasi vse nastavitve javnega pogleda posameznih receptov.", + "household-recipe-preferences": "Nastavitve gospodinjskih receptov", + "default-recipe-preferences-description": "To so privzete nastavitve, ko se v vašem gospodinjstvu ustvari nov recept. Te lahko spremenite za posamezne recepte v meniju z nastavitvami receptov.", + "allow-users-outside-of-your-household-to-see-your-recipes": "Omogočite uporabnikom zunaj vašega gospodinjstva ogled vaših receptov", + "allow-users-outside-of-your-household-to-see-your-recipes-description": "Ko je omogočeno, lahko uporabite povezavo za javno skupno rabo za skupno rabo določenih receptov brez pooblastila uporabnika. Ko je onemogočeno, lahko delite recepte le z uporabniki, ki so v vašem gospodinjstvu, ali z vnaprej ustvarjeno zasebno povezavo", + "household-preferences": "Nastavitve gospodinjstva" }, "meal-plan": { "create-a-new-meal-plan": "Izdelaj nov načrt obrokov", @@ -1252,8 +1252,8 @@ "account-summary-description": "Tule je povzetek informacij o tvoji skupini.", "group-statistics": "Statistika skupine", "group-statistics-description": "Statistika tvoje skupine prikazuje kako uporabljate Mealie.", - "household-statistics": "Household Statistics", - "household-statistics-description": "Your Household Statistics provide some insight how you're using Mealie.", + "household-statistics": "Statistika gospodinjstva", + "household-statistics-description": "Vaši gospodinjski statistični podatki ponujajo nekaj vpogleda v to, kako uporabljate Mealie.", "storage-capacity": "Poraba prostora", "storage-capacity-description": "Poraba prostora je izračun velikosti slik in ostalih naloženih datotek.", "personal": "Osebno", @@ -1263,13 +1263,13 @@ "api-tokens-description": "Urejaj svoje API žetone za dostop iz zunanjih aplikacij.", "group-description": "Te nastavitve veljajo za celo skupino. Sprememba katerekoli nastavitve se bo poznala na celi skupini!", "group-settings": "Nastavitve skupine", - "group-settings-description": "Manage your common group settings, like privacy settings.", - "household-description": "These items are shared within your household. Editing one of them will change it for the whole household!", - "household-settings": "Household Settings", - "household-settings-description": "Manage your household settings, like mealplan and privacy settings.", + "group-settings-description": "Upravljajte skupne nastavitve skupine, kot so nastavitve zasebnosti.", + "household-description": "Ti predmeti so v skupni rabi v vašem gospodinjstvu. Urejanje enega od njih bo spremenilo celotno gospodinjstvo!", + "household-settings": "Nastavitve gospodinjstva", + "household-settings-description": "Upravljajte nastavitve gospodinjstva, kot so načrt obrokov in nastavitve zasebnosti.", "cookbooks-description": "Upravljaj z zbirkami kategorij receptov in ustvari strani za njih.", "members": "Člani", - "members-description": "See who's in your household and manage their permissions.", + "members-description": "Oglejte si, kdo je v vašem gospodinjstvu, in upravljajte njihova dovoljenja.", "webhooks-description": "Nastavi webhooke, ki se sprožijo na dneve, ko imaš planiran jedilnik.", "notifiers": "Obveščevalci", "notifiers-description": "Setup email and push notifications that trigger on specific events.", @@ -1304,7 +1304,7 @@ "require-all-tools": "Zahtevaj vso opremo", "cookbook-name": "Ime kuharske knjige", "cookbook-with-name": "Kuharska knjiga {0}", - "household-cookbook-name": "{0} Cookbook {1}", + "household-cookbook-name": "{0} Kuharska knjiga {1}", "create-a-cookbook": "Ustvari kuharsko knjigo", "cookbook": "Kuharska knjiga" } diff --git a/mealie/repos/seed/resources/labels/locales/el-GR.json b/mealie/repos/seed/resources/labels/locales/el-GR.json index 004ca0947e4..8aa75d4825c 100644 --- a/mealie/repos/seed/resources/labels/locales/el-GR.json +++ b/mealie/repos/seed/resources/labels/locales/el-GR.json @@ -30,7 +30,7 @@ "name": "Καρυκεύματα" }, { - "name": "Confectionary" + "name": "Ζαχαροπλαστική" }, { "name": "Γαλακτοκομικά" @@ -42,7 +42,7 @@ "name": "Υγιεινά τρόφιμα" }, { - "name": "Household" + "name": "Νοικοκυριό" }, { "name": "Κρεατικά" diff --git a/mealie/repos/seed/resources/units/locales/it-IT.json b/mealie/repos/seed/resources/units/locales/it-IT.json index 97bdf436ec3..5412d52d603 100644 --- a/mealie/repos/seed/resources/units/locales/it-IT.json +++ b/mealie/repos/seed/resources/units/locales/it-IT.json @@ -1,140 +1,140 @@ { "teaspoon": { "name": "cucchiaino", - "plural_name": "teaspoons", + "plural_name": "cucchiaini", "description": "", "abbreviation": "cucchiaino" }, "tablespoon": { "name": "cucchiaio", - "plural_name": "tablespoons", + "plural_name": "cucchiaio da tavola", "description": "", "abbreviation": "cucch.o" }, "cup": { "name": "tazza", - "plural_name": "cups", + "plural_name": "tazze", "description": "", "abbreviation": "c" }, "fluid-ounce": { "name": "oncia liquida", - "plural_name": "fluid ounces", + "plural_name": "once fluide", "description": "", "abbreviation": "fl oz" }, "pint": { "name": "pinta", - "plural_name": "pints", + "plural_name": "pinte", "description": "", "abbreviation": "pt" }, "quart": { "name": "quarto di pinta", - "plural_name": "quarts", + "plural_name": "quarti", "description": "", "abbreviation": "qt" }, "gallon": { "name": "gallone", - "plural_name": "gallons", + "plural_name": "galloni", "description": "", "abbreviation": "gal" }, "milliliter": { "name": "millilitro", - "plural_name": "milliliters", + "plural_name": "millilitri", "description": "", "abbreviation": "ml" }, "liter": { "name": "litro", - "plural_name": "liters", + "plural_name": "litri", "description": "", "abbreviation": "l" }, "pound": { "name": "libbra", - "plural_name": "pounds", + "plural_name": "libbre", "description": "", "abbreviation": "lb", - "plural_abbreviation": "lbs" + "plural_abbreviation": "lb" }, "ounce": { "name": "oncia", - "plural_name": "ounces", + "plural_name": "once", "description": "", "abbreviation": "oz" }, "gram": { "name": "grammo", - "plural_name": "grams", + "plural_name": "grammi", "description": "", "abbreviation": "g" }, "kilogram": { "name": "chilogrammo", - "plural_name": "kilograms", + "plural_name": "chilogrammi", "description": "", "abbreviation": "kg" }, "milligram": { "name": "milligrammo", - "plural_name": "milligrams", + "plural_name": "milligrammi", "description": "", "abbreviation": "mg" }, "splash": { "name": "spruzzo", - "plural_name": "splashes", + "plural_name": "spruzzi", "description": "", "abbreviation": "" }, "dash": { "name": "pizzico", - "plural_name": "dashes", + "plural_name": "trattini", "description": "", "abbreviation": "" }, "serving": { "name": "porzione", - "plural_name": "servings", + "plural_name": "porzioni", "description": "", "abbreviation": "" }, "head": { "name": "testa", - "plural_name": "heads", + "plural_name": "teste", "description": "", "abbreviation": "" }, "clove": { "name": "spicchio", - "plural_name": "cloves", + "plural_name": "spicchi", "description": "", "abbreviation": "" }, "can": { "name": "lattina", - "plural_name": "cans", + "plural_name": "lattine", "description": "", "abbreviation": "" }, "bunch": { - "name": "bunch", - "plural_name": "bunches", + "name": "mucchio", + "plural_name": "mucchi", "description": "", "abbreviation": "" }, "pack": { - "name": "pack", - "plural_name": "packs", + "name": "confezione", + "plural_name": "confezioni", "description": "", "abbreviation": "" }, "pinch": { - "name": "pinch", - "plural_name": "pinches", + "name": "pizzico", + "plural_name": "pizzichi", "description": "", "abbreviation": "" } From 67dc0d7066ab7d9386e4ef357c80421169d624e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ars=C3=A8ne=20Reymond?= <66876397+p0lycarpio@users.noreply.github.com> Date: Fri, 23 Aug 2024 20:26:12 +0200 Subject: [PATCH 02/98] fix: Image height in home screen mobile format (#4088) --- frontend/components/Domain/Recipe/RecipeCardImage.vue | 6 ++++-- frontend/components/Domain/Recipe/RecipeCardMobile.vue | 10 +++++++--- .../components/Domain/Recipe/RecipeCardSection.vue | 3 ++- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/frontend/components/Domain/Recipe/RecipeCardImage.vue b/frontend/components/Domain/Recipe/RecipeCardImage.vue index 2b405f55e0b..abc3cc7d569 100644 --- a/frontend/components/Domain/Recipe/RecipeCardImage.vue +++ b/frontend/components/Domain/Recipe/RecipeCardImage.vue @@ -2,6 +2,8 @@ - + @@ -135,6 +135,10 @@ export default defineComponent({ type: Boolean, default: false, }, + avatarSize: { + type: [Number, String], + default: 125, + }, }, setup(props) { const { $auth } = useContext(); diff --git a/frontend/components/Domain/Recipe/RecipeCardSection.vue b/frontend/components/Domain/Recipe/RecipeCardSection.vue index 46d570c6acd..9a40bfebb9e 100644 --- a/frontend/components/Domain/Recipe/RecipeCardSection.vue +++ b/frontend/components/Domain/Recipe/RecipeCardSection.vue @@ -58,7 +58,7 @@ From 042ac6bfa54df45ea83e99b2c406230eb6b129cf Mon Sep 17 00:00:00 2001 From: Hayden <64056131+hay-kot@users.noreply.github.com> Date: Sat, 24 Aug 2024 11:14:33 -0500 Subject: [PATCH 03/98] chore(l10n): New Crowdin updates (#4090) --- frontend/lang/messages/el-GR.json | 26 +++++----- frontend/lang/messages/uk-UA.json | 46 +++++++++--------- .../seed/resources/foods/locales/el-GR.json | 8 ++-- .../seed/resources/labels/locales/uk-UA.json | 2 +- .../seed/resources/units/locales/el-GR.json | 10 ++-- .../seed/resources/units/locales/uk-UA.json | 48 +++++++++---------- 6 files changed, 70 insertions(+), 70 deletions(-) diff --git a/frontend/lang/messages/el-GR.json b/frontend/lang/messages/el-GR.json index 8292d2a8de4..0396b7cbc2f 100644 --- a/frontend/lang/messages/el-GR.json +++ b/frontend/lang/messages/el-GR.json @@ -260,7 +260,7 @@ "default-to-landscape-view-description": "Οταν ενεργοποιηθεί το τμήμα κεφαλίδας συνταγής θα εμφανίζεται σε οριζόντια προβολή", "disable-users-from-commenting-on-recipes": "Απενεργοποίηση σχολιασμού χρηστών σε συνταγές", "disable-users-from-commenting-on-recipes-description": "Κρύβει το τμήμα σχολίων στη σελίδα συνταγών και απενεργοποιεί τον σχολιασμό", - "disable-organizing-recipe-ingredients-by-units-and-food": "Απενεργοποίηση οργάνωση των συστατικών συνταγή ανά μονάδα και τρόφιμο", + "disable-organizing-recipe-ingredients-by-units-and-food": "Απενεργοποίηση οργάνωση των συστατικών συνταγής ανά μονάδα και τρόφιμο", "disable-organizing-recipe-ingredients-by-units-and-food-description": "Κρύβει τα πεδία Τρόφιμο, Μονάδα, και Ποσότητα για συστατικά και αντιμετωπίζει τα συστατικά ως απλά πεδία κειμένου", "general-preferences": "Γενικές προτιμήσεις", "group-recipe-preferences": "Προτιμήσεις Συνταγών Ομάδας", @@ -295,15 +295,15 @@ "meal-plan": { "create-a-new-meal-plan": "Δημιουργία νέου σχεδίου γεύματος", "update-this-meal-plan": "Ενημέρωση αυτού του προγράμματος γευμάτων", - "dinner-this-week": "Δείπνο Αυτή Τη Εβδομάδα", - "dinner-today": "Δείπνο Σήμερα", - "dinner-tonight": "ΔΕΙΠΝΟ ΣΗΜΕΡΑ", - "edit-meal-plan": "Επεξεργασία Πλάνου Γεύματος", - "end-date": "Ημερομηνία Λήξης", + "dinner-this-week": "Βραδινό αυτή την εβδομάδα", + "dinner-today": "Βραδινό σήμερα", + "dinner-tonight": "ΒΡΑΔΙΝΟ ΑΠΟΨΕ", + "edit-meal-plan": "Επεξεργασία προγράμματος γευμάτων", + "end-date": "Ημερομηνία λήξης", "group": "Ομάδα (Beta)", "main": "Κεντρικό", - "meal-planner": "Προγραμματισμός Γεύματος", - "meal-plans": "Πλάνο Διατροφής", + "meal-planner": "Προγραμμ. Γευμάτων", + "meal-plans": "Προγράμματα Γευμάτων", "mealplan-categories": "ΚΑΤΗΓΟΡΙΕΣ ΠΡΟΓΡΑΜΜΑΤΩΝ ΓΕΥΜΑΤΩΝ", "mealplan-created": "Δημιουργήθηκε πρόγραμμα γευμάτων", "mealplan-creation-failed": "Αποτυχία δημιουργίας προγράμματος γευμάτων", @@ -316,7 +316,7 @@ "no-meal-planned-for-today": "Δεν έχει προγραμματιστεί γεύμα για σήμερα", "numberOfDays-hint": "Αριθμός ημερών κατά την φόρτωση της σελίδας", "numberOfDays-label": "Προεπιλεγμένες Ημέρες", - "only-recipes-with-these-categories-will-be-used-in-meal-plans": "Μόνο συνταγές με αυτές τις κατηγορίες θα χρησιμοποιηθούν στα σχέδια γεύματος", + "only-recipes-with-these-categories-will-be-used-in-meal-plans": "Μόνο συνταγές με αυτές τις κατηγορίες θα χρησιμοποιηθούν στα προγράμματα γευμάτων", "planner": "Προγραμματισμός", "quick-week": "Γρήγορη προβολή", "side": "Πλευρά", @@ -327,7 +327,7 @@ "breakfast": "Πρωινό", "lunch": "Μεσημεριανό", "dinner": "Βραδινό", - "type-any": "Οποιοδήποτε", + "type-any": "Οτιδήποτε", "day-any": "Οποιαδήποτε", "editor": "Επεξεργαστής κειμένου", "meal-recipe": "Συνταγή Γεύματος", @@ -847,7 +847,7 @@ "all-recipes": "Συνταγές όλες", "backups": "Αντίγραφα ασφαλείας", "categories": "Κατηγορίες", - "cookbooks": "Μαγειρικά Βιβλία", + "cookbooks": "Βιβλία Μαγειρικής", "dashboard": "Ταμπλό", "home-page": "Αρχική Σελίδα", "manage-users": "Διαχ. χρηστών", @@ -855,7 +855,7 @@ "profile": "Προφίλ", "search": "Αναζήτηση", "site-settings": "Ρυθμίσεις σελίδας", - "tags": "Ετικέτα", + "tags": "Ετικέτες", "toolbox": "Εργαλειοθήκη", "language": "Γλώσσα", "maintenance": "Συντήρηση", @@ -1270,7 +1270,7 @@ "cookbooks-description": "Διαχειριστείτε μια συλλογή κατηγοριών συνταγών και δημιουργήστε σελίδες για αυτές.", "members": "Μέλη", "members-description": "Δείτε ποιοι βρίσκονται στο νοικοκυριό σας και διαχειριστείτε τα δικαιώματά τους.", - "webhooks-description": "Ρυθμίστε webhooks που πυροδοτούνται τις ημέρες που έχετε προγραμματισμένα προγράμματα γευμάτων.", + "webhooks-description": "Ρυθμίστε webhooks που πυροδοτούνται τις ημέρες που έχετε προγραμματισμένα γεύματα.", "notifiers": "Ειδοποιητές", "notifiers-description": "Setup email and push notifications that trigger on specific events.", "manage-data": "Διαχείριση δεδομένων", diff --git a/frontend/lang/messages/uk-UA.json b/frontend/lang/messages/uk-UA.json index ce4d9acb146..bcd8468482c 100644 --- a/frontend/lang/messages/uk-UA.json +++ b/frontend/lang/messages/uk-UA.json @@ -8,7 +8,7 @@ "database-type": "Тип бази данних", "database-url": "URL-адреса бази даних", "default-group": "Групи за замовчуванням", - "default-household": "Default Household", + "default-household": "Сімʼя за замовчуванням", "demo": "Демо", "demo-status": "Статус демо", "development": "Розробка", @@ -270,27 +270,27 @@ "admin-group-management": "Керування Групами Адміністратора", "admin-group-management-text": "Зміни до цієї групи будуть відображені негайно.", "group-id-value": "Id групи: {0}", - "total-households": "Total Households" + "total-households": "Всього сімей" }, "household": { - "household": "Household", - "households": "Households", - "user-household": "User Household", - "create-household": "Create Household", - "household-name": "Household Name", - "household-group": "Household Group", - "household-management": "Household Management", - "manage-households": "Manage Households", + "household": "Сімʼя", + "households": "Сімʼї", + "user-household": "Сімʼя користувача", + "create-household": "Створити сімʼю", + "household-name": "Назва сім'ї", + "household-group": "Домашня група", + "household-management": "Сімейне управління", + "manage-households": "Управління сімʼями", "admin-household-management": "Admin Household Management", "admin-household-management-text": "Changes to this household will be reflected immediately.", - "household-id-value": "Household Id: {0}", - "private-household": "Private Household", + "household-id-value": "Ідентифікатор сімʼї: {0}", + "private-household": "Приватна сімʼя", "private-household-description": "Setting your household to private will default all public view options to default. This overrides any individual recipes public view settings.", "household-recipe-preferences": "Household Recipe Preferences", "default-recipe-preferences-description": "These are the default settings when a new recipe is created in your household. These can be changed for individual recipes in the recipe settings menu.", "allow-users-outside-of-your-household-to-see-your-recipes": "Allow users outside of your household to see your recipes", "allow-users-outside-of-your-household-to-see-your-recipes-description": "When enabled you can use a public share link to share specific recipes without authorizing the user. When disabled, you can only share recipes with users who are in your household or with a pre-generated private link", - "household-preferences": "Household Preferences" + "household-preferences": "Налаштування сімʼї" }, "meal-plan": { "create-a-new-meal-plan": "Створити новий план харчування", @@ -583,12 +583,12 @@ "create-recipe-description": "Створити новий рецепт з нуля.", "create-recipes": "Створити рецепти", "import-with-zip": "Імпорт з .zip", - "create-recipe-from-an-image": "Create Recipe from an Image", - "create-recipe-from-an-image-description": "Create a recipe by uploading an image of it. Mealie will attempt to extract the text from the image using AI and create a recipe from it.", - "crop-and-rotate-the-image": "Crop and rotate the image so that only the text is visible, and it's in the correct orientation.", - "create-from-image": "Create from Image", - "should-translate-description": "Translate the recipe into my language", - "please-wait-image-procesing": "Please wait, the image is processing. This may take some time.", + "create-recipe-from-an-image": "Створити рецепт з зображення", + "create-recipe-from-an-image-description": "Створити рецепт, завантаживши його зображення. Mealie спробує витягти текст з зображення за допомогою ШІ та створити рецепт з нього.", + "crop-and-rotate-the-image": "Обріжте і поверніть зображення так, щоб було видно лише текст в правильній орієнтації.", + "create-from-image": "Створити з зображення", + "should-translate-description": "Перекласти рецепт моєю мовою", + "please-wait-image-procesing": "Будь ласка, зачекайте, зображення обробляється. Це може зайняти деякий час.", "bulk-url-import": "Масовий URL імпорт", "debug-scraper": "Дебажити розпізнавач", "create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Створіть рецепт, надавши назву. Усі рецепти повинні мати унікальні назви.", @@ -1252,7 +1252,7 @@ "account-summary-description": "Ось підсумок інформації про вашу групу.", "group-statistics": "Статистика групи", "group-statistics-description": "Статистика вашої групи дає можливість зрозуміти, як ви користуєтеся Mealie.", - "household-statistics": "Household Statistics", + "household-statistics": "Статистика сімʼї", "household-statistics-description": "Your Household Statistics provide some insight how you're using Mealie.", "storage-capacity": "Обсяг сховища", "storage-capacity-description": "Об'єм сховища це сума зображені та відвантажених медіаресурсів.", @@ -1265,11 +1265,11 @@ "group-settings": "Налаштування групи", "group-settings-description": "Manage your common group settings, like privacy settings.", "household-description": "These items are shared within your household. Editing one of them will change it for the whole household!", - "household-settings": "Household Settings", + "household-settings": "Налаштування сімʼї", "household-settings-description": "Manage your household settings, like mealplan and privacy settings.", "cookbooks-description": "Управління колекцією категорій рецептів і генерація сторінок для них.", "members": "Учасники", - "members-description": "See who's in your household and manage their permissions.", + "members-description": "Подивіться, хто у вас в сім'ї й керуйте їх дозволами.", "webhooks-description": "Налаштуйте веб хуки, що спрацьовують у дні, коли у вас є запланований план харчування.", "notifiers": "Сповіщувачі", "notifiers-description": "Налаштуйте email та push сповіщення, що спрацьовують для певних подій.", @@ -1304,7 +1304,7 @@ "require-all-tools": "Вимагати всі інструменти", "cookbook-name": "Назва кулінарної книги", "cookbook-with-name": "Кулінарна книга {0}", - "household-cookbook-name": "{0} Cookbook {1}", + "household-cookbook-name": "{0} Кулінарна книга {1}", "create-a-cookbook": "Створити кулінарну книгу", "cookbook": "Кулінарна книга" } diff --git a/mealie/repos/seed/resources/foods/locales/el-GR.json b/mealie/repos/seed/resources/foods/locales/el-GR.json index e787fb9635e..2d4c806d0ea 100644 --- a/mealie/repos/seed/resources/foods/locales/el-GR.json +++ b/mealie/repos/seed/resources/foods/locales/el-GR.json @@ -73,7 +73,7 @@ "eggs": "αβγά", "ghee": "γκι (βούτυρο)", "milk": "γάλα", - "dandelion": "dandelion", + "dandelion": "πικραλίδα", "demerara-sugar": "ζάχαρη demerara", "dough": "ζυμάρι", "edible-cactus": "κάκτος που τρώγεται", @@ -142,7 +142,7 @@ "meat": "κρέας", "mortadella": "μορταδέλα", "mushroom": "μανιτάρι", - "white-mushroom": "white mushroom", + "white-mushroom": "λευκό μανιτάρι", "mussels": "μύδια", "nori": "νόρι", "nutmeg": "μοσχοκάρυδο", @@ -159,7 +159,7 @@ "scallion": "scallion", "shallot": "εσαλότ", "spring-onion": "spring onion", - "orange-blossom-water": "orange blossom water", + "orange-blossom-water": "νερό από άνθη πορτοκαλιάς", "oysters": "στρείδια", "panch-puran": "panch puran", "paprika": "πάπρικα", @@ -207,7 +207,7 @@ "tahini": "ταχίνι", "tubers": "βολβοί", "potato": "πατάτα", - "sunchoke": "sunchoke", + "sunchoke": "τοπιναμπούρ", "taro": "κολοκασία (εδώδιμος)", "yam": "γιαμ", "turnip": "γογγύλι", diff --git a/mealie/repos/seed/resources/labels/locales/uk-UA.json b/mealie/repos/seed/resources/labels/locales/uk-UA.json index 79912c50e97..8dec4fd2b44 100644 --- a/mealie/repos/seed/resources/labels/locales/uk-UA.json +++ b/mealie/repos/seed/resources/labels/locales/uk-UA.json @@ -42,7 +42,7 @@ "name": "Здорова їжа" }, { - "name": "Господарство" + "name": "Сім'я" }, { "name": "М'ясні Продукти" diff --git a/mealie/repos/seed/resources/units/locales/el-GR.json b/mealie/repos/seed/resources/units/locales/el-GR.json index ed336e9b382..fa457ba1501 100644 --- a/mealie/repos/seed/resources/units/locales/el-GR.json +++ b/mealie/repos/seed/resources/units/locales/el-GR.json @@ -30,8 +30,8 @@ "abbreviation": "pt" }, "quart": { - "name": "1/4", - "plural_name": "τέταρτα", + "name": "τέταρτο γαλονιού", + "plural_name": "τέταρτα γαλονιού", "description": "", "abbreviation": "1/4" }, @@ -64,7 +64,7 @@ "name": "ουγγιά", "plural_name": "ουγγιές", "description": "", - "abbreviation": "οζ" + "abbreviation": "oz" }, "gram": { "name": "γραμμάριο", @@ -91,8 +91,8 @@ "abbreviation": "" }, "dash": { - "name": "παύλα", - "plural_name": "παύλες", + "name": "σπυρί", + "plural_name": "σπυριά", "description": "", "abbreviation": "" }, diff --git a/mealie/repos/seed/resources/units/locales/uk-UA.json b/mealie/repos/seed/resources/units/locales/uk-UA.json index a2b8620eb54..c7ed913d75f 100644 --- a/mealie/repos/seed/resources/units/locales/uk-UA.json +++ b/mealie/repos/seed/resources/units/locales/uk-UA.json @@ -1,86 +1,86 @@ { "teaspoon": { "name": "ч. ложка", - "plural_name": "teaspoons", + "plural_name": "чайні ложки", "description": "", "abbreviation": "ч. ложка" }, "tablespoon": { "name": "ст. ложка", - "plural_name": "tablespoons", + "plural_name": "столові ложки", "description": "", "abbreviation": "ст. ложка" }, "cup": { "name": "чашка", - "plural_name": "cups", + "plural_name": "чашки", "description": "", - "abbreviation": "c" + "abbreviation": "ч" }, "fluid-ounce": { "name": "рідка унція", - "plural_name": "fluid ounces", + "plural_name": "рідкі унції", "description": "", "abbreviation": "р. унц" }, "pint": { "name": "пінта", - "plural_name": "pints", + "plural_name": "пінти", "description": "", "abbreviation": "пт" }, "quart": { "name": "кварта", - "plural_name": "quarts", + "plural_name": "кварти", "description": "", "abbreviation": "кв" }, "gallon": { "name": "галон", - "plural_name": "gallons", + "plural_name": "галони", "description": "", "abbreviation": "гл" }, "milliliter": { "name": "мілілітр", - "plural_name": "milliliters", + "plural_name": "мілілітри", "description": "", "abbreviation": "мл" }, "liter": { "name": "літр", - "plural_name": "liters", + "plural_name": "літри", "description": "", "abbreviation": "л" }, "pound": { "name": "фунт", - "plural_name": "pounds", + "plural_name": "фунти", "description": "", "abbreviation": "фт", - "plural_abbreviation": "lbs" + "plural_abbreviation": "фнт" }, "ounce": { "name": "унція", - "plural_name": "ounces", + "plural_name": "унції", "description": "", "abbreviation": "унц" }, "gram": { "name": "грам", - "plural_name": "grams", + "plural_name": "грами", "description": "", "abbreviation": "г" }, "kilogram": { "name": "кілограм", - "plural_name": "kilograms", + "plural_name": "кілограм", "description": "", "abbreviation": "кг" }, "milligram": { "name": "міліграм", - "plural_name": "milligrams", + "plural_name": "міліграм", "description": "", "abbreviation": "мг" }, @@ -98,37 +98,37 @@ }, "serving": { "name": "порція", - "plural_name": "servings", + "plural_name": "порції", "description": "", "abbreviation": "" }, "head": { "name": "голівка", - "plural_name": "heads", + "plural_name": "голівки", "description": "", "abbreviation": "" }, "clove": { "name": "зубчик", - "plural_name": "cloves", + "plural_name": "зубчики", "description": "", "abbreviation": "" }, "can": { "name": "банка", - "plural_name": "cans", + "plural_name": "банки", "description": "", "abbreviation": "" }, "bunch": { - "name": "bunch", - "plural_name": "bunches", + "name": "жменя", + "plural_name": "жмені", "description": "", "abbreviation": "" }, "pack": { - "name": "pack", - "plural_name": "packs", + "name": "пачка", + "plural_name": "пачки", "description": "", "abbreviation": "" }, From c688114e1538a2a2360a91bd40545315fe06d7d3 Mon Sep 17 00:00:00 2001 From: boc-the-git <3479092+boc-the-git@users.noreply.github.com> Date: Sun, 25 Aug 2024 13:05:50 +1000 Subject: [PATCH 04/98] docs: Tidy unicorn workers description (#4095) --- .../getting-started/installation/backend-config.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/documentation/getting-started/installation/backend-config.md b/docs/docs/documentation/getting-started/installation/backend-config.md index 8dd913dc5c3..e5fdc0912e8 100644 --- a/docs/docs/documentation/getting-started/installation/backend-config.md +++ b/docs/docs/documentation/getting-started/installation/backend-config.md @@ -58,7 +58,7 @@ Changing the webworker settings may cause unforeseen memory leak issues with Mea | Variables | Default | Description | | --------------- | :-----: | ----------------------------------------------------------------------------- | -| UVICORN_WORKERS | 1 | Sets the number of works for the web server [more info here][unicorn_workers] | +| UVICORN_WORKERS | 1 | Sets the number of workers for the web server. [More info here][unicorn_workers] | ### LDAP From 9b6f323b6fdcc7cc0cc7daa986eb5d33fd5255d9 Mon Sep 17 00:00:00 2001 From: Hayden <64056131+hay-kot@users.noreply.github.com> Date: Sun, 25 Aug 2024 15:30:20 -0500 Subject: [PATCH 05/98] chore(l10n): New Crowdin updates (#4098) --- frontend/lang/messages/de-DE.json | 8 ++-- frontend/lang/messages/fi-FI.json | 12 ++--- frontend/lang/messages/gl-ES.json | 36 +++++++-------- frontend/lang/messages/ru-RU.json | 26 +++++------ mealie/lang/messages/ru-RU.json | 44 +++++++++---------- .../seed/resources/foods/locales/el-GR.json | 6 +-- .../seed/resources/labels/locales/el-GR.json | 2 +- .../seed/resources/units/locales/de-DE.json | 14 +++--- .../seed/resources/units/locales/ru-RU.json | 44 +++++++++---------- 9 files changed, 96 insertions(+), 96 deletions(-) diff --git a/frontend/lang/messages/de-DE.json b/frontend/lang/messages/de-DE.json index 6061ef19643..25d5db0d533 100644 --- a/frontend/lang/messages/de-DE.json +++ b/frontend/lang/messages/de-DE.json @@ -279,7 +279,7 @@ "create-household": "Haushalt erstellen", "household-name": "Haushalt Name", "household-group": "Haushalt Gruppe", - "household-management": "Haushalt Verwaltung", + "household-management": "Haushaltsverwaltung", "manage-households": "Haushalte verwalten", "admin-household-management": "Administrator Haushaltverwaltung", "admin-household-management-text": "Änderungen an diesem Haushalt sind sofort wirksam.", @@ -290,7 +290,7 @@ "default-recipe-preferences-description": "Das sind die Standardeinstellungen, wenn ein neues Rezept in deinem Haushalt erstellt wird. Sie können für einzelne Rezepte in den Rezepteinstellungen geändert werden.", "allow-users-outside-of-your-household-to-see-your-recipes": "Erlaube Benutzern außerhalb deines Haushalts, deine Rezepte zu sehen", "allow-users-outside-of-your-household-to-see-your-recipes-description": "Wenn aktiviert, kannst du einen öffentlichen Link verwenden, um ausgewählte Rezepte zu teilen, ohne dass Benutzer sich anmelden müssen. Wenn deaktiviert, kannst du nur Rezepte mit Benutzern in deinem Haushalt teilen oder einen vorher erstellten privaten Link verwenden", - "household-preferences": "Haushalt Konfiguration" + "household-preferences": "Haushaltskonfiguration" }, "meal-plan": { "create-a-new-meal-plan": "Neue Mahlzeit planen", @@ -1252,7 +1252,7 @@ "account-summary-description": "Hier ist eine Zusammenfassung der Details deiner Gruppe.", "group-statistics": "Gruppenstatistik", "group-statistics-description": "Deine Gruppenstatistik gibt dir einen Einblick, wie du Mealie verwendest.", - "household-statistics": "Haushalt Statistik", + "household-statistics": "Haushaltsstatistik", "household-statistics-description": "Deine Haushaltsstatistik gibt dir einen Einblick, wie du Mealie verwendest.", "storage-capacity": "Speicherplatz", "storage-capacity-description": "Dein Speicherplatz wird anhand der Bilder und Anhänge berechnet, die du hochgeladen hast.", @@ -1265,7 +1265,7 @@ "group-settings": "Gruppen-Einstellungen", "group-settings-description": "Verwalte deine allgemeinen Gruppeneinstellungen wie Essenspläne und Privatsphäre.", "household-description": "Diese Einstellungen betreffen deinen Haushalt. Änderung wirken sich auf den gesamten Haushalt aus!", - "household-settings": "Haushalt Einstellungen", + "household-settings": "Haushaltseinstellungen", "household-settings-description": "Verwalte deine Haushaltseinstellungen wie zum Beispiel Essenspläne und Privatsphäre.", "cookbooks-description": "Verwalte eine Sammlung mit Rezept-Kategorien und erstelle Seiten für sie.", "members": "Mitglieder", diff --git a/frontend/lang/messages/fi-FI.json b/frontend/lang/messages/fi-FI.json index db28c8994d0..c5b7655434e 100644 --- a/frontend/lang/messages/fi-FI.json +++ b/frontend/lang/messages/fi-FI.json @@ -79,7 +79,7 @@ "tag-events": "Valitse tapahtumat", "category-events": "Luokkatapahtumat", "when-a-new-user-joins-your-group": "Kun ryhmääsi liittyy uusi jäsen", - "recipe-events": "Recipe Events" + "recipe-events": "Reseptitapahtumat" }, "general": { "add": "Lisää", @@ -239,7 +239,7 @@ "keep-my-recipes-private-description": "Asettaa ryhmäsi ja kaikki reseptit yksityisiksi. Voit aina muuttaa tätä myöhemmin." }, "manage-members": "Hallitse jäseniä", - "manage-members-description": "Manage the permissions of the members in your household. {manage} allows the user to access the data-management page, and {invite} allows the user to generate invitation links for other users. Group owners cannot change their own permissions.", + "manage-members-description": "Hallitse kotitaloutesi jäsenten oikeuksia. {manage} antaa jäsenelle pääsyn tietojenkäsittelysivulle, ja {invite} antaa käyttäjän luoda kutsulinkkejä muille käyttäjille. Ryhmien omistajat eivät voi muuttaa omia oikeuksiaan.", "manage": "Hallitse", "invite": "Kutsu", "looking-to-update-your-profile": "Haluatko päivittää käyttäjäsivusi?", @@ -247,7 +247,7 @@ "default-recipe-preferences": "Oletusreseptiasetukset", "group-preferences": "Ryhmän oletusasetukset", "private-group": "Yksityinen ryhmä", - "private-group-description": "Setting your group to private will default all public view options to default. This overrides any individual households or recipes public view settings.", + "private-group-description": "Ryhmäsi asettaminen yksityiseksi muuttaa kaikki julkisen näkymän asetukset oletusarvoiksi. Tämä ajaa kaikkien yksittäisten kotitalouksien ja reseptien julkisen näkymien asetusten yli.", "enable-public-access": "Salli julkinen käyttö", "enable-public-access-description": "Julkista ryhmän reseptit automaattisesti ja anna vierailijoiden nähdä reseptit kirjautumatta sisään", "allow-users-outside-of-your-group-to-see-your-recipes": "Anna muiden kuin ryhmäsi jäsenten nähdä reseptisi", @@ -261,7 +261,7 @@ "disable-users-from-commenting-on-recipes": "Estä käyttäjiä kommentoimasta reseptiä", "disable-users-from-commenting-on-recipes-description": "Piilottaa reseptisivun kommenttiosion ja kytkee kommentoinnin pois käytöstä", "disable-organizing-recipe-ingredients-by-units-and-food": "Poista reseptien lajittelu yksiköiden ja ruoan mukaan", - "disable-organizing-recipe-ingredients-by-units-and-food-description": "Hides the Food, Unit, and Amount fields for ingredients and treats ingredients as plain text fields", + "disable-organizing-recipe-ingredients-by-units-and-food-description": "Piilottaa ruoan, yksikön ja määrän kentät ainesosien osalta ja käsittelee niitä tekstikenttinä", "general-preferences": "Yleiset Asetukset", "group-recipe-preferences": "Ryhmän reseptiasetukset", "report": "Raportti", @@ -285,9 +285,9 @@ "admin-household-management-text": "Muutokset tähän kotitalouteen astuvat välittömästi voimaan.", "household-id-value": "Kotitalouden tunniste: {0}", "private-household": "Yksityinen Kotitalous", - "private-household-description": "Setting your household to private will default all public view options to default. This overrides any individual recipes public view settings.", + "private-household-description": "Kotitalouden asettaminen yksityiseksi muuttaa kaikki julkisen näkymän asetukset oletusarvoisiksi. Tämä ohittaa yksittäisten reseptien julkisten näkymien asetukset.", "household-recipe-preferences": "Kotitalouksien reseptiasetukset", - "default-recipe-preferences-description": "These are the default settings when a new recipe is created in your household. These can be changed for individual recipes in the recipe settings menu.", + "default-recipe-preferences-description": "Tässä on kotitaloutesi uuden reseptin oletusasetukset. Näitä voi muuttaa yksittäisten reseptien osalta reseptin asetuksissa.", "allow-users-outside-of-your-household-to-see-your-recipes": "Salli kotitalouden ulkopuolisten käyttäjien nähdä reseptit", "allow-users-outside-of-your-household-to-see-your-recipes-description": "When enabled you can use a public share link to share specific recipes without authorizing the user. When disabled, you can only share recipes with users who are in your household or with a pre-generated private link", "household-preferences": "Kotitalouksien asetukset" diff --git a/frontend/lang/messages/gl-ES.json b/frontend/lang/messages/gl-ES.json index c644f8effd4..b6dcbc83239 100644 --- a/frontend/lang/messages/gl-ES.json +++ b/frontend/lang/messages/gl-ES.json @@ -8,7 +8,7 @@ "database-type": "Tipo de base de datos", "database-url": "URL da base de datos", "default-group": "Grupo por defecto", - "default-household": "Default Household", + "default-household": "Casa predeterminada", "demo": "Demostración", "demo-status": "Estado da demostración", "development": "Desenvolvemento", @@ -239,7 +239,7 @@ "keep-my-recipes-private-description": "Establece o teu grupo e todas as receitas como privados por defecto. Sempre podes cambiar isto máis tarde." }, "manage-members": "Xestionar Membros", - "manage-members-description": "Manage the permissions of the members in your household. {manage} allows the user to access the data-management page, and {invite} allows the user to generate invitation links for other users. Group owners cannot change their own permissions.", + "manage-members-description": "Xestiona os permisos dos membros da túa casa. {manage} permítelle ao usuario acceder á páxina de xestión de datos {invite} permítelle xerar ligazóns de invitación para outros usuarios. Os propietarios do grupo non poden cambiar os seus propios permisos.", "manage": "Xestionar", "invite": "Convidar", "looking-to-update-your-profile": "Buscas Actualizar o Teu Perfil?", @@ -247,7 +247,7 @@ "default-recipe-preferences": "Preferencias de Receitas Predeterminadas", "group-preferences": "Preferencias do Grupo", "private-group": "Grupo Privado", - "private-group-description": "Setting your group to private will default all public view options to default. This overrides any individual households or recipes public view settings.", + "private-group-description": "Ao configurar o teu grupo como privado, todas as opcións de visualización pública serán as predeterminadas. Isto anula as casas e as configuracións de vista pública das receitas.", "enable-public-access": "Habilitar o Acceso Público", "enable-public-access-description": "Fai que as receitas do grupo sexan públicas de forma predeterminada e permita que os visitantes vexan receitas sen iniciar sesión", "allow-users-outside-of-your-group-to-see-your-recipes": "Permite que os usuarios alleos ao teu grupo vexan as túas receitas", @@ -261,7 +261,7 @@ "disable-users-from-commenting-on-recipes": "Deshabilitar aos usuarios para comentar receitas", "disable-users-from-commenting-on-recipes-description": "Oculta a sección de comentarios na páxina de receitas e desactiva os comentarios", "disable-organizing-recipe-ingredients-by-units-and-food": "Desactivar a organización dos ingredientes da receita por unidades e alimentos", - "disable-organizing-recipe-ingredients-by-units-and-food-description": "Hides the Food, Unit, and Amount fields for ingredients and treats ingredients as plain text fields", + "disable-organizing-recipe-ingredients-by-units-and-food-description": "Oculta os campos Comida, Unidade e Cantidade dos ingredientes e trata os ingredientes como campos de texto simple", "general-preferences": "Preferencias Xerais", "group-recipe-preferences": "Preferencias de Receitas de Grupo", "report": "Informar", @@ -270,22 +270,22 @@ "admin-group-management": "Xestión do Grupo de Administración", "admin-group-management-text": "Os cambios neste grupo reflectiranse inmediatamente.", "group-id-value": "Id do grupo: {0}", - "total-households": "Total Households" + "total-households": "Casas totais" }, "household": { - "household": "Household", - "households": "Households", - "user-household": "User Household", - "create-household": "Create Household", - "household-name": "Household Name", - "household-group": "Household Group", - "household-management": "Household Management", - "manage-households": "Manage Households", - "admin-household-management": "Admin Household Management", - "admin-household-management-text": "Changes to this household will be reflected immediately.", - "household-id-value": "Household Id: {0}", - "private-household": "Private Household", - "private-household-description": "Setting your household to private will default all public view options to default. This overrides any individual recipes public view settings.", + "household": "Casa", + "households": "Casas", + "user-household": "Casa do usuario", + "create-household": "Casa creada", + "household-name": "Nome da casa", + "household-group": "Grupo da casa", + "household-management": "Xestión da casa", + "manage-households": "Xestionar a casa", + "admin-household-management": "Xestionar as casas como administrador", + "admin-household-management-text": "Os cambios nesta casa reflectiranse inmediatamente.", + "household-id-value": "Identificación da casa: {0}", + "private-household": "Casa privada", + "private-household-description": "Ao configurar a túa casa como privada, todas as opcións de visualización pública serán predeterminadas. Isto anula as configuracións de vista pública das receitas.", "household-recipe-preferences": "Household Recipe Preferences", "default-recipe-preferences-description": "These are the default settings when a new recipe is created in your household. These can be changed for individual recipes in the recipe settings menu.", "allow-users-outside-of-your-household-to-see-your-recipes": "Allow users outside of your household to see your recipes", diff --git a/frontend/lang/messages/ru-RU.json b/frontend/lang/messages/ru-RU.json index 6ceee56cb58..de9a2490528 100644 --- a/frontend/lang/messages/ru-RU.json +++ b/frontend/lang/messages/ru-RU.json @@ -8,7 +8,7 @@ "database-type": "Тип базы данных", "database-url": "URL базы данных", "default-group": "Группа по умолчанию", - "default-household": "Default Household", + "default-household": "Дом по умолчанию", "demo": "Демо", "demo-status": "Демо-статус", "development": "В разработке", @@ -65,7 +65,7 @@ "something-went-wrong": "Что-то пошло не так!", "subscribed-events": "События с подпиской", "test-message-sent": "Тестовое сообщение отправлено", - "message-sent": "Message Sent", + "message-sent": "Сообщение отправлено", "new-notification": "Новое уведомление", "event-notifiers": "Уведомления о событии", "apprise-url-skipped-if-blank": "URL-адрес (пропущен, если пусто)", @@ -211,7 +211,7 @@ "unsaved-changes": "У вас есть несохраненные изменения. Вы хотите сохранить их перед выходом?", "clipboard-copy-failure": "Не удалось скопировать текст.", "confirm-delete-generic-items": "Вы уверены, что хотите удалить следующие элементы?", - "organizers": "Organizers", + "organizers": "Организаторы", "caution": "Caution" }, "group": { @@ -637,7 +637,7 @@ "no-unit": "No unit", "missing-unit": "Create missing unit: {unit}", "missing-food": "Create missing food: {food}", - "no-food": "No Food" + "no-food": "Нет еды" } }, "search": { @@ -802,12 +802,12 @@ "ldap-ready-success-text": "Все требуемые переменные для LDAP установлены.", "build": "Сборка", "recipe-scraper-version": "Версия скрейпера рецептов", - "oidc-ready": "OIDC Ready", + "oidc-ready": "OIDC Готов", "oidc-ready-error-text": "Not all OIDC Values are configured. This can be ignored if you are not using OIDC Authentication.", - "oidc-ready-success-text": "Required OIDC variables are all set.", - "openai-ready": "OpenAI Ready", + "oidc-ready-success-text": "Все требуемые переменные для OIDC установлены.", + "openai-ready": "OpenAI Готов", "openai-ready-error-text": "Not all OpenAI Values are configured. This can be ignored if you are not using OpenAI features.", - "openai-ready-success-text": "Required OpenAI variables are all set." + "openai-ready-success-text": "Все требуемые переменные для OpenAI установлены." }, "shopping-list": { "all-lists": "Все списки", @@ -837,7 +837,7 @@ "items-checked-count": "Нет выбранных элементов|Один элемент выбран|{count} элементов выбрано", "no-label": "Без метки", "completed-on": "Выполнено в {date}", - "you-are-offline": "You are offline", + "you-are-offline": "Вы не в сети", "you-are-offline-description": "Not all features are available while offline. You can still add, modify, and remove items, but you will not be able to sync your changes to the server until you are back online.", "are-you-sure-you-want-to-check-all-items": "Are you sure you want to check all items?", "are-you-sure-you-want-to-uncheck-all-items": "Are you sure you want to uncheck all items?", @@ -985,7 +985,7 @@ "authentication-method-hint": "This specifies how a user will authenticate with Mealie. If you're not sure, choose 'Mealie", "permissions": "Права доступа", "administrator": "Администратор", - "user-can-invite-other-to-group": "User can invite others to group", + "user-can-invite-other-to-group": "Пользователь может пригласить других в группу", "user-can-manage-group": "Пользователь может управлять группой", "user-can-organize-group-data": "Пользователь может менять групповые данные", "enable-advanced-features": "Включить доп. функции", @@ -1074,7 +1074,7 @@ "recipe-actions-data": "Recipe Actions Data", "new-recipe-action": "New Recipe Action", "edit-recipe-action": "Edit Recipe Action", - "action-type": "Action Type" + "action-type": "Тип Действия" }, "create-alias": "Создать псевдоним", "manage-aliases": "Управление псевдонимами", @@ -1237,14 +1237,14 @@ "welcome-to-mealie-get-started": "Добро пожаловать в Mealie! Давайте начнем", "already-set-up-bring-to-homepage": "Я уже готов, просто открой домашнюю страницу", "common-settings-for-new-sites": "Here are some common settings for new sites", - "setup-complete": "Setup Complete!", + "setup-complete": "Настройка завершена!", "here-are-a-few-things-to-help-you-get-started": "Here are a few things to help you get started with Mealie", "restore-from-v1-backup": "Have a backup from a previous instance of Mealie v1? You can restore it here.", "manage-profile-or-get-invite-link": "Manage your own profile, or grab an invite link to share with others." } }, "profile": { - "welcome-user": "👋 Welcome, {0}!", + "welcome-user": "👋 Добро пожаловать, {0}!", "description": "Управление настройками профиля, рецептов и группы.", "get-invite-link": "Получить ссылку для приглашения", "get-public-link": "Получить публичную ссылку", diff --git a/mealie/lang/messages/ru-RU.json b/mealie/lang/messages/ru-RU.json index 8f88c5eec1f..6f993a287f0 100644 --- a/mealie/lang/messages/ru-RU.json +++ b/mealie/lang/messages/ru-RU.json @@ -6,7 +6,7 @@ "unique-name-error": "Название рецепта должно быть уникальным", "recipe-defaults": { "ingredient-note": "1 Чашка муки", - "step-text": "Recipe steps as well as other fields in the recipe page support markdown syntax.\n\n**Add a link**\n\n[My Link](https://demo.mealie.io)\n" + "step-text": "Шаги рецепта, как и другие поля на странице рецепта, поддерживают синтаксис Markdown.\n\n**Добавить ссылку**\n\n[Моя Ссылка](https://demo.mealie.io)\n" } }, "mealplan": { @@ -38,34 +38,34 @@ }, "datetime": { "year": "год|лет", - "day": "day|days", - "hour": "hour|hours", - "minute": "minute|minutes", - "second": "second|seconds", - "millisecond": "millisecond|milliseconds", - "microsecond": "microsecond|microseconds" + "day": "день|дней", + "hour": "час|часов", + "minute": "минута|минут", + "second": "секунда|секунд", + "millisecond": "миллисекунда|миллисекунд", + "microsecond": "микросекунда|микросекунд" }, "emails": { "password": { - "subject": "Mealie Forgot Password", - "header_text": "Forgot Password", - "message_top": "You have requested to reset your password.", - "message_bottom": "Please click the button above to reset your password.", - "button_text": "Reset Password" + "subject": "Mealie забыла пароль", + "header_text": "Забыл пароль", + "message_top": "Вы запросили сброс пароля.", + "message_bottom": "Пожалуйста, нажмите на кнопку снизу для сброса пароля.", + "button_text": "Сбросить пароль" }, "invitation": { - "subject": "Invitation to join Mealie", - "header_text": "You're Invited!", - "message_top": "You have been invited to join Mealie.", - "message_bottom": "Please click the button above to accept the invitation.", - "button_text": "Accept Invitation" + "subject": "Приглашение присоединиться к Mealie", + "header_text": "Вы приглашены!", + "message_top": "Вас пригласили присоединиться к Mealie.", + "message_bottom": "Пожалуйста, нажмите на кнопку выше, чтобы принять приглашение.", + "button_text": "Принять приглашение" }, "test": { - "subject": "Mealie Test Email", - "header_text": "Test Email", - "message_top": "This is a test email.", - "message_bottom": "Please click the button above to test the email.", - "button_text": "Open Mealie" + "subject": "Тестовое Письмо Mealie", + "header_text": "Тестовое Письмо", + "message_top": "Это тестовое письмо.", + "message_bottom": "Пожалуйста, нажмите на кнопку сверху, чтобы протестировать эл. Почту.", + "button_text": "Открыть Mealie" } } } diff --git a/mealie/repos/seed/resources/foods/locales/el-GR.json b/mealie/repos/seed/resources/foods/locales/el-GR.json index 2d4c806d0ea..26395840be9 100644 --- a/mealie/repos/seed/resources/foods/locales/el-GR.json +++ b/mealie/repos/seed/resources/foods/locales/el-GR.json @@ -69,7 +69,7 @@ "cucumber": "αγγούρι", "cumin": "κύμινο", "daikon": "νταϊκόν", - "dairy-products-and-dairy-substitutes": "γαλακτοκομικά προϊόντα και υποκατάστατα γαλακτοκομικών προϊόντων", + "dairy-products-and-dairy-substitutes": "γαλακτοκομικά και υποκατάστατα γαλακτοκομικών", "eggs": "αβγά", "ghee": "γκι (βούτυρο)", "milk": "γάλα", @@ -165,7 +165,7 @@ "paprika": "πάπρικα", "parsnip": "παστινάκι", "pepper": "πιπέρι", - "peppers": "πιπέρια", + "peppers": "πιπεριές", "plantain": "μπανάνες Αντιλλών", "pineapple": "ανανάς", "poppy-seeds": "παπαρουνόσπορος", @@ -205,7 +205,7 @@ "sweeteners": "γλυκαντικά", "cane-sugar": "ζάχαρη ζαχαροκαλάμου", "tahini": "ταχίνι", - "tubers": "βολβοί", + "tubers": "κόνδυλοι", "potato": "πατάτα", "sunchoke": "τοπιναμπούρ", "taro": "κολοκασία (εδώδιμος)", diff --git a/mealie/repos/seed/resources/labels/locales/el-GR.json b/mealie/repos/seed/resources/labels/locales/el-GR.json index 8aa75d4825c..23266cfe69d 100644 --- a/mealie/repos/seed/resources/labels/locales/el-GR.json +++ b/mealie/repos/seed/resources/labels/locales/el-GR.json @@ -1,6 +1,6 @@ [ { - "name": "Produce" + "name": "Παραγωγής" }, { "name": "Σιτηρά" diff --git a/mealie/repos/seed/resources/units/locales/de-DE.json b/mealie/repos/seed/resources/units/locales/de-DE.json index 245cf8300eb..acd245fa223 100644 --- a/mealie/repos/seed/resources/units/locales/de-DE.json +++ b/mealie/repos/seed/resources/units/locales/de-DE.json @@ -13,31 +13,31 @@ }, "cup": { "name": "Tasse", - "plural_name": "cups", + "plural_name": "Tassen", "description": "", "abbreviation": "c" }, "fluid-ounce": { "name": "Flüssigunze", - "plural_name": "fluid ounces", + "plural_name": "Flüssigunzen", "description": "", "abbreviation": "fl oz" }, "pint": { "name": "Pint", - "plural_name": "pints", + "plural_name": "Pints", "description": "", "abbreviation": "pt" }, "quart": { "name": "quart", - "plural_name": "quarts", + "plural_name": "Quarts", "description": "", "abbreviation": "qt" }, "gallon": { "name": "Gallone", - "plural_name": "gallons", + "plural_name": "Gallonen", "description": "", "abbreviation": "gal" }, @@ -55,14 +55,14 @@ }, "pound": { "name": "Pfund", - "plural_name": "pounds", + "plural_name": "Pfunde", "description": "", "abbreviation": "lb", "plural_abbreviation": "lbs" }, "ounce": { "name": "Unze", - "plural_name": "ounces", + "plural_name": "Unzen", "description": "", "abbreviation": "oz" }, diff --git a/mealie/repos/seed/resources/units/locales/ru-RU.json b/mealie/repos/seed/resources/units/locales/ru-RU.json index ad5e733cc00..153ffedd855 100644 --- a/mealie/repos/seed/resources/units/locales/ru-RU.json +++ b/mealie/repos/seed/resources/units/locales/ru-RU.json @@ -1,92 +1,92 @@ { "teaspoon": { "name": "чайная ложка", - "plural_name": "teaspoons", + "plural_name": "чайные ложки", "description": "", "abbreviation": "ч. ложек" }, "tablespoon": { "name": "столовая ложка", - "plural_name": "tablespoons", + "plural_name": "столовые ложки", "description": "", "abbreviation": "ст. ложек" }, "cup": { "name": "чашка", - "plural_name": "cups", + "plural_name": "чашки", "description": "", - "abbreviation": "c" + "abbreviation": "ч" }, "fluid-ounce": { "name": "жидкая унция", - "plural_name": "fluid ounces", + "plural_name": "жидкие унции", "description": "", "abbreviation": "жид. ун." }, "pint": { "name": "пинта", - "plural_name": "pints", + "plural_name": "пинты", "description": "", "abbreviation": "пт" }, "quart": { "name": "кварта", - "plural_name": "quarts", + "plural_name": "кварты", "description": "", "abbreviation": "кварта" }, "gallon": { "name": "галлон", - "plural_name": "gallons", + "plural_name": "галлоны", "description": "", "abbreviation": "гал" }, "milliliter": { "name": "миллилитр", - "plural_name": "milliliters", + "plural_name": "миллилитры", "description": "", "abbreviation": "мл" }, "liter": { "name": "литр", - "plural_name": "liters", + "plural_name": "литры", "description": "", "abbreviation": "л" }, "pound": { "name": "фунт", - "plural_name": "pounds", + "plural_name": "фунты", "description": "", "abbreviation": "фунт", - "plural_abbreviation": "lbs" + "plural_abbreviation": "фунты" }, "ounce": { "name": "унция", - "plural_name": "ounces", + "plural_name": "унции", "description": "", "abbreviation": "унция" }, "gram": { "name": "грамм", - "plural_name": "grams", + "plural_name": "граммы", "description": "", "abbreviation": "г" }, "kilogram": { "name": "килограмм", - "plural_name": "kilograms", + "plural_name": "килограммы", "description": "", "abbreviation": "кг" }, "milligram": { "name": "миллиграмм", - "plural_name": "milligrams", + "plural_name": "миллиграммы", "description": "", "abbreviation": "мг" }, "splash": { "name": "капелька", - "plural_name": "splashes", + "plural_name": "капли", "description": "", "abbreviation": "" }, @@ -98,7 +98,7 @@ }, "serving": { "name": "порция", - "plural_name": "servings", + "plural_name": "порции", "description": "", "abbreviation": "" }, @@ -116,19 +116,19 @@ }, "can": { "name": "банка", - "plural_name": "cans", + "plural_name": "банки", "description": "", "abbreviation": "" }, "bunch": { - "name": "bunch", + "name": "кучка", "plural_name": "bunches", "description": "", "abbreviation": "" }, "pack": { - "name": "pack", - "plural_name": "packs", + "name": "пачка", + "plural_name": "пачки", "description": "", "abbreviation": "" }, From 795f5ea4f1fe002227d689f1d58409f60a87b8d5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 26 Aug 2024 16:19:45 +0000 Subject: [PATCH 06/98] fix(deps): update dependency recipe-scrapers to v15.1.0 (#4103) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 7b74af13287..e20a4a76f91 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2669,13 +2669,13 @@ tests = ["html5lib", "pytest", "pytest-cov"] [[package]] name = "recipe-scrapers" -version = "15.0.0" +version = "15.1.0" description = "Python package, scraping recipes from all over the internet" optional = false python-versions = ">=3.8" files = [ - {file = "recipe_scrapers-15.0.0-py3-none-any.whl", hash = "sha256:705d4e80bd0471f4fd73c584a551ca94f96521fdb1e766614aaebd32014d72c9"}, - {file = "recipe_scrapers-15.0.0.tar.gz", hash = "sha256:d6fc8c5bacb67b571ac1cbaf4ab77e5f338112c107d40062e0a68403d16b8872"}, + {file = "recipe_scrapers-15.1.0-py3-none-any.whl", hash = "sha256:f3fc6568d3e7562c049cc358e0a6fb1b349a783206279cbaa4ee16d6ae1903ea"}, + {file = "recipe_scrapers-15.1.0.tar.gz", hash = "sha256:268915941fe881e8bbeee72bde78d516808db57e1a9cc54001f332e3e18c6111"}, ] [package.dependencies] From 7466e5d7f59620f009c91b1679348e4d527e4006 Mon Sep 17 00:00:00 2001 From: Hayden <64056131+hay-kot@users.noreply.github.com> Date: Mon, 26 Aug 2024 11:43:16 -0500 Subject: [PATCH 07/98] chore(l10n): New Crowdin updates (#4104) --- frontend/lang/messages/fi-FI.json | 78 +++++++++---------- frontend/lang/messages/ja-JP.json | 76 +++++++++--------- mealie/lang/messages/fi-FI.json | 2 +- mealie/lang/messages/ja-JP.json | 30 +++---- .../seed/resources/units/locales/ja-JP.json | 52 ++++++------- 5 files changed, 119 insertions(+), 119 deletions(-) diff --git a/frontend/lang/messages/fi-FI.json b/frontend/lang/messages/fi-FI.json index c5b7655434e..7e9f839f761 100644 --- a/frontend/lang/messages/fi-FI.json +++ b/frontend/lang/messages/fi-FI.json @@ -289,7 +289,7 @@ "household-recipe-preferences": "Kotitalouksien reseptiasetukset", "default-recipe-preferences-description": "Tässä on kotitaloutesi uuden reseptin oletusasetukset. Näitä voi muuttaa yksittäisten reseptien osalta reseptin asetuksissa.", "allow-users-outside-of-your-household-to-see-your-recipes": "Salli kotitalouden ulkopuolisten käyttäjien nähdä reseptit", - "allow-users-outside-of-your-household-to-see-your-recipes-description": "When enabled you can use a public share link to share specific recipes without authorizing the user. When disabled, you can only share recipes with users who are in your household or with a pre-generated private link", + "allow-users-outside-of-your-household-to-see-your-recipes-description": "Käytössä ollessa voit jakaa määrättyjä reseptejä julkisella linkillä valtuuttamatta käyttäjää. Muutoin voit jakaa reseptejä vain kotitaloutesi käyttäjille tai aiemmin luodulla yksityislinkillä.", "household-preferences": "Kotitalouksien asetukset" }, "meal-plan": { @@ -315,7 +315,7 @@ "no-meal-plan-defined-yet": "Ateriasuunnitelmaa ei ole vielä määritelty", "no-meal-planned-for-today": "Ei ateriasuunnitelmaa tälle päivälle", "numberOfDays-hint": "Number of days on page load", - "numberOfDays-label": "Default Days", + "numberOfDays-label": "Oletuspäivät", "only-recipes-with-these-categories-will-be-used-in-meal-plans": "Vain näiden luokkien reseptejä käytetään ateriasuunnitelmissa", "planner": "Suunnittelija", "quick-week": "Pikaviikkosuunnitelma", @@ -404,8 +404,8 @@ "description-long": "Voit tuoda Mealieen reseptejä reseptilaatikosta. Tuo reseptisi csv-muodossa ja lataa sitten csv-tiedosto alempaa." }, "recipekeeper": { - "title": "Recipe Keeper", - "description-long": "Mealie can import recipes from Recipe Keeper. Export your recipes in zip format, then upload the .zip file below." + "title": "Reseptinsäilyttäjä", + "description-long": "Mealieen voi tuoda reseptejä reseptinsäilyttäjästä. Tuo reseptit zip-muodossa ja sitten lataa zip-tiedosto alempaa." } }, "new-recipe": { @@ -471,8 +471,8 @@ "ingredients": "Ainesosat", "insert-ingredient": "Lisää Ainesosa", "insert-section": "Lisää osio", - "insert-above": "Insert Above", - "insert-below": "Insert Below", + "insert-above": "Lisää yläpuolelle", + "insert-below": "Lisää alapuolelle", "instructions": "Ohjeet", "key-name-required": "Avaimen nimi vaaditaan", "landscape-view-coming-soon": "Landscape View (Coming Soon)", @@ -583,12 +583,12 @@ "create-recipe-description": "Luo resepti alusta.", "create-recipes": "Luo reseptejä", "import-with-zip": "Tuo .zip:llä", - "create-recipe-from-an-image": "Create Recipe from an Image", - "create-recipe-from-an-image-description": "Create a recipe by uploading an image of it. Mealie will attempt to extract the text from the image using AI and create a recipe from it.", - "crop-and-rotate-the-image": "Crop and rotate the image so that only the text is visible, and it's in the correct orientation.", - "create-from-image": "Create from Image", - "should-translate-description": "Translate the recipe into my language", - "please-wait-image-procesing": "Please wait, the image is processing. This may take some time.", + "create-recipe-from-an-image": "Luo resepti kuvasta", + "create-recipe-from-an-image-description": "Luo resepti tuomalla siitä kuva. Mealie pyrkii poimimaan tekstin kuvasta tekoälyllä ja luomaan siitä reseptin.", + "crop-and-rotate-the-image": "Rajaa ja kierrä kuvaa niin, että vain teksti näkyy, ja että se on oikein päin.", + "create-from-image": "Luo kuvasta", + "should-translate-description": "Käännä resepti kielelleni", + "please-wait-image-procesing": "Odota, että kuva käsitellään. Tämä voi kestää hetken.", "bulk-url-import": "Massa tuonti URL-osoitteesta", "debug-scraper": "Etsi ongelmia Scraperista", "create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Luo resepti antamalla nimi. Kaikilla resepteillä on oltava yksilölliset nimet.", @@ -613,8 +613,8 @@ "report-deletion-failed": "Raportin poistaminen epäonnistui", "recipe-debugger": "Reseptin vianhaku", "recipe-debugger-description": "Tartu sen reseptin URL-osoitteeseen, jonka virheenkorjausta haluat tehdä, ja liitä se tähän. Reseptikaappain hakee URL-osoitteen ja tulokset näytetään. Jos et näe palautettua dataa, Mealie tai sen kappauskirjasto ei tue sivua, jota yrität kaapata.", - "use-openai": "Use OpenAI", - "recipe-debugger-use-openai-description": "Use OpenAI to parse the results instead of relying on the scraper library. When creating a recipe via URL, this is done automatically if the scraper library fails, but you may test it manually here.", + "use-openai": "Käytä OpenAI:ta", + "recipe-debugger-use-openai-description": "Käytä OpenAI:ta kaavinkirjaston sijaan tulosten jäsentämiseen. Luodessa reseptiä URL:n kautta tämä tehdään ilman eri kysymystä, kun kaavinkirjasto ei toimi, mutta voit kokeilla sitä tässä manuaalisesti.", "debug": "Vianhaku", "tree-view": "Puunäkymä", "recipe-yield": "Reseptin tekijä", @@ -632,7 +632,7 @@ "select-parser": "Valitse jäsentäjätyökalu", "natural-language-processor": "Luonnollisen kielen prosessointityökalu", "brute-parser": "Voimakas jäsentäjätyökalu", - "openai-parser": "OpenAI Parser", + "openai-parser": "OpenAI-jäsennin", "parse-all": "Jäsennä kaikki", "no-unit": "Ei yksikköä", "missing-unit": "Luo puuttuva yksikkö: {unit}", @@ -667,7 +667,7 @@ "backup-created-at-response-export_path": "Varmuuskopio luotu sijaintiin {path}", "backup-deleted": "Varmuuskopio poistettu", "restore-success": "Palautus onnistui", - "restore-fail": "Restore failed. Check your server logs for more details", + "restore-fail": "Palautus epäonnistui. Tarkista palvelinloki saadaksesi lisätietoja", "backup-tag": "Varmuuskopion tunniste", "create-heading": "Create a Backup", "delete-backup": "Poista varmuuskopio", @@ -805,9 +805,9 @@ "oidc-ready": "OIDC valmis", "oidc-ready-error-text": "Kaikkia OIDC-arvoja ei ole määritelty. Jos et käytä OIDC-todennusta, voidaan asia jättää huomiotta.", "oidc-ready-success-text": "Kaikki vaaditut OIDC-muuttujat asetettu.", - "openai-ready": "OpenAI Ready", - "openai-ready-error-text": "Not all OpenAI Values are configured. This can be ignored if you are not using OpenAI features.", - "openai-ready-success-text": "Required OpenAI variables are all set." + "openai-ready": "OpenAI valmis", + "openai-ready-error-text": "Kaikkia OpenAI:n arvoja ei ole määritelty. Tämä voidaan sivuuttaa, mikäli et käytä OpenAI:n toimintoja.", + "openai-ready-success-text": "Vaadittavat OpenAI-muuttujat ovat asetetut." }, "shopping-list": { "all-lists": "Kaikki ostoslistat", @@ -821,7 +821,7 @@ "food": "Elintarvikkeet", "note": "Muistiinpano", "label": "Tunnus", - "save-label": "Save Label", + "save-label": "Tallenna nimi", "linked-item-warning": "Tämä kohde on linkitetty yhteen tai useampaan reseptiin. Yksikköjen tai elintarvikkeiden muuttaminen tuottaa odottamattomia tuloksia, kun reseptiä lisätään tai poistetaan tästä luettelosta.", "toggle-food": "Vaihda elintarvike", "manage-labels": "Hallinnoi nimikkeitä", @@ -837,11 +837,11 @@ "items-checked-count": "Ei kohteita valittu: Yksi kohde tarkistettu:{count} kohdetta tarkistettu", "no-label": "Ei tunnistetta", "completed-on": "Valmistui {date}", - "you-are-offline": "You are offline", - "you-are-offline-description": "Not all features are available while offline. You can still add, modify, and remove items, but you will not be able to sync your changes to the server until you are back online.", - "are-you-sure-you-want-to-check-all-items": "Are you sure you want to check all items?", - "are-you-sure-you-want-to-uncheck-all-items": "Are you sure you want to uncheck all items?", - "are-you-sure-you-want-to-delete-checked-items": "Are you sure you want to delete all checked items?" + "you-are-offline": "Sinulla ei ole yhteyttä", + "you-are-offline-description": "Kaikki ominaisuudet eivät ole ilman yhteyttä saatavina. Voit silti lisätä, muokata ja poistaa kohteita, muttet voi synkronoida muutoksia palvelimelle ilman yhteyttä.", + "are-you-sure-you-want-to-check-all-items": "Haluatko varmasti valita kaikki kohteet?", + "are-you-sure-you-want-to-uncheck-all-items": "Haluatko varmasti poistaa kaikki valinnat?", + "are-you-sure-you-want-to-delete-checked-items": "Haluatko varmasti poistaa kaikki valitut kohteet?" }, "sidebar": { "all-recipes": "Reseptit", @@ -985,7 +985,7 @@ "authentication-method-hint": "Tämä määrittelee, miten käyttäjä todentaa Mealien. Jos et ole varma, valitse 'Mealie'", "permissions": "Käyttöoikeudet", "administrator": "Ylläpitäjä", - "user-can-invite-other-to-group": "User can invite others to group", + "user-can-invite-other-to-group": "Käyttäjä voi kutsua muita ryhmään", "user-can-manage-group": "Käyttäjä voi hallita ryhmää", "user-can-organize-group-data": "Käyttäjä voi järjestellä ryhmän tietoja", "enable-advanced-features": "Salli edistyneemmät ominaisuudet", @@ -1018,7 +1018,7 @@ "example-food-singular": "esim. sipuli", "example-food-plural": "esim. sipulit", "label-overwrite-warning": "Tämä määrittää valitun tunnisteen kaikille valituille elintarvikkeille ja mahdollisesti korvaa olemassa olevat tunnisteet.", - "on-hand-checkbox-label": "Setting this flag will make this food unchecked by default when adding a recipe to a shopping list." + "on-hand-checkbox-label": "Lipun valinta poistaa ruoan valinnan oletuksena, kun resepti lisätään kauppalistaan." }, "units": { "seed-dialog-text": "Lisää tietokantaan yksiköt paikallisen kielen perusteella.", @@ -1092,19 +1092,19 @@ "category-data": "Luokan tiedot" }, "tags": { - "new-tag": "New Tag", - "edit-tag": "Edit Tag", - "tag-data": "Tag Data" + "new-tag": "Uusi tunniste", + "edit-tag": "Muokkaa tunnistetta", + "tag-data": "Tunnisteen tiedot" }, "tools": { - "new-tool": "New Tool", - "edit-tool": "Edit Tool", - "tool-data": "Tool Data" + "new-tool": "Uusi työkalu", + "edit-tool": "Muokkaa työkalua", + "tool-data": "Työkalun tiedot" } }, "user-registration": { "user-registration": "Käyttäjien rekisteröinti", - "registration-success": "Registration Success", + "registration-success": "Rekisteröinti onnistui", "join-a-group": "Liity ryhmään", "create-a-new-group": "Luo uusi ryhmä", "provide-registration-token-description": "Ole hyvä ja anna rekisteröintitunnus liittyäksesi ryhmään, johon haluat liittyä. Sinun täytyy saada tämä olemassa olevalta ryhmän jäseneltä.", @@ -1151,7 +1151,7 @@ }, "ocr-editor": { "ocr-editor": "Ocr- editori", - "toolbar": "Toolbar", + "toolbar": "Työkalupalkki", "selection-mode": "Valintatila", "pan-and-zoom-picture": "Käännä ja zoomaus kuva", "split-text": "Jaa teksti", @@ -1159,8 +1159,8 @@ "split-by-block": "Jaa tekstilohkon mukaan", "flatten": "Tasaa alkuperäisestä muotoilusta riippumatta", "help": { - "help": "Help", - "mouse-modes": "Mouse modes", + "help": "Tuki", + "mouse-modes": "Hiiren tilat", "selection-mode": "Valintatila (oletus)", "selection-mode-desc": "Valintatila on päätila, jota voidaan käyttää tietojen syöttämiseen:", "selection-mode-steps": { @@ -1233,8 +1233,8 @@ "no-logs-found": "Lokeja Ei Löytynyt", "tasks": "Tehtävät", "setup": { - "first-time-setup": "First Time Setup", - "welcome-to-mealie-get-started": "Welcome to Mealie! Let's get started", + "first-time-setup": "Ensiasetukset", + "welcome-to-mealie-get-started": "Tervetuloa Mealieen! Aloitetaan", "already-set-up-bring-to-homepage": "I'm already set up, just bring me to the homepage", "common-settings-for-new-sites": "Here are some common settings for new sites", "setup-complete": "Setup Complete!", diff --git a/frontend/lang/messages/ja-JP.json b/frontend/lang/messages/ja-JP.json index 5de92b7932c..7102cbe173b 100644 --- a/frontend/lang/messages/ja-JP.json +++ b/frontend/lang/messages/ja-JP.json @@ -8,7 +8,7 @@ "database-type": "データベースタイプ", "database-url": "データベース URL", "default-group": "デフォルトグループ", - "default-household": "Default Household", + "default-household": "既定の世帯", "demo": "体験版", "demo-status": "体験版ステータス", "development": "開発", @@ -239,7 +239,7 @@ "keep-my-recipes-private-description": "グループとすべてのレシピはデフォルトで非公開になります。後でいつでも変更できます。" }, "manage-members": "メンバーの管理", - "manage-members-description": "Manage the permissions of the members in your household. {manage} allows the user to access the data-management page, and {invite} allows the user to generate invitation links for other users. Group owners cannot change their own permissions.", + "manage-members-description": "世帯のメンバーの権限を管理します。{manage} を使用すると、ユーザーはデータ管理ページにアクセスでき、{invite} を使用すると、他のユーザーへの招待リンクを生成できます。グループ所有者は、自分の権限を変更することはできません。", "manage": "管理", "invite": "招待", "looking-to-update-your-profile": "プロフィールを更新しますか?", @@ -247,7 +247,7 @@ "default-recipe-preferences": "デフォルトのレシピ設定", "group-preferences": "グループ設定", "private-group": "非公開グループ", - "private-group-description": "Setting your group to private will default all public view options to default. This overrides any individual households or recipes public view settings.", + "private-group-description": "グループを非公開に設定すると、すべての公開表示オプションが既定値に設定されます。これにより、個々の世帯またはレシピの公開表示設定が上書きされます。", "enable-public-access": "公開アクセスを有効にする", "enable-public-access-description": "デフォルトでグループレシピを公開し、訪問者がログインせずにレシピを表示できるようにします", "allow-users-outside-of-your-group-to-see-your-recipes": "グループ外のユーザーにレシピの表示を許可する", @@ -261,7 +261,7 @@ "disable-users-from-commenting-on-recipes": "レシピ上のユーザーのコメントを無効にする", "disable-users-from-commenting-on-recipes-description": "レシピページのコメント欄を非表示にし、コメントを無効にします。", "disable-organizing-recipe-ingredients-by-units-and-food": "単位や食材ごとにレシピの材料を整理できないようにする", - "disable-organizing-recipe-ingredients-by-units-and-food-description": "Hides the Food, Unit, and Amount fields for ingredients and treats ingredients as plain text fields", + "disable-organizing-recipe-ingredients-by-units-and-food-description": "食材の食品、単位、量フィールドを非表示にし、食材をプレーンテキストフィールドとして扱います。", "general-preferences": "一般設定", "group-recipe-preferences": "グループレシピの設定", "report": "レポート", @@ -270,27 +270,27 @@ "admin-group-management": "管理グループ管理", "admin-group-management-text": "このグループへの変更はすぐに反映されます。", "group-id-value": "グループID: {0}", - "total-households": "Total Households" + "total-households": "世帯数" }, "household": { - "household": "Household", - "households": "Households", - "user-household": "User Household", - "create-household": "Create Household", - "household-name": "Household Name", - "household-group": "Household Group", - "household-management": "Household Management", - "manage-households": "Manage Households", - "admin-household-management": "Admin Household Management", - "admin-household-management-text": "Changes to this household will be reflected immediately.", - "household-id-value": "Household Id: {0}", - "private-household": "Private Household", - "private-household-description": "Setting your household to private will default all public view options to default. This overrides any individual recipes public view settings.", - "household-recipe-preferences": "Household Recipe Preferences", - "default-recipe-preferences-description": "These are the default settings when a new recipe is created in your household. These can be changed for individual recipes in the recipe settings menu.", - "allow-users-outside-of-your-household-to-see-your-recipes": "Allow users outside of your household to see your recipes", - "allow-users-outside-of-your-household-to-see-your-recipes-description": "When enabled you can use a public share link to share specific recipes without authorizing the user. When disabled, you can only share recipes with users who are in your household or with a pre-generated private link", - "household-preferences": "Household Preferences" + "household": "世帯", + "households": "世帯", + "user-household": "ユーザーの世帯", + "create-household": "世帯の作成", + "household-name": "世帯名", + "household-group": "世帯グループ", + "household-management": "世帯管理", + "manage-households": "世帯の管理", + "admin-household-management": "管理世帯の管理", + "admin-household-management-text": "この世帯への変更はすぐに反映されます。", + "household-id-value": "世帯ID: {0}", + "private-household": "非公開世帯", + "private-household-description": "非公開に設定すると、すべての公開ビューオプションが既定値に設定されます。これは、個々のレシピの公開ビュー設定を上書きします。", + "household-recipe-preferences": "家庭用レシピ設定", + "default-recipe-preferences-description": "世帯で新しいレシピが作成された場合、これらがデフォルト設定になります。 これらはレシピ設定メニューで個々のレシピで変更できます。", + "allow-users-outside-of-your-household-to-see-your-recipes": "世帯外のユーザーがレシピを見ることを許可する", + "allow-users-outside-of-your-household-to-see-your-recipes-description": "有効にすると、公開共有リンクを使用して、ユーザーを承認せずに特定のレシピを共有できます。 無効にすると、レシピを共有することができるのは、あなたの世帯にいるユーザーまたは事前に生成されたプライベートリンクでのみです", + "household-preferences": "世帯設定" }, "meal-plan": { "create-a-new-meal-plan": "新しい食事プランを作成", @@ -583,12 +583,12 @@ "create-recipe-description": "新しいレシピを一から作成します。", "create-recipes": "レシピを作成する", "import-with-zip": ".zip でインポート", - "create-recipe-from-an-image": "Create Recipe from an Image", - "create-recipe-from-an-image-description": "Create a recipe by uploading an image of it. Mealie will attempt to extract the text from the image using AI and create a recipe from it.", - "crop-and-rotate-the-image": "Crop and rotate the image so that only the text is visible, and it's in the correct orientation.", - "create-from-image": "Create from Image", - "should-translate-description": "Translate the recipe into my language", - "please-wait-image-procesing": "Please wait, the image is processing. This may take some time.", + "create-recipe-from-an-image": "画像からレシピを作成", + "create-recipe-from-an-image-description": "画像をアップロードしてレシピを作成します。 Mealieは、AIを使用して画像からテキストを抽出し、そこからレシピを作成しようとします。", + "crop-and-rotate-the-image": "テキストのみが表示され、正しい方向になるように画像をトリミングして回転します。", + "create-from-image": "画像から作成", + "should-translate-description": "レシピを自分の言語に翻訳", + "please-wait-image-procesing": "しばらくお待ちください。画像は処理中です。時間がかかる場合があります。", "bulk-url-import": "URL 一括インポート", "debug-scraper": "デバッグスクレーパー", "create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "名前を指定してレシピを作成します。すべてのレシピには固有の名前が必要です。", @@ -985,7 +985,7 @@ "authentication-method-hint": "This specifies how a user will authenticate with Mealie. If you're not sure, choose 'Mealie", "permissions": "権限", "administrator": "管理者", - "user-can-invite-other-to-group": "User can invite others to group", + "user-can-invite-other-to-group": "ユーザーは他のユーザーをグループに招待できます", "user-can-manage-group": "ユーザーはグループを管理できます", "user-can-organize-group-data": "ユーザーはグループデータを整理できます", "enable-advanced-features": "高度な機能を有効にする", @@ -1252,8 +1252,8 @@ "account-summary-description": "グループ情報の概要は次のとおりです.", "group-statistics": "グループ統計", "group-statistics-description": "グループ統計によりMealieの使用状況がわかります。", - "household-statistics": "Household Statistics", - "household-statistics-description": "Your Household Statistics provide some insight how you're using Mealie.", + "household-statistics": "世帯統計", + "household-statistics-description": "世帯統計から、Mealieをどのように使用しているかがわかります。", "storage-capacity": "ストレージ容量", "storage-capacity-description": "ストレージ容量は、アップロードした画像とアセットの合計です。", "personal": "個人", @@ -1263,13 +1263,13 @@ "api-tokens-description": "外部アプリケーションからアクセスするためのAPIトークンを管理します.", "group-description": "これらのアイテムはグループ内で共有されます。そのうちの 1 つを編集すると、グループ全体の内容が変更されます。", "group-settings": "グループ設定", - "group-settings-description": "Manage your common group settings, like privacy settings.", - "household-description": "These items are shared within your household. Editing one of them will change it for the whole household!", - "household-settings": "Household Settings", - "household-settings-description": "Manage your household settings, like mealplan and privacy settings.", + "group-settings-description": "プライバシー設定など、共通のグループ設定を管理します。", + "household-description": "これらのアイテムは世帯内で共有されます。 いずれか1つを編集すると、世帯全体に変更が反映されます!", + "household-settings": "世帯設定", + "household-settings-description": "Mealplanやプライバシー設定など、世帯の設定を管理します。", "cookbooks-description": "レシピカテゴリのコレクションを管理し、それらのページを生成します。", "members": "メンバー", - "members-description": "See who's in your household and manage their permissions.", + "members-description": "世帯のメンバーを確認し、権限を管理します。", "webhooks-description": "Setup webhooks that trigger on days that you have have mealplan scheduled.", "notifiers": "通知", "notifiers-description": "Setup email and push notifications that trigger on specific events.", @@ -1304,7 +1304,7 @@ "require-all-tools": "すべての調理器具を必須にする", "cookbook-name": "料理本の名前", "cookbook-with-name": "料理本 {0}", - "household-cookbook-name": "{0} Cookbook {1}", + "household-cookbook-name": "{0} 料理本 {1}", "create-a-cookbook": "料理本を作成", "cookbook": "料理本" } diff --git a/mealie/lang/messages/fi-FI.json b/mealie/lang/messages/fi-FI.json index 7ba5fa7d200..fb8bd9d39ea 100644 --- a/mealie/lang/messages/fi-FI.json +++ b/mealie/lang/messages/fi-FI.json @@ -5,7 +5,7 @@ "recipe": { "unique-name-error": "Reseptien nimien täytyy olla yksilöllisiä", "recipe-defaults": { - "ingredient-note": "1 Cup Flour", + "ingredient-note": "1 kuppi jauhoja", "step-text": "Recipe steps as well as other fields in the recipe page support markdown syntax.\n\n**Add a link**\n\n[My Link](https://demo.mealie.io)\n" } }, diff --git a/mealie/lang/messages/ja-JP.json b/mealie/lang/messages/ja-JP.json index d2cb198e513..7205577b7bc 100644 --- a/mealie/lang/messages/ja-JP.json +++ b/mealie/lang/messages/ja-JP.json @@ -47,25 +47,25 @@ }, "emails": { "password": { - "subject": "Mealie Forgot Password", - "header_text": "Forgot Password", - "message_top": "You have requested to reset your password.", - "message_bottom": "Please click the button above to reset your password.", - "button_text": "Reset Password" + "subject": "Mealieパスワードを忘れた", + "header_text": "パスワードを忘れた", + "message_top": "パスワードのリセットをリクエストしました。", + "message_bottom": "パスワードをリセットするには、上記のボタンをクリックしてください。", + "button_text": "パスワードのリセット" }, "invitation": { - "subject": "Invitation to join Mealie", - "header_text": "You're Invited!", - "message_top": "You have been invited to join Mealie.", - "message_bottom": "Please click the button above to accept the invitation.", - "button_text": "Accept Invitation" + "subject": "Mealieへの招待", + "header_text": "招待されました!", + "message_top": "Mealieに参加するよう招待されました。", + "message_bottom": "上記のボタンをクリックして招待を承諾してください。", + "button_text": "招待を承認" }, "test": { - "subject": "Mealie Test Email", - "header_text": "Test Email", - "message_top": "This is a test email.", - "message_bottom": "Please click the button above to test the email.", - "button_text": "Open Mealie" + "subject": "Mealieテストメール", + "header_text": "テストメール", + "message_top": "これはテストメールです。", + "message_bottom": "メールをテストするには、上のボタンをクリックしてください。", + "button_text": "Mealieを開く" } } } diff --git a/mealie/repos/seed/resources/units/locales/ja-JP.json b/mealie/repos/seed/resources/units/locales/ja-JP.json index 4fc42f3d699..e7ee4bbed63 100644 --- a/mealie/repos/seed/resources/units/locales/ja-JP.json +++ b/mealie/repos/seed/resources/units/locales/ja-JP.json @@ -1,104 +1,104 @@ { "teaspoon": { "name": "小さじ", - "plural_name": "teaspoons", + "plural_name": "小さじ", "description": "", "abbreviation": "小さじ" }, "tablespoon": { "name": "大さじ", - "plural_name": "tablespoons", + "plural_name": "大さじ", "description": "", "abbreviation": "大さじ" }, "cup": { "name": "カップ", - "plural_name": "cups", + "plural_name": "カップ", "description": "", "abbreviation": "c" }, "fluid-ounce": { "name": "液量オンス", - "plural_name": "fluid ounces", + "plural_name": "液量オンス", "description": "", "abbreviation": "液量オンス" }, "pint": { "name": "パイント", - "plural_name": "pints", + "plural_name": "パイント", "description": "", "abbreviation": "パイント" }, "quart": { "name": "クォート", - "plural_name": "quarts", + "plural_name": "クォート", "description": "", "abbreviation": "クォート" }, "gallon": { "name": "ガロン", - "plural_name": "gallons", + "plural_name": "ガロン", "description": "", "abbreviation": "ガロン" }, "milliliter": { "name": "ミリリットル", - "plural_name": "milliliters", + "plural_name": "ミリリットル", "description": "", "abbreviation": "ml" }, "liter": { "name": "リットル", - "plural_name": "liters", + "plural_name": "リットル", "description": "", "abbreviation": "l" }, "pound": { "name": "ポンド", - "plural_name": "pounds", + "plural_name": "ポンド", "description": "", "abbreviation": "ポンド", - "plural_abbreviation": "lbs" + "plural_abbreviation": "ポンド" }, "ounce": { "name": "オンス", - "plural_name": "ounces", + "plural_name": "オンス", "description": "", "abbreviation": "オンス" }, "gram": { "name": "グラム", - "plural_name": "grams", + "plural_name": "グラム", "description": "", "abbreviation": "g" }, "kilogram": { "name": "キログラム", - "plural_name": "kilograms", + "plural_name": "キログラム", "description": "", "abbreviation": "kg" }, "milligram": { "name": "ミリグラム", - "plural_name": "milligrams", + "plural_name": "ミリグラム", "description": "", "abbreviation": "mg" }, "splash": { "name": "少量", - "plural_name": "splashes", + "plural_name": "少量", "description": "", "abbreviation": "" }, "dash": { "name": "少量", - "plural_name": "dashes", + "plural_name": "小さじ1/8", "description": "", "abbreviation": "" }, "serving": { "name": "人前", - "plural_name": "servings", + "plural_name": "人前", "description": "", "abbreviation": "" }, @@ -110,31 +110,31 @@ }, "clove": { "name": "欠片", - "plural_name": "cloves", + "plural_name": "欠片", "description": "", "abbreviation": "" }, "can": { "name": "缶", - "plural_name": "cans", + "plural_name": "缶", "description": "", "abbreviation": "" }, "bunch": { - "name": "bunch", - "plural_name": "bunches", + "name": "束", + "plural_name": "束", "description": "", "abbreviation": "" }, "pack": { - "name": "pack", - "plural_name": "packs", + "name": "パック", + "plural_name": "パック", "description": "", "abbreviation": "" }, "pinch": { - "name": "pinch", - "plural_name": "pinches", + "name": "小さじ1/16", + "plural_name": "小さじ1/16", "description": "", "abbreviation": "" } From 587002c5234b46905df298ea10d53737cf86c709 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 26 Aug 2024 16:57:27 +0000 Subject: [PATCH 08/98] fix(auto): Update pre-commit hooks (#4101) Co-authored-by: boc-the-git <3479092+boc-the-git@users.noreply.github.com> --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index b967fe05e21..75455c9931b 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -12,7 +12,7 @@ repos: exclude: ^tests/data/ - repo: https://github.com/astral-sh/ruff-pre-commit # Ruff version. - rev: v0.6.1 + rev: v0.6.2 hooks: - id: ruff - id: ruff-format From c49610ec74fc267727812486e423cd164a96efcf Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 26 Aug 2024 12:10:32 -0500 Subject: [PATCH 09/98] fix(deps): update dependency fastapi to v0.112.2 (#4092) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- poetry.lock | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index e20a4a76f91..6c6f985d694 100644 --- a/poetry.lock +++ b/poetry.lock @@ -637,13 +637,13 @@ cli = ["requests"] [[package]] name = "fastapi" -version = "0.112.1" +version = "0.112.2" description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" optional = false python-versions = ">=3.8" files = [ - {file = "fastapi-0.112.1-py3-none-any.whl", hash = "sha256:bcbd45817fc2a1cd5da09af66815b84ec0d3d634eb173d1ab468ae3103e183e4"}, - {file = "fastapi-0.112.1.tar.gz", hash = "sha256:b2537146f8c23389a7faa8b03d0bd38d4986e6983874557d95eed2acc46448ef"}, + {file = "fastapi-0.112.2-py3-none-any.whl", hash = "sha256:db84b470bd0e2b1075942231e90e3577e12a903c4dc8696f0d206a7904a7af1c"}, + {file = "fastapi-0.112.2.tar.gz", hash = "sha256:3d4729c038414d5193840706907a41839d839523da6ed0c2811f1168cac1798c"}, ] [package.dependencies] @@ -652,8 +652,8 @@ starlette = ">=0.37.2,<0.39.0" typing-extensions = ">=4.8.0" [package.extras] -all = ["email_validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.5)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=2.11.2)", "orjson (>=3.2.1)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.7)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"] -standard = ["email_validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.5)", "httpx (>=0.23.0)", "jinja2 (>=2.11.2)", "python-multipart (>=0.0.7)", "uvicorn[standard] (>=0.12.0)"] +all = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.5)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=2.11.2)", "orjson (>=3.2.1)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.7)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"] +standard = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.5)", "httpx (>=0.23.0)", "jinja2 (>=2.11.2)", "python-multipart (>=0.0.7)", "uvicorn[standard] (>=0.12.0)"] [[package]] name = "filelock" From 2c2c07feb21e3ed30d573e06497be88ff66f65d5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 26 Aug 2024 17:25:04 +0000 Subject: [PATCH 10/98] chore(deps): update dependency mypy to v1.11.2 (#4093) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- poetry.lock | 56 ++++++++++++++++++++++++++--------------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/poetry.lock b/poetry.lock index 6c6f985d694..442ddca720c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1502,38 +1502,38 @@ files = [ [[package]] name = "mypy" -version = "1.11.1" +version = "1.11.2" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-1.11.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a32fc80b63de4b5b3e65f4be82b4cfa362a46702672aa6a0f443b4689af7008c"}, - {file = "mypy-1.11.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c1952f5ea8a5a959b05ed5f16452fddadbaae48b5d39235ab4c3fc444d5fd411"}, - {file = "mypy-1.11.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e1e30dc3bfa4e157e53c1d17a0dad20f89dc433393e7702b813c10e200843b03"}, - {file = "mypy-1.11.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2c63350af88f43a66d3dfeeeb8d77af34a4f07d760b9eb3a8697f0386c7590b4"}, - {file = "mypy-1.11.1-cp310-cp310-win_amd64.whl", hash = "sha256:a831671bad47186603872a3abc19634f3011d7f83b083762c942442d51c58d58"}, - {file = "mypy-1.11.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7b6343d338390bb946d449677726edf60102a1c96079b4f002dedff375953fc5"}, - {file = "mypy-1.11.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e4fe9f4e5e521b458d8feb52547f4bade7ef8c93238dfb5bbc790d9ff2d770ca"}, - {file = "mypy-1.11.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:886c9dbecc87b9516eff294541bf7f3655722bf22bb898ee06985cd7269898de"}, - {file = "mypy-1.11.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fca4a60e1dd9fd0193ae0067eaeeb962f2d79e0d9f0f66223a0682f26ffcc809"}, - {file = "mypy-1.11.1-cp311-cp311-win_amd64.whl", hash = "sha256:0bd53faf56de9643336aeea1c925012837432b5faf1701ccca7fde70166ccf72"}, - {file = "mypy-1.11.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f39918a50f74dc5969807dcfaecafa804fa7f90c9d60506835036cc1bc891dc8"}, - {file = "mypy-1.11.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0bc71d1fb27a428139dd78621953effe0d208aed9857cb08d002280b0422003a"}, - {file = "mypy-1.11.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b868d3bcff720dd7217c383474008ddabaf048fad8d78ed948bb4b624870a417"}, - {file = "mypy-1.11.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a707ec1527ffcdd1c784d0924bf5cb15cd7f22683b919668a04d2b9c34549d2e"}, - {file = "mypy-1.11.1-cp312-cp312-win_amd64.whl", hash = "sha256:64f4a90e3ea07f590c5bcf9029035cf0efeae5ba8be511a8caada1a4893f5525"}, - {file = "mypy-1.11.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:749fd3213916f1751fff995fccf20c6195cae941dc968f3aaadf9bb4e430e5a2"}, - {file = "mypy-1.11.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b639dce63a0b19085213ec5fdd8cffd1d81988f47a2dec7100e93564f3e8fb3b"}, - {file = "mypy-1.11.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4c956b49c5d865394d62941b109728c5c596a415e9c5b2be663dd26a1ff07bc0"}, - {file = "mypy-1.11.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45df906e8b6804ef4b666af29a87ad9f5921aad091c79cc38e12198e220beabd"}, - {file = "mypy-1.11.1-cp38-cp38-win_amd64.whl", hash = "sha256:d44be7551689d9d47b7abc27c71257adfdb53f03880841a5db15ddb22dc63edb"}, - {file = "mypy-1.11.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2684d3f693073ab89d76da8e3921883019ea8a3ec20fa5d8ecca6a2db4c54bbe"}, - {file = "mypy-1.11.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:79c07eb282cb457473add5052b63925e5cc97dfab9812ee65a7c7ab5e3cb551c"}, - {file = "mypy-1.11.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:11965c2f571ded6239977b14deebd3f4c3abd9a92398712d6da3a772974fad69"}, - {file = "mypy-1.11.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a2b43895a0f8154df6519706d9bca8280cda52d3d9d1514b2d9c3e26792a0b74"}, - {file = "mypy-1.11.1-cp39-cp39-win_amd64.whl", hash = "sha256:1a81cf05975fd61aec5ae16501a091cfb9f605dc3e3c878c0da32f250b74760b"}, - {file = "mypy-1.11.1-py3-none-any.whl", hash = "sha256:0624bdb940255d2dd24e829d99a13cfeb72e4e9031f9492148f410ed30bcab54"}, - {file = "mypy-1.11.1.tar.gz", hash = "sha256:f404a0b069709f18bbdb702eb3dcfe51910602995de00bd39cea3050b5772d08"}, + {file = "mypy-1.11.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d42a6dd818ffce7be66cce644f1dff482f1d97c53ca70908dff0b9ddc120b77a"}, + {file = "mypy-1.11.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:801780c56d1cdb896eacd5619a83e427ce436d86a3bdf9112527f24a66618fef"}, + {file = "mypy-1.11.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:41ea707d036a5307ac674ea172875f40c9d55c5394f888b168033177fce47383"}, + {file = "mypy-1.11.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6e658bd2d20565ea86da7d91331b0eed6d2eee22dc031579e6297f3e12c758c8"}, + {file = "mypy-1.11.2-cp310-cp310-win_amd64.whl", hash = "sha256:478db5f5036817fe45adb7332d927daa62417159d49783041338921dcf646fc7"}, + {file = "mypy-1.11.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:75746e06d5fa1e91bfd5432448d00d34593b52e7e91a187d981d08d1f33d4385"}, + {file = "mypy-1.11.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a976775ab2256aadc6add633d44f100a2517d2388906ec4f13231fafbb0eccca"}, + {file = "mypy-1.11.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cd953f221ac1379050a8a646585a29574488974f79d8082cedef62744f0a0104"}, + {file = "mypy-1.11.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:57555a7715c0a34421013144a33d280e73c08df70f3a18a552938587ce9274f4"}, + {file = "mypy-1.11.2-cp311-cp311-win_amd64.whl", hash = "sha256:36383a4fcbad95f2657642a07ba22ff797de26277158f1cc7bd234821468b1b6"}, + {file = "mypy-1.11.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e8960dbbbf36906c5c0b7f4fbf2f0c7ffb20f4898e6a879fcf56a41a08b0d318"}, + {file = "mypy-1.11.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:06d26c277962f3fb50e13044674aa10553981ae514288cb7d0a738f495550b36"}, + {file = "mypy-1.11.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6e7184632d89d677973a14d00ae4d03214c8bc301ceefcdaf5c474866814c987"}, + {file = "mypy-1.11.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3a66169b92452f72117e2da3a576087025449018afc2d8e9bfe5ffab865709ca"}, + {file = "mypy-1.11.2-cp312-cp312-win_amd64.whl", hash = "sha256:969ea3ef09617aff826885a22ece0ddef69d95852cdad2f60c8bb06bf1f71f70"}, + {file = "mypy-1.11.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:37c7fa6121c1cdfcaac97ce3d3b5588e847aa79b580c1e922bb5d5d2902df19b"}, + {file = "mypy-1.11.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4a8a53bc3ffbd161b5b2a4fff2f0f1e23a33b0168f1c0778ec70e1a3d66deb86"}, + {file = "mypy-1.11.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2ff93107f01968ed834f4256bc1fc4475e2fecf6c661260066a985b52741ddce"}, + {file = "mypy-1.11.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:edb91dded4df17eae4537668b23f0ff6baf3707683734b6a818d5b9d0c0c31a1"}, + {file = "mypy-1.11.2-cp38-cp38-win_amd64.whl", hash = "sha256:ee23de8530d99b6db0573c4ef4bd8f39a2a6f9b60655bf7a1357e585a3486f2b"}, + {file = "mypy-1.11.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:801ca29f43d5acce85f8e999b1e431fb479cb02d0e11deb7d2abb56bdaf24fd6"}, + {file = "mypy-1.11.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:af8d155170fcf87a2afb55b35dc1a0ac21df4431e7d96717621962e4b9192e70"}, + {file = "mypy-1.11.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f7821776e5c4286b6a13138cc935e2e9b6fde05e081bdebf5cdb2bb97c9df81d"}, + {file = "mypy-1.11.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:539c570477a96a4e6fb718b8d5c3e0c0eba1f485df13f86d2970c91f0673148d"}, + {file = "mypy-1.11.2-cp39-cp39-win_amd64.whl", hash = "sha256:3f14cd3d386ac4d05c5a39a51b84387403dadbd936e17cb35882134d4f8f0d24"}, + {file = "mypy-1.11.2-py3-none-any.whl", hash = "sha256:b499bc07dbdcd3de92b0a8b29fdf592c111276f6a12fe29c30f6c417dd546d12"}, + {file = "mypy-1.11.2.tar.gz", hash = "sha256:7f9993ad3e0ffdc95c2a14b66dee63729f021968bff8ad911867579c65d13a79"}, ] [package.dependencies] From 91a7e09569b22a5f8170b6eb8ed31a082b6c0114 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 26 Aug 2024 17:37:34 +0000 Subject: [PATCH 11/98] fix(deps): update dependency authlib to v1.3.2 (#4102) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 442ddca720c..f6d9b96a950 100644 --- a/poetry.lock +++ b/poetry.lock @@ -122,13 +122,13 @@ typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""} [[package]] name = "authlib" -version = "1.3.1" +version = "1.3.2" description = "The ultimate Python library in building OAuth and OpenID Connect servers and clients." optional = false python-versions = ">=3.8" files = [ - {file = "Authlib-1.3.1-py2.py3-none-any.whl", hash = "sha256:d35800b973099bbadc49b42b256ecb80041ad56b7fe1216a362c7943c088f377"}, - {file = "authlib-1.3.1.tar.gz", hash = "sha256:7ae843f03c06c5c0debd63c9db91f9fda64fa62a42a77419fa15fbb7e7a58917"}, + {file = "Authlib-1.3.2-py2.py3-none-any.whl", hash = "sha256:ede026a95e9f5cdc2d4364a52103f5405e75aa156357e831ef2bfd0bc5094dfc"}, + {file = "authlib-1.3.2.tar.gz", hash = "sha256:4b16130117f9eb82aa6eec97f6dd4673c3f960ac0283ccdae2897ee4bc030ba2"}, ] [package.dependencies] From 4c6357e8dced72a47b07b1cd7861ed327735674c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 26 Aug 2024 13:08:07 -0500 Subject: [PATCH 12/98] chore(deps): update dependency rich to v13.8.0 (#4105) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index f6d9b96a950..49330723948 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2824,13 +2824,13 @@ rsa = ["oauthlib[signedtoken] (>=3.0.0)"] [[package]] name = "rich" -version = "13.7.1" +version = "13.8.0" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" optional = false python-versions = ">=3.7.0" files = [ - {file = "rich-13.7.1-py3-none-any.whl", hash = "sha256:4edbae314f59eb482f54e9e30bf00d33350aaa94f4bfcd4e9e3110e64d0d7222"}, - {file = "rich-13.7.1.tar.gz", hash = "sha256:9be308cb1fe2f1f57d67ce99e95af38a1e2bc71ad9813b0e247cf7ffbcc3a432"}, + {file = "rich-13.8.0-py3-none-any.whl", hash = "sha256:2e85306a063b9492dffc86278197a60cbece75bcb766022f3436f567cae11bdc"}, + {file = "rich-13.8.0.tar.gz", hash = "sha256:a5ac1f1cd448ade0d59cc3356f7db7a7ccda2c8cbae9c7a90c28ff463d3e91f4"}, ] [package.dependencies] From e4aeb01acbe34646a08eeda6d340e589a931e345 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 27 Aug 2024 14:47:44 +0000 Subject: [PATCH 13/98] fix(deps): update dependency httpx to v0.27.2 (#4112) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- poetry.lock | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 49330723948..29fe26d8cd6 100644 --- a/poetry.lock +++ b/poetry.lock @@ -896,13 +896,13 @@ test = ["Cython (>=0.29.24,<0.30.0)"] [[package]] name = "httpx" -version = "0.27.0" +version = "0.27.2" description = "The next generation HTTP client." optional = false python-versions = ">=3.8" files = [ - {file = "httpx-0.27.0-py3-none-any.whl", hash = "sha256:71d5465162c13681bff01ad59b2cc68dd838ea1f10e51574bac27103f00c91a5"}, - {file = "httpx-0.27.0.tar.gz", hash = "sha256:a0cb88a46f32dc874e04ee956e4c2764aba2aa228f650b06788ba6bda2962ab5"}, + {file = "httpx-0.27.2-py3-none-any.whl", hash = "sha256:7bb2708e112d8fdd7829cd4243970f0c223274051cb35ee80c03301ee29a3df0"}, + {file = "httpx-0.27.2.tar.gz", hash = "sha256:f7c2be1d2f3c3c3160d441802406b206c2b76f5947b11115e6df10c6c65e66c2"}, ] [package.dependencies] @@ -917,6 +917,7 @@ brotli = ["brotli", "brotlicffi"] cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] http2 = ["h2 (>=3,<5)"] socks = ["socksio (==1.*)"] +zstd = ["zstandard (>=0.18.0)"] [[package]] name = "identify" From 9636fc82f6242c2584e23ad1a79c161cdeef5c05 Mon Sep 17 00:00:00 2001 From: Hayden <64056131+hay-kot@users.noreply.github.com> Date: Tue, 27 Aug 2024 11:51:54 -0500 Subject: [PATCH 14/98] chore(l10n): New Crowdin updates (#4113) --- frontend/lang/messages/el-GR.json | 14 +++++++------- frontend/lang/messages/uk-UA.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/frontend/lang/messages/el-GR.json b/frontend/lang/messages/el-GR.json index 0396b7cbc2f..4051b564d5d 100644 --- a/frontend/lang/messages/el-GR.json +++ b/frontend/lang/messages/el-GR.json @@ -235,7 +235,7 @@ "user-group-created": "Η Ομάδα Χρηστών Δημιουργήθηκε", "user-group-creation-failed": "Αποτυχία Δημιουργίας Ομάδας Χρηστών", "settings": { - "keep-my-recipes-private": "Κρατήστε Τις Συνταγές Μου Ιδιωτικές", + "keep-my-recipes-private": "Να διατηρούνται οι συνταγές μου ιδιωτικές", "keep-my-recipes-private-description": "Ορίζει την ομάδα σας και όλες τις συνταγές ιδιωτικές από προεπιλογή. Μπορείτε πάντα να το αλλάξετε αργότερα." }, "manage-members": "Διαχείριση Μελών", @@ -361,20 +361,20 @@ "chowdown": { "description": "Μετεγκατάσταση δεδομένων από Chowdown", "description-long": "Το Mealie υποστηρίζει εγγενώς τη μορφή αποθετηρίου chowdown. Κατεβάστε το αποθετήριο κώδικα ως αρχείο .zip και ανεβάστε το παρακάτω.", - "title": "Μετατόπιση" + "title": "Chowdown" }, "nextcloud": { "description": "Μετεγκατάσταση δεδομένων από μια υπόσταση Nextcloud Cookbook", "description-long": "Οι συνταγές Nextcloud μπορούν να εισαχθούν από ένα αρχείο zip που περιέχει τα δεδομένα που είναι αποθηκευμένα στο Nextcloud. Δείτε τη δομή του φακέλου-παραδείγματος παρακάτω για να βεβαιωθείτε ότι οι συνταγές σας είναι σε θέση να εισαχθούν.", - "title": "Βιβλίο Cookbook Nextcloud" + "title": "Nextcloud Cookbook" }, "copymethat": { "description-long": "Το Mealie μπορεί να εισάγει συνταγές από το Copy Me That. Εξάγετε τις συνταγές σας σε μορφή HTML, στη συνέχεια, ανεβάστε το .zip παρακάτω.", - "title": "Διαχειριστής Συνταγών Copy Me That" + "title": "Copy Me That Recipe Manager" }, "paprika": { "description-long": "Το Mealie μπορεί να εισάγει συνταγές από την εφαρμογή Paprika. Εξάγετε τις συνταγές σας από το paprika, μετονομάστε την επέκταση εξαγωγής σε .zip και ανεβάστε την παρακάτω.", - "title": "Διαχειριστής Συνταγών Paprika" + "title": "Paprika Recipe Manager" }, "mealie-pre-v1": { "description-long": "Το Mealie μπορεί να εισάγει συνταγές από την εφαρμογή Mealie από μια έκδοση πριν την v1.0. Εξάγετε τις συνταγές σας από την παλιά υπόστασή σας, και ανεβάστε το παρακάτω αρχείο zip. Σημειώστε ότι από την εξαγωγή μπορούν να εισαχθούν μόνο συνταγές.", @@ -382,7 +382,7 @@ }, "tandoor": { "description-long": "Το Mealie μπορεί να εισάγει συνταγές από το Tandoor. Εξαγάγετε τα δεδομένα σας στην \"Προεπιλεγμένη\" (default) μορφή, στη συνέχεια, ανεβάστε το .zip παρακάτω.", - "title": "Συνταγές Tandoor" + "title": "Tandoor Recipes" }, "recipe-data-migrations": "Μετεγκατάσταση Δεδομένων Συνταγής", "recipe-data-migrations-explanation": "Συνταγές μπορούν να μετεγκατασταθούν από άλλη υποστηριζόμενη εφαρμογή στο Mealie. Αυτός είναι ένας πολύ καλός τρόπος για να ξεκινήσετε με Mealie.", @@ -400,7 +400,7 @@ "description-long": "Το Mealie μπορεί να εισάγει συνταγές από το Plan to Eat." }, "myrecipebox": { - "title": "Κιβώτιο Συνταγών", + "title": "My Recipe Box", "description-long": "Το Mealie μπορεί να εισάγει συνταγές από το Κουτί Συνταγών. Εξάγετε τις συνταγές σας σε μορφή CSV, στη συνέχεια, ανεβάστε το αρχείο .csv παρακάτω." }, "recipekeeper": { diff --git a/frontend/lang/messages/uk-UA.json b/frontend/lang/messages/uk-UA.json index bcd8468482c..e9b67ce4a24 100644 --- a/frontend/lang/messages/uk-UA.json +++ b/frontend/lang/messages/uk-UA.json @@ -562,7 +562,7 @@ "timeline-no-events-found-try-adjusting-filters": "Не знайдено жодних подій. Спробуйте змінити фільтри пошуку.", "group-global-timeline": "Глобальна хроніка {groupName}", "open-timeline": "Відкрити хронологію", - "made-this": "Я це зробив", + "made-this": "Я це приготував", "how-did-it-turn-out": "Як вийшло?", "user-made-this": "{user} зробив це", "last-made-date": "Востаннє приготовано {date}", From 0ca1b6e57c223d91b4f6ddd439e42194f6c0d82f Mon Sep 17 00:00:00 2001 From: Hayden <64056131+hay-kot@users.noreply.github.com> Date: Wed, 28 Aug 2024 12:24:26 -0500 Subject: [PATCH 15/98] chore(l10n): New Crowdin updates (#4115) --- frontend/lang/messages/el-GR.json | 8 ++++---- mealie/lang/messages/el-GR.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/frontend/lang/messages/el-GR.json b/frontend/lang/messages/el-GR.json index 4051b564d5d..442b02ca9ad 100644 --- a/frontend/lang/messages/el-GR.json +++ b/frontend/lang/messages/el-GR.json @@ -56,7 +56,7 @@ "delete-event": "Διαγραφή γεγονότος", "event-delete-confirmation": "Θέλετε σίγουρα να διαγράψετε αυτό το γεγονός;", "event-deleted": "Το γεγονός Διαγράφηκε", - "event-updated": "Το γεγονός ενημερώθηκε", + "event-updated": "Το συμβάν ενημερώθηκε", "new-notification-form-description": "Η Mealie χρησιμοποιεί τη βιβλιοθήκη Apprise για τη δημιουργία ειδοποιήσεων. Προσφέρουν πολλές επιλογές για τις υπηρεσίες που θα χρησιμοποιηθούν για ειδοποιήσεις. Ανατρέξτε στο wiki τους για έναν ολοκληρωμένο οδηγό για το πώς να δημιουργήσετε τη διεύθυνση URL για την υπηρεσία σας. Αν είναι διαθέσιμο, η επιλογή του τύπου της ειδοποίησής σας μπορεί να περιλαμβάνει επιπλέον χαρακτηριστικά.", "new-version": "Νέα έκδοση διαθέσιμη!", "notification": "Ειδοποίηση", @@ -960,7 +960,7 @@ "webhooks-enabled": "Το webhook είναι ενεργό", "you-are-not-allowed-to-create-a-user": "Δεν επιτρέπεται να δημιουργήσετε ένα χρήστη", "you-are-not-allowed-to-delete-this-user": "Δεν επιτρέπεται να διαγράψετε αυτόν τον χρήστη", - "enable-advanced-content": "Ενεργοποίηση Προηγμένου Περιεχομένου", + "enable-advanced-content": "Ενεργοποίηση περιεχομένου για προχωρημένους", "enable-advanced-content-description": "Ενεργοποιεί προηγμένες λειτουργίες όπως κλιμάκωση συνταγής, κλειδιά API, Webhooks και διαχείριση δεδομένων. Μην ανησυχείτε, μπορείτε πάντα να το αλλάξετε αργότερα", "favorite-recipes": "Αγαπημ. Συνταγές", "email-or-username": "Email ή Ονομα χρήστη", @@ -998,7 +998,7 @@ "language-dialog": { "translated": "μεταφρασμένο", "choose-language": "Επιλογή γλώσσας", - "select-description": "Επιλέξτε τη γλώσσα για το τη διεπαφή χρήστη του Mealie. Η ρύθμιση ισχύει μόνο για εσάς, όχι για άλλους χρήστες.", + "select-description": "Επιλέξτε τη γλώσσα για τη διεπαφή χρήστη του Mealie. Η ρύθμιση ισχύει μόνο για εσάς, όχι για άλλους χρήστες.", "how-to-contribute-description": "Δεν είναι κάτι μεταφρασμένο ακόμα, είναι λανθασμένο, ή η γλώσσα σας λείπει από τη λίστα; {read-the-docs-link} για το πώς να συνεισφέρετε!", "read-the-docs": "Διαβάστε την τεκμηρίωση" }, @@ -1272,7 +1272,7 @@ "members-description": "Δείτε ποιοι βρίσκονται στο νοικοκυριό σας και διαχειριστείτε τα δικαιώματά τους.", "webhooks-description": "Ρυθμίστε webhooks που πυροδοτούνται τις ημέρες που έχετε προγραμματισμένα γεύματα.", "notifiers": "Ειδοποιητές", - "notifiers-description": "Setup email and push notifications that trigger on specific events.", + "notifiers-description": "Ρύθμιση ειδοποιήσεων email και push που πυροδοτούνται σε συγκεκριμένα συμβάντα.", "manage-data": "Διαχείριση δεδομένων", "manage-data-description": "Διαχειριστείτε τα δεδομένα σας στο Mealie. Τρόφιμα, Μονάδες, Κατηγορίες, Ετικέτες και πολλά άλλα.", "data-migrations": "Μετεγκατάσταση Δεδομένων", diff --git a/mealie/lang/messages/el-GR.json b/mealie/lang/messages/el-GR.json index 7de02a2b5f2..81ef97e04ad 100644 --- a/mealie/lang/messages/el-GR.json +++ b/mealie/lang/messages/el-GR.json @@ -13,7 +13,7 @@ "no-recipes-match-your-rules": "Καμία συνταγή δεν ταιριάζει στα κριτήρια αναζήτησης" }, "user": { - "user-updated": "Χρήστης ενημερώθηκε", + "user-updated": "Ο χρήστης ενημερώθηκε", "password-updated": "Ο κωδικός πρόσβασης ενημερώθηκε", "invalid-current-password": "Μη έγκυρος κωδικός πρόσβασης", "ldap-update-password-unavailable": "Αδυναμία ενημέρωσης του κωδικού πρόσβασης, ο χρήστης ελέγχεται από LDAP" From 296a1a036cbf5a0580a7dd6f37539646249fe998 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 29 Aug 2024 11:22:08 -0500 Subject: [PATCH 16/98] chore(deps): update dependency ruff to v0.6.3 (#4120) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- poetry.lock | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/poetry.lock b/poetry.lock index 29fe26d8cd6..2b2582a2b50 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2843,29 +2843,29 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "ruff" -version = "0.6.2" +version = "0.6.3" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.6.2-py3-none-linux_armv6l.whl", hash = "sha256:5c8cbc6252deb3ea840ad6a20b0f8583caab0c5ef4f9cca21adc5a92b8f79f3c"}, - {file = "ruff-0.6.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:17002fe241e76544448a8e1e6118abecbe8cd10cf68fde635dad480dba594570"}, - {file = "ruff-0.6.2-py3-none-macosx_11_0_arm64.whl", hash = "sha256:3dbeac76ed13456f8158b8f4fe087bf87882e645c8e8b606dd17b0b66c2c1158"}, - {file = "ruff-0.6.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:094600ee88cda325988d3f54e3588c46de5c18dae09d683ace278b11f9d4d534"}, - {file = "ruff-0.6.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:316d418fe258c036ba05fbf7dfc1f7d3d4096db63431546163b472285668132b"}, - {file = "ruff-0.6.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d72b8b3abf8a2d51b7b9944a41307d2f442558ccb3859bbd87e6ae9be1694a5d"}, - {file = "ruff-0.6.2-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:2aed7e243be68487aa8982e91c6e260982d00da3f38955873aecd5a9204b1d66"}, - {file = "ruff-0.6.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d371f7fc9cec83497fe7cf5eaf5b76e22a8efce463de5f775a1826197feb9df8"}, - {file = "ruff-0.6.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8f310d63af08f583363dfb844ba8f9417b558199c58a5999215082036d795a1"}, - {file = "ruff-0.6.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7db6880c53c56addb8638fe444818183385ec85eeada1d48fc5abe045301b2f1"}, - {file = "ruff-0.6.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:1175d39faadd9a50718f478d23bfc1d4da5743f1ab56af81a2b6caf0a2394f23"}, - {file = "ruff-0.6.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:5b939f9c86d51635fe486585389f54582f0d65b8238e08c327c1534844b3bb9a"}, - {file = "ruff-0.6.2-py3-none-musllinux_1_2_i686.whl", hash = "sha256:d0d62ca91219f906caf9b187dea50d17353f15ec9bb15aae4a606cd697b49b4c"}, - {file = "ruff-0.6.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:7438a7288f9d67ed3c8ce4d059e67f7ed65e9fe3aa2ab6f5b4b3610e57e3cb56"}, - {file = "ruff-0.6.2-py3-none-win32.whl", hash = "sha256:279d5f7d86696df5f9549b56b9b6a7f6c72961b619022b5b7999b15db392a4da"}, - {file = "ruff-0.6.2-py3-none-win_amd64.whl", hash = "sha256:d9f3469c7dd43cd22eb1c3fc16926fb8258d50cb1b216658a07be95dd117b0f2"}, - {file = "ruff-0.6.2-py3-none-win_arm64.whl", hash = "sha256:f28fcd2cd0e02bdf739297516d5643a945cc7caf09bd9bcb4d932540a5ea4fa9"}, - {file = "ruff-0.6.2.tar.gz", hash = "sha256:239ee6beb9e91feb8e0ec384204a763f36cb53fb895a1a364618c6abb076b3be"}, + {file = "ruff-0.6.3-py3-none-linux_armv6l.whl", hash = "sha256:97f58fda4e309382ad30ede7f30e2791d70dd29ea17f41970119f55bdb7a45c3"}, + {file = "ruff-0.6.3-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:3b061e49b5cf3a297b4d1c27ac5587954ccb4ff601160d3d6b2f70b1622194dc"}, + {file = "ruff-0.6.3-py3-none-macosx_11_0_arm64.whl", hash = "sha256:34e2824a13bb8c668c71c1760a6ac7d795ccbd8d38ff4a0d8471fdb15de910b1"}, + {file = "ruff-0.6.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bddfbb8d63c460f4b4128b6a506e7052bad4d6f3ff607ebbb41b0aa19c2770d1"}, + {file = "ruff-0.6.3-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ced3eeb44df75353e08ab3b6a9e113b5f3f996bea48d4f7c027bc528ba87b672"}, + {file = "ruff-0.6.3-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:47021dff5445d549be954eb275156dfd7c37222acc1e8014311badcb9b4ec8c1"}, + {file = "ruff-0.6.3-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:7d7bd20dc07cebd68cc8bc7b3f5ada6d637f42d947c85264f94b0d1cd9d87384"}, + {file = "ruff-0.6.3-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:500f166d03fc6d0e61c8e40a3ff853fa8a43d938f5d14c183c612df1b0d6c58a"}, + {file = "ruff-0.6.3-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:42844ff678f9b976366b262fa2d1d1a3fe76f6e145bd92c84e27d172e3c34500"}, + {file = "ruff-0.6.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70452a10eb2d66549de8e75f89ae82462159855e983ddff91bc0bce6511d0470"}, + {file = "ruff-0.6.3-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:65a533235ed55f767d1fc62193a21cbf9e3329cf26d427b800fdeacfb77d296f"}, + {file = "ruff-0.6.3-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:d2e2c23cef30dc3cbe9cc5d04f2899e7f5e478c40d2e0a633513ad081f7361b5"}, + {file = "ruff-0.6.3-py3-none-musllinux_1_2_i686.whl", hash = "sha256:d8a136aa7d228975a6aee3dd8bea9b28e2b43e9444aa678fb62aeb1956ff2351"}, + {file = "ruff-0.6.3-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:f92fe93bc72e262b7b3f2bba9879897e2d58a989b4714ba6a5a7273e842ad2f8"}, + {file = "ruff-0.6.3-py3-none-win32.whl", hash = "sha256:7a62d3b5b0d7f9143d94893f8ba43aa5a5c51a0ffc4a401aa97a81ed76930521"}, + {file = "ruff-0.6.3-py3-none-win_amd64.whl", hash = "sha256:746af39356fee2b89aada06c7376e1aa274a23493d7016059c3a72e3b296befb"}, + {file = "ruff-0.6.3-py3-none-win_arm64.whl", hash = "sha256:14a9528a8b70ccc7a847637c29e56fd1f9183a9db743bbc5b8e0c4ad60592a82"}, + {file = "ruff-0.6.3.tar.gz", hash = "sha256:183b99e9edd1ef63be34a3b51fee0a9f4ab95add123dbf89a71f7b1f0c991983"}, ] [[package]] From eae474d9b9af91dc58edbda9543029b33d4b83bd Mon Sep 17 00:00:00 2001 From: Hayden <64056131+hay-kot@users.noreply.github.com> Date: Thu, 29 Aug 2024 12:45:15 -0500 Subject: [PATCH 17/98] chore(l10n): New Crowdin updates (#4121) --- frontend/lang/messages/de-DE.json | 4 ++-- mealie/repos/seed/resources/units/locales/de-DE.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/frontend/lang/messages/de-DE.json b/frontend/lang/messages/de-DE.json index 25d5db0d533..f3bb43f1862 100644 --- a/frontend/lang/messages/de-DE.json +++ b/frontend/lang/messages/de-DE.json @@ -62,7 +62,7 @@ "notification": "Benachrichtigung", "refresh": "Aktualisieren", "scheduled": "Geplant", - "something-went-wrong": "Etwas ist schief gelaufen!", + "something-went-wrong": "Etwas ist schiefgelaufen!", "subscribed-events": "Abonnierte Ereignisse", "test-message-sent": "Testnachricht gesendet", "message-sent": "Daten gesendet", @@ -118,7 +118,7 @@ "json": "JSON", "keyword": "Schlüsselwort", "link-copied": "Link kopiert", - "loading": "Wird geladen...", + "loading": "Wird geladen", "loading-events": "Ereignisse werden geladen", "loading-recipe": "Lade Rezept...", "loading-ocr-data": "Lade OCR-Daten...", diff --git a/mealie/repos/seed/resources/units/locales/de-DE.json b/mealie/repos/seed/resources/units/locales/de-DE.json index acd245fa223..32c79915e3f 100644 --- a/mealie/repos/seed/resources/units/locales/de-DE.json +++ b/mealie/repos/seed/resources/units/locales/de-DE.json @@ -92,7 +92,7 @@ }, "dash": { "name": "Prise", - "plural_name": "dashes", + "plural_name": "Spritzer", "description": "", "abbreviation": "" }, From 22e9c8b46293b03189b1efc232a82cb91ec6c1aa Mon Sep 17 00:00:00 2001 From: Michael Genson <71845777+michael-genson@users.noreply.github.com> Date: Fri, 30 Aug 2024 05:03:44 -0500 Subject: [PATCH 18/98] fix: Docs Reference Old Build (#4096) --- .github/workflows/release.yml | 1 + .../getting-started/installation/installation-checklist.md | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 5290fea0535..a9570dbc92f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -66,6 +66,7 @@ jobs: - name: Modify version strings run: | + sed -i 's/:v[0-9]*.[0-9]*.[0-9]*/:v${{ env.VERSION_NUM }}/' docs/docs/documentation/getting-started/installation/installation-checklist.md sed -i 's/:v[0-9]*.[0-9]*.[0-9]*/:v${{ env.VERSION_NUM }}/' docs/docs/documentation/getting-started/installation/sqlite.md sed -i 's/:v[0-9]*.[0-9]*.[0-9]*/:v${{ env.VERSION_NUM }}/' docs/docs/documentation/getting-started/installation/postgres.md sed -i 's/^version = "[^"]*"/version = "${{ env.VERSION_NUM }}"/' pyproject.toml diff --git a/docs/docs/documentation/getting-started/installation/installation-checklist.md b/docs/docs/documentation/getting-started/installation/installation-checklist.md index 7185503f6f1..202f48ae741 100644 --- a/docs/docs/documentation/getting-started/installation/installation-checklist.md +++ b/docs/docs/documentation/getting-started/installation/installation-checklist.md @@ -31,7 +31,7 @@ To deploy mealie on your local network, it is highly recommended to use Docker t We've gone through a few versions of Mealie v1 deployment targets. We have settled on a single container deployment, and we've begun publishing the nightly container on github containers. If you're looking to move from the old nightly (split containers _or_ the omni image) to the new nightly, there are a few things you need to do: 1. Take a backup just in case! -2. Replace the image for the API container with `ghcr.io/mealie-recipes/mealie:v1.0.0-RC1.1` +2. Replace the image for the API container with `ghcr.io/mealie-recipes/mealie:v1.12.0` 3. Take the external port from the frontend container and set that as the port mapped to port `9000` on the new container. The frontend is now served on port 9000 from the new container, so it will need to be mapped for you to have access. 4. Restart the container @@ -101,7 +101,7 @@ These backups are just plain .zip files that you can download from the UI or acc ### Docker Tags -See all available tags on [GitHub](https://github.com/mealie-recipes/mealie/pkgs/container/mealie). We do not currently publish new images to Dockerhub. +See all available tags on [GitHub](https://github.com/mealie-recipes/mealie/pkgs/container/mealie). `ghcr.io/mealie-recipes/mealie:nightly` From 29f21a0cd82d5704c24b774642a482b1919f1566 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 30 Aug 2024 10:14:42 +0000 Subject: [PATCH 19/98] fix(deps): update dependency openai to v1.43.0 (#4122) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 2b2582a2b50..a45a5599d9c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1591,13 +1591,13 @@ signedtoken = ["cryptography (>=3.0.0)", "pyjwt (>=2.0.0,<3)"] [[package]] name = "openai" -version = "1.42.0" +version = "1.43.0" description = "The official Python library for the openai API" optional = false python-versions = ">=3.7.1" files = [ - {file = "openai-1.42.0-py3-none-any.whl", hash = "sha256:dc91e0307033a4f94931e5d03cc3b29b9717014ad5e73f9f2051b6cb5eda4d80"}, - {file = "openai-1.42.0.tar.gz", hash = "sha256:c9d31853b4e0bc2dc8bd08003b462a006035655a701471695d0bfdc08529cde3"}, + {file = "openai-1.43.0-py3-none-any.whl", hash = "sha256:1a748c2728edd3a738a72a0212ba866f4fdbe39c9ae03813508b267d45104abe"}, + {file = "openai-1.43.0.tar.gz", hash = "sha256:e607aff9fc3e28eade107e5edd8ca95a910a4b12589336d3cbb6bfe2ac306b3c"}, ] [package.dependencies] From 9e392cbdad777774257de9d3e67f7552f416ca3f Mon Sep 17 00:00:00 2001 From: Michael Genson <71845777+michael-genson@users.noreply.github.com> Date: Fri, 30 Aug 2024 05:25:22 -0500 Subject: [PATCH 20/98] fix: Update Task Template for V2 (#4078) --- .github/ISSUE_TEMPLATE/task.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/task.yaml b/.github/ISSUE_TEMPLATE/task.yaml index fca4f26e3a7..a1ed11f6e06 100644 --- a/.github/ISSUE_TEMPLATE/task.yaml +++ b/.github/ISSUE_TEMPLATE/task.yaml @@ -4,7 +4,7 @@ description: "CONTRIBUTORS ONLY: Submit a Task that needs to be completed" title: "[Task] - TASK DESCRIPTION" labels: - task - - v1 + - v2 body: - type: markdown attributes: From 8b6d8e60eb2df2e6228634dac936d69e80c2dc60 Mon Sep 17 00:00:00 2001 From: ipitio <21136719+ipitio@users.noreply.github.com> Date: Fri, 30 Aug 2024 08:14:36 -0400 Subject: [PATCH 21/98] docs: Update ghcr pulls badge endpoint (#4124) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e7c312efbfe..9e91e04e1d0 100644 --- a/README.md +++ b/README.md @@ -90,7 +90,7 @@ Thanks to Depot for providing build instances for our Docker image builds. [contributors-shield]: https://img.shields.io/github/contributors/mealie-recipes/mealie.svg?style=flat-square [docker-pull]: https://img.shields.io/docker/pulls/hkotel/mealie?style=flat-square [docker-url]: https://hub.docker.com/r/hkotel/mealie -[ghcr-pulls]: https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fraw.githubusercontent.com%2Fipitio%2Fghcr-pulls%2Fmaster%2Findex.json&query=%24%5B%3F(%40.owner%3D%3D%22mealie-recipes%22%20%26%26%20%40.repo%3D%3D%22mealie%22%20%26%26%20%40.image%3D%3D%22mealie%22)%5D.pulls&style=flat-square&label=ghcr%20pulls +[ghcr-pulls]: https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fipitio.github.io%2Fbackage%2Fmealie-recipes%2Fmealie%2Fmealie.json&query=%24.downloads&style=flat-square&label=ghcr%20pulls [ghcr-url]: https://github.com/mealie-recipes/mealie/pkgs/container/mealie [contributors-url]: https://github.com/mealie-recipes/mealie/graphs/contributors [stars-shield]: https://img.shields.io/github/stars/mealie-recipes/mealie.svg?style=flat-square From 2ad6e1b1989da4e0a84edfcb5f55e981bab079a1 Mon Sep 17 00:00:00 2001 From: Hayden <64056131+hay-kot@users.noreply.github.com> Date: Fri, 30 Aug 2024 13:02:06 -0500 Subject: [PATCH 22/98] chore(l10n): New Crowdin updates (#4127) --- frontend/lang/messages/cs-CZ.json | 18 ++--- frontend/lang/messages/no-NO.json | 70 +++++++++---------- frontend/lang/messages/zh-CN.json | 8 +-- .../seed/resources/units/locales/no-NO.json | 54 +++++++------- 4 files changed, 75 insertions(+), 75 deletions(-) diff --git a/frontend/lang/messages/cs-CZ.json b/frontend/lang/messages/cs-CZ.json index f0b999f62e6..72d4e9ce0e5 100644 --- a/frontend/lang/messages/cs-CZ.json +++ b/frontend/lang/messages/cs-CZ.json @@ -8,7 +8,7 @@ "database-type": "Typ databáze", "database-url": "URL databáze", "default-group": "Výchozí skupina", - "default-household": "Default Household", + "default-household": "Výchozí domácnostl", "demo": "Demo", "demo-status": "Stav dema", "development": "Vývoj", @@ -70,7 +70,7 @@ "event-notifiers": "Notifikace událostí", "apprise-url-skipped-if-blank": "Apprise URL (přeskočeno pokud je prázdné)", "enable-notifier": "Povolit notifikaci", - "what-events": "What events should this notifier subscribe to?", + "what-events": "K jakým událostem by se měl tento oznamovatel přihlásit?", "user-events": "Uživatelské události", "mealplan-events": "Události jídelníčku", "when-a-user-in-your-group-creates-a-new-mealplan": "Když uživatel z vaší skupiny vytvoří nový jídelníček", @@ -132,7 +132,7 @@ "no-recipe-found": "Nebyl nalezen žádný recept", "ok": "OK", "options": "Možnosti:", - "plural-name": "Plural Name", + "plural-name": "Název v množném čísle", "print": "Tisk", "print-preferences": "Tisk předvoleb", "random": "Náhodný", @@ -157,7 +157,7 @@ "submit": "Odeslat", "success-count": "Úspěšné: {count}", "sunday": "Neděle", - "system": "System", + "system": "Systém", "templates": "Šablony:", "test": "Test", "themes": "Motivy", @@ -208,11 +208,11 @@ "refresh": "Obnovit", "upload-file": "Nahrát soubor", "created-on-date": "Vytvořeno dne: {0}", - "unsaved-changes": "You have unsaved changes. Do you want to save before leaving? Okay to save, Cancel to discard changes.", + "unsaved-changes": "Máte neuložené změny. Chcete je uložit před odchodem? Klikněte Okay pro uložení, Cancel pro smazání změn.", "clipboard-copy-failure": "Zkopírování do schránky se nezdařilo.", - "confirm-delete-generic-items": "Are you sure you want to delete the following items?", - "organizers": "Organizers", - "caution": "Caution" + "confirm-delete-generic-items": "Opravdu chcete smazat následující položky?", + "organizers": "Organizace", + "caution": "Opatrně" }, "group": { "are-you-sure-you-want-to-delete-the-group": "Jste si jisti, že chcete smazat {groupName}?", @@ -227,7 +227,7 @@ "group-id-with-value": "ID skupiny: {groupID}", "group-name": "Název skupiny", "group-not-found": "Skupina nenalezena", - "group-token": "Group Token", + "group-token": "Skupinový token", "group-with-value": "Skupina: {groupID}", "groups": "Skupiny", "manage-groups": "Spravovat skupiny", diff --git a/frontend/lang/messages/no-NO.json b/frontend/lang/messages/no-NO.json index 24c2c65729e..b4990f0d4e5 100644 --- a/frontend/lang/messages/no-NO.json +++ b/frontend/lang/messages/no-NO.json @@ -8,7 +8,7 @@ "database-type": "Databasetype", "database-url": "URL til database", "default-group": "Standardgruppe", - "default-household": "Default Household", + "default-household": "Standard hushold", "demo": "Demo", "demo-status": "Demostatus", "development": "Utvikling", @@ -87,7 +87,7 @@ "clear": "Tøm", "close": "Lukk", "confirm": "Bekreft", - "confirm-how-does-everything-look": "Hvordan ser alt på?", + "confirm-how-does-everything-look": "Hvordan ser alt ut?", "confirm-delete-generic": "Er du sikker på at du vil slette denne?", "copied_message": "Kopiert!", "create": "Opprett", @@ -149,8 +149,8 @@ "show-all": "Vis alle", "shuffle": "Tilfeldig rekkefølge", "sort": "Sortér", - "sort-ascending": "Stigende sortering", - "sort-descending": "Synkende sortering", + "sort-ascending": "Sorter stigende", + "sort-descending": "Sortere synkende", "sort-alphabetically": "Alfabetisk", "status": "Status", "subject": "Emne", @@ -210,7 +210,7 @@ "created-on-date": "Opprettet: {0}", "unsaved-changes": "Du har ulagrede endringer. Ønsker du å lagre før du forlater? Trykk 'OK' for å lagre, 'Avbryt' for å forkaste endringene.", "clipboard-copy-failure": "Kunne ikke kopiere til utklippstavlen.", - "confirm-delete-generic-items": "Er du sikker på at du vil følgende elementer?", + "confirm-delete-generic-items": "Er du sikker på at du vil slette følgende elementer?", "organizers": "Organisatorer", "caution": "Forsiktig" }, @@ -239,7 +239,7 @@ "keep-my-recipes-private-description": "Setter gruppen din og alle oppskrifter som standard til privat. Du kan alltids endre dette senere." }, "manage-members": "Administrer medlemmer", - "manage-members-description": "Manage the permissions of the members in your household. {manage} allows the user to access the data-management page, and {invite} allows the user to generate invitation links for other users. Group owners cannot change their own permissions.", + "manage-members-description": "Administrer rettighetene til medlemmene i ditt hushold. {manage} lar brukeren få tilgang til dataadministrasjonssiden. {invite} lar brukeren generere invitasjonslenker for andre brukere. Gruppeeiere kan ikke endre egne tillatelser.", "manage": "Administrer", "invite": "Inviter", "looking-to-update-your-profile": "Ønsker du å oppdatere profilen din?", @@ -247,7 +247,7 @@ "default-recipe-preferences": "Standard oppskriftsinnstillinger", "group-preferences": "Gruppeinnstillinger", "private-group": "Privat gruppe", - "private-group-description": "Setting your group to private will default all public view options to default. This overrides any individual households or recipes public view settings.", + "private-group-description": "Når du setter gruppen din til privat, vil alle offentlige visningsalternativer tilbakestilles til standardverdiene. Dette overskriver individuelle husholds eller oppskrifters offentlige visningsinnstillinger.", "enable-public-access": "Aktiver offentlig tilgang", "enable-public-access-description": "Gjør gruppeoppskrifte offentlige som standard, og tillat besøkende å se oppskrifter uten å logge inn", "allow-users-outside-of-your-group-to-see-your-recipes": "Tillat brukere utenfor gruppen å se oppskriftene dine", @@ -261,7 +261,7 @@ "disable-users-from-commenting-on-recipes": "Deaktiver muligheten for at brukere kan kommentere på oppskrifter", "disable-users-from-commenting-on-recipes-description": "Skjuler kommentarfeltet på oppskriftssiden og deaktiverer kommentering", "disable-organizing-recipe-ingredients-by-units-and-food": "Deaktiver organisering av oppskriftsingredienser ved enheter og matvarer", - "disable-organizing-recipe-ingredients-by-units-and-food-description": "Hides the Food, Unit, and Amount fields for ingredients and treats ingredients as plain text fields", + "disable-organizing-recipe-ingredients-by-units-and-food-description": "Skjuler matvare-, enhet- og mengdefelt for ingredienser og behandler ingredienser som rene tekstfelt", "general-preferences": "Generelle innstillinger", "group-recipe-preferences": "Innstillinger for gruppeoppskrift", "report": "Rapport", @@ -270,27 +270,27 @@ "admin-group-management": "Gruppeadministrasjon", "admin-group-management-text": "Endringer i denne gruppen vil gjenspeiles umiddelbart.", "group-id-value": "Gruppe-ID: {0}", - "total-households": "Total Households" + "total-households": "Husholdninger totalt" }, "household": { - "household": "Household", - "households": "Households", - "user-household": "User Household", - "create-household": "Create Household", - "household-name": "Household Name", - "household-group": "Household Group", - "household-management": "Household Management", - "manage-households": "Manage Households", - "admin-household-management": "Admin Household Management", - "admin-household-management-text": "Changes to this household will be reflected immediately.", - "household-id-value": "Household Id: {0}", - "private-household": "Private Household", - "private-household-description": "Setting your household to private will default all public view options to default. This overrides any individual recipes public view settings.", - "household-recipe-preferences": "Household Recipe Preferences", - "default-recipe-preferences-description": "These are the default settings when a new recipe is created in your household. These can be changed for individual recipes in the recipe settings menu.", - "allow-users-outside-of-your-household-to-see-your-recipes": "Allow users outside of your household to see your recipes", - "allow-users-outside-of-your-household-to-see-your-recipes-description": "When enabled you can use a public share link to share specific recipes without authorizing the user. When disabled, you can only share recipes with users who are in your household or with a pre-generated private link", - "household-preferences": "Household Preferences" + "household": "Husholdning", + "households": "Husholdning", + "user-household": "Brukers husholdning", + "create-household": "Opprett husholdning", + "household-name": "Husholdningenes navn", + "household-group": "Husholdningenes gruppe", + "household-management": "Administrer husholdninger", + "manage-households": "Administrer husholdninger", + "admin-household-management": "Admin husholdningsadministrasjon", + "admin-household-management-text": "Endringer i denne husholdningen vil umiddelbart gjelde.", + "household-id-value": "Husholdningenes id: {0}", + "private-household": "Privat husholdning", + "private-household-description": "Når du setter husholdningen din til privat, vil alle offentlige visningsalternativer tilbakestilles til standardverdiene. Dette overskriver individuelle oppskrifters offentlige visningsinnstillinger.", + "household-recipe-preferences": "Husholdningenes oppskriftsinnstillinger", + "default-recipe-preferences-description": "Dette er standardinnstillingene når en ny oppskrift blir opprettet i din husholdning. Disse kan endres for individuelle oppskrifter i oppskrifters innstillinger.", + "allow-users-outside-of-your-household-to-see-your-recipes": "Tillat brukere utenfor din husholdning å se oppskriftene dine", + "allow-users-outside-of-your-household-to-see-your-recipes-description": "Når aktivert, kan du bruke en offentlig lenke for å dele spesifikke oppskrifter uten å autorisere brukeren. Når deaktivert, kan du kun dele oppskrifter med brukere som er i husholdningen din eller med en forhåndsgenerert privat lenke", + "household-preferences": "Husholdnings innstillinger" }, "meal-plan": { "create-a-new-meal-plan": "Opprett en ny måltidsplan", @@ -1252,8 +1252,8 @@ "account-summary-description": "Her er en oppsummering av informasjonen til gruppen din.", "group-statistics": "Gruppestatistikk", "group-statistics-description": "Gruppestatistikken din gir deg et innblikk i hvordan du bruker Mealie.", - "household-statistics": "Household Statistics", - "household-statistics-description": "Your Household Statistics provide some insight how you're using Mealie.", + "household-statistics": "Husholdningenes statistikk", + "household-statistics-description": "Husholdningsstatistikken din gir deg et innblikk i hvordan du bruker Mealie.", "storage-capacity": "Lagringskapasitet", "storage-capacity-description": "Lagringskapasiteten er en beregning av bildene og ressursene du har lastet opp.", "personal": "Personlig", @@ -1263,13 +1263,13 @@ "api-tokens-description": "Administrer dine API-tokens for tilgang fra eksterne programmer.", "group-description": "Disse elementene deles innad i gruppen din. Redigering av elementenee vil føre til endringer for hele gruppen!", "group-settings": "Gruppeinnstillinger", - "group-settings-description": "Manage your common group settings, like privacy settings.", - "household-description": "These items are shared within your household. Editing one of them will change it for the whole household!", - "household-settings": "Household Settings", - "household-settings-description": "Manage your household settings, like mealplan and privacy settings.", + "group-settings-description": "Administrer dine felles gruppe-innstillinger, for eksempel personverninnstillinger.", + "household-description": "Disse elementene deles innad i din husholdning. Redigering av elementenee vil føre til endringer for hele husholdningen!", + "household-settings": "Husholdningsinnstillinger", + "household-settings-description": "Administrer innstillinger for husholdningen, som innstillinger for måltidsplaner og personvern.", "cookbooks-description": "Administrer en samling av oppskriftskategorier og generer sider for dem.", "members": "Medlemmer", - "members-description": "See who's in your household and manage their permissions.", + "members-description": "Se hvem som er medlem av din husholdning, og adminstrer deres rettigheter.", "webhooks-description": "Sett opp webhooks som utløses på dager du har planlagt måltidsplaner.", "notifiers": "Varslingsagenter", "notifiers-description": "Sett opp e-post- og pushvarsler som utløses av spesifikke hendelser.", @@ -1304,7 +1304,7 @@ "require-all-tools": "Krev alle kjøkkenredskaper", "cookbook-name": "Navn på kokebok", "cookbook-with-name": "Kokebok {0}", - "household-cookbook-name": "{0} Cookbook {1}", + "household-cookbook-name": "{0} kokebok {1}", "create-a-cookbook": "Opprett en kokebok", "cookbook": "Kokebok" } diff --git a/frontend/lang/messages/zh-CN.json b/frontend/lang/messages/zh-CN.json index a9a4b0e0ef5..458410dcb5d 100644 --- a/frontend/lang/messages/zh-CN.json +++ b/frontend/lang/messages/zh-CN.json @@ -806,8 +806,8 @@ "oidc-ready-error-text": "某些OIDC环境变量尚未配置。(如果你不使用OIDC验证可以忽略该报错)", "oidc-ready-success-text": "OIDC所需的环境变量均已配置。", "openai-ready": "OpenAI Ready", - "openai-ready-error-text": "Not all OpenAI Values are configured. This can be ignored if you are not using OpenAI features.", - "openai-ready-success-text": "Required OpenAI variables are all set." + "openai-ready-error-text": "并非所有的 OpenAI 值都已配置。如果您不使用 OpenAI 功能,这将被忽略。", + "openai-ready-success-text": "所需的 OpenAI 变量已全部设置。" }, "shopping-list": { "all-lists": "所有购物清单", @@ -821,7 +821,7 @@ "food": "食品", "note": "备注", "label": "标注", - "save-label": "Save Label", + "save-label": "保存标签", "linked-item-warning": "此条目已经与一个或多个食谱有关。若强行变更它的单位或食品,会在增减下方关联食谱份数时产生意外结果。", "toggle-food": "是否为数据库中的食品", "manage-labels": "管理标签", @@ -837,7 +837,7 @@ "items-checked-count": "未选中条目|已选中1个条目|已选中{count}个条目", "no-label": "无标签", "completed-on": "于 {date} 完成", - "you-are-offline": "You are offline", + "you-are-offline": "你已离线", "you-are-offline-description": "Not all features are available while offline. You can still add, modify, and remove items, but you will not be able to sync your changes to the server until you are back online.", "are-you-sure-you-want-to-check-all-items": "Are you sure you want to check all items?", "are-you-sure-you-want-to-uncheck-all-items": "Are you sure you want to uncheck all items?", diff --git a/mealie/repos/seed/resources/units/locales/no-NO.json b/mealie/repos/seed/resources/units/locales/no-NO.json index 76c4de411c9..f7cf50c173e 100644 --- a/mealie/repos/seed/resources/units/locales/no-NO.json +++ b/mealie/repos/seed/resources/units/locales/no-NO.json @@ -1,140 +1,140 @@ { "teaspoon": { "name": "teskje", - "plural_name": "teaspoons", + "plural_name": "teskjeer", "description": "", "abbreviation": "ts" }, "tablespoon": { "name": "spiseskje", - "plural_name": "tablespoons", + "plural_name": "spiseskjeer", "description": "", "abbreviation": "ss" }, "cup": { "name": "kopp", - "plural_name": "cups", + "plural_name": "kopper", "description": "", - "abbreviation": "c" + "abbreviation": "kopp" }, "fluid-ounce": { "name": "væskeunse", - "plural_name": "fluid ounces", + "plural_name": "flytende ounces", "description": "", "abbreviation": "fl oz" }, "pint": { "name": "pint", - "plural_name": "pints", + "plural_name": "pint", "description": "", "abbreviation": "pt" }, "quart": { "name": "kvart", - "plural_name": "quarts", + "plural_name": "kvart", "description": "", "abbreviation": "qt" }, "gallon": { "name": "gallon", - "plural_name": "gallons", + "plural_name": "gallon", "description": "", "abbreviation": "gal" }, "milliliter": { "name": "milliliter", - "plural_name": "milliliters", + "plural_name": "milliliter", "description": "", "abbreviation": "ml" }, "liter": { "name": "liter", - "plural_name": "liters", + "plural_name": "liter", "description": "", "abbreviation": "l" }, "pound": { "name": "pund", - "plural_name": "pounds", + "plural_name": "pund", "description": "", "abbreviation": "lb", "plural_abbreviation": "lbs" }, "ounce": { "name": "unse", - "plural_name": "ounces", + "plural_name": "ounce", "description": "", "abbreviation": "oz" }, "gram": { "name": "gram", - "plural_name": "grams", + "plural_name": "gram", "description": "", "abbreviation": "g" }, "kilogram": { "name": "kilogram", - "plural_name": "kilograms", + "plural_name": "kilogram", "description": "", "abbreviation": "kg" }, "milligram": { "name": "milligram", - "plural_name": "milligrams", + "plural_name": "milligram", "description": "", "abbreviation": "mg" }, "splash": { "name": "skvett", - "plural_name": "splashes", + "plural_name": "skvetter", "description": "", "abbreviation": "" }, "dash": { "name": "klype", - "plural_name": "dashes", + "plural_name": "dæsjer", "description": "", "abbreviation": "" }, "serving": { "name": "porsjon", - "plural_name": "servings", + "plural_name": "porsjoner", "description": "", "abbreviation": "" }, "head": { "name": "hode", - "plural_name": "heads", + "plural_name": "hoder", "description": "", "abbreviation": "" }, "clove": { "name": "fedd", - "plural_name": "cloves", + "plural_name": "fedd", "description": "", "abbreviation": "" }, "can": { "name": "boks", - "plural_name": "cans", + "plural_name": "bokser", "description": "", "abbreviation": "" }, "bunch": { - "name": "bunch", - "plural_name": "bunches", + "name": "haug", + "plural_name": "hauger", "description": "", "abbreviation": "" }, "pack": { - "name": "pack", - "plural_name": "packs", + "name": "pakke", + "plural_name": "pakker", "description": "", "abbreviation": "" }, "pinch": { - "name": "pinch", - "plural_name": "pinches", + "name": "klype", + "plural_name": "klyper", "description": "", "abbreviation": "" } From a3f474e08826b393b43097d8ebf5953c3faf4983 Mon Sep 17 00:00:00 2001 From: Michael Genson <71845777+michael-genson@users.noreply.github.com> Date: Fri, 30 Aug 2024 16:24:25 -0500 Subject: [PATCH 23/98] feat: Change OpenAI Image Format to JPG (#4117) --- mealie/pkgs/img/minify.py | 39 ++++++++++++++++++++++++-------- mealie/services/openai/openai.py | 6 ++--- 2 files changed, 33 insertions(+), 12 deletions(-) diff --git a/mealie/pkgs/img/minify.py b/mealie/pkgs/img/minify.py index 689124e7e38..7ebe17469e4 100644 --- a/mealie/pkgs/img/minify.py +++ b/mealie/pkgs/img/minify.py @@ -9,9 +9,17 @@ register_heif_opener() register_avif_opener() -WEBP = ".webp" -FORMAT = "WEBP" +@dataclass +class ImageFormat: + suffix: str + format: str + modes: list[str] + """If the image is not in the correct mode, it will be converted to the first mode in the list""" + + +JPG = ImageFormat(".jpg", "JPEG", ["RGB"]) +WEBP = ImageFormat(".webp", "WEBP", ["RGB", "RGBA"]) IMAGE_EXTENSIONS = {".jpg", ".jpeg", ".png", ".webp", ".heic", ".avif"} @@ -57,24 +65,37 @@ def purge(self, image: Path): return for file in image.parent.glob("*.*"): - if file.suffix != WEBP: + if file.suffix != WEBP.suffix: file.unlink() class PillowMinifier(ABCMinifier): @staticmethod - def to_webp(image_file: Path, dest: Path | None = None, quality: int = 100) -> Path: + def _convert_image( + image_file: Path, image_format: ImageFormat, dest: Path | None = None, quality: int = 100 + ) -> Path: """ - Converts an image to the webp format in-place. The original image is not - removed By default, the quality is set to 100. + Converts an image to the specified format in-place. The original image is not + removed. By default, the quality is set to 100. """ + img = Image.open(image_file) + if img.mode not in image_format.modes: + img = img.convert(image_format.modes[0]) - dest = dest or image_file.with_suffix(WEBP) - img.save(dest, FORMAT, quality=quality) + dest = dest or image_file.with_suffix(image_format.suffix) + img.save(dest, image_format.format, quality=quality) return dest + @staticmethod + def to_jpg(image_file: Path, dest: Path | None = None, quality: int = 100) -> Path: + return PillowMinifier._convert_image(image_file, JPG, dest, quality) + + @staticmethod + def to_webp(image_file: Path, dest: Path | None = None, quality: int = 100) -> Path: + return PillowMinifier._convert_image(image_file, WEBP, dest, quality) + @staticmethod def crop_center(pil_img: Image, crop_width=300, crop_height=300): img_width, img_height = pil_img.size @@ -122,7 +143,7 @@ def minify(self, image_file: Path, force=True): else: img = Image.open(image_file) tiny_image = PillowMinifier.crop_center(img) - tiny_image.save(tiny_dest, FORMAT, quality=70) + tiny_image.save(tiny_dest, WEBP.format, quality=70) self._logger.info("Tiny image saved") success = True diff --git a/mealie/services/openai/openai.py b/mealie/services/openai/openai.py index db7f9fc3b7a..64cd4180eb6 100644 --- a/mealie/services/openai/openai.py +++ b/mealie/services/openai/openai.py @@ -65,12 +65,12 @@ class OpenAILocalImage(OpenAIImageBase): path: Path def get_image_url(self) -> str: - image = img.PillowMinifier.to_webp( - self.path, dest=self.path.parent.joinpath(f"{self.filename}-min-original.webp") + image = img.PillowMinifier.to_jpg( + self.path, dest=self.path.parent.joinpath(f"{self.filename}-min-original.jpg") ) with open(image, "rb") as f: b64content = base64.b64encode(f.read()).decode("utf-8") - return f"data:image/webp;base64,{b64content}" + return f"data:image/jpg;base64,{b64content}" class OpenAIService(BaseService): From 220c383ccb1cdfe8ccc8674c8efdc7ab22024001 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 31 Aug 2024 15:23:58 -0800 Subject: [PATCH 24/98] chore(deps): update dependency pylint to v3.2.7 (#4131) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index a45a5599d9c..70ead0203b8 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2261,13 +2261,13 @@ tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] [[package]] name = "pylint" -version = "3.2.6" +version = "3.2.7" description = "python code static checker" optional = false python-versions = ">=3.8.0" files = [ - {file = "pylint-3.2.6-py3-none-any.whl", hash = "sha256:03c8e3baa1d9fb995b12c1dbe00aa6c4bcef210c2a2634374aedeb22fb4a8f8f"}, - {file = "pylint-3.2.6.tar.gz", hash = "sha256:a5d01678349454806cff6d886fb072294f56a58c4761278c97fb557d708e1eb3"}, + {file = "pylint-3.2.7-py3-none-any.whl", hash = "sha256:02f4aedeac91be69fb3b4bea997ce580a4ac68ce58b89eaefeaf06749df73f4b"}, + {file = "pylint-3.2.7.tar.gz", hash = "sha256:1b7a721b575eaeaa7d39db076b6e7743c993ea44f57979127c517c6c572c803e"}, ] [package.dependencies] From 7ef2e91ecfc3bf89dff31d6008b1dc88aa70bb14 Mon Sep 17 00:00:00 2001 From: Hayden <64056131+hay-kot@users.noreply.github.com> Date: Sat, 31 Aug 2024 18:24:12 -0500 Subject: [PATCH 25/98] chore(l10n): New Crowdin updates (#4132) --- frontend/lang/messages/en-GB.json | 14 +++++------ frontend/lang/messages/uk-UA.json | 24 +++++++++---------- mealie/lang/messages/en-GB.json | 4 ++-- .../seed/resources/foods/locales/en-GB.json | 2 +- .../seed/resources/units/locales/en-GB.json | 6 ++--- .../seed/resources/units/locales/es-ES.json | 4 ++-- .../seed/resources/units/locales/ko-KR.json | 14 +++++------ .../seed/resources/units/locales/pl-PL.json | 2 +- 8 files changed, 35 insertions(+), 35 deletions(-) diff --git a/frontend/lang/messages/en-GB.json b/frontend/lang/messages/en-GB.json index 2ef519a6910..9ef641a0fb8 100644 --- a/frontend/lang/messages/en-GB.json +++ b/frontend/lang/messages/en-GB.json @@ -223,10 +223,10 @@ "error-updating-group": "Error updating group", "group": "Group", "group-deleted": "Group deleted", - "group-deletion-failed": "Group deletion failed", + "group-deletion-failed": "Grout deletion failed", "group-id-with-value": "Group ID: {groupID}", "group-name": "Group Name", - "group-not-found": "Group not found", + "group-not-found": "Grout not found", "group-token": "Group Token", "group-with-value": "Group: {groupID}", "groups": "Groups", @@ -250,10 +250,10 @@ "private-group-description": "Setting your group to private will default all public view options to default. This overrides any individual households or recipes public view settings.", "enable-public-access": "Enable Public Access", "enable-public-access-description": "Make group recipes public by default, and allow visitors to view recipes without logging-in", - "allow-users-outside-of-your-group-to-see-your-recipes": "Allow users outside of your group to see your recipes", + "allow-users-outside-of-your-group-to-see-your-recipes": "Allow users outside your group to see your recipes", "allow-users-outside-of-your-group-to-see-your-recipes-description": "When enabled you can use a public share link to share specific recipes without authorizing the user. When disabled, you can only share recipes with users who are in your group or with a pre-generated private link", "show-nutrition-information": "Show nutrition information", - "show-nutrition-information-description": "When enabled the nutrition information will be shown on the recipe if available. If there is no nutrition information available, the nutrition information will not be shown", + "show-nutrition-information-description": "When enabled the nutrition information will be shown on the recipe if available. If there is no nutrition information available the nutrition information will now be shown", "show-recipe-assets": "Show recipe assets", "show-recipe-assets-description": "When enabled the recipe assets will be shown on the recipe if available", "default-to-landscape-view": "Default to landscape view", @@ -287,8 +287,8 @@ "private-household": "Private Household", "private-household-description": "Setting your household to private will default all public view options to default. This overrides any individual recipes public view settings.", "household-recipe-preferences": "Household Recipe Preferences", - "default-recipe-preferences-description": "These are the default settings when a new recipe is created in your household. These can be changed for individual recipes in the recipe settings menu.", - "allow-users-outside-of-your-household-to-see-your-recipes": "Allow users outside of your household to see your recipes", + "default-recipe-preferences-description": "These are the default settings when a new recipe is created in your household. These can be change for individual recipe sin the recipe settings menu.", + "allow-users-outside-of-your-household-to-see-your-recipes": "Allow users outside your household to see your recipes", "allow-users-outside-of-your-household-to-see-your-recipes-description": "When enabled you can use a public share link to share specific recipes without authorizing the user. When disabled, you can only share recipes with users who are in your household or with a pre-generated private link", "household-preferences": "Household Preferences" }, @@ -462,7 +462,7 @@ "disable-amount": "Disable Ingredient Amounts", "disable-comments": "Disable Comments", "duplicate": "Duplicate recipe", - "duplicate-name": "Name of the new recipe", + "duplicate-name": "Name ot the new recipe", "edit-scale": "Edit Scale", "fat-content": "Fat", "fiber-content": "Fibre", diff --git a/frontend/lang/messages/uk-UA.json b/frontend/lang/messages/uk-UA.json index e9b67ce4a24..3e465bc6250 100644 --- a/frontend/lang/messages/uk-UA.json +++ b/frontend/lang/messages/uk-UA.json @@ -239,7 +239,7 @@ "keep-my-recipes-private-description": "Встановлює \"приватне\" налаштуванням по замовчування для групи та всіх рецептів. Це завжди можна змінити потім." }, "manage-members": "Керування Користувачами", - "manage-members-description": "Manage the permissions of the members in your household. {manage} allows the user to access the data-management page, and {invite} allows the user to generate invitation links for other users. Group owners cannot change their own permissions.", + "manage-members-description": "Керуйте дозволами учасників вашої сімʼї. {manage} дозволяє користувачеві отримати доступ до сторінки керування даними {invite} дозволяє користувачеві генерувати посилання запрошення для інших користувачів. Власники групи не можуть змінити власні дозволи.", "manage": "Керування", "invite": "Запрошення", "looking-to-update-your-profile": "Бажаєте оновити свій профіль?", @@ -261,7 +261,7 @@ "disable-users-from-commenting-on-recipes": "Вимкнути користувачам можливість коментувати рецепти", "disable-users-from-commenting-on-recipes-description": "Приховати розділ коментарів на сторінці рецепта і вимкнути коментарі", "disable-organizing-recipe-ingredients-by-units-and-food": "Вимкнути можливість організовувати інгредієнти рецепту за одиницями та продуктами", - "disable-organizing-recipe-ingredients-by-units-and-food-description": "Hides the Food, Unit, and Amount fields for ingredients and treats ingredients as plain text fields", + "disable-organizing-recipe-ingredients-by-units-and-food-description": "Приховує поля продукт, одиниці, та кількість для інгредієнтів й інтерпретує їх як простий текст", "general-preferences": "Загальні налаштування", "group-recipe-preferences": "Групові налаштування рецептів", "report": "Звіт", @@ -281,15 +281,15 @@ "household-group": "Домашня група", "household-management": "Сімейне управління", "manage-households": "Управління сімʼями", - "admin-household-management": "Admin Household Management", - "admin-household-management-text": "Changes to this household will be reflected immediately.", + "admin-household-management": "Адміністративне керування сімʼєю", + "admin-household-management-text": "Зміни до цієї сімʼї будуть відображені негайно.", "household-id-value": "Ідентифікатор сімʼї: {0}", "private-household": "Приватна сімʼя", "private-household-description": "Setting your household to private will default all public view options to default. This overrides any individual recipes public view settings.", - "household-recipe-preferences": "Household Recipe Preferences", - "default-recipe-preferences-description": "These are the default settings when a new recipe is created in your household. These can be changed for individual recipes in the recipe settings menu.", - "allow-users-outside-of-your-household-to-see-your-recipes": "Allow users outside of your household to see your recipes", - "allow-users-outside-of-your-household-to-see-your-recipes-description": "When enabled you can use a public share link to share specific recipes without authorizing the user. When disabled, you can only share recipes with users who are in your household or with a pre-generated private link", + "household-recipe-preferences": "Налаштування рецептів сімʼї", + "default-recipe-preferences-description": "Це типові налаштування для нового рецепта у вашій сімʼї. Ці параметри можна змінити для окремих рецептів в меню налаштувань рецептів.", + "allow-users-outside-of-your-household-to-see-your-recipes": "Дозволити користувачам за межами вашої сімʼї бачити ваші рецепти", + "allow-users-outside-of-your-household-to-see-your-recipes-description": "Якщо увімкнено, можна використовувати публічне посилання, щоб поділитися рецептом не авторизуючи користувача. Коли вимкнено, ви можете ділитися рецептами лише з користувачами у вашій сімʼї або за заздалегідь згенерованим приватним посиланням", "household-preferences": "Налаштування сімʼї" }, "meal-plan": { @@ -1253,7 +1253,7 @@ "group-statistics": "Статистика групи", "group-statistics-description": "Статистика вашої групи дає можливість зрозуміти, як ви користуєтеся Mealie.", "household-statistics": "Статистика сімʼї", - "household-statistics-description": "Your Household Statistics provide some insight how you're using Mealie.", + "household-statistics-description": "Статистика вашої сімʼї дає можливість зрозуміти, як ви користуєтеся Mealie.", "storage-capacity": "Обсяг сховища", "storage-capacity-description": "Об'єм сховища це сума зображені та відвантажених медіаресурсів.", "personal": "Особисте", @@ -1263,10 +1263,10 @@ "api-tokens-description": "Керуйте своїми ключами API для доступу із зовнішніх програм.", "group-description": "Ці елементи є спільними для вашої групи. Редагування одного з них змінить його для всієї групи!", "group-settings": "Налаштування групи", - "group-settings-description": "Manage your common group settings, like privacy settings.", - "household-description": "These items are shared within your household. Editing one of them will change it for the whole household!", + "group-settings-description": "Керуйте спільними налаштуваннями групи, як-от налаштування конфіденційності.", + "household-description": "Ці елементи є спільними для вашої сімʼї. Редагування одного з них змінить його для всієї сімʼї!", "household-settings": "Налаштування сімʼї", - "household-settings-description": "Manage your household settings, like mealplan and privacy settings.", + "household-settings-description": "Керуйте налаштуваннями сімʼї, такими як план харчування і налаштування конфіденційності.", "cookbooks-description": "Управління колекцією категорій рецептів і генерація сторінок для них.", "members": "Учасники", "members-description": "Подивіться, хто у вас в сім'ї й керуйте їх дозволами.", diff --git a/mealie/lang/messages/en-GB.json b/mealie/lang/messages/en-GB.json index 57aa0572eda..1d2bd3e179b 100644 --- a/mealie/lang/messages/en-GB.json +++ b/mealie/lang/messages/en-GB.json @@ -33,7 +33,7 @@ "generic-updated": "{name} was updated", "generic-created-with-url": "{name} has been created, {url}", "generic-updated-with-url": "{name} has been updated, {url}", - "generic-duplicated": "{name} has been duplicated", + "generic-duplicated": "{name} has been duplicates", "generic-deleted": "{name} has been deleted" }, "datetime": { @@ -42,7 +42,7 @@ "hour": "hour|hours", "minute": "minute|minutes", "second": "second|seconds", - "millisecond": "millisecond|milliseconds", + "millisecond": "milliecond|milliseconds", "microsecond": "microsecond|microseconds" }, "emails": { diff --git a/mealie/repos/seed/resources/foods/locales/en-GB.json b/mealie/repos/seed/resources/foods/locales/en-GB.json index 0450897f841..a0caf3ccb18 100644 --- a/mealie/repos/seed/resources/foods/locales/en-GB.json +++ b/mealie/repos/seed/resources/foods/locales/en-GB.json @@ -81,7 +81,7 @@ "endive": "endive", "fats": "fats", "speck": "speck", - "fava-beans": "fava beans", + "fava-beans": "broad beans", "fiddlehead": "fiddlehead", "fish": "fish", "catfish": "catfish ", diff --git a/mealie/repos/seed/resources/units/locales/en-GB.json b/mealie/repos/seed/resources/units/locales/en-GB.json index 22688f64324..fb2d0adacc1 100644 --- a/mealie/repos/seed/resources/units/locales/en-GB.json +++ b/mealie/repos/seed/resources/units/locales/en-GB.json @@ -12,7 +12,7 @@ "abbreviation": "tbsp" }, "cup": { - "name": "US cup", + "name": "cup", "plural_name": "cups", "description": "", "abbreviation": "c" @@ -43,13 +43,13 @@ }, "milliliter": { "name": "millilitre", - "plural_name": "milliliters", + "plural_name": "millilitres", "description": "", "abbreviation": "ml" }, "liter": { "name": "litre", - "plural_name": "liters", + "plural_name": "litres", "description": "", "abbreviation": "l" }, diff --git a/mealie/repos/seed/resources/units/locales/es-ES.json b/mealie/repos/seed/resources/units/locales/es-ES.json index 39c9bb598cc..4566a94b222 100644 --- a/mealie/repos/seed/resources/units/locales/es-ES.json +++ b/mealie/repos/seed/resources/units/locales/es-ES.json @@ -13,7 +13,7 @@ }, "cup": { "name": "taza/s", - "plural_name": "cups", + "plural_name": "tazas", "description": "", "abbreviation": "c" }, @@ -37,7 +37,7 @@ }, "gallon": { "name": "galón", - "plural_name": "gallons", + "plural_name": "galón/es", "description": "", "abbreviation": "gal" }, diff --git a/mealie/repos/seed/resources/units/locales/ko-KR.json b/mealie/repos/seed/resources/units/locales/ko-KR.json index cdec105db7d..62074f7c266 100644 --- a/mealie/repos/seed/resources/units/locales/ko-KR.json +++ b/mealie/repos/seed/resources/units/locales/ko-KR.json @@ -1,42 +1,42 @@ { "teaspoon": { - "name": "teaspoon", + "name": "티스푼", "plural_name": "teaspoons", "description": "", "abbreviation": "tsp" }, "tablespoon": { - "name": "tablespoon", + "name": "테이블스푼", "plural_name": "tablespoons", "description": "", "abbreviation": "tbsp" }, "cup": { - "name": "cup", + "name": "컵", "plural_name": "cups", "description": "", "abbreviation": "c" }, "fluid-ounce": { - "name": "fluid ounce", + "name": "액량 온스", "plural_name": "fluid ounces", "description": "", "abbreviation": "fl oz" }, "pint": { - "name": "pint", + "name": "파인트", "plural_name": "pints", "description": "", "abbreviation": "pt" }, "quart": { - "name": "quart", + "name": "쿼트", "plural_name": "quarts", "description": "", "abbreviation": "qt" }, "gallon": { - "name": "gallon", + "name": "갤런", "plural_name": "gallons", "description": "", "abbreviation": "gal" diff --git a/mealie/repos/seed/resources/units/locales/pl-PL.json b/mealie/repos/seed/resources/units/locales/pl-PL.json index 2af9351e781..fd360765ae8 100644 --- a/mealie/repos/seed/resources/units/locales/pl-PL.json +++ b/mealie/repos/seed/resources/units/locales/pl-PL.json @@ -121,7 +121,7 @@ "abbreviation": "" }, "bunch": { - "name": "bunch", + "name": "pęczek", "plural_name": "bunches", "description": "", "abbreviation": "" From 9acf9ec27c5595baed197c35900cd83f1375cdbd Mon Sep 17 00:00:00 2001 From: Michael Genson <71845777+michael-genson@users.noreply.github.com> Date: Sat, 31 Aug 2024 21:54:10 -0500 Subject: [PATCH 26/98] feat: Cross-Household Recipes (#4089) --- .../Domain/Recipe/RecipeActionMenu.vue | 21 +- .../RecipePageParts/RecipePageHeader.vue | 5 +- frontend/composables/recipes/index.ts | 1 + .../recipes/use-recipe-permissions.test.ts | 81 ++++++++ .../recipes/use-recipe-permissions.ts | 34 ++++ frontend/composables/recipes/use-recipes.ts | 6 +- .../pages/g/_groupSlug/recipes/timeline.vue | 3 +- frontend/pages/group/data/recipes.vue | 6 +- mealie/routes/recipe/recipe_crud_routes.py | 18 +- mealie/routes/recipe/timeline_events.py | 13 +- mealie/routes/users/ratings.py | 11 +- mealie/services/recipe/recipe_service.py | 26 ++- .../user_recipe_tests/test_recipe_comments.py | 17 ++ .../test_recipe_cross_household.py | 186 ++++++++++++++++++ .../user_recipe_tests/test_recipe_ratings.py | 44 +++++ .../test_recipe_timeline_events.py | 165 +++++++++++----- 16 files changed, 545 insertions(+), 92 deletions(-) create mode 100644 frontend/composables/recipes/use-recipe-permissions.test.ts create mode 100644 frontend/composables/recipes/use-recipe-permissions.ts create mode 100644 tests/integration_tests/user_recipe_tests/test_recipe_cross_household.py diff --git a/frontend/components/Domain/Recipe/RecipeActionMenu.vue b/frontend/components/Domain/Recipe/RecipeActionMenu.vue index adb0b0b0981..3ad0184d0b0 100644 --- a/frontend/components/Domain/Recipe/RecipeActionMenu.vue +++ b/frontend/components/Domain/Recipe/RecipeActionMenu.vue @@ -21,31 +21,23 @@
- - + +
- + {{ $t("general.edit") }} - - - {{ $t("recipe.locked-by-owner") }} -
@@ -135,7 +128,7 @@ export default defineComponent({ required: true, type: String, }, - locked: { + canEdit: { type: Boolean, default: false, }, diff --git a/frontend/components/Domain/Recipe/RecipePage/RecipePageParts/RecipePageHeader.vue b/frontend/components/Domain/Recipe/RecipePage/RecipePageParts/RecipePageHeader.vue index ed26818b08f..18915641ae2 100644 --- a/frontend/components/Domain/Recipe/RecipePage/RecipePageParts/RecipePageHeader.vue +++ b/frontend/components/Domain/Recipe/RecipePage/RecipePageParts/RecipePageHeader.vue @@ -45,7 +45,7 @@ :recipe="recipe" :slug="recipe.slug" :recipe-scale="recipeScale" - :locked="isOwnGroup && user.id !== recipe.userId && recipe.settings.locked" + :can-edit="canEditRecipe" :name="recipe.name" :logged-in="isOwnGroup" :open="isEditMode" @@ -64,6 +64,7 @@ - diff --git a/frontend/components/Domain/Recipe/RecipeCard.vue b/frontend/components/Domain/Recipe/RecipeCard.vue index aa22437e3e5..b6c627c60d3 100644 --- a/frontend/components/Domain/Recipe/RecipeCard.vue +++ b/frontend/components/Domain/Recipe/RecipeCard.vue @@ -50,7 +50,7 @@ :recipe-id="recipeId" :use-items="{ delete: false, - edit: true, + edit: false, download: true, mealplanner: true, shoppingList: true, diff --git a/frontend/components/Domain/Recipe/RecipeCardMobile.vue b/frontend/components/Domain/Recipe/RecipeCardMobile.vue index 6fa5b8354e8..3d064126948 100644 --- a/frontend/components/Domain/Recipe/RecipeCardMobile.vue +++ b/frontend/components/Domain/Recipe/RecipeCardMobile.vue @@ -62,7 +62,7 @@ :recipe-id="recipeId" :use-items="{ delete: false, - edit: true, + edit: false, download: true, mealplanner: true, shoppingList: true, diff --git a/frontend/components/Domain/Recipe/RecipePage/RecipePageParts/RecipePageHeader.vue b/frontend/components/Domain/Recipe/RecipePage/RecipePageParts/RecipePageHeader.vue index 18915641ae2..69853821a79 100644 --- a/frontend/components/Domain/Recipe/RecipePage/RecipePageParts/RecipePageHeader.vue +++ b/frontend/components/Domain/Recipe/RecipePage/RecipePageParts/RecipePageHeader.vue @@ -69,7 +69,8 @@ import RecipeRating from "~/components/Domain/Recipe/RecipeRating.vue"; import RecipeLastMade from "~/components/Domain/Recipe/RecipeLastMade.vue"; import RecipeActionMenu from "~/components/Domain/Recipe/RecipeActionMenu.vue"; import RecipeTimeCard from "~/components/Domain/Recipe/RecipeTimeCard.vue"; -import { useStaticRoutes } from "~/composables/api"; +import { useStaticRoutes, useUserApi } from "~/composables/api"; +import { HouseholdSummary } from "~/lib/api/types/household"; import { Recipe } from "~/lib/api/types/recipe"; import { NoUndefinedField } from "~/lib/api/types/non-generated"; import { usePageState, usePageUser, PageMode, EditorMode } from "~/composables/recipe-page/shared-state"; @@ -100,7 +101,15 @@ export default defineComponent({ const { imageKey, pageMode, editMode, setMode, toggleEditMode, isEditMode } = usePageState(props.recipe.slug); const { user } = usePageUser(); const { isOwnGroup } = useLoggedInState(); - const { canEditRecipe } = useRecipePermissions(props.recipe, user); + + const recipeHousehold = ref(); + if (user) { + const userApi = useUserApi(); + userApi.groups.fetchHousehold(props.recipe.householdId).then(({ data }) => { + recipeHousehold.value = data || undefined; + }); + } + const { canEditRecipe } = useRecipePermissions(props.recipe, recipeHousehold, user); function printRecipe() { window.print(); diff --git a/frontend/composables/recipes/use-recipe-permissions.test.ts b/frontend/composables/recipes/use-recipe-permissions.test.ts index 6dedeb32b37..a962d7af34d 100644 --- a/frontend/composables/recipes/use-recipe-permissions.test.ts +++ b/frontend/composables/recipes/use-recipe-permissions.test.ts @@ -1,5 +1,7 @@ import { describe, test, expect } from "vitest"; +import { ref, Ref } from "@nuxtjs/composition-api"; import { useRecipePermissions } from "./use-recipe-permissions"; +import { HouseholdSummary } from "~/lib/api/types/household"; import { Recipe } from "~/lib/api/types/recipe"; import { UserOut } from "~/lib/api/types/user"; @@ -32,35 +34,76 @@ describe("test use recipe permissions", () => { ...overrides, }); + const createRecipeHousehold = (overrides: Partial, lockRecipeEdits = false): Ref => ( + ref({ + id: commonHouseholdId, + groupId: commonGroupId, + name: "My Household", + slug: "my-household", + preferences: { + id: "my-household-preferences-id", + lockRecipeEditsFromOtherHouseholds: lockRecipeEdits, + }, + ...overrides, + }) + ); + test("when user is null, cannot edit", () => { - const result = useRecipePermissions(createRecipe({}), null); + const result = useRecipePermissions(createRecipe({}), createRecipeHousehold({}), null); expect(result.canEditRecipe.value).toBe(false); }); test("when user is recipe owner, can edit", () => { - const result = useRecipePermissions(createRecipe({}), createUser({})); + const result = useRecipePermissions(createRecipe({}), ref(), createUser({})); expect(result.canEditRecipe.value).toBe(true); }); - test("when user is not recipe owner, is correct group and household, and recipe is unlocked, can edit", () => { + test( + "when user is not recipe owner, is correct group and household, recipe is unlocked, and household is unlocked, can edit", + () => { + const result = useRecipePermissions( + createRecipe({}), + createRecipeHousehold({}), + createUser({ id: "other-user-id" }), + ); + expect(result.canEditRecipe.value).toBe(true); + } + ); + + test( + "when user is not recipe owner, is correct group and household, recipe is unlocked, but household is locked, can edit", + () => { + const result = useRecipePermissions( + createRecipe({}), + createRecipeHousehold({}, true), + createUser({ id: "other-user-id" }), + ); + expect(result.canEditRecipe.value).toBe(true); + } + ); + + test("when user is not recipe owner, and user is other group, cannot edit", () => { const result = useRecipePermissions( createRecipe({}), - createUser({ id: "other-user-id" }), + createRecipeHousehold({}), + createUser({ id: "other-user-id", groupId: "other-group-id"}), ); - expect(result.canEditRecipe.value).toBe(true); + expect(result.canEditRecipe.value).toBe(false); }); - test("when user is not recipe owner, and user is other group, cannot edit", () => { + test("when user is not recipe owner, and user is other household, and household is unlocked, can edit", () => { const result = useRecipePermissions( createRecipe({}), - createUser({ id: "other-user-id", groupId: "other-group-id"}), + createRecipeHousehold({}), + createUser({ id: "other-user-id", householdId: "other-household-id" }), ); - expect(result.canEditRecipe.value).toBe(false); + expect(result.canEditRecipe.value).toBe(true); }); - test("when user is not recipe owner, and user is other household, cannot edit", () => { + test("when user is not recipe owner, and user is other household, and household is locked, cannot edit", () => { const result = useRecipePermissions( createRecipe({}), + createRecipeHousehold({}, true), createUser({ id: "other-user-id", householdId: "other-household-id" }), ); expect(result.canEditRecipe.value).toBe(false); @@ -69,13 +112,14 @@ describe("test use recipe permissions", () => { test("when user is not recipe owner, and recipe is locked, cannot edit", () => { const result = useRecipePermissions( createRecipe({}, true), + createRecipeHousehold({}), createUser({ id: "other-user-id"}), ); expect(result.canEditRecipe.value).toBe(false); }); - test("when user is recipe owner, and recipe is locked, can edit", () => { - const result = useRecipePermissions(createRecipe({}, true), createUser({})); + test("when user is recipe owner, and recipe is locked, and household is locked, can edit", () => { + const result = useRecipePermissions(createRecipe({}, true), createRecipeHousehold({}, true), createUser({})); expect(result.canEditRecipe.value).toBe(true); }); }); diff --git a/frontend/composables/recipes/use-recipe-permissions.ts b/frontend/composables/recipes/use-recipe-permissions.ts index bd3af98dca1..d4efbfd058b 100644 --- a/frontend/composables/recipes/use-recipe-permissions.ts +++ b/frontend/composables/recipes/use-recipe-permissions.ts @@ -1,34 +1,44 @@ -import { computed } from "@nuxtjs/composition-api"; +import { computed, Ref } from "@nuxtjs/composition-api"; import { Recipe } from "~/lib/api/types/recipe"; +import { HouseholdSummary } from "~/lib/api/types/household"; import { UserOut } from "~/lib/api/types/user"; -export function useRecipePermissions(recipe: Recipe, user: UserOut | null) { - const canEditRecipe = computed(() => { - // Check recipe owner - if (!user?.id) { - return false; - } - if (user.id === recipe.userId) { - return true; - } +export function useRecipePermissions( + recipe: Recipe, + recipeHousehold: Ref, + user: UserOut | null, +) { + const canEditRecipe = computed(() => { + // Check recipe owner + if (!user?.id) { + return false; + } + if (user.id === recipe.userId) { + return true; + } - // Check group and household - if (user.groupId !== recipe.groupId) { - return false; - } - if (user.householdId !== recipe.householdId) { - return false; - } + // Check group and household + if (user.groupId !== recipe.groupId) { + return false; + } + if (user.householdId !== recipe.householdId) { + if (!recipeHousehold.value?.preferences) { + return false; + } + if (recipeHousehold.value?.preferences.lockRecipeEditsFromOtherHouseholds) { + return false; + } + } - // Check recipe - if (recipe.settings?.locked) { - return false; - } + // Check recipe + if (recipe.settings?.locked) { + return false; + } - return true; - }); + return true; + }); - return { - canEditRecipe, - } + return { + canEditRecipe, + } } diff --git a/frontend/composables/use-households.ts b/frontend/composables/use-households.ts index 618ab75636f..44f9caf8f4e 100644 --- a/frontend/composables/use-households.ts +++ b/frontend/composables/use-households.ts @@ -36,6 +36,8 @@ export const useHouseholdSelf = function () { if (data) { householdSelfRef.value.preferences = data; } + + return data || undefined; }, }; diff --git a/frontend/composables/use-users/user-form.ts b/frontend/composables/use-users/user-form.ts index 387f56f49c4..79b889f3f0f 100644 --- a/frontend/composables/use-users/user-form.ts +++ b/frontend/composables/use-users/user-form.ts @@ -65,6 +65,12 @@ export const useUserForm = () => { type: fieldTypes.BOOLEAN, rules: ["required"], }, + { + label: i18n.tc("user.user-can-manage-household"), + varName: "canManageHousehold", + type: fieldTypes.BOOLEAN, + rules: ["required"], + }, { label: i18n.tc("user.enable-advanced-features"), varName: "advanced", diff --git a/frontend/lang/messages/en-US.json b/frontend/lang/messages/en-US.json index 0ee1fadc316..382aa53aca0 100644 --- a/frontend/lang/messages/en-US.json +++ b/frontend/lang/messages/en-US.json @@ -241,13 +241,14 @@ "manage-members": "Manage Members", "manage-members-description": "Manage the permissions of the members in your household. {manage} allows the user to access the data-management page, and {invite} allows the user to generate invitation links for other users. Group owners cannot change their own permissions.", "manage": "Manage", + "manage-household": "Manage Household", "invite": "Invite", "looking-to-update-your-profile": "Looking to Update Your Profile?", "default-recipe-preferences-description": "These are the default settings when a new recipe is created in your group. These can be changed for individual recipes in the recipe settings menu.", "default-recipe-preferences": "Default Recipe Preferences", "group-preferences": "Group Preferences", "private-group": "Private Group", - "private-group-description": "Setting your group to private will default all public view options to default. This overrides any individual households or recipes public view settings.", + "private-group-description": "Setting your group to private will disable all public view options. This overrides any individual public view settings", "enable-public-access": "Enable Public Access", "enable-public-access-description": "Make group recipes public by default, and allow visitors to view recipes without logging-in", "allow-users-outside-of-your-group-to-see-your-recipes": "Allow users outside of your group to see your recipes", @@ -285,7 +286,9 @@ "admin-household-management-text": "Changes to this household will be reflected immediately.", "household-id-value": "Household Id: {0}", "private-household": "Private Household", - "private-household-description": "Setting your household to private will default all public view options to default. This overrides any individual recipes public view settings.", + "private-household-description": "Setting your household to private will disable all public view options. This overrides any individual public view settings", + "lock-recipe-edits-from-other-households": "Lock recipe edits from other households", + "lock-recipe-edits-from-other-households-description": "When enabled only users in your household can edit recipes created by your household", "household-recipe-preferences": "Household Recipe Preferences", "default-recipe-preferences-description": "These are the default settings when a new recipe is created in your household. These can be changed for individual recipes in the recipe settings menu.", "allow-users-outside-of-your-household-to-see-your-recipes": "Allow users outside of your household to see your recipes", @@ -987,6 +990,7 @@ "administrator": "Administrator", "user-can-invite-other-to-group": "User can invite others to group", "user-can-manage-group": "User can manage group", + "user-can-manage-household": "User can manage household", "user-can-organize-group-data": "User can organize group data", "enable-advanced-features": "Enable advanced features", "it-looks-like-this-is-your-first-time-logging-in": "It looks like this is your first time logging in.", diff --git a/frontend/lib/api/types/admin.ts b/frontend/lib/api/types/admin.ts index 88bf0f22f21..6f42b40d443 100644 --- a/frontend/lib/api/types/admin.ts +++ b/frontend/lib/api/types/admin.ts @@ -16,6 +16,7 @@ export interface AdminAboutInfo { oidcRedirect: boolean; oidcProviderName: string; enableOpenai: boolean; + enableOpenaiImageServices: boolean; versionLatest: string; apiPort: number; apiDocs: boolean; diff --git a/frontend/lib/api/types/household.ts b/frontend/lib/api/types/household.ts index 7841bd3861f..79b1a7ffaf5 100644 --- a/frontend/lib/api/types/household.ts +++ b/frontend/lib/api/types/household.ts @@ -15,6 +15,7 @@ export interface CreateGroupRecipeAction { } export interface CreateHouseholdPreferences { privateHousehold?: boolean; + lockRecipeEditsFromOtherHouseholds?: boolean; firstDayOfWeek?: number; recipePublic?: boolean; recipeShowNutrition?: boolean; @@ -185,6 +186,7 @@ export interface HouseholdInDB { } export interface ReadHouseholdPreferences { privateHousehold?: boolean; + lockRecipeEditsFromOtherHouseholds?: boolean; firstDayOfWeek?: number; recipePublic?: boolean; recipeShowNutrition?: boolean; @@ -241,6 +243,7 @@ export interface SaveGroupRecipeAction { } export interface SaveHouseholdPreferences { privateHousehold?: boolean; + lockRecipeEditsFromOtherHouseholds?: boolean; firstDayOfWeek?: number; recipePublic?: boolean; recipeShowNutrition?: boolean; @@ -267,6 +270,7 @@ export interface SaveWebhook { } export interface SetPermissions { userId: string; + canManageHousehold?: boolean; canManage?: boolean; canInvite?: boolean; canOrganize?: boolean; @@ -649,6 +653,7 @@ export interface UpdateHouseholdAdmin { } export interface UpdateHouseholdPreferences { privateHousehold?: boolean; + lockRecipeEditsFromOtherHouseholds?: boolean; firstDayOfWeek?: number; recipePublic?: boolean; recipeShowNutrition?: boolean; diff --git a/frontend/lib/api/types/openai.ts b/frontend/lib/api/types/openai.ts index ac4a29bd998..f1a358ae084 100644 --- a/frontend/lib/api/types/openai.ts +++ b/frontend/lib/api/types/openai.ts @@ -62,4 +62,159 @@ export interface OpenAIIngredient { export interface OpenAIIngredients { ingredients?: OpenAIIngredient[]; } +export interface OpenAIRecipe { + /** + * + * The name or title of the recipe. If you're unable to determine the name of the recipe, you should + * make your best guess based upon the ingredients and instructions provided. + * + */ + name: string; + /** + * + * A long description of the recipe. This should be a string that describes the recipe in a few words + * or sentences. If the recipe doesn't have a description, you should return None. + * + */ + description: string | null; + /** + * + * The yield of the recipe. For instance, if the recipe makes 12 cookies, the yield is "12 cookies". + * If the recipe makes 2 servings, the yield is "2 servings". Typically yield consists of a number followed + * by the word "serving" or "servings", but it can be any string that describes the yield. If the yield + * isn't specified, you should return None. + * + */ + recipe_yield?: string | null; + /** + * + * The total time it takes to make the recipe. This should be a string that describes a duration of time, + * such as "1 hour and 30 minutes", "90 minutes", or "1.5 hours". If the recipe has multiple times, choose + * the longest time. If the recipe doesn't specify a total time or duration, or it specifies a prep time or + * perform time but not a total time, you should return None. Do not duplicate times between total time, prep + * time and perform time. + * + */ + total_time?: string | null; + /** + * + * The time it takes to prepare the recipe. This should be a string that describes a duration of time, + * such as "30 minutes", "1 hour", or "1.5 hours". If the recipe has a total time, the prep time should be + * less than the total time. If the recipe doesn't specify a prep time, you should return None. If the recipe + * supplies only one time, it should be the total time. Do not duplicate times between total time, prep + * time and coperformok time. + * + */ + prep_time?: string | null; + /** + * + * The time it takes to cook the recipe. This should be a string that describes a duration of time, + * such as "30 minutes", "1 hour", or "1.5 hours". If the recipe has a total time, the perform time should be + * less than the total time. If the recipe doesn't specify a perform time, you should return None. If the + * recipe specifies a cook time, active time, or other time besides total or prep, you should use that + * time as the perform time. If the recipe supplies only one time, it should be the total time, and not the + * perform time. Do not duplicate times between total time, prep time and perform time. + * + */ + perform_time?: string | null; + /** + * + * A list of ingredients used in the recipe. Ingredients should be inserted in the order they appear in the + * recipe. If the recipe has no ingredients, you should return an empty list. + * + * Often times, but not always, ingredients are separated by line breaks. Use these as a guide to + * separate ingredients. + * + */ + ingredients?: OpenAIRecipeIngredient[]; + /** + * + * A list of ingredients used in the recipe. Ingredients should be inserted in the order they appear in the + * recipe. If the recipe has no ingredients, you should return an empty list. + * + * Often times, but not always, instructions are separated by line breaks and/or separated by paragraphs. + * Use these as a guide to separate instructions. They also may be separated by numbers or words, such as + * "1.", "2.", "Step 1", "Step 2", "First", "Second", etc. + * + */ + instructions?: OpenAIRecipeInstruction[]; + /** + * + * A list of notes found in the recipe. Notes should be inserted in the order they appear in the recipe. + * They may appear anywhere on the recipe, though they are typically found under the instructions. + * + */ + notes?: OpenAIRecipeNotes[]; +} +export interface OpenAIRecipeIngredient { + /** + * + * The title of the section of the recipe that the ingredient is found in. Recipes may not specify + * ingredient sections, in which case this should be left blank. + * Only the first item in the section should have this set, + * whereas subsuquent items should have their titles left blank (unless they start a new section). + * + */ + title?: string | null; + /** + * + * The text of the ingredient. This should represent the entire ingredient, such as "1 cup of flour" or + * "2 cups of onions, chopped". If the ingredient is completely blank, skip it and do not add the ingredient, + * since this field is required. + * + * If the ingredient has no text, but has a title, include the title on the + * next ingredient instead. + * + */ + text: string; +} +export interface OpenAIRecipeInstruction { + /** + * + * The title of the section of the recipe that the instruction is found in. Recipes may not specify + * instruction sections, in which case this should be left blank. + * Only the first instruction in the section should have this set, + * whereas subsuquent instructions should have their titles left blank (unless they start a new section). + * + */ + title?: string | null; + /** + * + * The text of the instruction. This represents one step in the recipe, such as "Preheat the oven to 350", + * or "Sauté the onions for 20 minutes". Sometimes steps can be longer, such as "Bring a large pot of lightly + * salted water to a boil. Add ditalini pasta and cook for 8 minutes or until al dente; drain.". + * + * Sometimes, but not always, recipes will include their number in front of the text, such as + * "1.", "2.", or "Step 1", "Step 2", or "First", "Second". In the case where they are directly numbered + * ("1.", "2.", "Step one", "Step 1", "Step two", "Step 2", etc.), you should not include the number in + * the text. However, if they use words ("First", "Second", etc.), then those should be included. + * + * If the instruction is completely blank, skip it and do not add the instruction, since this field is + * required. If the ingredient has no text, but has a title, include the title on the next + * instruction instead. + * + */ + text: string; +} +export interface OpenAIRecipeNotes { + /** + * + * The title of the note. Notes may not specify a title, and just have a body of text. In this case, + * title should be left blank, and all content should go in the note text. If the note title is just + * "note" or "info", you should ignore it and leave the title blank. + * + */ + title?: string | null; + /** + * + * The text of the note. This should represent the entire note, such as "This recipe is great for + * a summer picnic" or "This recipe is a family favorite". They may also include additional prep + * instructions such as "to make this recipe gluten free, use gluten free flour", or "you may prepare + * the dough the night before and refrigerate it until ready to bake". + * + * If the note is completely blank, skip it and do not add the note, since this field is required. + * + */ + text: string; +} export interface OpenAIBase {} diff --git a/frontend/lib/api/types/user.ts b/frontend/lib/api/types/user.ts index 8b2218f0015..81fd6a7014c 100644 --- a/frontend/lib/api/types/user.ts +++ b/frontend/lib/api/types/user.ts @@ -114,6 +114,7 @@ export interface PrivateUser { advanced?: boolean; canInvite?: boolean; canManage?: boolean; + canManageHousehold?: boolean; canOrganize?: boolean; groupId: string; groupSlug: string; @@ -189,6 +190,7 @@ export interface UserBase { advanced?: boolean; canInvite?: boolean; canManage?: boolean; + canManageHousehold?: boolean; canOrganize?: boolean; } export interface UserIn { @@ -203,6 +205,7 @@ export interface UserIn { advanced?: boolean; canInvite?: boolean; canManage?: boolean; + canManageHousehold?: boolean; canOrganize?: boolean; password: string; } @@ -218,6 +221,7 @@ export interface UserOut { advanced?: boolean; canInvite?: boolean; canManage?: boolean; + canManageHousehold?: boolean; canOrganize?: boolean; groupId: string; groupSlug: string; diff --git a/frontend/lib/api/user/groups.ts b/frontend/lib/api/user/groups.ts index a43063988ce..5dc85110abb 100644 --- a/frontend/lib/api/user/groups.ts +++ b/frontend/lib/api/user/groups.ts @@ -15,7 +15,8 @@ const routes = { groupsSelf: `${prefix}/groups/self`, preferences: `${prefix}/groups/preferences`, storage: `${prefix}/groups/storage`, - households: `${prefix}/households`, + households: `${prefix}/groups/households`, + householdsId: (id: string | number) => `${prefix}/groups/households/${id}`, membersHouseholdId: (householdId: string | number | null) => { return householdId ? `${prefix}/households/members?householdId=${householdId}` : @@ -50,6 +51,10 @@ export class GroupAPI extends BaseCRUDAPI(routes.households); } + async fetchHousehold(householdId: string | number) { + return await this.requests.get(routes.householdsId(householdId)); + } + async storage() { return await this.requests.get(routes.storage); } diff --git a/frontend/middleware/can-manage-household-only.ts b/frontend/middleware/can-manage-household-only.ts new file mode 100644 index 00000000000..0e4509e9e86 --- /dev/null +++ b/frontend/middleware/can-manage-household-only.ts @@ -0,0 +1,11 @@ +interface CanManageRedirectParams { + $auth: any + redirect: (path: string) => void +} +export default function ({ $auth, redirect }: CanManageRedirectParams) { + // If the user is not allowed to manage group settings redirect to the home page + if (!$auth.user?.canManageHousehold) { + console.warn("User is not allowed to manage household settings"); + return redirect("/"); + } +} diff --git a/frontend/pages/admin/manage/households/_id.vue b/frontend/pages/admin/manage/households/_id.vue index 174ab7c1b10..3e897cff2b1 100644 --- a/frontend/pages/admin/manage/households/_id.vue +++ b/frontend/pages/admin/manage/households/_id.vue @@ -53,7 +53,7 @@ import { VForm } from "~/types/vuetify"; export default defineComponent({ components: { - HouseholdPreferencesEditor, + HouseholdPreferencesEditor, }, layout: "admin", setup() { @@ -94,11 +94,8 @@ export default defineComponent({ const { response, data } = await userApi.households.updateOne(household.value.id, household.value); if (response?.status === 200 && data) { - if (household.value.slug !== data.slug) { - // the slug updated, which invalidates the nav URLs - window.location.reload(); - } household.value = data; + alert.success(i18n.tc("settings.settings-updated")); } else { alert.error(i18n.tc("settings.settings-update-failed")); } diff --git a/frontend/pages/household/index.vue b/frontend/pages/household/index.vue index 3e40b173ed6..0416a2bbad3 100644 --- a/frontend/pages/household/index.vue +++ b/frontend/pages/household/index.vue @@ -1,5 +1,5 @@