Merge origin/main into improvement-dashboard-customization

Resolve sv.json conflict: take Swedish subcategory translations from
main and loan keys from PR branch.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Ulas Kalayci
2026-05-01 17:42:23 +02:00
18 changed files with 666 additions and 185 deletions
+11
View File
@@ -7,6 +7,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]
## [0.39.2] - 2026-05-01
### Fixed
- **Budget date picker**: the date input in Budget → New Entry / Edit Entry now uses a native date picker on iOS and Android instead of a plain text field.
## [0.39.1] - 2026-05-01
### Added
- **Swedish translation completed** (PR #115 by @olsson82): all previously untranslated strings in `sv.json` now have Swedish equivalents (attachment fields, API token settings, budget categories, backup hint, onboarding, offline banner).
- **i18n gap fix**: calendar and notes colour names, `emptyHint` texts, keyboard-shortcut labels, `tasks.navLabelOverdue`, and `birthdays.photoOptional` added to all 13 non-German locale files (ar, el, en, es, fr, hi, it, ja, pt, ru, tr, uk, zh).
## [0.39.0] - 2026-04-30
### Added
+2 -2
View File
@@ -1,12 +1,12 @@
{
"name": "oikos",
"version": "0.38.4",
"version": "0.39.2",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "oikos",
"version": "0.38.4",
"version": "0.39.2",
"license": "MIT",
"dependencies": {
"bcrypt": "^6.0.0",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "oikos",
"version": "0.39.0",
"version": "0.39.2",
"description": "Self-hosted family planner - calendar, tasks, shopping, meal planning, budget and more. Private, open-source, no subscription.",
"main": "server/index.js",
"type": "module",
+42 -6
View File
@@ -199,7 +199,8 @@
"archivedToast": "تم أرشفة المهمة.",
"kanbanArchived": "مؤرشف",
"reminderNeedsDueDate": "حدّد تاريخ استحقاق لتفعيل تذكيرات المهمة.",
"emptyAction": "إنشاء مهمة"
"emptyAction": "إنشاء مهمة",
"navLabelOverdue": "المهام، {{count}} متأخرة"
},
"shopping": {
"title": "التسوق",
@@ -378,7 +379,17 @@
"attachmentHint": "Attach a local image, PDF, or document. Images will be shown in the event popup.",
"attachmentFallback": "Attachment",
"attachmentReadError": "The attachment could not be read.",
"attachmentTooLarge": "Attachment may be at most 5 MB."
"attachmentTooLarge": "Attachment may be at most 5 MB.",
"colorBlue": "أزرق",
"colorCoral": "مرجاني",
"colorCyan": "سماوي",
"colorGray": "رمادي",
"colorGreen": "أخضر",
"colorOrange": "برتقالي",
"colorPurple": "بنفسجي",
"colorRed": "أحمر",
"colorSkyBlue": "أزرق سماوي",
"colorYellow": "أصفر"
},
"notes": {
"title": "لوحة الملاحظات",
@@ -417,7 +428,15 @@
"formatCode": "كود",
"formatQuote": "اقتباس",
"formatDivider": "فاصل",
"emptyAction": "إنشاء ملاحظة"
"emptyAction": "إنشاء ملاحظة",
"colorAmber": "كهرماني",
"colorBlue": "أزرق",
"colorGreen": "أخضر",
"colorOrange": "برتقالي",
"colorPurple": "بنفسجي",
"colorTeal": "أخضر مزرق",
"colorWhite": "أبيض",
"colorYellow": "أصفر"
},
"contacts": {
"title": "جهات الاتصال",
@@ -951,7 +970,8 @@
"deleteConfirm": "هل تريد حذف عيد ميلاد \"{{name}}\"؟",
"ageNoteToday": "سيكمل {{age}} عامًا اليوم.",
"ageNoteTomorrow": "سيكمل {{age}} عامًا غدًا.",
"ageNoteDays": "سيكمل {{age}} عامًا بعد {{days}} يومًا."
"ageNoteDays": "سيكمل {{age}} عامًا بعد {{days}} يومًا.",
"photoOptional": "اختياري: يمكنك الحفظ بدون صورة ملف شخصي."
},
"reminders": {
"sectionTitle": "تذكير",
@@ -999,7 +1019,15 @@
"banner": "Offline reconnecting…"
},
"emptyHint": {
"recipes": "أنشئ وصفات واربطها بمخطط الوجبات."
"recipes": "أنشئ وصفات واربطها بمخطط الوجبات.",
"birthdays": "أضف أعياد الميلاد — ستتلقى تذكيراً في الوقت المناسب.",
"budget": "أنشئ الفئات وسجّل الدخل والمصروفات.",
"calendar": "اربط تقويم Google من الإعدادات ← التكاملات للمزامنة التلقائية.",
"contacts": "أضف جهات اتصال مهمة — طبيب، مدرسة، طوارئ — للوصول السريع.",
"meals": "خطط وجباتك للأسبوع واربط الوصفات.",
"notes": "اضغط + لملاحظة جديدة. يتم البحث في الملاحظات بالنص الكامل.",
"shopping": "أضف عناصر واسحب للتحديد أو الحذف.",
"tasks": "اضغط + لإنشاء أول مهمة. اسحب البطاقة يساراً للحذف."
},
"documents": {
"title": "المستندات",
@@ -1063,6 +1091,14 @@
"selectedFileLabel": "المحدد: {{name}}"
},
"shortcuts": {
"goKitchen": "المطبخ"
"goKitchen": "المطبخ",
"goCal": "التقويم",
"goDash": "لوحة التحكم",
"goNotes": "الملاحظات",
"goShop": "قائمة التسوق",
"goTasks": "المهام",
"help": "اختصارات لوحة المفاتيح",
"new": "إنشاء إدخال جديد",
"search": "فتح البحث"
}
}
+42 -6
View File
@@ -199,7 +199,8 @@
"archivedToast": "Η εργασία αρχειοθετήθηκε.",
"kanbanArchived": "Αρχειοθετημένο",
"reminderNeedsDueDate": "Ορίστε ημερομηνία λήξης για να ενεργοποιήσετε τις υπενθυμίσεις.",
"emptyAction": "Δημιουργία εργασίας"
"emptyAction": "Δημιουργία εργασίας",
"navLabelOverdue": "Εργασίες, {{count}} εκπρόθεσμες"
},
"shopping": {
"title": "Αγορές",
@@ -378,7 +379,17 @@
"attachmentHint": "Attach a local image, PDF, or document. Images will be shown in the event popup.",
"attachmentFallback": "Attachment",
"attachmentReadError": "The attachment could not be read.",
"attachmentTooLarge": "Attachment may be at most 5 MB."
"attachmentTooLarge": "Attachment may be at most 5 MB.",
"colorBlue": "Μπλε",
"colorCoral": "Κοραλί",
"colorCyan": "Κυανό",
"colorGray": "Γκρι",
"colorGreen": "Πράσινο",
"colorOrange": "Πορτοκαλί",
"colorPurple": "Μοβ",
"colorRed": "Κόκκινο",
"colorSkyBlue": "Γαλάζιο",
"colorYellow": "Κίτρινο"
},
"notes": {
"title": "Σημειώσεις",
@@ -417,7 +428,15 @@
"formatCode": "Κώδικας",
"formatQuote": "Παράθεση",
"formatDivider": "Διαχωριστής",
"emptyAction": "Δημιουργία σημείωσης"
"emptyAction": "Δημιουργία σημείωσης",
"colorAmber": "Κεχριμπάρι",
"colorBlue": "Μπλε",
"colorGreen": "Πράσινο",
"colorOrange": "Πορτοκαλί",
"colorPurple": "Μοβ",
"colorTeal": "Πράσινο-μπλε",
"colorWhite": "Λευκό",
"colorYellow": "Κίτρινο"
},
"contacts": {
"title": "Επαφές",
@@ -951,7 +970,8 @@
"deleteConfirm": "Διαγραφή γενεθλίων για τον/την \"{{name}}\";",
"ageNoteToday": "Γίνεται {{age}} ετών σήμερα.",
"ageNoteTomorrow": "Γίνεται {{age}} ετών αύριο.",
"ageNoteDays": "Γίνεται {{age}} ετών σε {{days}} ημέρες."
"ageNoteDays": "Γίνεται {{age}} ετών σε {{days}} ημέρες.",
"photoOptional": "Προαιρετικό: μπορείτε να αποθηκεύσετε χωρίς φωτογραφία προφίλ."
},
"reminders": {
"sectionTitle": "Υπενθύμιση",
@@ -999,7 +1019,15 @@
"banner": "Offline reconnecting…"
},
"emptyHint": {
"recipes": "Δημιουργήστε συνταγές και συνδέστε τις με τον προγραμματισμό γευμάτων."
"recipes": "Δημιουργήστε συνταγές και συνδέστε τις με τον προγραμματισμό γευμάτων.",
"birthdays": "Προσθέστε γενέθλια — θα λάβετε υπενθύμιση εγκαίρως.",
"budget": "Δημιουργήστε κατηγορίες και καταγράψτε έσοδα και έξοδα.",
"calendar": "Συνδέστε το Google Calendar στις Ρυθμίσεις → Ενσωματώσεις για αυτόματο συγχρονισμό.",
"contacts": "Προσθέστε σημαντικές επαφές — γιατρός, σχολείο, έκτακτη ανάγκη — για γρήγορη πρόσβαση.",
"meals": "Σχεδιάστε γεύματα για την εβδομάδα και συνδέστε συνταγές.",
"notes": "Πατήστε + για νέα σημείωση. Οι σημειώσεις αναζητούνται σε πλήρες κείμενο.",
"shopping": "Προσθέστε αντικείμενα και σύρετε για επιλογή ή διαγραφή.",
"tasks": "Πατήστε + για να δημιουργήσετε την πρώτη σας εργασία. Σύρετε αριστερά για διαγραφή."
},
"documents": {
"title": "Έγγραφα",
@@ -1063,6 +1091,14 @@
"selectedFileLabel": "Επιλέχθηκε: {{name}}"
},
"shortcuts": {
"goKitchen": "Κουζίνα"
"goKitchen": "Κουζίνα",
"goCal": "Ημερολόγιο",
"goDash": "Πίνακας Ελέγχου",
"goNotes": "Σημειώσεις",
"goShop": "Λίστα Αγορών",
"goTasks": "Εργασίες",
"help": "Συντομεύσεις πληκτρολογίου",
"new": "Δημιουργία νέας εγγραφής",
"search": "Άνοιγμα αναζήτησης"
}
}
+22 -3
View File
@@ -199,7 +199,8 @@
"swipedDoneToast": "Marked as done.",
"swipedOpenToast": "Marked as open.",
"reminderNeedsDueDate": "Set a due date to enable task reminders.",
"emptyAction": "Create task"
"emptyAction": "Create task",
"navLabelOverdue": "Tasks, {{count}} overdue"
},
"shopping": {
"title": "Shopping",
@@ -378,7 +379,17 @@
"attachmentHint": "Attach a local image, PDF, or document. Images will be shown in the event popup.",
"attachmentFallback": "Attachment",
"attachmentReadError": "The attachment could not be read.",
"attachmentTooLarge": "Attachment may be at most 5 MB."
"attachmentTooLarge": "Attachment may be at most 5 MB.",
"colorBlue": "Blue",
"colorCoral": "Coral",
"colorCyan": "Cyan",
"colorGray": "Gray",
"colorGreen": "Green",
"colorOrange": "Orange",
"colorPurple": "Purple",
"colorRed": "Red",
"colorSkyBlue": "Sky Blue",
"colorYellow": "Yellow"
},
"notes": {
"title": "Board",
@@ -417,7 +428,15 @@
"formatCode": "Code",
"formatQuote": "Quote",
"formatDivider": "Divider",
"emptyAction": "Create note"
"emptyAction": "Create note",
"colorAmber": "Amber",
"colorBlue": "Blue",
"colorGreen": "Green",
"colorOrange": "Orange",
"colorPurple": "Purple",
"colorTeal": "Teal",
"colorWhite": "White",
"colorYellow": "Yellow"
},
"contacts": {
"title": "Contacts",
+42 -6
View File
@@ -199,7 +199,8 @@
"archivedToast": "Tarea archivada.",
"kanbanArchived": "Archivado",
"reminderNeedsDueDate": "Establece una fecha de vencimiento para activar los recordatorios de tareas.",
"emptyAction": "Crear tarea"
"emptyAction": "Crear tarea",
"navLabelOverdue": "Tareas, {{count}} vencidas"
},
"shopping": {
"title": "Compras",
@@ -378,7 +379,17 @@
"attachmentHint": "Attach a local image, PDF, or document. Images will be shown in the event popup.",
"attachmentFallback": "Attachment",
"attachmentReadError": "The attachment could not be read.",
"attachmentTooLarge": "Attachment may be at most 5 MB."
"attachmentTooLarge": "Attachment may be at most 5 MB.",
"colorBlue": "Azul",
"colorCoral": "Coral",
"colorCyan": "Cian",
"colorGray": "Gris",
"colorGreen": "Verde",
"colorOrange": "Naranja",
"colorPurple": "Morado",
"colorRed": "Rojo",
"colorSkyBlue": "Azul cielo",
"colorYellow": "Amarillo"
},
"notes": {
"title": "Notas",
@@ -417,7 +428,15 @@
"formatCode": "Código",
"formatQuote": "Cita",
"formatDivider": "Separador",
"emptyAction": "Crear nota"
"emptyAction": "Crear nota",
"colorAmber": "Ámbar",
"colorBlue": "Azul",
"colorGreen": "Verde",
"colorOrange": "Naranja",
"colorPurple": "Morado",
"colorTeal": "Verde azulado",
"colorWhite": "Blanco",
"colorYellow": "Amarillo"
},
"contacts": {
"title": "Contactos",
@@ -951,7 +970,8 @@
"deleteConfirm": "¿Eliminar el cumpleaños de \"{{name}}\"?",
"ageNoteToday": "Cumple {{age}} años hoy.",
"ageNoteTomorrow": "Cumple {{age}} años mañana.",
"ageNoteDays": "Cumplirá {{age}} años en {{days}} días."
"ageNoteDays": "Cumplirá {{age}} años en {{days}} días.",
"photoOptional": "Opcional: puedes guardar sin foto de perfil."
},
"reminders": {
"sectionTitle": "Recordatorio",
@@ -999,7 +1019,15 @@
"banner": "Offline reconnecting…"
},
"emptyHint": {
"recipes": "Crea recetas y vincúlalas con tu planificador de comidas."
"recipes": "Crea recetas y vincúlalas con tu planificador de comidas.",
"birthdays": "Registra cumpleaños — recibirás un recordatorio a tiempo.",
"budget": "Crea categorías y registra ingresos y gastos.",
"calendar": "Conecta Google Calendar en Ajustes → Integraciones para sincronización automática.",
"contacts": "Agrega contactos importantes — médico, escuela, emergencia — para acceso rápido.",
"meals": "Planifica comidas para la semana y vincula recetas.",
"notes": "Pulsa + para una nueva nota. Las notas se buscan en texto completo.",
"shopping": "Agrega artículos y desliza para marcar o eliminar.",
"tasks": "Pulsa + para crear tu primera tarea. Desliza una tarjeta a la izquierda para eliminar."
},
"documents": {
"title": "Documentos",
@@ -1063,6 +1091,14 @@
"selectedFileLabel": "Seleccionado: {{name}}"
},
"shortcuts": {
"goKitchen": "Cocina"
"goKitchen": "Cocina",
"goCal": "Calendario",
"goDash": "Panel",
"goNotes": "Notas",
"goShop": "Lista de compras",
"goTasks": "Tareas",
"help": "Atajos de teclado",
"new": "Crear nueva entrada",
"search": "Abrir búsqueda"
}
}
+42 -6
View File
@@ -199,7 +199,8 @@
"archivedToast": "Tâche archivée.",
"kanbanArchived": "Archivé",
"reminderNeedsDueDate": "Définissez une date d'échéance pour activer les rappels de tâche.",
"emptyAction": "Créer une tâche"
"emptyAction": "Créer une tâche",
"navLabelOverdue": "Tâches, {{count}} en retard"
},
"shopping": {
"title": "Courses",
@@ -378,7 +379,17 @@
"attachmentHint": "Attach a local image, PDF, or document. Images will be shown in the event popup.",
"attachmentFallback": "Attachment",
"attachmentReadError": "The attachment could not be read.",
"attachmentTooLarge": "Attachment may be at most 5 MB."
"attachmentTooLarge": "Attachment may be at most 5 MB.",
"colorBlue": "Bleu",
"colorCoral": "Corail",
"colorCyan": "Cyan",
"colorGray": "Gris",
"colorGreen": "Vert",
"colorOrange": "Orange",
"colorPurple": "Violet",
"colorRed": "Rouge",
"colorSkyBlue": "Bleu ciel",
"colorYellow": "Jaune"
},
"notes": {
"title": "Notes",
@@ -417,7 +428,15 @@
"formatCode": "Code",
"formatQuote": "Citation",
"formatDivider": "Séparateur",
"emptyAction": "Créer une note"
"emptyAction": "Créer une note",
"colorAmber": "Ambre",
"colorBlue": "Bleu",
"colorGreen": "Vert",
"colorOrange": "Orange",
"colorPurple": "Violet",
"colorTeal": "Sarcelle",
"colorWhite": "Blanc",
"colorYellow": "Jaune"
},
"contacts": {
"title": "Contacts",
@@ -951,7 +970,8 @@
"deleteConfirm": "Supprimer l'anniversaire de \"{{name}}\" ?",
"ageNoteToday": "Fête ses {{age}} ans aujourd'hui.",
"ageNoteTomorrow": "Fêtera ses {{age}} ans demain.",
"ageNoteDays": "Fêtera ses {{age}} ans dans {{days}} jours."
"ageNoteDays": "Fêtera ses {{age}} ans dans {{days}} jours.",
"photoOptional": "Optionnel : vous pouvez enregistrer sans photo de profil."
},
"reminders": {
"sectionTitle": "Rappel",
@@ -999,7 +1019,15 @@
"banner": "Offline reconnecting…"
},
"emptyHint": {
"recipes": "Créez des recettes et associez-les à votre planification des repas."
"recipes": "Créez des recettes et associez-les à votre planification des repas.",
"birthdays": "Ajoutez des anniversaires — vous recevrez un rappel à temps.",
"budget": "Créez des catégories et enregistrez revenus et dépenses.",
"calendar": "Connectez Google Agenda dans Paramètres → Intégrations pour une synchronisation automatique.",
"contacts": "Ajoutez des contacts importants — médecin, école, urgences — pour un accès rapide.",
"meals": "Planifiez les repas de la semaine et associez des recettes.",
"notes": "Appuyez sur + pour une nouvelle note. Les notes sont indexées en texte intégral.",
"shopping": "Ajoutez des articles et glissez pour cocher ou supprimer.",
"tasks": "Appuyez sur + pour créer votre première tâche. Glissez une carte à gauche pour supprimer."
},
"documents": {
"title": "Documents",
@@ -1063,6 +1091,14 @@
"selectedFileLabel": "Sélectionné : {{name}}"
},
"shortcuts": {
"goKitchen": "Cuisine"
"goKitchen": "Cuisine",
"goCal": "Calendrier",
"goDash": "Tableau de bord",
"goNotes": "Notes",
"goShop": "Liste de courses",
"goTasks": "Tâches",
"help": "Raccourcis clavier",
"new": "Créer une nouvelle entrée",
"search": "Ouvrir la recherche"
}
}
+42 -6
View File
@@ -199,7 +199,8 @@
"archivedToast": "कार्य संग्रहित किया गया।",
"kanbanArchived": "संग्रहित",
"reminderNeedsDueDate": "कार्य अनुस्मारक सक्षम करने के लिए एक नियत तारीख निर्धारित करें।",
"emptyAction": "कार्य बनाएं"
"emptyAction": "कार्य बनाएं",
"navLabelOverdue": "कार्य, {{count}} अतिदेय"
},
"shopping": {
"title": "खरीदारी",
@@ -378,7 +379,17 @@
"attachmentHint": "Attach a local image, PDF, or document. Images will be shown in the event popup.",
"attachmentFallback": "Attachment",
"attachmentReadError": "The attachment could not be read.",
"attachmentTooLarge": "Attachment may be at most 5 MB."
"attachmentTooLarge": "Attachment may be at most 5 MB.",
"colorBlue": "नीला",
"colorCoral": "कोरल",
"colorCyan": "सियान",
"colorGray": "ग्रे",
"colorGreen": "हरा",
"colorOrange": "नारंगी",
"colorPurple": "बैंगनी",
"colorRed": "लाल",
"colorSkyBlue": "आसमानी नीला",
"colorYellow": "पीला"
},
"notes": {
"title": "नोट बोर्ड",
@@ -417,7 +428,15 @@
"formatCode": "कोड",
"formatQuote": "उद्धरण",
"formatDivider": "विभाजक",
"emptyAction": "नोट बनाएं"
"emptyAction": "नोट बनाएं",
"colorAmber": "एम्बर",
"colorBlue": "नीला",
"colorGreen": "हरा",
"colorOrange": "नारंगी",
"colorPurple": "बैंगनी",
"colorTeal": "टील",
"colorWhite": "सफेद",
"colorYellow": "पीला"
},
"contacts": {
"title": "संपर्क",
@@ -951,7 +970,8 @@
"deleteConfirm": "\"{{name}}\" का जन्मदिन हटाएँ?",
"ageNoteToday": "आज {{age}} वर्ष का/की होगा/होगी।",
"ageNoteTomorrow": "कल {{age}} वर्ष का/की होगा/होगी।",
"ageNoteDays": "{{days}} दिनों में {{age}} वर्ष का/की होगा/होगी।"
"ageNoteDays": "{{days}} दिनों में {{age}} वर्ष का/की होगा/होगी।",
"photoOptional": "वैकल्पिक: आप प्रोफ़ाइल फ़ोटो के बिना भी सहेज सकते हैं।"
},
"reminders": {
"sectionTitle": "अनुस्मारक",
@@ -999,7 +1019,15 @@
"banner": "Offline reconnecting…"
},
"emptyHint": {
"recipes": "रेसिपी बनाएं और उन्हें अपने भोजन योजनाकार से जोड़ें।"
"recipes": "रेसिपी बनाएं और उन्हें अपने भोजन योजनाकार से जोड़ें।",
"birthdays": "जन्मदिन जोड़ें — आपको समय पर याद दिलाया जाएगा।",
"budget": "श्रेणियाँ बनाएं और आय व खर्चे दर्ज करें।",
"calendar": "स्वचालित सिंक के लिए सेटिंग → इंटीग्रेशन में Google Calendar कनेक्ट करें।",
"contacts": "महत्वपूर्ण संपर्क जोड़ें — डॉक्टर, स्कूल, आपातकाल — त्वरित पहुंच के लिए।",
"meals": "सप्ताह के लिए भोजन योजना बनाएं और व्यंजन जोड़ें।",
"notes": "+ दबाएं नई नोट के लिए। नोट्स पूर्ण टेक्स्ट में खोजे जाते हैं।",
"shopping": "आइटम जोड़ें और चिह्नित या हटाने के लिए स्वाइप करें।",
"tasks": "+ दबाएं अपना पहला कार्य बनाने के लिए। हटाने के लिए कार्ड को बाईं ओर स्वाइप करें।"
},
"documents": {
"title": "दस्तावेज़",
@@ -1063,6 +1091,14 @@
"selectedFileLabel": "चयनित: {{name}}"
},
"shortcuts": {
"goKitchen": "रसोई"
"goKitchen": "रसोई",
"goCal": "कैलेंडर",
"goDash": "डैशबोर्ड",
"goNotes": "नोट्स",
"goShop": "खरीदारी सूची",
"goTasks": "कार्य",
"help": "कीबोर्ड शॉर्टकट",
"new": "नई प्रविष्टि बनाएं",
"search": "खोज खोलें"
}
}
+42 -6
View File
@@ -199,7 +199,8 @@
"archivedToast": "Attività archiviata.",
"kanbanArchived": "Archiviato",
"reminderNeedsDueDate": "Imposta una data di scadenza per abilitare i promemoria delle attività.",
"emptyAction": "Crea attività"
"emptyAction": "Crea attività",
"navLabelOverdue": "Attività, {{count}} in ritardo"
},
"shopping": {
"title": "Spesa",
@@ -378,7 +379,17 @@
"attachmentHint": "Attach a local image, PDF, or document. Images will be shown in the event popup.",
"attachmentFallback": "Attachment",
"attachmentReadError": "The attachment could not be read.",
"attachmentTooLarge": "Attachment may be at most 5 MB."
"attachmentTooLarge": "Attachment may be at most 5 MB.",
"colorBlue": "Blu",
"colorCoral": "Corallo",
"colorCyan": "Ciano",
"colorGray": "Grigio",
"colorGreen": "Verde",
"colorOrange": "Arancione",
"colorPurple": "Viola",
"colorRed": "Rosso",
"colorSkyBlue": "Azzurro",
"colorYellow": "Giallo"
},
"notes": {
"title": "Bacheca",
@@ -417,7 +428,15 @@
"formatCode": "Codice",
"formatQuote": "Citazione",
"formatDivider": "Divisore",
"emptyAction": "Crea nota"
"emptyAction": "Crea nota",
"colorAmber": "Ambra",
"colorBlue": "Blu",
"colorGreen": "Verde",
"colorOrange": "Arancione",
"colorPurple": "Viola",
"colorTeal": "Verde acqua",
"colorWhite": "Bianco",
"colorYellow": "Giallo"
},
"contacts": {
"title": "Contatti",
@@ -951,7 +970,8 @@
"deleteConfirm": "Eliminare il compleanno di \"{{name}}\"?",
"ageNoteToday": "Compie {{age}} anni oggi.",
"ageNoteTomorrow": "Compirà {{age}} anni domani.",
"ageNoteDays": "Compirà {{age}} anni tra {{days}} giorni."
"ageNoteDays": "Compirà {{age}} anni tra {{days}} giorni.",
"photoOptional": "Facoltativo: puoi salvare anche senza foto del profilo."
},
"reminders": {
"sectionTitle": "Promemoria",
@@ -999,7 +1019,15 @@
"banner": "Offline reconnecting…"
},
"emptyHint": {
"recipes": "Crea ricette e collegale al tuo piano pasti."
"recipes": "Crea ricette e collegale al tuo piano pasti.",
"birthdays": "Aggiungi compleanni — riceverai un promemoria in anticipo.",
"budget": "Crea categorie e registra entrate e uscite.",
"calendar": "Collega Google Calendar in Impostazioni → Integrazioni per la sincronizzazione automatica.",
"contacts": "Aggiungi contatti importanti — medico, scuola, emergenza — per accesso rapido.",
"meals": "Pianifica i pasti della settimana e collega le ricette.",
"notes": "Tocca + per una nuova nota. Le note vengono cercate nel testo completo.",
"shopping": "Aggiungi articoli e scorri per contrassegnare o eliminare.",
"tasks": "Tocca + per creare il tuo primo compito. Scorri una scheda a sinistra per eliminare."
},
"documents": {
"title": "Documenti",
@@ -1063,6 +1091,14 @@
"selectedFileLabel": "Selezionato: {{name}}"
},
"shortcuts": {
"goKitchen": "Cucina"
"goKitchen": "Cucina",
"goCal": "Calendario",
"goDash": "Dashboard",
"goNotes": "Note",
"goShop": "Lista della spesa",
"goTasks": "Attività",
"help": "Scorciatoie da tastiera",
"new": "Crea nuova voce",
"search": "Apri ricerca"
}
}
+42 -6
View File
@@ -199,7 +199,8 @@
"archivedToast": "タスクをアーカイブしました。",
"kanbanArchived": "アーカイブ済み",
"reminderNeedsDueDate": "タスクのリマインダーを有効にするには期日を設定してください。",
"emptyAction": "タスクを作成"
"emptyAction": "タスクを作成",
"navLabelOverdue": "タスク、{{count}}件期限超過"
},
"shopping": {
"title": "買い物",
@@ -378,7 +379,17 @@
"attachmentHint": "Attach a local image, PDF, or document. Images will be shown in the event popup.",
"attachmentFallback": "Attachment",
"attachmentReadError": "The attachment could not be read.",
"attachmentTooLarge": "Attachment may be at most 5 MB."
"attachmentTooLarge": "Attachment may be at most 5 MB.",
"colorBlue": "青",
"colorCoral": "コーラル",
"colorCyan": "シアン",
"colorGray": "グレー",
"colorGreen": "緑",
"colorOrange": "オレンジ",
"colorPurple": "紫",
"colorRed": "赤",
"colorSkyBlue": "空色",
"colorYellow": "黄"
},
"notes": {
"title": "メモボード",
@@ -417,7 +428,15 @@
"formatCode": "コード",
"formatQuote": "引用",
"formatDivider": "区切り線",
"emptyAction": "メモを作成"
"emptyAction": "メモを作成",
"colorAmber": "アンバー",
"colorBlue": "青",
"colorGreen": "緑",
"colorOrange": "オレンジ",
"colorPurple": "紫",
"colorTeal": "ティール",
"colorWhite": "白",
"colorYellow": "黄"
},
"contacts": {
"title": "連絡先",
@@ -951,7 +970,8 @@
"deleteConfirm": "「{{name}}」の誕生日を削除しますか?",
"ageNoteToday": "今日で{{age}}歳になります。",
"ageNoteTomorrow": "明日で{{age}}歳になります。",
"ageNoteDays": "{{days}}日後に{{age}}歳になります。"
"ageNoteDays": "{{days}}日後に{{age}}歳になります。",
"photoOptional": "任意: プロフィール写真なしでも保存できます。"
},
"reminders": {
"sectionTitle": "リマインダー",
@@ -999,7 +1019,15 @@
"banner": "Offline reconnecting…"
},
"emptyHint": {
"recipes": "レシピを作成して、食事プランに関連付けましょう。"
"recipes": "レシピを作成して、食事プランに関連付けましょう。",
"birthdays": "誕生日を追加してください — 適切なタイミングでリマインダーが届きます。",
"budget": "カテゴリを作成して収入と支出を記録してください。",
"calendar": "設定 → 連携でGoogle カレンダーを接続すると自動同期ができます。",
"contacts": "重要な連絡先(医師、学校、緊急連絡先)を追加してすばやくアクセス。",
"meals": "週の食事を計画してレシピを紐づけましょう。",
"notes": "+ をタップして新しいメモを作成。メモは全文検索されます。",
"shopping": "アイテムを追加してスワイプでチェックや削除。",
"tasks": "+ をタップして最初のタスクを作成。カードを左にスワイプで削除。"
},
"documents": {
"title": "書類",
@@ -1063,6 +1091,14 @@
"selectedFileLabel": "選択済み: {{name}}"
},
"shortcuts": {
"goKitchen": "キッチン"
"goKitchen": "キッチン",
"goCal": "カレンダー",
"goDash": "ダッシュボード",
"goNotes": "メモ",
"goShop": "買い物リスト",
"goTasks": "タスク",
"help": "キーボードショートカット",
"new": "新規エントリを作成",
"search": "検索を開く"
}
}
+41 -6
View File
@@ -199,7 +199,8 @@
"swipedDoneToast": "Marcado como concluído.",
"swipedOpenToast": "Marcado como aberto.",
"reminderNeedsDueDate": "Defina uma data de vencimento para habilitar lembretes da tarefa.",
"emptyAction": "Criar tarefa"
"emptyAction": "Criar tarefa",
"navLabelOverdue": "Tarefas, {{count}} atrasadas"
},
"shopping": {
"title": "Compras",
@@ -378,7 +379,17 @@
"attachmentHint": "Anexe uma imagem, PDF ou documento local. Imagens aparecem no pop-up do evento.",
"attachmentFallback": "Anexo",
"attachmentReadError": "Não foi possível ler o anexo.",
"attachmentTooLarge": "O anexo pode ter no máximo 5 MB."
"attachmentTooLarge": "O anexo pode ter no máximo 5 MB.",
"colorBlue": "Azul",
"colorCoral": "Coral",
"colorCyan": "Ciano",
"colorGray": "Cinza",
"colorGreen": "Verde",
"colorOrange": "Laranja",
"colorPurple": "Roxo",
"colorRed": "Vermelho",
"colorSkyBlue": "Azul céu",
"colorYellow": "Amarelo"
},
"notes": {
"title": "Quadro de notas",
@@ -417,7 +428,15 @@
"formatCode": "Código",
"formatQuote": "Citação",
"formatDivider": "Divisor",
"emptyAction": "Criar nota"
"emptyAction": "Criar nota",
"colorAmber": "Âmbar",
"colorBlue": "Azul",
"colorGreen": "Verde",
"colorOrange": "Laranja",
"colorPurple": "Roxo",
"colorTeal": "Verde-azulado",
"colorWhite": "Branco",
"colorYellow": "Amarelo"
},
"contacts": {
"title": "Contatos",
@@ -940,7 +959,7 @@
"nameLabel": "Nome",
"birthDateLabel": "Data de nascimento",
"photoLabel": "Foto de perfil",
"photoOptional": "Opcional: você também pode salvar sem foto de perfil.",
"photoOptional": "Opcional: você pode salvar sem foto de perfil.",
"removePhoto": "Remover foto",
"notesLabel": "Notas",
"notesPlaceholder": "Ideias de presente, bolo favorito, notas da família…",
@@ -1000,7 +1019,15 @@
"banner": "Offline reconnecting…"
},
"emptyHint": {
"recipes": "Crie receitas e vincule-as ao seu planejador de refeições."
"recipes": "Crie receitas e vincule-as ao seu planejador de refeições.",
"birthdays": "Adicione aniversários — você receberá um lembrete a tempo.",
"budget": "Crie categorias e registre receitas e despesas.",
"calendar": "Conecte o Google Agenda em Configurações → Integrações para sincronização automática.",
"contacts": "Adicione contatos importantes — médico, escola, emergência — para acesso rápido.",
"meals": "Planeje as refeições da semana e vincule receitas.",
"notes": "Toque em + para uma nova nota. As notas são pesquisadas em texto completo.",
"shopping": "Adicione itens e deslize para marcar ou excluir.",
"tasks": "Toque em + para criar sua primeira tarefa. Deslize um cartão para a esquerda para excluir."
},
"documents": {
"title": "Documentos",
@@ -1064,6 +1091,14 @@
"selectedFileLabel": "Selecionado: {{name}}"
},
"shortcuts": {
"goKitchen": "Cozinha"
"goKitchen": "Cozinha",
"goCal": "Calendário",
"goDash": "Painel",
"goNotes": "Notas",
"goShop": "Lista de compras",
"goTasks": "Tarefas",
"help": "Atalhos de teclado",
"new": "Criar nova entrada",
"search": "Abrir pesquisa"
}
}
+42 -6
View File
@@ -199,7 +199,8 @@
"archivedToast": "Задача архивирована.",
"kanbanArchived": "Архивировано",
"reminderNeedsDueDate": "Установите срок выполнения, чтобы включить напоминания о задаче.",
"emptyAction": "Создать задачу"
"emptyAction": "Создать задачу",
"navLabelOverdue": "Задачи, {{count}} просрочено"
},
"shopping": {
"title": "Покупки",
@@ -378,7 +379,17 @@
"attachmentHint": "Attach a local image, PDF, or document. Images will be shown in the event popup.",
"attachmentFallback": "Attachment",
"attachmentReadError": "The attachment could not be read.",
"attachmentTooLarge": "Attachment may be at most 5 MB."
"attachmentTooLarge": "Attachment may be at most 5 MB.",
"colorBlue": "Синий",
"colorCoral": "Коралловый",
"colorCyan": "Голубой",
"colorGray": "Серый",
"colorGreen": "Зелёный",
"colorOrange": "Оранжевый",
"colorPurple": "Фиолетовый",
"colorRed": "Красный",
"colorSkyBlue": "Небесно-голубой",
"colorYellow": "Жёлтый"
},
"notes": {
"title": "Заметки",
@@ -417,7 +428,15 @@
"formatCode": "Код",
"formatQuote": "Цитата",
"formatDivider": "Разделитель",
"emptyAction": "Создать заметку"
"emptyAction": "Создать заметку",
"colorAmber": "Янтарный",
"colorBlue": "Синий",
"colorGreen": "Зелёный",
"colorOrange": "Оранжевый",
"colorPurple": "Фиолетовый",
"colorTeal": "Бирюзовый",
"colorWhite": "Белый",
"colorYellow": "Жёлтый"
},
"contacts": {
"title": "Контакты",
@@ -951,7 +970,8 @@
"deleteConfirm": "Удалить день рождения \"{{name}}\"?",
"ageNoteToday": "Исполняется {{age}} сегодня.",
"ageNoteTomorrow": "Исполнится {{age}} завтра.",
"ageNoteDays": "Исполнится {{age}} через {{days}} дн."
"ageNoteDays": "Исполнится {{age}} через {{days}} дн.",
"photoOptional": "Необязательно: можно сохранить без фото профиля."
},
"reminders": {
"sectionTitle": "Напоминание",
@@ -999,7 +1019,15 @@
"banner": "Offline reconnecting…"
},
"emptyHint": {
"recipes": "Создавайте рецепты и связывайте их с вашим планом питания."
"recipes": "Создавайте рецепты и связывайте их с вашим планом питания.",
"birthdays": "Добавьте дни рождения — вы получите напоминание вовремя.",
"budget": "Создайте категории и фиксируйте доходы и расходы.",
"calendar": "Подключите Google Календарь в Настройках → Интеграции для автоматической синхронизации.",
"contacts": "Добавьте важные контакты — врач, школа, экстренная помощь — для быстрого доступа.",
"meals": "Планируйте питание на неделю и прикрепляйте рецепты.",
"notes": "Нажмите + для новой заметки. Заметки ищутся по полному тексту.",
"shopping": "Добавьте товары и смахните для отметки или удаления.",
"tasks": "Нажмите + для создания первой задачи. Смахните карточку влево для удаления."
},
"documents": {
"title": "Документы",
@@ -1063,6 +1091,14 @@
"selectedFileLabel": "Выбрано: {{name}}"
},
"shortcuts": {
"goKitchen": "Кухня"
"goKitchen": "Кухня",
"goCal": "Календарь",
"goDash": "Дашборд",
"goNotes": "Заметки",
"goShop": "Список покупок",
"goTasks": "Задачи",
"help": "Горячие клавиши",
"new": "Создать новую запись",
"search": "Открыть поиск"
}
}
+131 -95
View File
@@ -199,7 +199,8 @@
"archivedToast": "Uppgiften arkiverades.",
"kanbanArchived": "Arkiverad",
"reminderNeedsDueDate": "Ange ett förfallodatum för att aktivera påminnelser för uppgiften.",
"emptyAction": "Skapa uppgift"
"emptyAction": "Skapa uppgift",
"navLabelOverdue": "Uppgifter, {{count}} försenade"
},
"shopping": {
"title": "Shopping",
@@ -295,7 +296,7 @@
"savedRecipePlaceholder": "Välj recept",
"saveAsRecipe": "Spara som recept",
"recipeScaleLabel": "Skala ingredienser",
"deletedToast": "Meal deleted"
"deletedToast": "Måltid borttagen"
},
"calendar": {
"title": "Kalender",
@@ -372,13 +373,23 @@
"reset": "Återställ till original",
"resetToast": "Ändringar återställda."
},
"iconLabel": "Icon",
"invalidDate": "Use a valid date in the selected date format.",
"attachmentLabel": "Attachment",
"attachmentHint": "Attach a local image, PDF, or document. Images will be shown in the event popup.",
"attachmentFallback": "Attachment",
"attachmentReadError": "The attachment could not be read.",
"attachmentTooLarge": "Attachment may be at most 5 MB."
"iconLabel": "Ikon",
"invalidDate": "Använd ett giltigt datum i det valda datumformatet.",
"attachmentLabel": "Fastsättning",
"attachmentHint": "Bifoga en lokal bild, PDF eller dokument. Bilder kommer att visas i evenemangets popup.",
"attachmentFallback": "Fastsättning",
"attachmentReadError": "Bilagan kunde inte läsas.",
"attachmentTooLarge": "Bilaga får vara högst 5 MB.",
"colorBlue": "Blå",
"colorGreen": "Grön",
"colorOrange": "Orange",
"colorRed": "Röd",
"colorPurple": "Lila",
"colorCoral": "Korall",
"colorSkyBlue": "Himmelsblå",
"colorYellow": "Gul",
"colorGray": "Grå",
"colorCyan": "Cyan"
},
"notes": {
"title": "Anteckningar",
@@ -417,7 +428,15 @@
"formatCode": "Kod",
"formatQuote": "Citationstecken",
"formatDivider": "Delare",
"emptyAction": "Skapa anteckning"
"emptyAction": "Skapa anteckning",
"colorYellow": "Gul",
"colorAmber": "Amber",
"colorGreen": "Grön",
"colorTeal": "Teal",
"colorBlue": "Blå",
"colorPurple": "Lila",
"colorOrange": "Orange",
"colorWhite": "Vit"
},
"contacts": {
"title": "Kontakter",
@@ -524,53 +543,53 @@
"catGovernmentBenefits": "Socialförmåner",
"catOtherIncome": "Övrig inkomst",
"loadingIndicator": "Laddar…",
"subcategoryLabel": "Subcategory",
"catHousing": "Housing / Home",
"subcategoryLabel": "Underkategori",
"catHousing": "Bostad / Hem",
"catTransport": "Transport",
"catPersonalHealth": "Personal Care / Health",
"catShoppingClothing": "Shopping and Clothing",
"catFinancialOther": "Financial Services and Other",
"subcatRentMortgage": "Rent / Mortgage",
"subcatCondominium": "Condominium fees",
"subcatUtilities": "Electricity / Water / Gas",
"subcatInternetTvPhone": "Internet / TV / Phone",
"subcatRenovationMaintenance": "Renovation / Maintenance",
"subcatCleaning": "Cleaning",
"subcatGroceries": "Groceries",
"subcatRestaurantsBars": "Restaurants / Bars",
"subcatSnacksFastFood": "Snacks / Fast Food",
"subcatBakery": "Bakery",
"subcatFuel": "Fuel",
"subcatParkingTolls": "Parking / Tolls",
"subcatPublicTransport": "Public transport",
"subcatAppsTaxi": "Apps / Taxi",
"subcatMaintenanceInsurance": "Maintenance / Insurance",
"subcatPharmacy": "Pharmacy",
"subcatHealthInsurance": "Health insurance",
"subcatGymSports": "Gym / Sports",
"subcatBeautyCosmetics": "Beauty / Cosmetics",
"subcatTravel": "Travel",
"catPersonalHealth": "Personlig vård / Hälsa",
"catShoppingClothing": "Shopping och kläder",
"catFinancialOther": "Finansiella tjänster och annat",
"subcatRentMortgage": "Hyra / inteckning",
"subcatCondominium": "Bostadsrättsavgifter",
"subcatUtilities": "El / vatten / gas",
"subcatInternetTvPhone": "Internet / TV / Telefon",
"subcatRenovationMaintenance": "Renovering/underhåll",
"subcatCleaning": "Rengöring",
"subcatGroceries": "Specerier",
"subcatRestaurantsBars": "Restauranger/barer",
"subcatSnacksFastFood": "Snacks / Snabbmat",
"subcatBakery": "Bageri",
"subcatFuel": "Bränsle",
"subcatParkingTolls": "Parkering / vägtullar",
"subcatPublicTransport": "Kollektivtrafik",
"subcatAppsTaxi": "Appar / Taxi",
"subcatMaintenanceInsurance": "Underhåll / Försäkring",
"subcatPharmacy": "Apotek",
"subcatHealthInsurance": "Sjukförsäkring",
"subcatGymSports": "Gym / Sport",
"subcatBeautyCosmetics": "Skönhet / Kosmetika",
"subcatTravel": "Resa",
"subcatStreaming": "Streaming",
"subcatEvents": "Events",
"subcatHobbies": "Hobbies",
"subcatClothesShoes": "Clothes / Shoes",
"subcatElectronics": "Electronics",
"subcatGifts": "Gifts",
"subcatCoursesCollege": "Courses / College",
"subcatSchoolSupplies": "School supplies",
"subcatLanguages": "Languages",
"subcatEvents": "Händelser",
"subcatHobbies": "Hobbyer",
"subcatClothesShoes": "Kläder / skor",
"subcatElectronics": "Elektronik",
"subcatGifts": "Gåvor",
"subcatCoursesCollege": "Kurser / College",
"subcatSchoolSupplies": "Skolmaterial",
"subcatLanguages": "Språk",
"subcatLoansInterest": "Lån / Ränta",
"subcatBankFees": "Bank fees",
"subcatInsuranceOther": "Insurance",
"subcatInvestments": "Investments",
"subcatTaxes": "Taxes",
"metaLoadError": "Budget categories could not be loaded.",
"addCategory": "+ category",
"addSubcategory": "+ subcategory",
"newCategoryPrompt": "Name of the new category:",
"newSubcategoryPrompt": "Name of the new subcategory:",
"categoryAddedToast": "Category added.",
"subcategoryAddedToast": "Subcategory added.",
"subcatBankFees": "Bankavgifter",
"subcatInsuranceOther": "Försäkring",
"subcatInvestments": "Investeringar",
"subcatTaxes": "Skatter",
"metaLoadError": "Budgetkategorier kunde inte läsas in.",
"addCategory": "+ kategori",
"addSubcategory": "+ underkategori",
"newCategoryPrompt": "Namn på den nya kategorin:",
"newSubcategoryPrompt": "Namn på den nya underkategorin:",
"categoryAddedToast": "Kategori tillagd.",
"subcategoryAddedToast": "Underkategori har lagts till.",
"emptyAction": "Lägg till post",
"loansTitle": "Lån",
"loansSummary": "{{count}} aktiva · {{amount}} kvar",
@@ -765,28 +784,28 @@
"currencyLabel": "Valuta",
"currencyHint": "Ställer in valutan som används i hela budgetavsnittet.",
"currencySaved": "Valuta sparad.",
"apiTokensTitle": "API Tokens",
"apiTokensTitle": "API-tokens",
"apiTokensCardTitle": "Access Tokens",
"apiTokensHint": "Create API tokens for external integrations. The full token is shown only once after creation.",
"apiTokenNameLabel": "Token name",
"apiTokenExpiresLabel": "Expiration date",
"apiTokenExpiresHint": "Leave empty to create a token without expiration.",
"apiTokenCreatedLabel": "New API token",
"apiTokenCreatedHint": "Store this token securely. It cannot be shown again.",
"apiTokenCreate": "Create token",
"apiTokenInvalidExpiration": "Please enter a valid expiration date.",
"apiTokenCreatedToast": "API token created.",
"apiTokenRevokedToast": "API token revoked.",
"apiTokenRevokeConfirm": "Revoke API token \"{{name}}\"?",
"apiTokenRevoke": "Revoke token",
"apiTokenRevoked": "Revoked",
"apiTokenExpired": "Expired",
"apiTokenActive": "Active",
"apiTokensHint": "Skapa API-tokens för externa integrationer. Den fullständiga token visas endast en gång efter skapandet.",
"apiTokenNameLabel": "Tokennamn",
"apiTokenExpiresLabel": "Utgångsdatum",
"apiTokenExpiresHint": "Lämna tomt för att skapa en token utan utgång.",
"apiTokenCreatedLabel": "Ny API-token",
"apiTokenCreatedHint": "Förvara denna token säkert. Den kan inte visas igen.",
"apiTokenCreate": "Skapa token",
"apiTokenInvalidExpiration": "Ange ett giltigt utgångsdatum.",
"apiTokenCreatedToast": "API-token skapad.",
"apiTokenRevokedToast": "API-token har återkallats.",
"apiTokenRevokeConfirm": "Återkalla API-token \"{{name}}\"?",
"apiTokenRevoke": "Återkalla token",
"apiTokenRevoked": "Återkallad",
"apiTokenExpired": "Utgått",
"apiTokenActive": "Aktiv",
"apiTokenPrefix": "Prefix",
"apiTokenExpires": "Expires",
"apiTokenNeverExpires": "No expiration",
"apiTokenLastUsed": "Last used",
"apiTokenNeverUsed": "Never used",
"apiTokenExpires": "Upphör att gälla",
"apiTokenNeverExpires": "Inget utgångsdatum",
"apiTokenLastUsed": "Senast använd",
"apiTokenNeverUsed": "Aldrig använd",
"ics": {
"title": "ICS-prenumerationer",
"add": "Lägg till prenumeration",
@@ -842,7 +861,7 @@
"backupRestoring": "Återställer...",
"backupRestoredToast": "Databasen återställd. Laddar om...",
"backupCliTitle": "CLI / Docker Compose-återställning",
"backupCliHint": "For operational restores, stop the app, mount the backup in a temporary container and replace the database file.",
"backupCliHint": "För driftåterställningar, stoppa appen, montera säkerhetskopian i en tillfällig container och byt ut databasfilen.",
"backupCliBackupHint": "Du kan också skapa en backup direkt med Docker Compose:"
},
"login": {
@@ -951,7 +970,8 @@
"deleteConfirm": "Ta bort födelsedagen för \"{{name}}\"?",
"ageNoteToday": "Fyller {{age}} år idag.",
"ageNoteTomorrow": "Fyller {{age}} år i morgon.",
"ageNoteDays": "Fyller {{age}} år om {{days}} dagar."
"ageNoteDays": "Fyller {{age}} år om {{days}} dagar.",
"photoOptional": "Valfritt: Du kan spara utan profilbild."
},
"reminders": {
"sectionTitle": "Påminnelse",
@@ -973,33 +993,41 @@
"notificationEnabled": "Notiser aktiva",
"notificationDenied": "Notiser blockerade",
"notificationHint": "Få notiser även när appen är öppen.",
"offset2days": "2 days before",
"offset1week": "1 week before",
"offset2weeks": "2 weeks before",
"offsetCustom": "Custom...",
"customAmountLabel": "Number",
"customUnitLabel": "Unit",
"customMinutes": "Minutes",
"customHours": "Hours",
"customDays": "Days",
"customWeeks": "Weeks"
"offset2days": "2 dagar innan",
"offset1week": "1 vecka innan",
"offset2weeks": "2 veckor innan",
"offsetCustom": "Anpassad...",
"customAmountLabel": "Antal",
"customUnitLabel": "Enhet",
"customMinutes": "Minuter",
"customHours": "Timmar",
"customDays": "dagar",
"customWeeks": "Veckor"
},
"onboarding": {
"step1Title": "Welcome to Oikos",
"step1Body": "Your personal family planner. Tasks, calendar, shopping and more all in one place.",
"step1Title": "Välkommen till Oikos",
"step1Body": "Din personliga familjeplanerare. Uppgifter, kalender, shopping och mer allt på ett ställe.",
"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.",
"step2Body": "Nere på skärmen når du direkt Översikt 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"
"next": "Nästa",
"done": "Kom igång",
"skip": "Skippa"
},
"offline": {
"banner": "Offline reconnecting…"
"banner": "Offline återansluter…"
},
"emptyHint": {
"recipes": "Skapa recept och koppla dem till din måltidsplanering."
"recipes": "Skapa recept och koppla dem till din måltidsplanering.",
"tasks": "Tryck på + för att skapa din första uppgift. Svep ett kort åt vänster för att ta bort.",
"calendar": "Koppla Google Kalender under Inställningar → Integrationer för automatisk synkronisering.",
"shopping": "Lägg till artiklar och svep för att markera eller ta bort.",
"notes": "Tryck på + för en ny anteckning. Anteckningar söks i fulltext.",
"contacts": "Lägg till viktiga kontakter — läkare, skola, nödfall — för snabb åtkomst.",
"budget": "Skapa kategorier och registrera inkomster och utgifter.",
"meals": "Planera måltider för veckan och koppla recept.",
"birthdays": "Lägg in födelsedagar — du får en påminnelse i tid."
},
"documents": {
"title": "Dokument",
@@ -1063,6 +1091,14 @@
"selectedFileLabel": "Vald: {{name}}"
},
"shortcuts": {
"goKitchen": "Kök"
"goKitchen": "Kök",
"search": "Öppna sökning",
"new": "Skapa ny post",
"help": "Tangentbordsgenvägar",
"goDash": "Översikt",
"goTasks": "Uppgifter",
"goCal": "Kalender",
"goShop": "Inköpslista",
"goNotes": "Anteckningar"
}
}
+42 -6
View File
@@ -199,7 +199,8 @@
"archivedToast": "Görev arşivlendi.",
"kanbanArchived": "Arşivlenmiş",
"reminderNeedsDueDate": "Görev hatırlatıcılarını etkinleştirmek için bir son tarih belirleyin.",
"emptyAction": "Görev oluştur"
"emptyAction": "Görev oluştur",
"navLabelOverdue": "Görevler, {{count}} gecikmiş"
},
"shopping": {
"title": "Alışveriş",
@@ -378,7 +379,17 @@
"attachmentHint": "Attach a local image, PDF, or document. Images will be shown in the event popup.",
"attachmentFallback": "Attachment",
"attachmentReadError": "The attachment could not be read.",
"attachmentTooLarge": "Attachment may be at most 5 MB."
"attachmentTooLarge": "Attachment may be at most 5 MB.",
"colorBlue": "Mavi",
"colorCoral": "Mercan",
"colorCyan": "Camgöbeği",
"colorGray": "Gri",
"colorGreen": "Yeşil",
"colorOrange": "Turuncu",
"colorPurple": "Mor",
"colorRed": "Kırmızı",
"colorSkyBlue": "Gökyüzü mavisi",
"colorYellow": "Sarı"
},
"notes": {
"title": "Notlar",
@@ -417,7 +428,15 @@
"formatCode": "Kod",
"formatQuote": "Alıntı",
"formatDivider": "Ayırıcı",
"emptyAction": "Not oluştur"
"emptyAction": "Not oluştur",
"colorAmber": "Amber",
"colorBlue": "Mavi",
"colorGreen": "Yeşil",
"colorOrange": "Turuncu",
"colorPurple": "Mor",
"colorTeal": "Teal",
"colorWhite": "Beyaz",
"colorYellow": "Sarı"
},
"contacts": {
"title": "Kişiler",
@@ -951,7 +970,8 @@
"deleteConfirm": "\"{{name}}\" için doğum günü silinsin mi?",
"ageNoteToday": "Bugün {{age}} yaşına giriyor.",
"ageNoteTomorrow": "Yarın {{age}} yaşına giriyor.",
"ageNoteDays": "{{days}} gün içinde {{age}} yaşına girecek."
"ageNoteDays": "{{days}} gün içinde {{age}} yaşına girecek.",
"photoOptional": "İsteğe bağlı: Profil fotoğrafı olmadan da kaydedebilirsiniz."
},
"reminders": {
"sectionTitle": "Hatırlatıcı",
@@ -999,7 +1019,15 @@
"banner": "Offline reconnecting…"
},
"emptyHint": {
"recipes": "Tarifler oluşturun ve yemek planlayıcınıza bağlayın."
"recipes": "Tarifler oluşturun ve yemek planlayıcınıza bağlayın.",
"birthdays": "Doğum günleri ekleyin — zamanında hatırlatma alacaksınız.",
"budget": "Kategoriler oluşturun ve gelir ile giderleri kaydedin.",
"calendar": "Otomatik senkronizasyon için Ayarlar → Entegrasyonlar'dan Google Takvim'i bağlayın.",
"contacts": "Önemli kişileri ekleyin — doktor, okul, acil durum — hızlı erişim için.",
"meals": "Haftalık öğünleri planlayın ve tarifleri bağlayın.",
"notes": "Yeni not için + tuşuna dokunun. Notlar tam metin olarak aranır.",
"shopping": "Öğeleri ekleyin ve işaretlemek ya da silmek için kaydırın.",
"tasks": "İlk görevinizi oluşturmak için + tuşuna dokunun. Silmek için kartı sola kaydırın."
},
"documents": {
"title": "Belgeler",
@@ -1063,6 +1091,14 @@
"selectedFileLabel": "Seçildi: {{name}}"
},
"shortcuts": {
"goKitchen": "Mutfak"
"goKitchen": "Mutfak",
"goCal": "Takvim",
"goDash": "Pano",
"goNotes": "Notlar",
"goShop": "Alışveriş listesi",
"goTasks": "Görevler",
"help": "Klavye kısayolları",
"new": "Yeni giriş oluştur",
"search": "Aramayı aç"
}
}
+33 -5
View File
@@ -199,7 +199,8 @@
"archivedToast": "Завдання архівовано.",
"kanbanArchived": "Архівовано",
"reminderNeedsDueDate": "Встановіть дату виконання, щоб увімкнути нагадування про завдання.",
"emptyAction": "Створити завдання"
"emptyAction": "Створити завдання",
"navLabelOverdue": "Завдання, {{count}} прострочено"
},
"shopping": {
"title": "Покупки",
@@ -378,7 +379,17 @@
"attachmentHint": "Attach a local image, PDF, or document. Images will be shown in the event popup.",
"attachmentFallback": "Attachment",
"attachmentReadError": "The attachment could not be read.",
"attachmentTooLarge": "Attachment may be at most 5 MB."
"attachmentTooLarge": "Attachment may be at most 5 MB.",
"colorBlue": "Синій",
"colorCoral": "Коралевий",
"colorCyan": "Блакитний",
"colorGray": "Сірий",
"colorGreen": "Зелений",
"colorOrange": "Помаранчевий",
"colorPurple": "Фіолетовий",
"colorRed": "Червоний",
"colorSkyBlue": "Небесно-блакитний",
"colorYellow": "Жовтий"
},
"notes": {
"title": "Нотатки",
@@ -417,7 +428,15 @@
"formatCode": "Код",
"formatQuote": "Цитата",
"formatDivider": "Розділювач",
"emptyAction": "Створити нотатку"
"emptyAction": "Створити нотатку",
"colorAmber": "Бурштиновий",
"colorBlue": "Синій",
"colorGreen": "Зелений",
"colorOrange": "Помаранчевий",
"colorPurple": "Фіолетовий",
"colorTeal": "Бірюзовий",
"colorWhite": "Білий",
"colorYellow": "Жовтий"
},
"contacts": {
"title": "Контакти",
@@ -982,7 +1001,8 @@
"deleteConfirm": "Видалити день народження для \"{{name}}\"?",
"ageNoteToday": "Сьогодні виповнюється {{age}}.",
"ageNoteTomorrow": "Завтра виповниться {{age}}.",
"ageNoteDays": "За {{days}} дн. виповниться {{age}}."
"ageNoteDays": "За {{days}} дн. виповниться {{age}}.",
"photoOptional": "Необов'язково: можна зберегти без фото профілю."
},
"onboarding": {
"step1Title": "Welcome to Oikos",
@@ -1071,6 +1091,14 @@
"selectedFileLabel": "Вибрано: {{name}}"
},
"shortcuts": {
"goKitchen": "Кухня"
"goKitchen": "Кухня",
"goCal": "Календар",
"goDash": "Дашборд",
"goNotes": "Нотатки",
"goShop": "Список покупок",
"goTasks": "Завдання",
"help": "Гарячі клавіші",
"new": "Створити новий запис",
"search": "Відкрити пошук"
}
}
+42 -6
View File
@@ -199,7 +199,8 @@
"archivedToast": "任务已归档。",
"kanbanArchived": "已归档",
"reminderNeedsDueDate": "设置截止日期以启用任务提醒。",
"emptyAction": "创建任务"
"emptyAction": "创建任务",
"navLabelOverdue": "任务,{{count}} 项已逾期"
},
"shopping": {
"title": "购物",
@@ -378,7 +379,17 @@
"attachmentHint": "Attach a local image, PDF, or document. Images will be shown in the event popup.",
"attachmentFallback": "Attachment",
"attachmentReadError": "The attachment could not be read.",
"attachmentTooLarge": "Attachment may be at most 5 MB."
"attachmentTooLarge": "Attachment may be at most 5 MB.",
"colorBlue": "蓝色",
"colorCoral": "珊瑚色",
"colorCyan": "青色",
"colorGray": "灰色",
"colorGreen": "绿色",
"colorOrange": "橙色",
"colorPurple": "紫色",
"colorRed": "红色",
"colorSkyBlue": "天蓝色",
"colorYellow": "黄色"
},
"notes": {
"title": "便签板",
@@ -417,7 +428,15 @@
"formatCode": "代码",
"formatQuote": "引用",
"formatDivider": "分隔线",
"emptyAction": "创建笔记"
"emptyAction": "创建笔记",
"colorAmber": "琥珀色",
"colorBlue": "蓝色",
"colorGreen": "绿色",
"colorOrange": "橙色",
"colorPurple": "紫色",
"colorTeal": "青绿色",
"colorWhite": "白色",
"colorYellow": "黄色"
},
"contacts": {
"title": "联系人",
@@ -951,7 +970,8 @@
"deleteConfirm": "删除“{{name}}”的生日?",
"ageNoteToday": "今天满 {{age}} 岁。",
"ageNoteTomorrow": "明天满 {{age}} 岁。",
"ageNoteDays": "{{days}} 天后满 {{age}} 岁。"
"ageNoteDays": "{{days}} 天后满 {{age}} 岁。",
"photoOptional": "可选:您也可以不上传头像直接保存。"
},
"reminders": {
"sectionTitle": "提醒",
@@ -999,7 +1019,15 @@
"banner": "Offline reconnecting…"
},
"emptyHint": {
"recipes": "创建食谱并将其关联到你的膳食计划。"
"recipes": "创建食谱并将其关联到你的膳食计划。",
"birthdays": "添加生日 — 系统会在适时提醒您。",
"budget": "创建分类并记录收入和支出。",
"calendar": "在设置 → 集成中连接 Google 日历以自动同步。",
"contacts": "添加重要联系人 — 医生、学校、紧急联系人 — 以便快速访问。",
"meals": "规划每周餐食并关联食谱。",
"notes": "点击 + 创建新笔记。笔记支持全文搜索。",
"shopping": "添加商品,滑动以标记或删除。",
"tasks": "点击 + 创建您的第一个任务。向左滑动卡片可删除。"
},
"documents": {
"title": "文档",
@@ -1063,6 +1091,14 @@
"selectedFileLabel": "已选择:{{name}}"
},
"shortcuts": {
"goKitchen": "厨房"
"goKitchen": "厨房",
"goCal": "日历",
"goDash": "仪表板",
"goNotes": "笔记",
"goShop": "购物清单",
"goTasks": "任务",
"help": "键盘快捷键",
"new": "创建新条目",
"search": "打开搜索"
}
}
+5 -13
View File
@@ -8,7 +8,7 @@
import { api } from '/api.js';
import { openModal as openSharedModal, closeModal, confirmModal } from '/components/modal.js';
import { stagger, vibrate } from '/utils/ux.js';
import { t, formatDate, getLocale, dateInputPlaceholder, formatDateInput, parseDateInput, isDateInputValid } from '/i18n.js';
import { t, formatDate, getLocale } from '/i18n.js';
import { esc } from '/utils/html.js';
// --------------------------------------------------------
@@ -856,8 +856,8 @@ function openBudgetModal({ mode, entry = null, initialType = '' }) {
<div class="form-group js-entry-field">
<label class="form-label" for="bm-date">${t('budget.dateLabel')}</label>
<input type="text" class="form-input js-date-input" id="bm-date"
value="${formatDateInput(isEdit ? entry.date : today)}" placeholder="${dateInputPlaceholder()}" inputmode="numeric">
<input type="date" class="form-input" id="bm-date"
value="${isEdit ? entry.date : today}">
</div>
<div class="form-group js-entry-field">
@@ -1015,13 +1015,6 @@ function openBudgetModal({ mode, entry = null, initialType = '' }) {
panel.querySelector('#bm-category').addEventListener('change', () => updateSubcategoryOptions());
panel.querySelector('#bm-add-category').addEventListener('click', addCategory);
panel.querySelector('#bm-add-subcategory').addEventListener('click', addSubcategory);
panel.querySelectorAll('.js-date-input').forEach((input) => {
input.addEventListener('blur', () => {
const parsed = parseDateInput(input.value);
if (parsed) input.value = formatDateInput(parsed);
});
});
panel.querySelector('#bm-cancel').addEventListener('click', closeModal);
panel.querySelector('#bm-delete')?.addEventListener('click', async () => {
@@ -1040,13 +1033,12 @@ function openBudgetModal({ mode, entry = null, initialType = '' }) {
const absVal = parseFloat(panel.querySelector('#bm-amount').value);
const category = panel.querySelector('#bm-category').value;
const subcategory = currentType === 'expense' ? panel.querySelector('#bm-subcategory').value : '';
const dateRaw = panel.querySelector('#bm-date').value;
const date = parseDateInput(dateRaw);
const date = panel.querySelector('#bm-date').value;
const recurring = panel.querySelector('#bm-recurring').checked ? 1 : 0;
if (!title) { window.oikos?.showToast(t('common.titleRequired'), 'error'); return; }
if (isNaN(absVal) || absVal <= 0) { window.oikos?.showToast(t('budget.validAmountRequired'), 'error'); return; }
if (!date || !isDateInputValid(dateRaw)) { window.oikos?.showToast(t('calendar.invalidDate'), 'error'); return; }
if (!date) { window.oikos?.showToast(t('calendar.invalidDate'), 'error'); return; }
const amount = currentType === 'expense' ? -absVal : absVal;