chore: release v0.36.0
This commit is contained in:
@@ -7,6 +7,22 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
## [0.36.0] - 2026-04-29
|
||||
|
||||
### Added
|
||||
- Navigation: Kitchen (Meals/Recipes/Shopping) is now grouped as a single "Küche" entry in the desktop sidebar, consistent with the mobile bottom bar
|
||||
- UX: empty states in Tasks, Notes, Contacts, Shopping, Recipes and Budget now include a primary CTA button that triggers the page FAB
|
||||
- UX: `friendlyError(err)` helper added to `window.oikos`; unhandled promise rejections now show status-code-aware messages (offline, forbidden, not found, server error, timeout) instead of raw error text
|
||||
- i18n: five new `common.error*` keys (offline, forbidden, notFound, server, timeout) added to all 15 locale files
|
||||
|
||||
### Changed
|
||||
- Navigation: more-button icon changed from `grid-2x2` to `ellipsis` (matches the sheet it opens)
|
||||
- Navigation: desktop sidebar expands labels at 1 280 px instead of 1 440 px
|
||||
- UX: search overlay input field is now at the top, results below (standard top-to-bottom scan path)
|
||||
- UX: touch targets for kitchen tabs and shopping list tabs raised to 44 px (iOS minimum)
|
||||
- UX: dashboard metric values enlarged to `xl`/`bold` and labels styled as `2xs`/`uppercase` for clearer data hierarchy
|
||||
- Onboarding: step 2 text and icon updated to accurately describe the navigation structure (···-button and module groups); step 3 text and icon updated to explain the FAB and swipe gestures
|
||||
|
||||
## [0.35.0] - 2026-04-29
|
||||
|
||||
### Added
|
||||
|
||||
Generated
+2
-2
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "oikos",
|
||||
"version": "0.34.1",
|
||||
"version": "0.36.0",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "oikos",
|
||||
"version": "0.34.1",
|
||||
"version": "0.36.0",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"bcrypt": "^6.0.0",
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "oikos",
|
||||
"version": "0.35.0",
|
||||
"version": "0.36.0",
|
||||
"description": "Self-hosted family planner - calendar, tasks, shopping, meal planning, budget and more. Private, open-source, no subscription.",
|
||||
"main": "server/index.js",
|
||||
"type": "module",
|
||||
|
||||
+23
-12
@@ -29,7 +29,12 @@
|
||||
"unknownError": "خطأ غير معروف",
|
||||
"confirm": "تأكيد",
|
||||
"undo": "تراجع",
|
||||
"reset": "إعادة التعيين للأصل"
|
||||
"reset": "إعادة التعيين للأصل",
|
||||
"errorOffline": "لا يوجد اتصال بالإنترنت. يرجى التحقق من شبكتك.",
|
||||
"errorForbidden": "تم رفض الوصول. يرجى تسجيل الدخول مرة أخرى.",
|
||||
"errorNotFound": "لم يتم العثور على السجل.",
|
||||
"errorServer": "خطأ في الخادم. يرجى المحاولة لاحقاً.",
|
||||
"errorTimeout": "استغرق الاتصال وقتاً طويلاً. يرجى المحاولة مجدداً."
|
||||
},
|
||||
"nav": {
|
||||
"dashboard": "لوحة التحكم",
|
||||
@@ -187,7 +192,8 @@
|
||||
"archiveButton": "أرشفة المهمة",
|
||||
"archivedToast": "تم أرشفة المهمة.",
|
||||
"kanbanArchived": "مؤرشف",
|
||||
"reminderNeedsDueDate": "حدّد تاريخ استحقاق لتفعيل تذكيرات المهمة."
|
||||
"reminderNeedsDueDate": "حدّد تاريخ استحقاق لتفعيل تذكيرات المهمة.",
|
||||
"emptyAction": "إنشاء مهمة"
|
||||
},
|
||||
"shopping": {
|
||||
"title": "التسوق",
|
||||
@@ -227,7 +233,8 @@
|
||||
"catDrinks": "مشروبات",
|
||||
"catHousehold": "مستلزمات المنزل",
|
||||
"catDrugstore": "صيدلية",
|
||||
"catMisc": "متنوع"
|
||||
"catMisc": "متنوع",
|
||||
"emptyAction": "إضافة عنصر"
|
||||
},
|
||||
"meals": {
|
||||
"title": "خطة الوجبات",
|
||||
@@ -403,7 +410,8 @@
|
||||
"formatLink": "رابط",
|
||||
"formatCode": "كود",
|
||||
"formatQuote": "اقتباس",
|
||||
"formatDivider": "فاصل"
|
||||
"formatDivider": "فاصل",
|
||||
"emptyAction": "إنشاء ملاحظة"
|
||||
},
|
||||
"contacts": {
|
||||
"title": "جهات الاتصال",
|
||||
@@ -456,7 +464,8 @@
|
||||
"categoryInsurance": "تأمين",
|
||||
"categoryCraftsman": "حرفي",
|
||||
"categoryEmergency": "طوارئ",
|
||||
"categoryOther": "متنوع"
|
||||
"categoryOther": "متنوع",
|
||||
"emptyAction": "إضافة جهة اتصال"
|
||||
},
|
||||
"budget": {
|
||||
"title": "الميزانية",
|
||||
@@ -555,7 +564,8 @@
|
||||
"newCategoryPrompt": "Name of the new category:",
|
||||
"newSubcategoryPrompt": "Name of the new subcategory:",
|
||||
"categoryAddedToast": "Category added.",
|
||||
"subcategoryAddedToast": "Subcategory added."
|
||||
"subcategoryAddedToast": "Subcategory added.",
|
||||
"emptyAction": "إضافة إدخال"
|
||||
},
|
||||
"settings": {
|
||||
"title": "الإعدادات",
|
||||
@@ -843,7 +853,8 @@
|
||||
"titleRequired": "العنوان مطلوب",
|
||||
"duplicate": "نسخ",
|
||||
"duplicated": "تم نسخ الوصفة.",
|
||||
"copySuffix": "نسخة"
|
||||
"copySuffix": "نسخة",
|
||||
"emptyAction": "إنشاء وصفة"
|
||||
},
|
||||
"search": {
|
||||
"title": "بحث",
|
||||
@@ -913,10 +924,10 @@
|
||||
"onboarding": {
|
||||
"step1Title": "Welcome to Oikos",
|
||||
"step1Body": "Your personal family planner. Tasks, calendar, shopping and more – all in one place.",
|
||||
"step2Title": "Everything at a glance",
|
||||
"step2Body": "Use the navigation below to reach all modules. The + button creates new entries quickly.",
|
||||
"step3Title": "Ready to go",
|
||||
"step3Body": "The dashboard shows you the most important information at a glance. Customize it under \"Customize\".",
|
||||
"step2Title": "التنقل والوحدات",
|
||||
"step2Body": "في الأسفل يمكنك الوصول مباشرة إلى لوحة التحكم والتقويم. بزر ··· تفتح وحدات أخرى مثل المطبخ والملاحظات وجهات الاتصال.",
|
||||
"step3Title": "ابدأ بسرعة",
|
||||
"step3Body": "بزر + الكبير يمكنك إنشاء إدخالات جديدة في أي مكان. اسحب عناصر القائمة يساراً أو يميناً للإجراءات السريعة.",
|
||||
"next": "Next",
|
||||
"done": "Get started",
|
||||
"skip": "Skip"
|
||||
@@ -991,4 +1002,4 @@
|
||||
"shortcuts": {
|
||||
"goKitchen": "المطبخ"
|
||||
}
|
||||
}
|
||||
}
|
||||
+16
-5
@@ -29,7 +29,12 @@
|
||||
"unknownError": "Unbekannter Fehler",
|
||||
"confirm": "Bestätigen",
|
||||
"undo": "Rückgängig",
|
||||
"reset": "Auf Original zurücksetzen"
|
||||
"reset": "Auf Original zurücksetzen",
|
||||
"errorOffline": "Keine Internetverbindung. Bitte prüfe dein Netzwerk.",
|
||||
"errorForbidden": "Zugriff verweigert. Bitte erneut anmelden.",
|
||||
"errorNotFound": "Der Eintrag wurde nicht gefunden.",
|
||||
"errorServer": "Serverfehler. Bitte versuche es später erneut.",
|
||||
"errorTimeout": "Die Verbindung hat zu lange gedauert. Bitte erneut versuchen."
|
||||
},
|
||||
"nav": {
|
||||
"dashboard": "Übersicht",
|
||||
@@ -121,6 +126,7 @@
|
||||
"editTask": "Aufgabe bearbeiten",
|
||||
"emptyTitle": "Keine Aufgaben - alles erledigt?",
|
||||
"emptyDescription": "Neue Aufgaben über den + Button erstellen.",
|
||||
"emptyAction": "Aufgabe erstellen",
|
||||
"titleLabel": "Titel *",
|
||||
"titlePlaceholder": "Was muss erledigt werden?",
|
||||
"descriptionLabel": "Notiz",
|
||||
@@ -202,6 +208,7 @@
|
||||
"noListsDescription": "Erstelle eine Liste mit dem + Button.",
|
||||
"emptyList": "Die Liste ist leer",
|
||||
"emptyListDescription": "Artikel über das Eingabefeld oben hinzufügen.",
|
||||
"emptyAction": "Artikel hinzufügen",
|
||||
"newListPrompt": "Name der neuen Liste:",
|
||||
"newListButton": "Neue Liste erstellen",
|
||||
"renameListPrompt": "Neuer Listen-Name:",
|
||||
@@ -392,6 +399,7 @@
|
||||
"searchPlaceholder": "Notizen durchsuchen…",
|
||||
"emptyTitle": "Noch keine Notizen",
|
||||
"emptyDescription": "Neue Notiz über den + Button erstellen.",
|
||||
"emptyAction": "Notiz erstellen",
|
||||
"noResultsTitle": "Keine Treffer",
|
||||
"noResultsDescription": "Keine Notiz enthält \"{{query}}\".",
|
||||
"titleLabel": "Titel (optional)",
|
||||
@@ -442,6 +450,7 @@
|
||||
"importTooltip": "vCard importieren",
|
||||
"emptyTitle": "Noch keine Kontakte",
|
||||
"emptyDescription": "Neue Kontakte über den + Button hinzufügen.",
|
||||
"emptyAction": "Kontakt hinzufügen",
|
||||
"filterAll": "Alle",
|
||||
"nameLabel": "Name *",
|
||||
"namePlaceholder": "Vollständiger Name",
|
||||
@@ -499,6 +508,7 @@
|
||||
"transactions": "Transaktionen",
|
||||
"emptyTitle": "Keine Einträge diesen Monat",
|
||||
"emptyDescription": "Budget-Einträge über den + Button hinzufügen.",
|
||||
"emptyAction": "Eintrag erstellen",
|
||||
"csvExport": "CSV",
|
||||
"typeExpense": "Ausgabe",
|
||||
"typeIncome": "Einnahme",
|
||||
@@ -912,6 +922,7 @@
|
||||
"editRecipe": "Rezept bearbeiten",
|
||||
"emptyTitle": "Noch keine Rezepte",
|
||||
"emptyDescription": "Speichere deine Lieblingsrezepte und nutze sie für die Essensplanung.",
|
||||
"emptyAction": "Rezept erstellen",
|
||||
"titleLabel": "Titel *",
|
||||
"titlePlaceholder": "z. B. Pasta Carbonara",
|
||||
"notesLabel": "Notizen",
|
||||
@@ -933,10 +944,10 @@
|
||||
"onboarding": {
|
||||
"step1Title": "Willkommen bei Oikos",
|
||||
"step1Body": "Dein persönlicher Familienplaner. Aufgaben, Kalender, Einkauf und mehr – alles an einem Ort.",
|
||||
"step2Title": "Alles im Blick",
|
||||
"step2Body": "Über die Navigation unten erreichst du alle Module. Mit dem +-Button erstellst du schnell neue Einträge.",
|
||||
"step3Title": "Bereit loszulegen",
|
||||
"step3Body": "Das Dashboard zeigt dir die wichtigsten Infos auf einen Blick. Du kannst es unter \"Anpassen\" nach deinen Wünschen einrichten.",
|
||||
"step2Title": "Navigation & Module",
|
||||
"step2Body": "Unten erreichst du Dashboard und Kalender direkt. Mit dem ···-Button öffnest du weitere Module wie Küche, Notizen und Kontakte.",
|
||||
"step3Title": "Schnell loslegen",
|
||||
"step3Body": "Mit dem + FAB-Button erstellst du überall neue Einträge. Wische Listeneinträge nach links oder rechts für Schnellaktionen.",
|
||||
"next": "Weiter",
|
||||
"done": "Loslegen",
|
||||
"skip": "Überspringen"
|
||||
|
||||
+23
-12
@@ -29,7 +29,12 @@
|
||||
"unknownError": "Άγνωστο σφάλμα",
|
||||
"confirm": "Επιβεβαίωση",
|
||||
"undo": "Αναίρεση",
|
||||
"reset": "Επαναφορά στο αρχικό"
|
||||
"reset": "Επαναφορά στο αρχικό",
|
||||
"errorOffline": "Δεν υπάρχει σύνδεση στο διαδίκτυο. Ελέγξτε το δίκτυό σας.",
|
||||
"errorForbidden": "Η πρόσβαση απορρίφθηκε. Παρακαλώ συνδεθείτε ξανά.",
|
||||
"errorNotFound": "Η εγγραφή δεν βρέθηκε.",
|
||||
"errorServer": "Σφάλμα διακομιστή. Δοκιμάστε ξανά αργότερα.",
|
||||
"errorTimeout": "Η σύνδεση διήρκεσε πολύ. Παρακαλώ δοκιμάστε ξανά."
|
||||
},
|
||||
"nav": {
|
||||
"dashboard": "Επισκόπηση",
|
||||
@@ -187,7 +192,8 @@
|
||||
"archiveButton": "Αρχειοθέτηση εργασίας",
|
||||
"archivedToast": "Η εργασία αρχειοθετήθηκε.",
|
||||
"kanbanArchived": "Αρχειοθετημένο",
|
||||
"reminderNeedsDueDate": "Ορίστε ημερομηνία λήξης για να ενεργοποιήσετε τις υπενθυμίσεις."
|
||||
"reminderNeedsDueDate": "Ορίστε ημερομηνία λήξης για να ενεργοποιήσετε τις υπενθυμίσεις.",
|
||||
"emptyAction": "Δημιουργία εργασίας"
|
||||
},
|
||||
"shopping": {
|
||||
"title": "Αγορές",
|
||||
@@ -227,7 +233,8 @@
|
||||
"catDrinks": "Ποτά",
|
||||
"catHousehold": "Οικιακά",
|
||||
"catDrugstore": "Φαρμακείο",
|
||||
"catMisc": "Διάφορα"
|
||||
"catMisc": "Διάφορα",
|
||||
"emptyAction": "Προσθήκη στοιχείου"
|
||||
},
|
||||
"meals": {
|
||||
"title": "Πρόγραμμα γευμάτων",
|
||||
@@ -403,7 +410,8 @@
|
||||
"formatLink": "Σύνδεσμος",
|
||||
"formatCode": "Κώδικας",
|
||||
"formatQuote": "Παράθεση",
|
||||
"formatDivider": "Διαχωριστής"
|
||||
"formatDivider": "Διαχωριστής",
|
||||
"emptyAction": "Δημιουργία σημείωσης"
|
||||
},
|
||||
"contacts": {
|
||||
"title": "Επαφές",
|
||||
@@ -456,7 +464,8 @@
|
||||
"categoryInsurance": "Ασφάλεια",
|
||||
"categoryCraftsman": "Τεχνίτης",
|
||||
"categoryEmergency": "Έκτακτη ανάγκη",
|
||||
"categoryOther": "Άλλο"
|
||||
"categoryOther": "Άλλο",
|
||||
"emptyAction": "Προσθήκη επαφής"
|
||||
},
|
||||
"budget": {
|
||||
"title": "Προϋπολογισμός",
|
||||
@@ -555,7 +564,8 @@
|
||||
"newCategoryPrompt": "Name of the new category:",
|
||||
"newSubcategoryPrompt": "Name of the new subcategory:",
|
||||
"categoryAddedToast": "Category added.",
|
||||
"subcategoryAddedToast": "Subcategory added."
|
||||
"subcategoryAddedToast": "Subcategory added.",
|
||||
"emptyAction": "Προσθήκη εγγραφής"
|
||||
},
|
||||
"settings": {
|
||||
"title": "Ρυθμίσεις",
|
||||
@@ -843,7 +853,8 @@
|
||||
"titleRequired": "Ο τίτλος είναι υποχρεωτικός",
|
||||
"duplicate": "Διπλότυπο",
|
||||
"duplicated": "Η συνταγή αντιγράφηκε.",
|
||||
"copySuffix": "αντίγραφο"
|
||||
"copySuffix": "αντίγραφο",
|
||||
"emptyAction": "Δημιουργία συνταγής"
|
||||
},
|
||||
"search": {
|
||||
"title": "Αναζήτηση",
|
||||
@@ -913,10 +924,10 @@
|
||||
"onboarding": {
|
||||
"step1Title": "Welcome to Oikos",
|
||||
"step1Body": "Your personal family planner. Tasks, calendar, shopping and more – all in one place.",
|
||||
"step2Title": "Everything at a glance",
|
||||
"step2Body": "Use the navigation below to reach all modules. The + button creates new entries quickly.",
|
||||
"step3Title": "Ready to go",
|
||||
"step3Body": "The dashboard shows you the most important information at a glance. Customize it under \"Customize\".",
|
||||
"step2Title": "Πλοήγηση & Ενότητες",
|
||||
"step2Body": "Στο κάτω μέρος έχεις άμεση πρόσβαση στον Πίνακα ελέγχου και το Ημερολόγιο. Με το κουμπί ··· ανοίγεις άλλες ενότητες όπως Κουζίνα, Σημειώσεις και Επαφές.",
|
||||
"step3Title": "Ξεκίνα γρήγορα",
|
||||
"step3Body": "Με το κουμπί + δημιουργείς νέες καταχωρήσεις οπουδήποτε. Σύρε στοιχεία λίστας αριστερά ή δεξιά για γρήγορες ενέργειες.",
|
||||
"next": "Next",
|
||||
"done": "Get started",
|
||||
"skip": "Skip"
|
||||
@@ -991,4 +1002,4 @@
|
||||
"shortcuts": {
|
||||
"goKitchen": "Κουζίνα"
|
||||
}
|
||||
}
|
||||
}
|
||||
+23
-12
@@ -29,7 +29,12 @@
|
||||
"unknownError": "Unknown error",
|
||||
"confirm": "Confirm",
|
||||
"undo": "Undo",
|
||||
"reset": "Reset to original"
|
||||
"reset": "Reset to original",
|
||||
"errorOffline": "No internet connection. Please check your network.",
|
||||
"errorForbidden": "Access denied. Please sign in again.",
|
||||
"errorNotFound": "The entry was not found.",
|
||||
"errorServer": "Server error. Please try again later.",
|
||||
"errorTimeout": "The connection took too long. Please try again."
|
||||
},
|
||||
"nav": {
|
||||
"dashboard": "Overview",
|
||||
@@ -187,7 +192,8 @@
|
||||
"filterGroupStatus": "Status",
|
||||
"swipedDoneToast": "Marked as done.",
|
||||
"swipedOpenToast": "Marked as open.",
|
||||
"reminderNeedsDueDate": "Set a due date to enable task reminders."
|
||||
"reminderNeedsDueDate": "Set a due date to enable task reminders.",
|
||||
"emptyAction": "Create task"
|
||||
},
|
||||
"shopping": {
|
||||
"title": "Shopping",
|
||||
@@ -227,7 +233,8 @@
|
||||
"catDrinks": "Drinks",
|
||||
"catHousehold": "Household",
|
||||
"catDrugstore": "Drugstore",
|
||||
"catMisc": "Miscellaneous"
|
||||
"catMisc": "Miscellaneous",
|
||||
"emptyAction": "Add item"
|
||||
},
|
||||
"meals": {
|
||||
"title": "Meal Plan",
|
||||
@@ -403,7 +410,8 @@
|
||||
"formatLink": "Link",
|
||||
"formatCode": "Code",
|
||||
"formatQuote": "Quote",
|
||||
"formatDivider": "Divider"
|
||||
"formatDivider": "Divider",
|
||||
"emptyAction": "Create note"
|
||||
},
|
||||
"contacts": {
|
||||
"title": "Contacts",
|
||||
@@ -456,7 +464,8 @@
|
||||
"categoryInsurance": "Insurance",
|
||||
"categoryCraftsman": "Tradesperson",
|
||||
"categoryEmergency": "Emergency",
|
||||
"categoryOther": "Other"
|
||||
"categoryOther": "Other",
|
||||
"emptyAction": "Add contact"
|
||||
},
|
||||
"budget": {
|
||||
"title": "Budget",
|
||||
@@ -555,7 +564,8 @@
|
||||
"newCategoryPrompt": "Name of the new category:",
|
||||
"newSubcategoryPrompt": "Name of the new subcategory:",
|
||||
"categoryAddedToast": "Category added.",
|
||||
"subcategoryAddedToast": "Subcategory added."
|
||||
"subcategoryAddedToast": "Subcategory added.",
|
||||
"emptyAction": "Add entry"
|
||||
},
|
||||
"settings": {
|
||||
"title": "Settings",
|
||||
@@ -903,7 +913,8 @@
|
||||
"titleRequired": "Title is required",
|
||||
"duplicate": "Duplicate",
|
||||
"duplicated": "Recipe duplicated.",
|
||||
"copySuffix": "copy"
|
||||
"copySuffix": "copy",
|
||||
"emptyAction": "Create recipe"
|
||||
},
|
||||
"search": {
|
||||
"title": "Search",
|
||||
@@ -914,10 +925,10 @@
|
||||
"onboarding": {
|
||||
"step1Title": "Welcome to Oikos",
|
||||
"step1Body": "Your personal family planner. Tasks, calendar, shopping and more – all in one place.",
|
||||
"step2Title": "Everything at a glance",
|
||||
"step2Body": "Use the navigation below to reach all modules. The + button creates new entries quickly.",
|
||||
"step3Title": "Ready to go",
|
||||
"step3Body": "The dashboard shows you the most important information at a glance. Customize it under \"Customize\".",
|
||||
"step2Title": "Navigation & Modules",
|
||||
"step2Body": "At the bottom you can directly access Dashboard and Calendar. The ··· button opens additional modules like Kitchen, Notes and Contacts.",
|
||||
"step3Title": "Get started quickly",
|
||||
"step3Body": "Use the + FAB button to create new entries anywhere. Swipe list items left or right for quick actions.",
|
||||
"next": "Next",
|
||||
"done": "Get started",
|
||||
"skip": "Skip"
|
||||
@@ -1008,4 +1019,4 @@
|
||||
"dropzoneHint": "Drag a file into this area, or use the file picker.",
|
||||
"selectedFileLabel": "Selected: {{name}}"
|
||||
}
|
||||
}
|
||||
}
|
||||
+23
-12
@@ -29,7 +29,12 @@
|
||||
"unknownError": "Error desconocido",
|
||||
"confirm": "Confirmar",
|
||||
"undo": "Deshacer",
|
||||
"reset": "Restaurar original"
|
||||
"reset": "Restaurar original",
|
||||
"errorOffline": "Sin conexión a internet. Por favor, revisa tu red.",
|
||||
"errorForbidden": "Acceso denegado. Por favor, inicia sesión de nuevo.",
|
||||
"errorNotFound": "No se encontró el registro.",
|
||||
"errorServer": "Error del servidor. Por favor, inténtalo más tarde.",
|
||||
"errorTimeout": "La conexión tardó demasiado. Por favor, inténtalo de nuevo."
|
||||
},
|
||||
"nav": {
|
||||
"dashboard": "Inicio",
|
||||
@@ -187,7 +192,8 @@
|
||||
"archiveButton": "Archivar tarea",
|
||||
"archivedToast": "Tarea archivada.",
|
||||
"kanbanArchived": "Archivado",
|
||||
"reminderNeedsDueDate": "Establece una fecha de vencimiento para activar los recordatorios de tareas."
|
||||
"reminderNeedsDueDate": "Establece una fecha de vencimiento para activar los recordatorios de tareas.",
|
||||
"emptyAction": "Crear tarea"
|
||||
},
|
||||
"shopping": {
|
||||
"title": "Compras",
|
||||
@@ -227,7 +233,8 @@
|
||||
"catDrinks": "Bebidas",
|
||||
"catHousehold": "Hogar",
|
||||
"catDrugstore": "Droguería",
|
||||
"catMisc": "Otros"
|
||||
"catMisc": "Otros",
|
||||
"emptyAction": "Agregar artículo"
|
||||
},
|
||||
"meals": {
|
||||
"title": "Plan de comidas",
|
||||
@@ -403,7 +410,8 @@
|
||||
"formatLink": "Enlace",
|
||||
"formatCode": "Código",
|
||||
"formatQuote": "Cita",
|
||||
"formatDivider": "Separador"
|
||||
"formatDivider": "Separador",
|
||||
"emptyAction": "Crear nota"
|
||||
},
|
||||
"contacts": {
|
||||
"title": "Contactos",
|
||||
@@ -456,7 +464,8 @@
|
||||
"categoryInsurance": "Seguro",
|
||||
"categoryCraftsman": "Artesano",
|
||||
"categoryEmergency": "Emergencia",
|
||||
"categoryOther": "Otros"
|
||||
"categoryOther": "Otros",
|
||||
"emptyAction": "Agregar contacto"
|
||||
},
|
||||
"budget": {
|
||||
"title": "Presupuesto",
|
||||
@@ -555,7 +564,8 @@
|
||||
"newCategoryPrompt": "Nombre de la nueva categoría:",
|
||||
"newSubcategoryPrompt": "Nombre de la nueva subcategoría:",
|
||||
"categoryAddedToast": "Categoría añadida.",
|
||||
"subcategoryAddedToast": "Subcategoría añadida."
|
||||
"subcategoryAddedToast": "Subcategoría añadida.",
|
||||
"emptyAction": "Agregar entrada"
|
||||
},
|
||||
"settings": {
|
||||
"title": "Ajustes",
|
||||
@@ -843,7 +853,8 @@
|
||||
"titleRequired": "El título es obligatorio",
|
||||
"duplicate": "Duplicar",
|
||||
"duplicated": "Receta duplicada.",
|
||||
"copySuffix": "copia"
|
||||
"copySuffix": "copia",
|
||||
"emptyAction": "Crear receta"
|
||||
},
|
||||
"search": {
|
||||
"title": "Búsqueda",
|
||||
@@ -913,10 +924,10 @@
|
||||
"onboarding": {
|
||||
"step1Title": "Welcome to Oikos",
|
||||
"step1Body": "Your personal family planner. Tasks, calendar, shopping and more – all in one place.",
|
||||
"step2Title": "Everything at a glance",
|
||||
"step2Body": "Use the navigation below to reach all modules. The + button creates new entries quickly.",
|
||||
"step3Title": "Ready to go",
|
||||
"step3Body": "The dashboard shows you the most important information at a glance. Customize it under \"Customize\".",
|
||||
"step2Title": "Navegación y módulos",
|
||||
"step2Body": "En la parte inferior accedes directamente al Panel y el Calendario. Con el botón ··· abres más módulos como Cocina, Notas y Contactos.",
|
||||
"step3Title": "Empieza rápido",
|
||||
"step3Body": "Con el botón + creas nuevas entradas en cualquier lugar. Desliza elementos de la lista a la izquierda o derecha para acciones rápidas.",
|
||||
"next": "Next",
|
||||
"done": "Get started",
|
||||
"skip": "Skip"
|
||||
@@ -991,4 +1002,4 @@
|
||||
"shortcuts": {
|
||||
"goKitchen": "Cocina"
|
||||
}
|
||||
}
|
||||
}
|
||||
+23
-12
@@ -29,7 +29,12 @@
|
||||
"unknownError": "Erreur inconnue",
|
||||
"confirm": "Confirmer",
|
||||
"undo": "Annuler",
|
||||
"reset": "Réinitialiser"
|
||||
"reset": "Réinitialiser",
|
||||
"errorOffline": "Pas de connexion internet. Vérifiez votre réseau.",
|
||||
"errorForbidden": "Accès refusé. Veuillez vous reconnecter.",
|
||||
"errorNotFound": "L'entrée n'a pas été trouvée.",
|
||||
"errorServer": "Erreur serveur. Veuillez réessayer plus tard.",
|
||||
"errorTimeout": "La connexion a pris trop de temps. Veuillez réessayer."
|
||||
},
|
||||
"nav": {
|
||||
"dashboard": "Accueil",
|
||||
@@ -187,7 +192,8 @@
|
||||
"archiveButton": "Archiver la tâche",
|
||||
"archivedToast": "Tâche archivée.",
|
||||
"kanbanArchived": "Archivé",
|
||||
"reminderNeedsDueDate": "Définissez une date d'échéance pour activer les rappels de tâche."
|
||||
"reminderNeedsDueDate": "Définissez une date d'échéance pour activer les rappels de tâche.",
|
||||
"emptyAction": "Créer une tâche"
|
||||
},
|
||||
"shopping": {
|
||||
"title": "Courses",
|
||||
@@ -227,7 +233,8 @@
|
||||
"catDrinks": "Boissons",
|
||||
"catHousehold": "Ménage",
|
||||
"catDrugstore": "Pharmacie",
|
||||
"catMisc": "Divers"
|
||||
"catMisc": "Divers",
|
||||
"emptyAction": "Ajouter un article"
|
||||
},
|
||||
"meals": {
|
||||
"title": "Plan de repas",
|
||||
@@ -403,7 +410,8 @@
|
||||
"formatLink": "Lien",
|
||||
"formatCode": "Code",
|
||||
"formatQuote": "Citation",
|
||||
"formatDivider": "Séparateur"
|
||||
"formatDivider": "Séparateur",
|
||||
"emptyAction": "Créer une note"
|
||||
},
|
||||
"contacts": {
|
||||
"title": "Contacts",
|
||||
@@ -456,7 +464,8 @@
|
||||
"categoryInsurance": "Assurance",
|
||||
"categoryCraftsman": "Artisan",
|
||||
"categoryEmergency": "Urgence",
|
||||
"categoryOther": "Autre"
|
||||
"categoryOther": "Autre",
|
||||
"emptyAction": "Ajouter un contact"
|
||||
},
|
||||
"budget": {
|
||||
"title": "Budget",
|
||||
@@ -555,7 +564,8 @@
|
||||
"newCategoryPrompt": "Nom de la nouvelle catégorie :",
|
||||
"newSubcategoryPrompt": "Nom de la nouvelle sous-catégorie :",
|
||||
"categoryAddedToast": "Catégorie ajoutée.",
|
||||
"subcategoryAddedToast": "Sous-catégorie ajoutée."
|
||||
"subcategoryAddedToast": "Sous-catégorie ajoutée.",
|
||||
"emptyAction": "Ajouter une entrée"
|
||||
},
|
||||
"settings": {
|
||||
"title": "Paramètres",
|
||||
@@ -843,7 +853,8 @@
|
||||
"titleRequired": "Le titre est requis",
|
||||
"duplicate": "Dupliquer",
|
||||
"duplicated": "Recette dupliquée.",
|
||||
"copySuffix": "copie"
|
||||
"copySuffix": "copie",
|
||||
"emptyAction": "Créer une recette"
|
||||
},
|
||||
"search": {
|
||||
"title": "Recherche",
|
||||
@@ -913,10 +924,10 @@
|
||||
"onboarding": {
|
||||
"step1Title": "Welcome to Oikos",
|
||||
"step1Body": "Your personal family planner. Tasks, calendar, shopping and more – all in one place.",
|
||||
"step2Title": "Everything at a glance",
|
||||
"step2Body": "Use the navigation below to reach all modules. The + button creates new entries quickly.",
|
||||
"step3Title": "Ready to go",
|
||||
"step3Body": "The dashboard shows you the most important information at a glance. Customize it under \"Customize\".",
|
||||
"step2Title": "Navigation & modules",
|
||||
"step2Body": "En bas, accédez directement au Tableau de bord et au Calendrier. Le bouton ··· ouvre d'autres modules comme Cuisine, Notes et Contacts.",
|
||||
"step3Title": "Démarrer rapidement",
|
||||
"step3Body": "Avec le bouton +, créez de nouvelles entrées n'importe où. Faites glisser les éléments de liste à gauche ou à droite pour des actions rapides.",
|
||||
"next": "Next",
|
||||
"done": "Get started",
|
||||
"skip": "Skip"
|
||||
@@ -991,4 +1002,4 @@
|
||||
"shortcuts": {
|
||||
"goKitchen": "Cuisine"
|
||||
}
|
||||
}
|
||||
}
|
||||
+23
-12
@@ -29,7 +29,12 @@
|
||||
"unknownError": "अज्ञात त्रुटि",
|
||||
"confirm": "पुष्टि करें",
|
||||
"undo": "पूर्ववत करें",
|
||||
"reset": "मूल पर वापस जाएं"
|
||||
"reset": "मूल पर वापस जाएं",
|
||||
"errorOffline": "इंटरनेट कनेक्शन नहीं है। कृपया अपना नेटवर्क जांचें।",
|
||||
"errorForbidden": "पहुँच अस्वीकृत। कृपया फिर से लॉग इन करें।",
|
||||
"errorNotFound": "प्रविष्टि नहीं मिली।",
|
||||
"errorServer": "सर्वर त्रुटि। कृपया बाद में पुनः प्रयास करें।",
|
||||
"errorTimeout": "कनेक्शन बहुत देर से हुआ। कृपया पुनः प्रयास करें।"
|
||||
},
|
||||
"nav": {
|
||||
"dashboard": "डैशबोर्ड",
|
||||
@@ -187,7 +192,8 @@
|
||||
"archiveButton": "कार्य संग्रहित करें",
|
||||
"archivedToast": "कार्य संग्रहित किया गया।",
|
||||
"kanbanArchived": "संग्रहित",
|
||||
"reminderNeedsDueDate": "कार्य अनुस्मारक सक्षम करने के लिए एक नियत तारीख निर्धारित करें।"
|
||||
"reminderNeedsDueDate": "कार्य अनुस्मारक सक्षम करने के लिए एक नियत तारीख निर्धारित करें।",
|
||||
"emptyAction": "कार्य बनाएं"
|
||||
},
|
||||
"shopping": {
|
||||
"title": "खरीदारी",
|
||||
@@ -227,7 +233,8 @@
|
||||
"catDrinks": "पेय",
|
||||
"catHousehold": "घरेलू",
|
||||
"catDrugstore": "दवाखाना",
|
||||
"catMisc": "विविध"
|
||||
"catMisc": "विविध",
|
||||
"emptyAction": "आइटम जोड़ें"
|
||||
},
|
||||
"meals": {
|
||||
"title": "भोजन योजना",
|
||||
@@ -403,7 +410,8 @@
|
||||
"formatLink": "लिंक",
|
||||
"formatCode": "कोड",
|
||||
"formatQuote": "उद्धरण",
|
||||
"formatDivider": "विभाजक"
|
||||
"formatDivider": "विभाजक",
|
||||
"emptyAction": "नोट बनाएं"
|
||||
},
|
||||
"contacts": {
|
||||
"title": "संपर्क",
|
||||
@@ -456,7 +464,8 @@
|
||||
"categoryInsurance": "बीमा",
|
||||
"categoryCraftsman": "कारीगर",
|
||||
"categoryEmergency": "आपातकालीन",
|
||||
"categoryOther": "विविध"
|
||||
"categoryOther": "विविध",
|
||||
"emptyAction": "संपर्क जोड़ें"
|
||||
},
|
||||
"budget": {
|
||||
"title": "बजट",
|
||||
@@ -555,7 +564,8 @@
|
||||
"newCategoryPrompt": "Name of the new category:",
|
||||
"newSubcategoryPrompt": "Name of the new subcategory:",
|
||||
"categoryAddedToast": "Category added.",
|
||||
"subcategoryAddedToast": "Subcategory added."
|
||||
"subcategoryAddedToast": "Subcategory added.",
|
||||
"emptyAction": "प्रविष्टि जोड़ें"
|
||||
},
|
||||
"settings": {
|
||||
"title": "सेटिंग्स",
|
||||
@@ -843,7 +853,8 @@
|
||||
"titleRequired": "शीर्षक आवश्यक है",
|
||||
"duplicate": "डुप्लिकेट",
|
||||
"duplicated": "रेसिपी डुप्लिकेट की गई।",
|
||||
"copySuffix": "कॉपी"
|
||||
"copySuffix": "कॉपी",
|
||||
"emptyAction": "रेसिपी बनाएं"
|
||||
},
|
||||
"search": {
|
||||
"title": "खोज",
|
||||
@@ -913,10 +924,10 @@
|
||||
"onboarding": {
|
||||
"step1Title": "Welcome to Oikos",
|
||||
"step1Body": "Your personal family planner. Tasks, calendar, shopping and more – all in one place.",
|
||||
"step2Title": "Everything at a glance",
|
||||
"step2Body": "Use the navigation below to reach all modules. The + button creates new entries quickly.",
|
||||
"step3Title": "Ready to go",
|
||||
"step3Body": "The dashboard shows you the most important information at a glance. Customize it under \"Customize\".",
|
||||
"step2Title": "नेविगेशन और मॉड्यूल",
|
||||
"step2Body": "नीचे से डैशबोर्ड और कैलेंडर तक सीधी पहुँच। ··· बटन से किचन, नोट्स और संपर्क जैसे अन्य मॉड्यूल खोलें।",
|
||||
"step3Title": "जल्दी शुरू करें",
|
||||
"step3Body": "किसी भी जगह नई प्रविष्टियाँ बनाने के लिए + बटन दबाएँ। त्वरित क्रियाओं के लिए सूची आइटम को बाएँ या दाएँ स्वाइप करें।",
|
||||
"next": "Next",
|
||||
"done": "Get started",
|
||||
"skip": "Skip"
|
||||
@@ -991,4 +1002,4 @@
|
||||
"shortcuts": {
|
||||
"goKitchen": "रसोई"
|
||||
}
|
||||
}
|
||||
}
|
||||
+23
-12
@@ -29,7 +29,12 @@
|
||||
"unknownError": "Errore sconosciuto",
|
||||
"confirm": "Conferma",
|
||||
"undo": "Annulla",
|
||||
"reset": "Ripristina originale"
|
||||
"reset": "Ripristina originale",
|
||||
"errorOffline": "Nessuna connessione internet. Controlla la tua rete.",
|
||||
"errorForbidden": "Accesso negato. Per favore accedi di nuovo.",
|
||||
"errorNotFound": "La voce non è stata trovata.",
|
||||
"errorServer": "Errore del server. Riprova più tardi.",
|
||||
"errorTimeout": "La connessione ha impiegato troppo tempo. Riprova."
|
||||
},
|
||||
"nav": {
|
||||
"dashboard": "Panoramica",
|
||||
@@ -187,7 +192,8 @@
|
||||
"archiveButton": "Archivia attività",
|
||||
"archivedToast": "Attività archiviata.",
|
||||
"kanbanArchived": "Archiviato",
|
||||
"reminderNeedsDueDate": "Imposta una data di scadenza per abilitare i promemoria delle attività."
|
||||
"reminderNeedsDueDate": "Imposta una data di scadenza per abilitare i promemoria delle attività.",
|
||||
"emptyAction": "Crea attività"
|
||||
},
|
||||
"shopping": {
|
||||
"title": "Spesa",
|
||||
@@ -227,7 +233,8 @@
|
||||
"catDrinks": "Bevande",
|
||||
"catHousehold": "Casa",
|
||||
"catDrugstore": "Drogheria",
|
||||
"catMisc": "Varie"
|
||||
"catMisc": "Varie",
|
||||
"emptyAction": "Aggiungi articolo"
|
||||
},
|
||||
"meals": {
|
||||
"title": "Piano pasti",
|
||||
@@ -403,7 +410,8 @@
|
||||
"formatLink": "Link",
|
||||
"formatCode": "Codice",
|
||||
"formatQuote": "Citazione",
|
||||
"formatDivider": "Divisore"
|
||||
"formatDivider": "Divisore",
|
||||
"emptyAction": "Crea nota"
|
||||
},
|
||||
"contacts": {
|
||||
"title": "Contatti",
|
||||
@@ -456,7 +464,8 @@
|
||||
"categoryInsurance": "Assicurazione",
|
||||
"categoryCraftsman": "Artigiano",
|
||||
"categoryEmergency": "Emergenza",
|
||||
"categoryOther": "Altro"
|
||||
"categoryOther": "Altro",
|
||||
"emptyAction": "Aggiungi contatto"
|
||||
},
|
||||
"budget": {
|
||||
"title": "Bilancio",
|
||||
@@ -555,7 +564,8 @@
|
||||
"newCategoryPrompt": "Nome della nuova categoria:",
|
||||
"newSubcategoryPrompt": "Nome della nuova sottocategoria:",
|
||||
"categoryAddedToast": "Categoria aggiunta.",
|
||||
"subcategoryAddedToast": "Sottocategoria aggiunta."
|
||||
"subcategoryAddedToast": "Sottocategoria aggiunta.",
|
||||
"emptyAction": "Aggiungi voce"
|
||||
},
|
||||
"settings": {
|
||||
"title": "Impostazioni",
|
||||
@@ -843,7 +853,8 @@
|
||||
"titleRequired": "Il titolo è obbligatorio",
|
||||
"duplicate": "Duplica",
|
||||
"duplicated": "Ricetta duplicata.",
|
||||
"copySuffix": "copia"
|
||||
"copySuffix": "copia",
|
||||
"emptyAction": "Crea ricetta"
|
||||
},
|
||||
"search": {
|
||||
"title": "Ricerca",
|
||||
@@ -913,10 +924,10 @@
|
||||
"onboarding": {
|
||||
"step1Title": "Welcome to Oikos",
|
||||
"step1Body": "Your personal family planner. Tasks, calendar, shopping and more – all in one place.",
|
||||
"step2Title": "Everything at a glance",
|
||||
"step2Body": "Use the navigation below to reach all modules. The + button creates new entries quickly.",
|
||||
"step3Title": "Ready to go",
|
||||
"step3Body": "The dashboard shows you the most important information at a glance. Customize it under \"Customize\".",
|
||||
"step2Title": "Navigazione e moduli",
|
||||
"step2Body": "In basso accedi direttamente alla Dashboard e al Calendario. Con il pulsante ··· apri altri moduli come Cucina, Note e Contatti.",
|
||||
"step3Title": "Inizia subito",
|
||||
"step3Body": "Con il pulsante + crei nuove voci ovunque. Scorri gli elementi dell'elenco a sinistra o a destra per azioni rapide.",
|
||||
"next": "Next",
|
||||
"done": "Get started",
|
||||
"skip": "Skip"
|
||||
@@ -991,4 +1002,4 @@
|
||||
"shortcuts": {
|
||||
"goKitchen": "Cucina"
|
||||
}
|
||||
}
|
||||
}
|
||||
+23
-12
@@ -29,7 +29,12 @@
|
||||
"unknownError": "不明なエラー",
|
||||
"confirm": "確認",
|
||||
"undo": "元に戻す",
|
||||
"reset": "元に戻す"
|
||||
"reset": "元に戻す",
|
||||
"errorOffline": "インターネット接続がありません。ネットワークを確認してください。",
|
||||
"errorForbidden": "アクセスが拒否されました。再度サインインしてください。",
|
||||
"errorNotFound": "エントリが見つかりませんでした。",
|
||||
"errorServer": "サーバーエラーが発生しました。後でもう一度お試しください。",
|
||||
"errorTimeout": "接続に時間がかかりすぎました。もう一度お試しください。"
|
||||
},
|
||||
"nav": {
|
||||
"dashboard": "ダッシュボード",
|
||||
@@ -187,7 +192,8 @@
|
||||
"archiveButton": "タスクをアーカイブ",
|
||||
"archivedToast": "タスクをアーカイブしました。",
|
||||
"kanbanArchived": "アーカイブ済み",
|
||||
"reminderNeedsDueDate": "タスクのリマインダーを有効にするには期日を設定してください。"
|
||||
"reminderNeedsDueDate": "タスクのリマインダーを有効にするには期日を設定してください。",
|
||||
"emptyAction": "タスクを作成"
|
||||
},
|
||||
"shopping": {
|
||||
"title": "買い物",
|
||||
@@ -227,7 +233,8 @@
|
||||
"catDrinks": "飲み物",
|
||||
"catHousehold": "日用品",
|
||||
"catDrugstore": "薬局",
|
||||
"catMisc": "その他"
|
||||
"catMisc": "その他",
|
||||
"emptyAction": "アイテムを追加"
|
||||
},
|
||||
"meals": {
|
||||
"title": "食事計画",
|
||||
@@ -403,7 +410,8 @@
|
||||
"formatLink": "リンク",
|
||||
"formatCode": "コード",
|
||||
"formatQuote": "引用",
|
||||
"formatDivider": "区切り線"
|
||||
"formatDivider": "区切り線",
|
||||
"emptyAction": "メモを作成"
|
||||
},
|
||||
"contacts": {
|
||||
"title": "連絡先",
|
||||
@@ -456,7 +464,8 @@
|
||||
"categoryInsurance": "保険",
|
||||
"categoryCraftsman": "職人",
|
||||
"categoryEmergency": "緊急連絡先",
|
||||
"categoryOther": "その他"
|
||||
"categoryOther": "その他",
|
||||
"emptyAction": "連絡先を追加"
|
||||
},
|
||||
"budget": {
|
||||
"title": "家計",
|
||||
@@ -555,7 +564,8 @@
|
||||
"newCategoryPrompt": "Name of the new category:",
|
||||
"newSubcategoryPrompt": "Name of the new subcategory:",
|
||||
"categoryAddedToast": "Category added.",
|
||||
"subcategoryAddedToast": "Subcategory added."
|
||||
"subcategoryAddedToast": "Subcategory added.",
|
||||
"emptyAction": "エントリを追加"
|
||||
},
|
||||
"settings": {
|
||||
"title": "設定",
|
||||
@@ -843,7 +853,8 @@
|
||||
"titleRequired": "タイトルが必要です",
|
||||
"duplicate": "複製",
|
||||
"duplicated": "レシピが複製されました。",
|
||||
"copySuffix": "コピー"
|
||||
"copySuffix": "コピー",
|
||||
"emptyAction": "レシピを作成"
|
||||
},
|
||||
"search": {
|
||||
"title": "検索",
|
||||
@@ -913,10 +924,10 @@
|
||||
"onboarding": {
|
||||
"step1Title": "Welcome to Oikos",
|
||||
"step1Body": "Your personal family planner. Tasks, calendar, shopping and more – all in one place.",
|
||||
"step2Title": "Everything at a glance",
|
||||
"step2Body": "Use the navigation below to reach all modules. The + button creates new entries quickly.",
|
||||
"step3Title": "Ready to go",
|
||||
"step3Body": "The dashboard shows you the most important information at a glance. Customize it under \"Customize\".",
|
||||
"step2Title": "ナビゲーションとモジュール",
|
||||
"step2Body": "画面下部からダッシュボードとカレンダーに直接アクセスできます。···ボタンでキッチン、メモ、連絡先などの追加モジュールを開きます。",
|
||||
"step3Title": "さっそく始めよう",
|
||||
"step3Body": "+ボタンでどこでも新しいエントリを作成できます。リストアイテムを左右にスワイプして素早く操作できます。",
|
||||
"next": "Next",
|
||||
"done": "Get started",
|
||||
"skip": "Skip"
|
||||
@@ -991,4 +1002,4 @@
|
||||
"shortcuts": {
|
||||
"goKitchen": "キッチン"
|
||||
}
|
||||
}
|
||||
}
|
||||
+23
-12
@@ -29,7 +29,12 @@
|
||||
"unknownError": "Erro desconhecido",
|
||||
"confirm": "Confirmar",
|
||||
"undo": "Desfazer",
|
||||
"reset": "Restaurar original"
|
||||
"reset": "Restaurar original",
|
||||
"errorOffline": "Sem ligação à internet. Por favor, verifique a sua rede.",
|
||||
"errorForbidden": "Acesso negado. Por favor, inicie sessão novamente.",
|
||||
"errorNotFound": "O registo não foi encontrado.",
|
||||
"errorServer": "Erro no servidor. Por favor, tente mais tarde.",
|
||||
"errorTimeout": "A ligação demorou demasiado. Por favor, tente novamente."
|
||||
},
|
||||
"nav": {
|
||||
"dashboard": "Painel",
|
||||
@@ -187,7 +192,8 @@
|
||||
"filterGroupStatus": "Estado",
|
||||
"swipedDoneToast": "Marcado como concluído.",
|
||||
"swipedOpenToast": "Marcado como aberto.",
|
||||
"reminderNeedsDueDate": "Defina uma data de vencimento para habilitar lembretes da tarefa."
|
||||
"reminderNeedsDueDate": "Defina uma data de vencimento para habilitar lembretes da tarefa.",
|
||||
"emptyAction": "Criar tarefa"
|
||||
},
|
||||
"shopping": {
|
||||
"title": "Compras",
|
||||
@@ -227,7 +233,8 @@
|
||||
"catDrinks": "Bebidas",
|
||||
"catHousehold": "Casa",
|
||||
"catDrugstore": "Farmácia",
|
||||
"catMisc": "Outros"
|
||||
"catMisc": "Outros",
|
||||
"emptyAction": "Adicionar item"
|
||||
},
|
||||
"meals": {
|
||||
"title": "Plano de refeições",
|
||||
@@ -403,7 +410,8 @@
|
||||
"formatLink": "Link",
|
||||
"formatCode": "Código",
|
||||
"formatQuote": "Citação",
|
||||
"formatDivider": "Divisor"
|
||||
"formatDivider": "Divisor",
|
||||
"emptyAction": "Criar nota"
|
||||
},
|
||||
"contacts": {
|
||||
"title": "Contatos",
|
||||
@@ -456,7 +464,8 @@
|
||||
"categoryInsurance": "Seguro",
|
||||
"categoryCraftsman": "Artesão",
|
||||
"categoryEmergency": "Emergência",
|
||||
"categoryOther": "Outros"
|
||||
"categoryOther": "Outros",
|
||||
"emptyAction": "Adicionar contato"
|
||||
},
|
||||
"budget": {
|
||||
"title": "Orçamento",
|
||||
@@ -555,7 +564,8 @@
|
||||
"newCategoryPrompt": "Nome da nova categoria:",
|
||||
"newSubcategoryPrompt": "Nome da nova subcategoria:",
|
||||
"categoryAddedToast": "Categoria adicionada.",
|
||||
"subcategoryAddedToast": "Subcategoria adicionada."
|
||||
"subcategoryAddedToast": "Subcategoria adicionada.",
|
||||
"emptyAction": "Adicionar entrada"
|
||||
},
|
||||
"settings": {
|
||||
"title": "Configurações",
|
||||
@@ -843,7 +853,8 @@
|
||||
"titleRequired": "O título é obrigatório",
|
||||
"duplicate": "Duplicar",
|
||||
"duplicated": "Receita duplicada.",
|
||||
"copySuffix": "cópia"
|
||||
"copySuffix": "cópia",
|
||||
"emptyAction": "Criar receita"
|
||||
},
|
||||
"search": {
|
||||
"title": "Pesquisa",
|
||||
@@ -914,10 +925,10 @@
|
||||
"onboarding": {
|
||||
"step1Title": "Welcome to Oikos",
|
||||
"step1Body": "Your personal family planner. Tasks, calendar, shopping and more – all in one place.",
|
||||
"step2Title": "Everything at a glance",
|
||||
"step2Body": "Use the navigation below to reach all modules. The + button creates new entries quickly.",
|
||||
"step3Title": "Ready to go",
|
||||
"step3Body": "The dashboard shows you the most important information at a glance. Customize it under \"Customize\".",
|
||||
"step2Title": "Navegação e módulos",
|
||||
"step2Body": "Na parte inferior acessa diretamente o Painel e o Calendário. Com o botão ··· abre módulos adicionais como Cozinha, Notas e Contactos.",
|
||||
"step3Title": "Comece rapidamente",
|
||||
"step3Body": "Com o botão + cria novas entradas em qualquer lugar. Deslize itens da lista para a esquerda ou direita para ações rápidas.",
|
||||
"next": "Next",
|
||||
"done": "Get started",
|
||||
"skip": "Skip"
|
||||
@@ -992,4 +1003,4 @@
|
||||
"shortcuts": {
|
||||
"goKitchen": "Cozinha"
|
||||
}
|
||||
}
|
||||
}
|
||||
+23
-12
@@ -29,7 +29,12 @@
|
||||
"unknownError": "Неизвестная ошибка",
|
||||
"confirm": "Подтвердить",
|
||||
"undo": "Отменить",
|
||||
"reset": "Сбросить к исходному"
|
||||
"reset": "Сбросить к исходному",
|
||||
"errorOffline": "Нет подключения к интернету. Проверьте сеть.",
|
||||
"errorForbidden": "Доступ запрещён. Пожалуйста, войдите снова.",
|
||||
"errorNotFound": "Запись не найдена.",
|
||||
"errorServer": "Ошибка сервера. Повторите попытку позже.",
|
||||
"errorTimeout": "Соединение заняло слишком много времени. Попробуйте снова."
|
||||
},
|
||||
"nav": {
|
||||
"dashboard": "Обзор",
|
||||
@@ -187,7 +192,8 @@
|
||||
"archiveButton": "Архивировать задачу",
|
||||
"archivedToast": "Задача архивирована.",
|
||||
"kanbanArchived": "Архивировано",
|
||||
"reminderNeedsDueDate": "Установите срок выполнения, чтобы включить напоминания о задаче."
|
||||
"reminderNeedsDueDate": "Установите срок выполнения, чтобы включить напоминания о задаче.",
|
||||
"emptyAction": "Создать задачу"
|
||||
},
|
||||
"shopping": {
|
||||
"title": "Покупки",
|
||||
@@ -227,7 +233,8 @@
|
||||
"catDrinks": "Напитки",
|
||||
"catHousehold": "Хозтовары",
|
||||
"catDrugstore": "Аптека",
|
||||
"catMisc": "Разное"
|
||||
"catMisc": "Разное",
|
||||
"emptyAction": "Добавить товар"
|
||||
},
|
||||
"meals": {
|
||||
"title": "План питания",
|
||||
@@ -403,7 +410,8 @@
|
||||
"formatLink": "Ссылка",
|
||||
"formatCode": "Код",
|
||||
"formatQuote": "Цитата",
|
||||
"formatDivider": "Разделитель"
|
||||
"formatDivider": "Разделитель",
|
||||
"emptyAction": "Создать заметку"
|
||||
},
|
||||
"contacts": {
|
||||
"title": "Контакты",
|
||||
@@ -456,7 +464,8 @@
|
||||
"categoryInsurance": "Страховая",
|
||||
"categoryCraftsman": "Мастер",
|
||||
"categoryEmergency": "Экстренная помощь",
|
||||
"categoryOther": "Другое"
|
||||
"categoryOther": "Другое",
|
||||
"emptyAction": "Добавить контакт"
|
||||
},
|
||||
"budget": {
|
||||
"title": "Бюджет",
|
||||
@@ -555,7 +564,8 @@
|
||||
"newCategoryPrompt": "Name of the new category:",
|
||||
"newSubcategoryPrompt": "Name of the new subcategory:",
|
||||
"categoryAddedToast": "Category added.",
|
||||
"subcategoryAddedToast": "Subcategory added."
|
||||
"subcategoryAddedToast": "Subcategory added.",
|
||||
"emptyAction": "Добавить запись"
|
||||
},
|
||||
"settings": {
|
||||
"title": "Настройки",
|
||||
@@ -843,7 +853,8 @@
|
||||
"titleRequired": "Название обязательно",
|
||||
"duplicate": "Дублировать",
|
||||
"duplicated": "Рецепт дублирован.",
|
||||
"copySuffix": "копия"
|
||||
"copySuffix": "копия",
|
||||
"emptyAction": "Создать рецепт"
|
||||
},
|
||||
"search": {
|
||||
"title": "Поиск",
|
||||
@@ -913,10 +924,10 @@
|
||||
"onboarding": {
|
||||
"step1Title": "Welcome to Oikos",
|
||||
"step1Body": "Your personal family planner. Tasks, calendar, shopping and more – all in one place.",
|
||||
"step2Title": "Everything at a glance",
|
||||
"step2Body": "Use the navigation below to reach all modules. The + button creates new entries quickly.",
|
||||
"step3Title": "Ready to go",
|
||||
"step3Body": "The dashboard shows you the most important information at a glance. Customize it under \"Customize\".",
|
||||
"step2Title": "Навигация и модули",
|
||||
"step2Body": "Внизу доступны Панель управления и Календарь напрямую. Кнопка ··· открывает дополнительные модули: Кухня, Заметки и Контакты.",
|
||||
"step3Title": "Начните быстро",
|
||||
"step3Body": "Кнопка + позволяет создавать новые записи везде. Смахните элементы списка влево или вправо для быстрых действий.",
|
||||
"next": "Next",
|
||||
"done": "Get started",
|
||||
"skip": "Skip"
|
||||
@@ -991,4 +1002,4 @@
|
||||
"shortcuts": {
|
||||
"goKitchen": "Кухня"
|
||||
}
|
||||
}
|
||||
}
|
||||
+23
-12
@@ -29,7 +29,12 @@
|
||||
"unknownError": "Okänt fel",
|
||||
"confirm": "Bekräfta",
|
||||
"undo": "Ångra",
|
||||
"reset": "Återställ till original"
|
||||
"reset": "Återställ till original",
|
||||
"errorOffline": "Ingen internetanslutning. Kontrollera ditt nätverk.",
|
||||
"errorForbidden": "Åtkomst nekad. Logga in igen.",
|
||||
"errorNotFound": "Posten hittades inte.",
|
||||
"errorServer": "Serverfel. Försök igen senare.",
|
||||
"errorTimeout": "Anslutningen tog för lång tid. Försök igen."
|
||||
},
|
||||
"nav": {
|
||||
"dashboard": "Översikt",
|
||||
@@ -187,7 +192,8 @@
|
||||
"archiveButton": "Arkivera uppgift",
|
||||
"archivedToast": "Uppgiften arkiverades.",
|
||||
"kanbanArchived": "Arkiverad",
|
||||
"reminderNeedsDueDate": "Ange ett förfallodatum för att aktivera påminnelser för uppgiften."
|
||||
"reminderNeedsDueDate": "Ange ett förfallodatum för att aktivera påminnelser för uppgiften.",
|
||||
"emptyAction": "Skapa uppgift"
|
||||
},
|
||||
"shopping": {
|
||||
"title": "Shopping",
|
||||
@@ -227,7 +233,8 @@
|
||||
"catDrinks": "Drycker",
|
||||
"catHousehold": "Hushåll",
|
||||
"catDrugstore": "Apotek",
|
||||
"catMisc": "Diverse"
|
||||
"catMisc": "Diverse",
|
||||
"emptyAction": "Lägg till artikel"
|
||||
},
|
||||
"meals": {
|
||||
"title": "Måltidsplan",
|
||||
@@ -403,7 +410,8 @@
|
||||
"formatLink": "Länk",
|
||||
"formatCode": "Kod",
|
||||
"formatQuote": "Citationstecken",
|
||||
"formatDivider": "Delare"
|
||||
"formatDivider": "Delare",
|
||||
"emptyAction": "Skapa anteckning"
|
||||
},
|
||||
"contacts": {
|
||||
"title": "Kontakter",
|
||||
@@ -456,7 +464,8 @@
|
||||
"categoryInsurance": "Försäkring",
|
||||
"categoryCraftsman": "Handlare",
|
||||
"categoryEmergency": "Nödsituation",
|
||||
"categoryOther": "Andra"
|
||||
"categoryOther": "Andra",
|
||||
"emptyAction": "Lägg till kontakt"
|
||||
},
|
||||
"budget": {
|
||||
"title": "Budget",
|
||||
@@ -555,7 +564,8 @@
|
||||
"newCategoryPrompt": "Name of the new category:",
|
||||
"newSubcategoryPrompt": "Name of the new subcategory:",
|
||||
"categoryAddedToast": "Category added.",
|
||||
"subcategoryAddedToast": "Subcategory added."
|
||||
"subcategoryAddedToast": "Subcategory added.",
|
||||
"emptyAction": "Lägg till post"
|
||||
},
|
||||
"settings": {
|
||||
"title": "Inställningar",
|
||||
@@ -843,7 +853,8 @@
|
||||
"titleRequired": "Titel krävs",
|
||||
"duplicate": "Duplicera",
|
||||
"duplicated": "Recept duplicerat.",
|
||||
"copySuffix": "kopia"
|
||||
"copySuffix": "kopia",
|
||||
"emptyAction": "Skapa recept"
|
||||
},
|
||||
"search": {
|
||||
"title": "Sök",
|
||||
@@ -913,10 +924,10 @@
|
||||
"onboarding": {
|
||||
"step1Title": "Welcome to Oikos",
|
||||
"step1Body": "Your personal family planner. Tasks, calendar, shopping and more – all in one place.",
|
||||
"step2Title": "Everything at a glance",
|
||||
"step2Body": "Use the navigation below to reach all modules. The + button creates new entries quickly.",
|
||||
"step3Title": "Ready to go",
|
||||
"step3Body": "The dashboard shows you the most important information at a glance. Customize it under \"Customize\".",
|
||||
"step2Title": "Navigering och moduler",
|
||||
"step2Body": "Nere på skärmen når du direkt Dashboard och Kalender. Med ···-knappen öppnar du fler moduler som Kök, Anteckningar och Kontakter.",
|
||||
"step3Title": "Kom igång snabbt",
|
||||
"step3Body": "Med +-knappen skapar du nya poster var som helst. Svep listobjekt åt vänster eller höger för snabbåtgärder.",
|
||||
"next": "Next",
|
||||
"done": "Get started",
|
||||
"skip": "Skip"
|
||||
@@ -991,4 +1002,4 @@
|
||||
"shortcuts": {
|
||||
"goKitchen": "Kök"
|
||||
}
|
||||
}
|
||||
}
|
||||
+23
-12
@@ -29,7 +29,12 @@
|
||||
"unknownError": "Bilinmeyen hata",
|
||||
"confirm": "Onayla",
|
||||
"undo": "Geri al",
|
||||
"reset": "Orijinale sıfırla"
|
||||
"reset": "Orijinale sıfırla",
|
||||
"errorOffline": "İnternet bağlantısı yok. Lütfen ağınızı kontrol edin.",
|
||||
"errorForbidden": "Erişim reddedildi. Lütfen tekrar giriş yapın.",
|
||||
"errorNotFound": "Kayıt bulunamadı.",
|
||||
"errorServer": "Sunucu hatası. Lütfen daha sonra tekrar deneyin.",
|
||||
"errorTimeout": "Bağlantı çok uzun sürdü. Lütfen tekrar deneyin."
|
||||
},
|
||||
"nav": {
|
||||
"dashboard": "Genel Bakış",
|
||||
@@ -187,7 +192,8 @@
|
||||
"archiveButton": "Görevi arşivle",
|
||||
"archivedToast": "Görev arşivlendi.",
|
||||
"kanbanArchived": "Arşivlenmiş",
|
||||
"reminderNeedsDueDate": "Görev hatırlatıcılarını etkinleştirmek için bir son tarih belirleyin."
|
||||
"reminderNeedsDueDate": "Görev hatırlatıcılarını etkinleştirmek için bir son tarih belirleyin.",
|
||||
"emptyAction": "Görev oluştur"
|
||||
},
|
||||
"shopping": {
|
||||
"title": "Alışveriş",
|
||||
@@ -227,7 +233,8 @@
|
||||
"catDrinks": "İçecekler",
|
||||
"catHousehold": "Ev Gereçleri",
|
||||
"catDrugstore": "Eczane",
|
||||
"catMisc": "Diğer"
|
||||
"catMisc": "Diğer",
|
||||
"emptyAction": "Öğe ekle"
|
||||
},
|
||||
"meals": {
|
||||
"title": "Yemek Planı",
|
||||
@@ -403,7 +410,8 @@
|
||||
"formatLink": "Bağlantı",
|
||||
"formatCode": "Kod",
|
||||
"formatQuote": "Alıntı",
|
||||
"formatDivider": "Ayırıcı"
|
||||
"formatDivider": "Ayırıcı",
|
||||
"emptyAction": "Not oluştur"
|
||||
},
|
||||
"contacts": {
|
||||
"title": "Kişiler",
|
||||
@@ -456,7 +464,8 @@
|
||||
"categoryInsurance": "Sigorta",
|
||||
"categoryCraftsman": "Usta",
|
||||
"categoryEmergency": "Acil",
|
||||
"categoryOther": "Diğer"
|
||||
"categoryOther": "Diğer",
|
||||
"emptyAction": "Kişi ekle"
|
||||
},
|
||||
"budget": {
|
||||
"title": "Bütçe",
|
||||
@@ -555,7 +564,8 @@
|
||||
"newCategoryPrompt": "Name of the new category:",
|
||||
"newSubcategoryPrompt": "Name of the new subcategory:",
|
||||
"categoryAddedToast": "Category added.",
|
||||
"subcategoryAddedToast": "Subcategory added."
|
||||
"subcategoryAddedToast": "Subcategory added.",
|
||||
"emptyAction": "Giriş ekle"
|
||||
},
|
||||
"settings": {
|
||||
"title": "Ayarlar",
|
||||
@@ -843,7 +853,8 @@
|
||||
"titleRequired": "Başlık gerekli",
|
||||
"duplicate": "Çoğalt",
|
||||
"duplicated": "Tarif çoğaltıldı.",
|
||||
"copySuffix": "kopya"
|
||||
"copySuffix": "kopya",
|
||||
"emptyAction": "Tarif oluştur"
|
||||
},
|
||||
"search": {
|
||||
"title": "Arama",
|
||||
@@ -913,10 +924,10 @@
|
||||
"onboarding": {
|
||||
"step1Title": "Welcome to Oikos",
|
||||
"step1Body": "Your personal family planner. Tasks, calendar, shopping and more – all in one place.",
|
||||
"step2Title": "Everything at a glance",
|
||||
"step2Body": "Use the navigation below to reach all modules. The + button creates new entries quickly.",
|
||||
"step3Title": "Ready to go",
|
||||
"step3Body": "The dashboard shows you the most important information at a glance. Customize it under \"Customize\".",
|
||||
"step2Title": "Gezinme ve Modüller",
|
||||
"step2Body": "Aşağıda Gösterge Paneli ve Takvim'e doğrudan erişebilirsiniz. ···-düğmesiyle Mutfak, Notlar ve Kişiler gibi ek modülleri açabilirsiniz.",
|
||||
"step3Title": "Hızlıca başlayın",
|
||||
"step3Body": "+ düğmesiyle her yerde yeni girişler oluşturabilirsiniz. Hızlı işlemler için liste öğelerini sola veya sağa kaydırın.",
|
||||
"next": "Next",
|
||||
"done": "Get started",
|
||||
"skip": "Skip"
|
||||
@@ -991,4 +1002,4 @@
|
||||
"shortcuts": {
|
||||
"goKitchen": "Mutfak"
|
||||
}
|
||||
}
|
||||
}
|
||||
+23
-12
@@ -29,7 +29,12 @@
|
||||
"unknownError": "Невідома помилка",
|
||||
"confirm": "Підтвердити",
|
||||
"undo": "Скасувати",
|
||||
"reset": "Скинути до оригіналу"
|
||||
"reset": "Скинути до оригіналу",
|
||||
"errorOffline": "Немає підключення до інтернету. Перевірте мережу.",
|
||||
"errorForbidden": "Доступ заборонено. Будь ласка, увійдіть знову.",
|
||||
"errorNotFound": "Запис не знайдено.",
|
||||
"errorServer": "Помилка сервера. Спробуйте пізніше.",
|
||||
"errorTimeout": "З'єднання тривало занадто довго. Спробуйте ще раз."
|
||||
},
|
||||
"nav": {
|
||||
"dashboard": "Огляд",
|
||||
@@ -187,7 +192,8 @@
|
||||
"archiveButton": "Архівувати завдання",
|
||||
"archivedToast": "Завдання архівовано.",
|
||||
"kanbanArchived": "Архівовано",
|
||||
"reminderNeedsDueDate": "Встановіть дату виконання, щоб увімкнути нагадування про завдання."
|
||||
"reminderNeedsDueDate": "Встановіть дату виконання, щоб увімкнути нагадування про завдання.",
|
||||
"emptyAction": "Створити завдання"
|
||||
},
|
||||
"shopping": {
|
||||
"title": "Покупки",
|
||||
@@ -227,7 +233,8 @@
|
||||
"catDrinks": "Напої",
|
||||
"catHousehold": "Господарські товари",
|
||||
"catDrugstore": "Аптека",
|
||||
"catMisc": "Різне"
|
||||
"catMisc": "Різне",
|
||||
"emptyAction": "Додати товар"
|
||||
},
|
||||
"meals": {
|
||||
"title": "План харчування",
|
||||
@@ -403,7 +410,8 @@
|
||||
"formatLink": "Посилання",
|
||||
"formatCode": "Код",
|
||||
"formatQuote": "Цитата",
|
||||
"formatDivider": "Розділювач"
|
||||
"formatDivider": "Розділювач",
|
||||
"emptyAction": "Створити нотатку"
|
||||
},
|
||||
"contacts": {
|
||||
"title": "Контакти",
|
||||
@@ -456,7 +464,8 @@
|
||||
"categoryInsurance": "Страхування",
|
||||
"categoryCraftsman": "Майстер",
|
||||
"categoryEmergency": "Екстрена служба",
|
||||
"categoryOther": "Інше"
|
||||
"categoryOther": "Інше",
|
||||
"emptyAction": "Додати контакт"
|
||||
},
|
||||
"budget": {
|
||||
"title": "Бюджет",
|
||||
@@ -555,7 +564,8 @@
|
||||
"newCategoryPrompt": "Name of the new category:",
|
||||
"newSubcategoryPrompt": "Name of the new subcategory:",
|
||||
"categoryAddedToast": "Category added.",
|
||||
"subcategoryAddedToast": "Subcategory added."
|
||||
"subcategoryAddedToast": "Subcategory added.",
|
||||
"emptyAction": "Додати запис"
|
||||
},
|
||||
"settings": {
|
||||
"title": "Налаштування",
|
||||
@@ -874,7 +884,8 @@
|
||||
"titleRequired": "Назва обов'язкова",
|
||||
"duplicate": "Дублювати",
|
||||
"duplicated": "Рецепт продубльовано.",
|
||||
"copySuffix": "копія"
|
||||
"copySuffix": "копія",
|
||||
"emptyAction": "Створити рецепт"
|
||||
},
|
||||
"search": {
|
||||
"title": "Пошук",
|
||||
@@ -913,10 +924,10 @@
|
||||
"onboarding": {
|
||||
"step1Title": "Welcome to Oikos",
|
||||
"step1Body": "Your personal family planner. Tasks, calendar, shopping and more – all in one place.",
|
||||
"step2Title": "Everything at a glance",
|
||||
"step2Body": "Use the navigation below to reach all modules. The + button creates new entries quickly.",
|
||||
"step3Title": "Ready to go",
|
||||
"step3Body": "The dashboard shows you the most important information at a glance. Customize it under \"Customize\".",
|
||||
"step2Title": "Навігація та модулі",
|
||||
"step2Body": "Унизу ви маєте прямий доступ до Панелі керування та Календаря. Кнопка ··· відкриває додаткові модулі: Кухня, Нотатки та Контакти.",
|
||||
"step3Title": "Починайте швидко",
|
||||
"step3Body": "За допомогою кнопки + створюйте нові записи будь-де. Проведіть пальцем по елементу списку ліворуч або праворуч для швидких дій.",
|
||||
"next": "Next",
|
||||
"done": "Get started",
|
||||
"skip": "Skip"
|
||||
@@ -999,4 +1010,4 @@
|
||||
"shortcuts": {
|
||||
"goKitchen": "Кухня"
|
||||
}
|
||||
}
|
||||
}
|
||||
+23
-12
@@ -29,7 +29,12 @@
|
||||
"unknownError": "未知错误",
|
||||
"confirm": "确认",
|
||||
"undo": "撤销",
|
||||
"reset": "重置为原始"
|
||||
"reset": "重置为原始",
|
||||
"errorOffline": "无网络连接。请检查您的网络。",
|
||||
"errorForbidden": "访问被拒绝。请重新登录。",
|
||||
"errorNotFound": "未找到该条目。",
|
||||
"errorServer": "服务器错误。请稍后重试。",
|
||||
"errorTimeout": "连接超时。请重试。"
|
||||
},
|
||||
"nav": {
|
||||
"dashboard": "概览",
|
||||
@@ -187,7 +192,8 @@
|
||||
"archiveButton": "归档任务",
|
||||
"archivedToast": "任务已归档。",
|
||||
"kanbanArchived": "已归档",
|
||||
"reminderNeedsDueDate": "设置截止日期以启用任务提醒。"
|
||||
"reminderNeedsDueDate": "设置截止日期以启用任务提醒。",
|
||||
"emptyAction": "创建任务"
|
||||
},
|
||||
"shopping": {
|
||||
"title": "购物",
|
||||
@@ -227,7 +233,8 @@
|
||||
"catDrinks": "饮料",
|
||||
"catHousehold": "家居",
|
||||
"catDrugstore": "日化",
|
||||
"catMisc": "其他"
|
||||
"catMisc": "其他",
|
||||
"emptyAction": "添加商品"
|
||||
},
|
||||
"meals": {
|
||||
"title": "饮食计划",
|
||||
@@ -403,7 +410,8 @@
|
||||
"formatLink": "链接",
|
||||
"formatCode": "代码",
|
||||
"formatQuote": "引用",
|
||||
"formatDivider": "分隔线"
|
||||
"formatDivider": "分隔线",
|
||||
"emptyAction": "创建笔记"
|
||||
},
|
||||
"contacts": {
|
||||
"title": "联系人",
|
||||
@@ -456,7 +464,8 @@
|
||||
"categoryInsurance": "保险",
|
||||
"categoryCraftsman": "技工",
|
||||
"categoryEmergency": "紧急联系",
|
||||
"categoryOther": "其他"
|
||||
"categoryOther": "其他",
|
||||
"emptyAction": "添加联系人"
|
||||
},
|
||||
"budget": {
|
||||
"title": "预算",
|
||||
@@ -555,7 +564,8 @@
|
||||
"newCategoryPrompt": "Name of the new category:",
|
||||
"newSubcategoryPrompt": "Name of the new subcategory:",
|
||||
"categoryAddedToast": "Category added.",
|
||||
"subcategoryAddedToast": "Subcategory added."
|
||||
"subcategoryAddedToast": "Subcategory added.",
|
||||
"emptyAction": "添加记录"
|
||||
},
|
||||
"settings": {
|
||||
"title": "设置",
|
||||
@@ -843,7 +853,8 @@
|
||||
"titleRequired": "标题必填",
|
||||
"duplicate": "复制",
|
||||
"duplicated": "食谱已复制。",
|
||||
"copySuffix": "副本"
|
||||
"copySuffix": "副本",
|
||||
"emptyAction": "创建食谱"
|
||||
},
|
||||
"search": {
|
||||
"title": "搜索",
|
||||
@@ -913,10 +924,10 @@
|
||||
"onboarding": {
|
||||
"step1Title": "Welcome to Oikos",
|
||||
"step1Body": "Your personal family planner. Tasks, calendar, shopping and more – all in one place.",
|
||||
"step2Title": "Everything at a glance",
|
||||
"step2Body": "Use the navigation below to reach all modules. The + button creates new entries quickly.",
|
||||
"step3Title": "Ready to go",
|
||||
"step3Body": "The dashboard shows you the most important information at a glance. Customize it under \"Customize\".",
|
||||
"step2Title": "导航与模块",
|
||||
"step2Body": "底部可直接访问仪表板和日历。点击···按钮可打开厨房、笔记和联系人等更多模块。",
|
||||
"step3Title": "快速开始",
|
||||
"step3Body": "点击+按钮可在任意位置创建新条目。向左或向右滑动列表项可执行快捷操作。",
|
||||
"next": "Next",
|
||||
"done": "Get started",
|
||||
"skip": "Skip"
|
||||
@@ -991,4 +1002,4 @@
|
||||
"shortcuts": {
|
||||
"goKitchen": "厨房"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -332,6 +332,9 @@ function renderBody() {
|
||||
`;
|
||||
|
||||
if (window.lucide) lucide.createIcons();
|
||||
_container.querySelector('#empty-cta-budget')?.addEventListener('click', () => {
|
||||
document.querySelector('.page-fab')?.click();
|
||||
});
|
||||
stagger(_container.querySelector('#budget-list')?.querySelectorAll('.budget-entry') ?? []);
|
||||
|
||||
_container.querySelector('#budget-list')?.addEventListener('click', async (e) => {
|
||||
@@ -378,6 +381,10 @@ function renderEntries() {
|
||||
<div class="empty-state__title">${t('budget.emptyTitle')}</div>
|
||||
<div class="empty-state__description">${t('budget.emptyDescription')}</div>
|
||||
<p class="empty-state__hint">${t('emptyHint.budget')}</p>
|
||||
<button class="btn btn--primary empty-state__cta" id="empty-cta-budget">
|
||||
<i data-lucide="plus" aria-hidden="true" class="icon-base"></i>
|
||||
${t('budget.emptyAction')}
|
||||
</button>
|
||||
</div>`;
|
||||
}
|
||||
|
||||
|
||||
@@ -181,9 +181,16 @@ function renderList() {
|
||||
<div class="empty-state__title">${t('contacts.emptyTitle')}</div>
|
||||
<div class="empty-state__description">${t('contacts.emptyDescription')}</div>
|
||||
<p class="empty-state__hint">${t('emptyHint.contacts')}</p>
|
||||
<button class="btn btn--primary empty-state__cta" id="empty-cta-contacts">
|
||||
<i data-lucide="plus" aria-hidden="true" class="icon-base"></i>
|
||||
${t('contacts.emptyAction')}
|
||||
</button>
|
||||
</div>
|
||||
`;
|
||||
if (window.lucide) lucide.createIcons();
|
||||
container.querySelector('#empty-cta-contacts')?.addEventListener('click', () => {
|
||||
document.querySelector('.page-fab')?.click();
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -19,8 +19,8 @@ const ONBOARDING_KEY = 'oikos-onboarded';
|
||||
function getOnboardingSteps() {
|
||||
return [
|
||||
{ icon: 'home', title: t('onboarding.step1Title'), body: t('onboarding.step1Body') },
|
||||
{ icon: 'grid-2x2', title: t('onboarding.step2Title'), body: t('onboarding.step2Body') },
|
||||
{ icon: 'circle-check', title: t('onboarding.step3Title'), body: t('onboarding.step3Body') },
|
||||
{ icon: 'navigation', title: t('onboarding.step2Title'), body: t('onboarding.step2Body') },
|
||||
{ icon: 'plus-circle', title: t('onboarding.step3Title'), body: t('onboarding.step3Body') },
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
@@ -146,10 +146,17 @@ function renderGrid() {
|
||||
</svg>
|
||||
<div class="empty-state__title">${isFiltered ? t('notes.noResultsTitle') : t('notes.emptyTitle')}</div>
|
||||
<div class="empty-state__description">${isFiltered ? t('notes.noResultsDescription', { query: state.filterQuery }) : t('notes.emptyDescription')}</div>
|
||||
${!isFiltered ? `<p class="empty-state__hint">${t('emptyHint.notes')}</p>` : ''}
|
||||
${!isFiltered ? `<p class="empty-state__hint">${t('emptyHint.notes')}</p>
|
||||
<button class="btn btn--primary empty-state__cta" id="empty-cta-notes">
|
||||
<i data-lucide="plus" aria-hidden="true" class="icon-base"></i>
|
||||
${t('notes.emptyAction')}
|
||||
</button>` : ''}
|
||||
</div>
|
||||
`;
|
||||
if (window.lucide) lucide.createIcons();
|
||||
grid.querySelector('#empty-cta-notes')?.addEventListener('click', () => {
|
||||
document.querySelector('.page-fab')?.click();
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -131,8 +131,16 @@ function renderRecipeList() {
|
||||
const emptyHint = document.createElement('p');
|
||||
emptyHint.className = 'empty-state__hint';
|
||||
emptyHint.textContent = t('emptyHint.recipes');
|
||||
empty.append(emptyTitle, emptyDesc, emptyHint);
|
||||
const emptyCta = document.createElement('button');
|
||||
emptyCta.className = 'btn btn--primary empty-state__cta';
|
||||
emptyCta.insertAdjacentHTML('afterbegin', '<i data-lucide="plus" aria-hidden="true" class="icon-base"></i>');
|
||||
emptyCta.append(document.createTextNode(t('recipes.emptyAction')));
|
||||
emptyCta.addEventListener('click', () => {
|
||||
document.querySelector('.page-fab')?.click();
|
||||
});
|
||||
empty.append(emptyTitle, emptyDesc, emptyHint, emptyCta);
|
||||
list.appendChild(empty);
|
||||
if (window.lucide) window.lucide.createIcons({ el: empty });
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -172,6 +172,10 @@ function renderItems() {
|
||||
<div class="empty-state__title">${t('shopping.emptyList')}</div>
|
||||
<div class="empty-state__description">${t('shopping.emptyListDescription')}</div>
|
||||
<p class="empty-state__hint">${t('emptyHint.shopping')}</p>
|
||||
<button class="btn btn--primary empty-state__cta" id="empty-cta-shopping">
|
||||
<i data-lucide="plus" aria-hidden="true" class="icon-base"></i>
|
||||
${t('shopping.emptyAction')}
|
||||
</button>
|
||||
</div>`;
|
||||
}
|
||||
|
||||
@@ -527,6 +531,9 @@ function updateItemsList(container) {
|
||||
stagger(listEl.querySelectorAll('.shopping-item'));
|
||||
wireSwipeGestures(container);
|
||||
maybeShowSwipeHint(container);
|
||||
listEl.querySelector('#empty-cta-shopping')?.addEventListener('click', () => {
|
||||
document.querySelector('.page-fab')?.click();
|
||||
});
|
||||
}
|
||||
// clear-checked Button aktualisieren
|
||||
const checkedCount = state.items.filter((i) => i.is_checked).length;
|
||||
|
||||
@@ -268,6 +268,10 @@ function renderTaskGroups(tasks, groupMode) {
|
||||
<div class="empty-state__title">${t('tasks.emptyTitle')}</div>
|
||||
<div class="empty-state__description">${t('tasks.emptyDescription')}</div>
|
||||
<p class="empty-state__hint">${t('emptyHint.tasks')}</p>
|
||||
<button class="btn btn--primary empty-state__cta" id="empty-cta-tasks">
|
||||
<i data-lucide="plus" aria-hidden="true" class="icon-base"></i>
|
||||
${t('tasks.emptyAction')}
|
||||
</button>
|
||||
</div>`;
|
||||
}
|
||||
|
||||
@@ -1029,6 +1033,9 @@ function renderTaskList(container) {
|
||||
updateOverdueBadge();
|
||||
wireSwipeGestures(container);
|
||||
maybeShowSwipeHint(container);
|
||||
listEl.querySelector('#empty-cta-tasks')?.addEventListener('click', () => {
|
||||
document.querySelector('.page-fab')?.click();
|
||||
});
|
||||
}
|
||||
|
||||
function renderFilters(container) {
|
||||
|
||||
+16
-2
@@ -1162,6 +1162,20 @@ function showToast(message, type = 'default', duration = 3000, onUndo = null) {
|
||||
// Event-Listener
|
||||
// --------------------------------------------------------
|
||||
|
||||
// --------------------------------------------------------
|
||||
// Fehler-Hilfsfunktion
|
||||
// --------------------------------------------------------
|
||||
|
||||
function friendlyError(err) {
|
||||
if (!navigator.onLine) return t('common.errorOffline');
|
||||
const status = err?.status ?? err?.response?.status;
|
||||
if (status === 403) return t('common.errorForbidden');
|
||||
if (status === 404) return t('common.errorNotFound');
|
||||
if (status >= 500) return t('common.errorServer');
|
||||
if (err?.name === 'AbortError' || err?.name === 'TimeoutError') return t('common.errorTimeout');
|
||||
return err?.data?.error || err?.message || t('common.errorGeneric');
|
||||
}
|
||||
|
||||
// --------------------------------------------------------
|
||||
// Globale Fehler-Handler (Error Boundary)
|
||||
// --------------------------------------------------------
|
||||
@@ -1177,8 +1191,7 @@ window.addEventListener('unhandledrejection', (e) => {
|
||||
// Auth-Fehler werden bereits von auth:expired behandelt
|
||||
if (e.reason?.status === 401) return;
|
||||
console.error('[Oikos] Unbehandeltes Promise-Rejection:', e.reason);
|
||||
const msg = e.reason?.message || t('common.errorGeneric');
|
||||
showToast(msg, 'danger');
|
||||
showToast(friendlyError(e.reason), 'danger');
|
||||
e.preventDefault(); // Konsolenfehler unterdrücken (bereits geloggt)
|
||||
});
|
||||
|
||||
@@ -1341,6 +1354,7 @@ if (/iPhone|iPad|iPod/.test(navigator.userAgent)) {
|
||||
window.oikos = {
|
||||
navigate,
|
||||
showToast,
|
||||
friendlyError,
|
||||
setThemeColor,
|
||||
applyTheme: (value) => {
|
||||
localStorage.setItem('oikos-theme', value);
|
||||
|
||||
@@ -1462,6 +1462,10 @@
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.empty-state__cta {
|
||||
margin-top: var(--space-2);
|
||||
}
|
||||
|
||||
.empty-state--compact {
|
||||
padding: var(--space-4) var(--space-3);
|
||||
gap: var(--space-2);
|
||||
|
||||
Reference in New Issue
Block a user