From f9c2539fbbae4e860bc45df9a07c53b466e9ba5e Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:04:05 -0400 Subject: [PATCH 01/88] New translations common.json (French) [ci skip] --- public/locales/fr/common.json | 81 ++++++++++++++++++++++++----------- 1 file changed, 57 insertions(+), 24 deletions(-) diff --git a/public/locales/fr/common.json b/public/locales/fr/common.json index d8c05b0..4a40f04 100644 --- a/public/locales/fr/common.json +++ b/public/locales/fr/common.json @@ -29,7 +29,8 @@ "filters": "Filtres", "activities": "Activités", "points": "Points", - "settings": "Paramètres" + "settings": "Paramètres", + "reportBug": "Report a Bug" }, "search": { "title": "Recherche", @@ -44,7 +45,7 @@ }, "groups": { "tasks": "Tâches", - "history": "Notes", + "history": "Remarques", "projects": "Projets", "labels": "Étiquettes", "people": "Personnes", @@ -70,49 +71,81 @@ } }, "feedback": { - "later": "Maybe later", + "later": "Peut-être plus tard", "sentiment": { "title": "How's Donetick working for you?", "subtitle": "Votre réponse nous aide à décider de ce qu'il faut construire ensuite.", "options": { - "love": "Love it", - "okay": "It's okay", - "issues": "Having issues" + "love": "J'adore", + "okay": "C'est ok", + "issues": "Problèmes rencontrés" } }, "categories": { - "bugs": "Bugs", - "missingFeature": "Missing feature", - "tooComplicated": "Too complicated", - "slow": "Slow", + "bugs": "Anomalies", + "missingFeature": "Fonctionnalités manquantes", + "tooComplicated": "Trop compliqué", + "slow": "Lent", "notifications": "Notifications", - "ai": "AI", - "other": "Other" + "ai": "IA", + "other": "Autres" }, "details": { - "title": "What could we improve?", - "messageLabel": "Tell us more", + "title": "Que pouvons-nous améliorer ?", + "messageLabel": "Dites-nous-en plus", "messagePlaceholder": "What happened, or what would make this better?", "contextNote": "We'll include your app version, device and platform so we can reproduce issues.", - "submit": "Send feedback", - "contextNoteSelfHosted": "You're on a self-hosted instance, so nothing is sent from your server — we'll open a pre-filled GitHub issue you can review and edit first.", - "submitSelfHosted": "Continue to GitHub" + "submit": "Envoyer vos remarques", + "contextNoteSelfHosted": "Vous êtes sur une instance autohébergée, donc rien n'est envoyé depuis votre serveur — nous allons ouvrir un problème GitHub prérempli que vous pouvez examiner et modifier si besoin.", + "submitSelfHosted": "Continuer sur GitHub" }, "review": { - "title": "Glad you're enjoying it!", + "title": "Nous sommes ravis que vous l'appréciez !", "subtitle": "A rating or a star helps other people find Donetick.", - "github": "Star on GitHub", - "appStore": "Rate on the App Store", - "playStore": "Rate on Google Play" + "github": "Mettez une étoile sur GitHub", + "appStore": "Évaluer sur l'App Store", + "playStore": "Évaluer sur Google Play" }, "thanks": { - "title": "Thanks for the feedback", + "title": "Merci pour votre retour", "subtitle": "We read every response and it shapes what we work on next." }, "github": { - "title": "Report it on GitHub", + "title": "Signaler sur GitHub", "subtitle": "We've filled in an issue with your notes and version details. Nothing has been sent yet — review it and post when you're ready.", - "open": "Open the issue" + "open": "Ouvrir un ticket" } + }, + "done": "Done", + "clearAll": "Clear all", + "upload": { + "quotaTitle": "Storage Quota Exceeded", + "quotaMessage": "You have exceeded your quota for uploading files.", + "tooLargeTitle": "File Too Large", + "tooLargeMessage": "The file you are trying to upload is too large.", + "deniedTitle": "Permission Denied", + "deniedMessage": "You do not have permission to upload files." + }, + "getStarted": "Get Started!", + "imageLoadFailed": "Failed to load image.", + "typeHere": "Type in here…", + "summaryOfChores": "This is a summary of your chores", + "loadingOffline": "You are offline", + "loadingOfflineSub": "This not available while offline. Please check your internet connection and try again.", + "loadingSlow": "This is taking longer than usual. There might be an issue.", + "navigateBack": "Navigate Back", + "bottomNav": "Bottom Navigation", + "profile": "Profile", + "autocompletePlaceholder": "Type here...", + "errorScreen": { + "title": "Something went wrong", + "fallback": "An unexpected error occurred. Try reloading — it usually fixes it.", + "tryAgain": "Try again", + "home": "Home", + "login": "Login", + "hideDetails": "Hide error details", + "showDetails": "Show error details", + "copyToClipboard": "Copy to clipboard", + "copied": "Error details copied to clipboard" } } From 9860e9d25ad9389c651b674ca169346e209661f3 Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:04:06 -0400 Subject: [PATCH 02/88] New translations common.json (Spanish) [ci skip] --- public/locales/es/common.json | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/public/locales/es/common.json b/public/locales/es/common.json index b3e9f38..edfc97b 100644 --- a/public/locales/es/common.json +++ b/public/locales/es/common.json @@ -29,7 +29,8 @@ "filters": "Filtros", "activities": "Actividades", "points": "Puntos", - "settings": "Configuración" + "settings": "Configuración", + "reportBug": "Report a Bug" }, "search": { "title": "Buscar", @@ -114,5 +115,37 @@ "subtitle": "We've filled in an issue with your notes and version details. Nothing has been sent yet — review it and post when you're ready.", "open": "Open the issue" } + }, + "done": "Done", + "clearAll": "Clear all", + "upload": { + "quotaTitle": "Storage Quota Exceeded", + "quotaMessage": "You have exceeded your quota for uploading files.", + "tooLargeTitle": "File Too Large", + "tooLargeMessage": "The file you are trying to upload is too large.", + "deniedTitle": "Permission Denied", + "deniedMessage": "You do not have permission to upload files." + }, + "getStarted": "Get Started!", + "imageLoadFailed": "Failed to load image.", + "typeHere": "Type in here…", + "summaryOfChores": "This is a summary of your chores", + "loadingOffline": "You are offline", + "loadingOfflineSub": "This not available while offline. Please check your internet connection and try again.", + "loadingSlow": "This is taking longer than usual. There might be an issue.", + "navigateBack": "Navigate Back", + "bottomNav": "Bottom Navigation", + "profile": "Profile", + "autocompletePlaceholder": "Type here...", + "errorScreen": { + "title": "Something went wrong", + "fallback": "An unexpected error occurred. Try reloading — it usually fixes it.", + "tryAgain": "Try again", + "home": "Home", + "login": "Login", + "hideDetails": "Hide error details", + "showDetails": "Show error details", + "copyToClipboard": "Copy to clipboard", + "copied": "Error details copied to clipboard" } } From 64cd0baa5e9613151a24ee72d2485d7453cb5700 Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:04:08 -0400 Subject: [PATCH 03/88] New translations settings.json (Spanish) [ci skip] --- public/locales/es/settings.json | 73 +++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/public/locales/es/settings.json b/public/locales/es/settings.json index 15583d7..1c9a6d4 100644 --- a/public/locales/es/settings.json +++ b/public/locales/es/settings.json @@ -490,5 +490,78 @@ "notConnected": "Las actualizaciones en tiempo real están activadas pero ahora mismo no hay conexión.", "basicPlanNotice": "Las actualizaciones en tiempo real no están disponibles en el plan Básico. Mejora a Plus para recibir notificaciones instantáneas cuando tú u otros miembros del círculo completéis, omitáis o modifiquéis tareas." } + }, + "subscription": { + "sessionFailed": "Failed to create subscription session", + "errorTitle": "Subscription Error", + "errorMessage": "Failed to start subscription process. Please try again.", + "subscribe": "Subscribe", + "cancelAnytime": "Cancel anytime. No hidden fees. Secure payment powered by Stripe." + }, + "childUsers": { + "errNameRequired": "Sub account name is required", + "errNameMin": "Sub account name must be at least 2 characters", + "errNameMax": "Sub account name must be less than 20 characters", + "errNameChars": "Sub account name can only contain lowercase letters, dot and dash", + "errPasswordRequired": "Password is required", + "errPasswordLength": "Password must be between 8 and 64 characters", + "errPasswordMatch": "Passwords do not match", + "errDisplayNameMax": "Display name must be less than 50 characters", + "createTitle": "Create Sub Account", + "createButton": "Create Account", + "nameLabel": "Sub Account Name *", + "namePlaceholder": "Enter sub account name (e.g., sarah)", + "displayNameLabel": "Display Name", + "displayNamePlaceholder": "Display name (optional, defaults to sub account name)", + "passwordLabel": "Password *", + "passwordPlaceholder": "Enter password (8-64 characters)", + "confirmPasswordLabel": "Confirm Password *", + "confirmPasswordPlaceholder": "Confirm password" + }, + "passwordChange": { + "minLength": "Password must be at least 8 characters", + "maxLength": "Password must be less than 64 characters" + }, + "payment": { + "cancelledTitle": "Payment has been cancelled", + "cancelledRedirect": "You will be redirected to the main page shortly.", + "successTitle": "Payment Successful!", + "successRedirect": "You will be redirected to the settings page shortly." + }, + "developer": { + "tokenRefreshed": "Token refreshed successfully", + "endpointCalled": "Refresh token endpoint called successfully", + "clearDbCleared": "Local offline database cleared. Starting full sync...", + "clearDbDone": "Full sync completed from the beginning", + "intro": "View technical information about your authentication tokens and session", + "refreshCookieNote": "Refresh tokens are managed via HTTP-only cookies on web platform", + "noReconnectInfo": "No reconnection information available", + "noTimeoutInfo": "No timeout information available", + "noDebugInfo": "No debug information available" + }, + "backup": { + "keyRequired": "Encryption key is required", + "created": "Backup created and downloaded successfully", + "createFailed": "Failed to create backup", + "selectFile": "Please select a backup file", + "restored": "Backup restored successfully. Please refresh the page.", + "restoreFailed": "Failed to restore backup", + "readFailed": "Failed to read backup file", + "createIntro": "Create an encrypted backup of your data. This backup will include all your chores, history, settings, and optionally your uploaded files.", + "keyPlaceholder": "Enter a strong encryption key", + "includeAssets": "Include uploaded files and assets", + "warningLabel": "Warning:", + "restoreWarning": "Restoring a backup will replace all your current data. This action cannot be undone.", + "restoreKeyPlaceholder": "Enter the encryption key used for this backup" + }, + "deletion": { + "passwordRequired": "Please enter your password to continue", + "passwordAndDelete": "Please enter your password and type DELETE to confirm", + "failed": "Failed to delete account", + "passwordPlaceholder": "Enter your password", + "transferIntro": "You own circles that require ownership transfer before deletion. Please select new owners:", + "selectOwner": "Select new owner", + "confirmPrompt": "Please enter your password and type DELETE to confirm", + "typeDelete": "DELETE" } } From 0669ee9499472149f65d56c8c3a2ee62277af5fc Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:04:09 -0400 Subject: [PATCH 04/88] New translations common.json (Arabic) [ci skip] --- public/locales/ar/common.json | 39 ++++++++++++++++++++++++++++++----- 1 file changed, 34 insertions(+), 5 deletions(-) diff --git a/public/locales/ar/common.json b/public/locales/ar/common.json index ef4ad0a..cae00e2 100644 --- a/public/locales/ar/common.json +++ b/public/locales/ar/common.json @@ -29,7 +29,8 @@ "filters": "الفلاتر", "activities": "الأنشطة", "points": "النقاط", - "settings": "الإعدادات" + "settings": "الإعدادات", + "reportBug": "Report a Bug" }, "search": { "title": "بحث", @@ -64,11 +65,7 @@ "footer": { "navigate": "تنقل", "open": "فتح", - "results_zero": "لا توجد نتائج", "results_one": "نتيجة واحدة", - "results_two": "نتيجتان", - "results_few": "{{count}} نتائج", - "results_many": "{{count}} نتيجة", "results_other": "{{count}} نتيجة", "typeToSearch": "اكتب للبحث" } @@ -118,5 +115,37 @@ "subtitle": "We've filled in an issue with your notes and version details. Nothing has been sent yet — review it and post when you're ready.", "open": "Open the issue" } + }, + "done": "Done", + "clearAll": "Clear all", + "upload": { + "quotaTitle": "Storage Quota Exceeded", + "quotaMessage": "You have exceeded your quota for uploading files.", + "tooLargeTitle": "File Too Large", + "tooLargeMessage": "The file you are trying to upload is too large.", + "deniedTitle": "Permission Denied", + "deniedMessage": "You do not have permission to upload files." + }, + "getStarted": "Get Started!", + "imageLoadFailed": "Failed to load image.", + "typeHere": "Type in here…", + "summaryOfChores": "This is a summary of your chores", + "loadingOffline": "You are offline", + "loadingOfflineSub": "This not available while offline. Please check your internet connection and try again.", + "loadingSlow": "This is taking longer than usual. There might be an issue.", + "navigateBack": "Navigate Back", + "bottomNav": "Bottom Navigation", + "profile": "Profile", + "autocompletePlaceholder": "Type here...", + "errorScreen": { + "title": "Something went wrong", + "fallback": "An unexpected error occurred. Try reloading — it usually fixes it.", + "tryAgain": "Try again", + "home": "Home", + "login": "Login", + "hideDetails": "Hide error details", + "showDetails": "Show error details", + "copyToClipboard": "Copy to clipboard", + "copied": "Error details copied to clipboard" } } From 56a5b49fca375e3946f25dcdf607e0b4c01633df Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:04:11 -0400 Subject: [PATCH 05/88] New translations settings.json (Arabic) [ci skip] --- public/locales/ar/settings.json | 75 ++++++++++++++++++++++++++++++++- 1 file changed, 74 insertions(+), 1 deletion(-) diff --git a/public/locales/ar/settings.json b/public/locales/ar/settings.json index ea5a7c4..8b6f1a8 100644 --- a/public/locales/ar/settings.json +++ b/public/locales/ar/settings.json @@ -171,7 +171,7 @@ "description": "غيّر إعدادات حسابك أو نوع خطتك أو كلمة المرور", "accountType": "نوع الحساب: {{type}}", "free": "مجاني", - "plus": "Plus", + "plus": "بلس", "plusUntil": "Plus (حتى {{date}})", "activeDescription": "أنت مشترك حاليًا في خطة Plus. سيتجدد اشتراكك في {{date}}.", "cancelledDescription": "لقد ألغيت اشتراكك. سيتم خفض حسابك إلى الخطة المجانية في {{date}}.", @@ -490,5 +490,78 @@ "notConnected": "التحديثات الفورية مفعّلة لكن لا يوجد اتصال حاليًا.", "basicPlanNotice": "التحديثات الفورية غير متاحة في الخطة الأساسية. رقِّ إلى Plus لتلقّي إشعارات فورية عندما تنجز أنت أو أعضاء دائرتك المهام أو تتخطّونها أو تعدّلونها." } + }, + "subscription": { + "sessionFailed": "Failed to create subscription session", + "errorTitle": "Subscription Error", + "errorMessage": "Failed to start subscription process. Please try again.", + "subscribe": "Subscribe", + "cancelAnytime": "Cancel anytime. No hidden fees. Secure payment powered by Stripe." + }, + "childUsers": { + "errNameRequired": "Sub account name is required", + "errNameMin": "Sub account name must be at least 2 characters", + "errNameMax": "Sub account name must be less than 20 characters", + "errNameChars": "Sub account name can only contain lowercase letters, dot and dash", + "errPasswordRequired": "Password is required", + "errPasswordLength": "Password must be between 8 and 64 characters", + "errPasswordMatch": "Passwords do not match", + "errDisplayNameMax": "Display name must be less than 50 characters", + "createTitle": "Create Sub Account", + "createButton": "Create Account", + "nameLabel": "Sub Account Name *", + "namePlaceholder": "Enter sub account name (e.g., sarah)", + "displayNameLabel": "Display Name", + "displayNamePlaceholder": "Display name (optional, defaults to sub account name)", + "passwordLabel": "Password *", + "passwordPlaceholder": "Enter password (8-64 characters)", + "confirmPasswordLabel": "Confirm Password *", + "confirmPasswordPlaceholder": "Confirm password" + }, + "passwordChange": { + "minLength": "Password must be at least 8 characters", + "maxLength": "Password must be less than 64 characters" + }, + "payment": { + "cancelledTitle": "Payment has been cancelled", + "cancelledRedirect": "You will be redirected to the main page shortly.", + "successTitle": "Payment Successful!", + "successRedirect": "You will be redirected to the settings page shortly." + }, + "developer": { + "tokenRefreshed": "Token refreshed successfully", + "endpointCalled": "Refresh token endpoint called successfully", + "clearDbCleared": "Local offline database cleared. Starting full sync...", + "clearDbDone": "Full sync completed from the beginning", + "intro": "View technical information about your authentication tokens and session", + "refreshCookieNote": "Refresh tokens are managed via HTTP-only cookies on web platform", + "noReconnectInfo": "No reconnection information available", + "noTimeoutInfo": "No timeout information available", + "noDebugInfo": "No debug information available" + }, + "backup": { + "keyRequired": "Encryption key is required", + "created": "Backup created and downloaded successfully", + "createFailed": "Failed to create backup", + "selectFile": "Please select a backup file", + "restored": "Backup restored successfully. Please refresh the page.", + "restoreFailed": "Failed to restore backup", + "readFailed": "Failed to read backup file", + "createIntro": "Create an encrypted backup of your data. This backup will include all your chores, history, settings, and optionally your uploaded files.", + "keyPlaceholder": "Enter a strong encryption key", + "includeAssets": "Include uploaded files and assets", + "warningLabel": "Warning:", + "restoreWarning": "Restoring a backup will replace all your current data. This action cannot be undone.", + "restoreKeyPlaceholder": "Enter the encryption key used for this backup" + }, + "deletion": { + "passwordRequired": "Please enter your password to continue", + "passwordAndDelete": "Please enter your password and type DELETE to confirm", + "failed": "Failed to delete account", + "passwordPlaceholder": "Enter your password", + "transferIntro": "You own circles that require ownership transfer before deletion. Please select new owners:", + "selectOwner": "Select new owner", + "confirmPrompt": "Please enter your password and type DELETE to confirm", + "typeDelete": "DELETE" } } From 328dcac0e440cdabac42deeff2f419a64a25541a Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:04:12 -0400 Subject: [PATCH 06/88] New translations chores.json (French) [ci skip] --- public/locales/fr/chores.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/public/locales/fr/chores.json b/public/locales/fr/chores.json index 38a6911..f73ba4e 100644 --- a/public/locales/fr/chores.json +++ b/public/locales/fr/chores.json @@ -71,5 +71,11 @@ "reset": "Réinitialiser le Minuteur", "delete": "Supprimer la Session" } + }, + "toolbar": { + "defaultProject": "Default Project" + }, + "sort": { + "assignedToMe": "Assigned to me" } } From 4f0f9e25c5f896481a8ba2664dffb0d16927caf1 Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:04:13 -0400 Subject: [PATCH 07/88] New translations settings.json (French) [ci skip] --- public/locales/fr/settings.json | 73 +++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/public/locales/fr/settings.json b/public/locales/fr/settings.json index 64e90a5..4f8968f 100644 --- a/public/locales/fr/settings.json +++ b/public/locales/fr/settings.json @@ -490,5 +490,78 @@ "notConnected": "Les mises à jour en temps réel sont activées mais non connectées actuellement.", "basicPlanNotice": "Les mises à jour en temps réel ne sont pas disponibles dans la formule de base. Passez à Plus pour recevoir des notifications instantanées lorsque vous ou d'autres membres du cercle terminez, passez ou modifiez des tâches." } + }, + "subscription": { + "sessionFailed": "Failed to create subscription session", + "errorTitle": "Subscription Error", + "errorMessage": "Failed to start subscription process. Please try again.", + "subscribe": "Subscribe", + "cancelAnytime": "Cancel anytime. No hidden fees. Secure payment powered by Stripe." + }, + "childUsers": { + "errNameRequired": "Sub account name is required", + "errNameMin": "Sub account name must be at least 2 characters", + "errNameMax": "Sub account name must be less than 20 characters", + "errNameChars": "Sub account name can only contain lowercase letters, dot and dash", + "errPasswordRequired": "Password is required", + "errPasswordLength": "Password must be between 8 and 64 characters", + "errPasswordMatch": "Passwords do not match", + "errDisplayNameMax": "Display name must be less than 50 characters", + "createTitle": "Create Sub Account", + "createButton": "Create Account", + "nameLabel": "Sub Account Name *", + "namePlaceholder": "Enter sub account name (e.g., sarah)", + "displayNameLabel": "Display Name", + "displayNamePlaceholder": "Display name (optional, defaults to sub account name)", + "passwordLabel": "Password *", + "passwordPlaceholder": "Enter password (8-64 characters)", + "confirmPasswordLabel": "Confirm Password *", + "confirmPasswordPlaceholder": "Confirm password" + }, + "passwordChange": { + "minLength": "Password must be at least 8 characters", + "maxLength": "Password must be less than 64 characters" + }, + "payment": { + "cancelledTitle": "Payment has been cancelled", + "cancelledRedirect": "You will be redirected to the main page shortly.", + "successTitle": "Payment Successful!", + "successRedirect": "You will be redirected to the settings page shortly." + }, + "developer": { + "tokenRefreshed": "Token refreshed successfully", + "endpointCalled": "Refresh token endpoint called successfully", + "clearDbCleared": "Local offline database cleared. Starting full sync...", + "clearDbDone": "Full sync completed from the beginning", + "intro": "View technical information about your authentication tokens and session", + "refreshCookieNote": "Refresh tokens are managed via HTTP-only cookies on web platform", + "noReconnectInfo": "No reconnection information available", + "noTimeoutInfo": "No timeout information available", + "noDebugInfo": "No debug information available" + }, + "backup": { + "keyRequired": "Encryption key is required", + "created": "Backup created and downloaded successfully", + "createFailed": "Failed to create backup", + "selectFile": "Please select a backup file", + "restored": "Backup restored successfully. Please refresh the page.", + "restoreFailed": "Failed to restore backup", + "readFailed": "Failed to read backup file", + "createIntro": "Create an encrypted backup of your data. This backup will include all your chores, history, settings, and optionally your uploaded files.", + "keyPlaceholder": "Enter a strong encryption key", + "includeAssets": "Include uploaded files and assets", + "warningLabel": "Warning:", + "restoreWarning": "Restoring a backup will replace all your current data. This action cannot be undone.", + "restoreKeyPlaceholder": "Enter the encryption key used for this backup" + }, + "deletion": { + "passwordRequired": "Please enter your password to continue", + "passwordAndDelete": "Please enter your password and type DELETE to confirm", + "failed": "Failed to delete account", + "passwordPlaceholder": "Enter your password", + "transferIntro": "You own circles that require ownership transfer before deletion. Please select new owners:", + "selectOwner": "Select new owner", + "confirmPrompt": "Please enter your password and type DELETE to confirm", + "typeDelete": "DELETE" } } From fa4c11b2eeef715628effd9a3d272fdd3019f1b4 Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:04:14 -0400 Subject: [PATCH 08/88] New translations chores.json (Spanish) [ci skip] --- public/locales/es/chores.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/public/locales/es/chores.json b/public/locales/es/chores.json index 2af9159..68f93f6 100644 --- a/public/locales/es/chores.json +++ b/public/locales/es/chores.json @@ -71,5 +71,11 @@ "reset": "Reiniciar Temporizador", "delete": "Eliminar Sesión" } + }, + "toolbar": { + "defaultProject": "Default Project" + }, + "sort": { + "assignedToMe": "Assigned to me" } } From b98c097b34f16f3bdf136614af01ef1799f7d560 Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:04:15 -0400 Subject: [PATCH 09/88] New translations chores.json (Arabic) [ci skip] --- public/locales/ar/chores.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/public/locales/ar/chores.json b/public/locales/ar/chores.json index 38887d1..ebd0674 100644 --- a/public/locales/ar/chores.json +++ b/public/locales/ar/chores.json @@ -71,5 +71,11 @@ "reset": "إعادة تعيين المؤقت", "delete": "حذف الجلسة" } + }, + "toolbar": { + "defaultProject": "Default Project" + }, + "sort": { + "assignedToMe": "Assigned to me" } } From b4512a6cbcd7a4f630851ea654b5afc30dd306b5 Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:04:17 -0400 Subject: [PATCH 10/88] New translations auth.json (French) [ci skip] --- public/locales/fr/auth.json | 111 ++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 public/locales/fr/auth.json diff --git a/public/locales/fr/auth.json b/public/locales/fr/auth.json new file mode 100644 index 0000000..28cdec1 --- /dev/null +++ b/public/locales/fr/auth.json @@ -0,0 +1,111 @@ +{ + "validationError": "Validation Error", + "primaryUsernameRequired": "Primary username is required for sub account login", + "subNameRequired": "Sub account name is required for sub account login", + "usernameRequired": "Username is required", + "passwordRequired": "Password is required", + "loginFailed": "Login Failed", + "genericError": "An error occurred, please try again", + "providerLoginFailed": "{{provider}} Login Failed", + "providerLoginFailedMsg": "Couldn't log in with {{provider}}, please try again", + "providerLoginError": "{{provider}} Login Error", + "networkError": "Network error occurred, please try again", + "mfaFailed": "Two-Factor Authentication Failed", + "oauthError": "OAuth Error", + "oauthBrowserFailed": "Failed to open authentication browser", + "primaryAccount": "Primary Account", + "subAccount": "Sub Account", + "username": "Username", + "primaryUsernamePlaceholder": "Enter primary account username", + "subNamePlaceholder": "Enter sub account name", + "forgotPassword": "Forgot password?", + "or": "or", + "email": "Email", + "displayNamePlaceholder": "How others see your name", + "signupFailed": "Signup Failed", + "signupDisabled": "Signup disabled, please contact admin", + "usernameMinLength": "Username must be at least 4 characters", + "invalidEmail": "Invalid email address", + "passwordLength": "Password must be between 8 and 64 characters", + "displayNameRequired": "Display name is required", + "displayNameChars": "Display name can only contain letters and numbers", + "resetEmailSent": "Reset Email Sent", + "resetEmailSentMsg": "Check your email for password reset instructions", + "resetFailed": "Reset Failed", + "resetFailedMsg": "Failed to send reset email, please try again later", + "emailPlaceholder": "you@example.com", + "passwordUpdated": "Password Updated", + "passwordUpdatedMsg": "Your password has been updated successfully. Redirecting to login...", + "passwordUpdateFailed": "Password Update Failed", + "passwordUpdateFailedMsg": "Failed to update password, please try again later", + "savePassword": "Save password", + "server": { + "url": "Server URL", + "dnsFailed": "Hostname could not be resolved. Check the URL for typos or verify DNS.", + "unreachable": "Unable to reach the server. Check the URL, port, and network connection.", + "invalidUrl": "Invalid URL format. Include the protocol (http:// or https://) and port if needed." + }, + "mfaModal": { + "title": "Two-factor authentication", + "codeRequired": "Please enter a verification code", + "verifyFailed": "Failed to verify code. Please try again.", + "backupHint": "Enter one of the backup codes you saved when setting up two-factor authentication.", + "codeHint": "Enter the 6-digit code from your authenticator app.", + "verify": "Verify & Sign In", + "backupLabel": "Backup code", + "codeLabel": "Verification code", + "backupPlaceholder": "Enter backup code", + "useAuthenticator": "Use authenticator app instead", + "useBackup": "Use a backup code instead", + "backupOnce": "Each backup code can only be used once.", + "invalidCode": "Invalid verification code. Please try again." + }, + "appleLoginFailed": "Apple Login Failed", + "googleLoginFailed": "Google Login Failed", + "createOne": "Create one", + "primaryAccountUsernameLabel": "Primary account username", + "subAccountNameLabel": "Sub account name", + "serverSettings": "Server settings", + "useDifferentAccount": "Use a different account", + "yourUsername": "Your username", + "backToSignIn": "Back to sign in", + "confirmNewPassword": "Confirm new password", + "newPassword": "New password", + "reenterPassword": "Re-enter your password", + "requestNewLink": "Request a new link", + "setNewPassword": "Set a new password", + "linkInvalid": "This link is not valid", + "createAccountButton": "Create account", + "createYourAccount": "Create your account", + "displayNameLabel": "Display name", + "usernameHint": "lowercase letters, numbers, dot and dash", + "termsShort": "By creating an account you agree to our Terms of Service and Privacy", + "checkYourEmail": "Check your email", + "resetYourPassword": "Reset your password", + "serverChangeWarning": "Changing the server clears locally cached data on this device.", + "serverConnected": "Connected. Taking you to sign in...", + "passwordLabel": "Password", + "showPassword": "Show password", + "hidePassword": "Hide password", + "loginPasswordPlaceholder": "Enter your password", + "signupPasswordPlaceholder": "At least 8 characters", + "signupPasswordHelper": "Use 8 to 64 characters.", + "orContinueWith": "or continue with", + "signupSignInFailed": "Your account was created, but signing in failed. Please sign in.", + "authenticating": { + "signingIn": "Signing you in", + "signingInSub": "This will only take a moment.", + "unknownProvider": "Unknown sign-in provider", + "contactSupport": "Please contact support.", + "signInFailed": "Sign-in failed", + "mfaCancelled": "Two-factor authentication was cancelled.", + "requestNotVerified": "The sign-in request could not be verified.", + "tryAgain": "Please try again.", + "mfaSessionMissing": "The MFA session is missing. Please try again.", + "twoFactor": "Two-factor authentication", + "verifyToContinue": "Verify your login to continue.", + "noToken": "No valid authentication token was returned.", + "backToSignIn": "Back to sign in", + "mfaFailed": "Two-factor authentication failed. Please try again." + } +} From 98693961d4a3e9f124dc901fed2a2c4dae0b823c Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:04:18 -0400 Subject: [PATCH 11/88] New translations filters.json (French) [ci skip] --- public/locales/fr/filters.json | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 public/locales/fr/filters.json diff --git a/public/locales/fr/filters.json b/public/locales/fr/filters.json new file mode 100644 index 0000000..6b10047 --- /dev/null +++ b/public/locales/fr/filters.json @@ -0,0 +1,17 @@ +{ + "builder": { + "errorName": "Please enter a filter name", + "errorConditions": "Please configure at least one filter condition", + "editTitle": "Edit Filter", + "newTitle": "New Filter", + "addConditions": "Add conditions to preview", + "save": "Save Filter", + "name": "Filter Name", + "namePlaceholder": "e.g. Overdue tasks for Alice", + "color": "Color" + }, + "nameExists": "A filter with this name already exists", + "tasks_one": "{{count}} task", + "tasks_other": "{{count}} tasks", + "overdue": "{{count}} overdue" +} From a2fd65234b82426df95bbf2dab9a95e00ad26e79 Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:04:19 -0400 Subject: [PATCH 12/88] New translations history.json (French) [ci skip] --- public/locales/fr/history.json | 89 ++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 public/locales/fr/history.json diff --git a/public/locales/fr/history.json b/public/locales/fr/history.json new file mode 100644 index 0000000..1452849 --- /dev/null +++ b/public/locales/fr/history.json @@ -0,0 +1,89 @@ +{ + "edit": { + "title": "Edit History", + "completedDate": "Completed Date", + "note": "Note", + "additionalNotes": "Additional Notes", + "deleteTitle": "Delete History", + "deleteMessage": "Are you sure you want to delete this history?" + }, + "status": { + "inProgress": "In Progress", + "completed": "Completed", + "skipped": "Skipped", + "pendingApproval": "Pending Approval", + "rejected": "Rejected", + "missed": "Missed", + "rescheduled": "Rescheduled", + "scheduled": "Scheduled" + }, + "badge": { + "onTime": "On Time", + "onTimeLabel": "On time" + }, + "detail": { + "title": "Activity Detail", + "openTask": "Open Task", + "editEntry": "Edit Entry", + "performedBy": "Performed by", + "assignedTo": "Assigned to", + "lastUpdated": "Last updated", + "duration": "Duration", + "pointsEarned": "Points earned", + "points_one": "{{count}} pt", + "points_other": "{{count}} pts", + "note": "Note" + }, + "charts": { + "noData": "No data available", + "noLabels": "No Labels", + "unassigned": "Unassigned", + "unknownTask": "Unknown Task", + "late": "Late", + "status": { + "title": "Status", + "description": "Completed tasks status" + }, + "due": { + "title": "Due Date", + "description": "Current tasks due date" + }, + "priority": { + "title": "Priority", + "description": "Tasks by priority" + }, + "labels": { + "title": "Labels", + "description": "Tasks by labels" + }, + "labelsDuration": { + "title": "Labels (time)", + "description": "Time spent by labels (hours)" + }, + "tasksTime": { + "title": "Tasks (time)", + "description": "Time spent by individual tasks (hours)" + }, + "assigneeBreakdown": { + "title": "by Assignee", + "description": "Tasks grouped by assignee" + } + }, + "filter": { + "status": "Status", + "pending": "Pending", + "labels": "Labels", + "hasNotes": "Has Notes", + "hasPoints": "Has Points", + "timePeriod": "Time Period", + "user": "User" + }, + "period": { + "days_one": "{{count}} Day", + "days_other": "{{count}} Days", + "allTime": "All Time" + }, + "activities": { + "title": "Activities" + } +} From e0949a9c3362ee7dfcc4c4d487a8b7040539cabf Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:04:20 -0400 Subject: [PATCH 13/88] New translations labels.json (French) [ci skip] --- public/locales/fr/labels.json | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 public/locales/fr/labels.json diff --git a/public/locales/fr/labels.json b/public/locales/fr/labels.json new file mode 100644 index 0000000..93f96cb --- /dev/null +++ b/public/locales/fr/labels.json @@ -0,0 +1,9 @@ +{ + "shared": "Shared", + "delete": { + "title": "Delete Label", + "message": "Are you sure you want to delete this label? This will remove the label from all tasks." + }, + "loadError": "Failed to load labels. Please try again.", + "blurb": "Manage your labels and organize your tasks effectively. Labels will be automatically shared with your circle if they are used on a shared task." +} From 9d9b4a37fb4b175e88fe36d341e3299eaf3c51ed Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:04:21 -0400 Subject: [PATCH 14/88] New translations points.json (French) [ci skip] --- public/locales/fr/points.json | 74 +++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 public/locales/fr/points.json diff --git a/public/locales/fr/points.json b/public/locales/fr/points.json new file mode 100644 index 0000000..a6ccd40 --- /dev/null +++ b/public/locales/fr/points.json @@ -0,0 +1,74 @@ +{ + "redeem": "Redeem Points", + "redeemModal": { + "redeemButton": "Redeem", + "pointsAvailable": "{{count}} points available", + "pointsToRedeem": "Points to Redeem", + "placeholder": "Enter points...", + "cannotExceed": "Cannot exceed available points", + "quickAdd": "Quick Add:", + "aboutToRedeem": "You are about to redeem", + "amount": "{{count}} points", + "remaining": "Remaining: {{count}} points" + }, + "leaderboard": { + "titlePoints": "Points Leaderboard", + "titleTasks": "Tasks Leaderboard", + "subtitlePoints": "Rankings based on points earned during the selected time period", + "subtitleTasks": "Rankings based on tasks completed during the selected time period", + "modePoints": "Points", + "modeTasks": "Tasks", + "you": "You", + "tasksAndAvg": "{{tasks}} tasks • {{avg}} avg per task", + "available": "{{count}} available", + "points_one": "{{count}} point", + "points_other": "{{count}} points" + }, + "tabs": { + "short7d": "7D", + "short6m": "6M", + "shortAll": "All", + "days7": "7 Days", + "months6": "6 Months", + "allTime": "All Time" + }, + "filter": { + "analysisTitle": "Filter & Analysis", + "title": "Filter Points", + "showFor": "Show points for:", + "timePeriod": "Time period:" + }, + "cards": { + "available": { + "title": "Available", + "subtext": "Ready to redeem" + }, + "redeemed": { + "title": "Redeemed", + "subtext": "Previously used" + }, + "total": { + "title": "Total", + "subtext": "All time earned" + }, + "period": { + "title": "Period Points", + "allTime": "All time", + "last6Months": "Last 6 months", + "lastDays_one": "Last {{count}} day", + "lastDays_other": "Last {{count}} days" + } + }, + "summary": { + "showingFor": "Showing points for", + "unknownUser": "Unknown User", + "overThe": "over the", + "allTime": "All Time", + "last6Months": "Last 6 Months", + "lastDays_one": "Last {{count}} Day", + "lastDays_other": "Last {{count}} Days" + }, + "trend": { + "title": "Points Trend" + } +} From 36d33bba488fe5700991385898f1bb8ffdaee3a2 Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:04:22 -0400 Subject: [PATCH 15/88] New translations projects.json (French) [ci skip] --- public/locales/fr/projects.json | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 public/locales/fr/projects.json diff --git a/public/locales/fr/projects.json b/public/locales/fr/projects.json new file mode 100644 index 0000000..0e7eed4 --- /dev/null +++ b/public/locales/fr/projects.json @@ -0,0 +1,24 @@ +{ + "iconPicker": { + "chooseIcon": "Choose Project Icon", + "availableIcons": "Available Icons" + }, + "defaultChip": "Default", + "tasks_one": "{{count}} task", + "tasks_other": "{{count}} tasks", + "shared": "Shared", + "delete": { + "title": "Delete Project", + "message": "Are you sure you want to delete \"{{name}}\"? This will remove the project but keep all tasks (they'll move to the Default Project)." + }, + "loadError": "Failed to load projects. Please try again.", + "blurb": "Organize your tasks into projects. Create custom workspaces to keep your tasks organized and easily accessible.", + "defaultDescription": "All tasks without a specific project", + "selector": { + "title": "Projects", + "createNew": "Create New Project", + "createNewDescription": "Add a custom project workspace", + "manage": "Manage Projects", + "manageDescription": "View, edit, and organize all projects" + } +} From 44647c4e38414044fda06ff66ce430ac75e5a0cc Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:04:23 -0400 Subject: [PATCH 16/88] New translations things.json (French) [ci skip] --- public/locales/fr/things.json | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 public/locales/fr/things.json diff --git a/public/locales/fr/things.json b/public/locales/fr/things.json new file mode 100644 index 0000000..1181eb5 --- /dev/null +++ b/public/locales/fr/things.json @@ -0,0 +1,18 @@ +{ + "errName": "Name is required", + "errStateNumber": "State must be a number", + "errStateBool": "State must be true or false", + "errStateRequired": "State is required", + "name": "Name", + "namePlaceholder": "Thing name", + "value": "Value", + "valuePlaceholder": "Thing value", + "updateState": "Update state", + "update": "Update", + "history": { + "overview": "Things Overview", + "visualization": "Data Visualization", + "changeHistory": "Change History", + "updated": "Updated" + } +} From 9848adf8c83f0e0d1e00acb8fcabd8a258dbd29e Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:04:24 -0400 Subject: [PATCH 17/88] New translations timer.json (French) [ci skip] --- public/locales/fr/timer.json | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 public/locales/fr/timer.json diff --git a/public/locales/fr/timer.json b/public/locales/fr/timer.json new file mode 100644 index 0000000..848fd53 --- /dev/null +++ b/public/locales/fr/timer.json @@ -0,0 +1,29 @@ +{ + "toast": { + "sessionUpdatedTitle": "Session updated", + "sessionUpdatedMessage": "Timer session has been updated successfully.", + "sessionUpdateFailTitle": "Failed to update session", + "tryAgain": "Please try again.", + "sessionUpdateErrorTitle": "Error updating session", + "sessionDeletedTitle": "Session deleted", + "sessionDeletedMessage": "Timer session has been deleted successfully.", + "sessionDeleteErrorTitle": "Error deleting session", + "deleteConfirmTitle": "Delete Timer Session", + "deleteConfirmMessage": "Are you sure you want to delete this timer session?" + }, + "loading": "Loading timer data...", + "noData": "No timer data found for this chore.", + "activeWork": "Active Work", + "breakTime": "Break Time", + "workSessions": "Work Sessions", + "totalTime": "Total Time", + "distribution": "Work vs Break Distribution", + "noActiveTime": "No active time yet", + "sessionBreakdown": "Session Breakdown", + "sessions": "Sessions", + "addSession": "Add Session", + "startTime": "Start Time", + "endTime": "End Time", + "leaveEmpty": "Leave empty if session is ongoing", + "noSessionForChore": "No timer session found for this chore." +} From 0b6f9b581bfb31446871e20ef7b550b39d7f4511 Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:04:25 -0400 Subject: [PATCH 18/88] New translations auth.json (Spanish) [ci skip] --- public/locales/es/auth.json | 111 ++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 public/locales/es/auth.json diff --git a/public/locales/es/auth.json b/public/locales/es/auth.json new file mode 100644 index 0000000..28cdec1 --- /dev/null +++ b/public/locales/es/auth.json @@ -0,0 +1,111 @@ +{ + "validationError": "Validation Error", + "primaryUsernameRequired": "Primary username is required for sub account login", + "subNameRequired": "Sub account name is required for sub account login", + "usernameRequired": "Username is required", + "passwordRequired": "Password is required", + "loginFailed": "Login Failed", + "genericError": "An error occurred, please try again", + "providerLoginFailed": "{{provider}} Login Failed", + "providerLoginFailedMsg": "Couldn't log in with {{provider}}, please try again", + "providerLoginError": "{{provider}} Login Error", + "networkError": "Network error occurred, please try again", + "mfaFailed": "Two-Factor Authentication Failed", + "oauthError": "OAuth Error", + "oauthBrowserFailed": "Failed to open authentication browser", + "primaryAccount": "Primary Account", + "subAccount": "Sub Account", + "username": "Username", + "primaryUsernamePlaceholder": "Enter primary account username", + "subNamePlaceholder": "Enter sub account name", + "forgotPassword": "Forgot password?", + "or": "or", + "email": "Email", + "displayNamePlaceholder": "How others see your name", + "signupFailed": "Signup Failed", + "signupDisabled": "Signup disabled, please contact admin", + "usernameMinLength": "Username must be at least 4 characters", + "invalidEmail": "Invalid email address", + "passwordLength": "Password must be between 8 and 64 characters", + "displayNameRequired": "Display name is required", + "displayNameChars": "Display name can only contain letters and numbers", + "resetEmailSent": "Reset Email Sent", + "resetEmailSentMsg": "Check your email for password reset instructions", + "resetFailed": "Reset Failed", + "resetFailedMsg": "Failed to send reset email, please try again later", + "emailPlaceholder": "you@example.com", + "passwordUpdated": "Password Updated", + "passwordUpdatedMsg": "Your password has been updated successfully. Redirecting to login...", + "passwordUpdateFailed": "Password Update Failed", + "passwordUpdateFailedMsg": "Failed to update password, please try again later", + "savePassword": "Save password", + "server": { + "url": "Server URL", + "dnsFailed": "Hostname could not be resolved. Check the URL for typos or verify DNS.", + "unreachable": "Unable to reach the server. Check the URL, port, and network connection.", + "invalidUrl": "Invalid URL format. Include the protocol (http:// or https://) and port if needed." + }, + "mfaModal": { + "title": "Two-factor authentication", + "codeRequired": "Please enter a verification code", + "verifyFailed": "Failed to verify code. Please try again.", + "backupHint": "Enter one of the backup codes you saved when setting up two-factor authentication.", + "codeHint": "Enter the 6-digit code from your authenticator app.", + "verify": "Verify & Sign In", + "backupLabel": "Backup code", + "codeLabel": "Verification code", + "backupPlaceholder": "Enter backup code", + "useAuthenticator": "Use authenticator app instead", + "useBackup": "Use a backup code instead", + "backupOnce": "Each backup code can only be used once.", + "invalidCode": "Invalid verification code. Please try again." + }, + "appleLoginFailed": "Apple Login Failed", + "googleLoginFailed": "Google Login Failed", + "createOne": "Create one", + "primaryAccountUsernameLabel": "Primary account username", + "subAccountNameLabel": "Sub account name", + "serverSettings": "Server settings", + "useDifferentAccount": "Use a different account", + "yourUsername": "Your username", + "backToSignIn": "Back to sign in", + "confirmNewPassword": "Confirm new password", + "newPassword": "New password", + "reenterPassword": "Re-enter your password", + "requestNewLink": "Request a new link", + "setNewPassword": "Set a new password", + "linkInvalid": "This link is not valid", + "createAccountButton": "Create account", + "createYourAccount": "Create your account", + "displayNameLabel": "Display name", + "usernameHint": "lowercase letters, numbers, dot and dash", + "termsShort": "By creating an account you agree to our Terms of Service and Privacy", + "checkYourEmail": "Check your email", + "resetYourPassword": "Reset your password", + "serverChangeWarning": "Changing the server clears locally cached data on this device.", + "serverConnected": "Connected. Taking you to sign in...", + "passwordLabel": "Password", + "showPassword": "Show password", + "hidePassword": "Hide password", + "loginPasswordPlaceholder": "Enter your password", + "signupPasswordPlaceholder": "At least 8 characters", + "signupPasswordHelper": "Use 8 to 64 characters.", + "orContinueWith": "or continue with", + "signupSignInFailed": "Your account was created, but signing in failed. Please sign in.", + "authenticating": { + "signingIn": "Signing you in", + "signingInSub": "This will only take a moment.", + "unknownProvider": "Unknown sign-in provider", + "contactSupport": "Please contact support.", + "signInFailed": "Sign-in failed", + "mfaCancelled": "Two-factor authentication was cancelled.", + "requestNotVerified": "The sign-in request could not be verified.", + "tryAgain": "Please try again.", + "mfaSessionMissing": "The MFA session is missing. Please try again.", + "twoFactor": "Two-factor authentication", + "verifyToContinue": "Verify your login to continue.", + "noToken": "No valid authentication token was returned.", + "backToSignIn": "Back to sign in", + "mfaFailed": "Two-factor authentication failed. Please try again." + } +} From 8d6874072e0e43f812874fbe612afb80664fa828 Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:04:26 -0400 Subject: [PATCH 19/88] New translations filters.json (Spanish) [ci skip] --- public/locales/es/filters.json | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 public/locales/es/filters.json diff --git a/public/locales/es/filters.json b/public/locales/es/filters.json new file mode 100644 index 0000000..6b10047 --- /dev/null +++ b/public/locales/es/filters.json @@ -0,0 +1,17 @@ +{ + "builder": { + "errorName": "Please enter a filter name", + "errorConditions": "Please configure at least one filter condition", + "editTitle": "Edit Filter", + "newTitle": "New Filter", + "addConditions": "Add conditions to preview", + "save": "Save Filter", + "name": "Filter Name", + "namePlaceholder": "e.g. Overdue tasks for Alice", + "color": "Color" + }, + "nameExists": "A filter with this name already exists", + "tasks_one": "{{count}} task", + "tasks_other": "{{count}} tasks", + "overdue": "{{count}} overdue" +} From b75527fe6c5823b50aed1032660d4545cb18be29 Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:04:28 -0400 Subject: [PATCH 20/88] New translations history.json (Spanish) [ci skip] --- public/locales/es/history.json | 89 ++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 public/locales/es/history.json diff --git a/public/locales/es/history.json b/public/locales/es/history.json new file mode 100644 index 0000000..1452849 --- /dev/null +++ b/public/locales/es/history.json @@ -0,0 +1,89 @@ +{ + "edit": { + "title": "Edit History", + "completedDate": "Completed Date", + "note": "Note", + "additionalNotes": "Additional Notes", + "deleteTitle": "Delete History", + "deleteMessage": "Are you sure you want to delete this history?" + }, + "status": { + "inProgress": "In Progress", + "completed": "Completed", + "skipped": "Skipped", + "pendingApproval": "Pending Approval", + "rejected": "Rejected", + "missed": "Missed", + "rescheduled": "Rescheduled", + "scheduled": "Scheduled" + }, + "badge": { + "onTime": "On Time", + "onTimeLabel": "On time" + }, + "detail": { + "title": "Activity Detail", + "openTask": "Open Task", + "editEntry": "Edit Entry", + "performedBy": "Performed by", + "assignedTo": "Assigned to", + "lastUpdated": "Last updated", + "duration": "Duration", + "pointsEarned": "Points earned", + "points_one": "{{count}} pt", + "points_other": "{{count}} pts", + "note": "Note" + }, + "charts": { + "noData": "No data available", + "noLabels": "No Labels", + "unassigned": "Unassigned", + "unknownTask": "Unknown Task", + "late": "Late", + "status": { + "title": "Status", + "description": "Completed tasks status" + }, + "due": { + "title": "Due Date", + "description": "Current tasks due date" + }, + "priority": { + "title": "Priority", + "description": "Tasks by priority" + }, + "labels": { + "title": "Labels", + "description": "Tasks by labels" + }, + "labelsDuration": { + "title": "Labels (time)", + "description": "Time spent by labels (hours)" + }, + "tasksTime": { + "title": "Tasks (time)", + "description": "Time spent by individual tasks (hours)" + }, + "assigneeBreakdown": { + "title": "by Assignee", + "description": "Tasks grouped by assignee" + } + }, + "filter": { + "status": "Status", + "pending": "Pending", + "labels": "Labels", + "hasNotes": "Has Notes", + "hasPoints": "Has Points", + "timePeriod": "Time Period", + "user": "User" + }, + "period": { + "days_one": "{{count}} Day", + "days_other": "{{count}} Days", + "allTime": "All Time" + }, + "activities": { + "title": "Activities" + } +} From 62e401e2150a7bf2de44cbe5d4a54a3d78e71681 Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:04:29 -0400 Subject: [PATCH 21/88] New translations labels.json (Spanish) [ci skip] --- public/locales/es/labels.json | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 public/locales/es/labels.json diff --git a/public/locales/es/labels.json b/public/locales/es/labels.json new file mode 100644 index 0000000..93f96cb --- /dev/null +++ b/public/locales/es/labels.json @@ -0,0 +1,9 @@ +{ + "shared": "Shared", + "delete": { + "title": "Delete Label", + "message": "Are you sure you want to delete this label? This will remove the label from all tasks." + }, + "loadError": "Failed to load labels. Please try again.", + "blurb": "Manage your labels and organize your tasks effectively. Labels will be automatically shared with your circle if they are used on a shared task." +} From 1c89549b01983eaa425f2b10f03601eba88665f5 Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:04:30 -0400 Subject: [PATCH 22/88] New translations points.json (Spanish) [ci skip] --- public/locales/es/points.json | 74 +++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 public/locales/es/points.json diff --git a/public/locales/es/points.json b/public/locales/es/points.json new file mode 100644 index 0000000..a6ccd40 --- /dev/null +++ b/public/locales/es/points.json @@ -0,0 +1,74 @@ +{ + "redeem": "Redeem Points", + "redeemModal": { + "redeemButton": "Redeem", + "pointsAvailable": "{{count}} points available", + "pointsToRedeem": "Points to Redeem", + "placeholder": "Enter points...", + "cannotExceed": "Cannot exceed available points", + "quickAdd": "Quick Add:", + "aboutToRedeem": "You are about to redeem", + "amount": "{{count}} points", + "remaining": "Remaining: {{count}} points" + }, + "leaderboard": { + "titlePoints": "Points Leaderboard", + "titleTasks": "Tasks Leaderboard", + "subtitlePoints": "Rankings based on points earned during the selected time period", + "subtitleTasks": "Rankings based on tasks completed during the selected time period", + "modePoints": "Points", + "modeTasks": "Tasks", + "you": "You", + "tasksAndAvg": "{{tasks}} tasks • {{avg}} avg per task", + "available": "{{count}} available", + "points_one": "{{count}} point", + "points_other": "{{count}} points" + }, + "tabs": { + "short7d": "7D", + "short6m": "6M", + "shortAll": "All", + "days7": "7 Days", + "months6": "6 Months", + "allTime": "All Time" + }, + "filter": { + "analysisTitle": "Filter & Analysis", + "title": "Filter Points", + "showFor": "Show points for:", + "timePeriod": "Time period:" + }, + "cards": { + "available": { + "title": "Available", + "subtext": "Ready to redeem" + }, + "redeemed": { + "title": "Redeemed", + "subtext": "Previously used" + }, + "total": { + "title": "Total", + "subtext": "All time earned" + }, + "period": { + "title": "Period Points", + "allTime": "All time", + "last6Months": "Last 6 months", + "lastDays_one": "Last {{count}} day", + "lastDays_other": "Last {{count}} days" + } + }, + "summary": { + "showingFor": "Showing points for", + "unknownUser": "Unknown User", + "overThe": "over the", + "allTime": "All Time", + "last6Months": "Last 6 Months", + "lastDays_one": "Last {{count}} Day", + "lastDays_other": "Last {{count}} Days" + }, + "trend": { + "title": "Points Trend" + } +} From 83ecc89bc5fb8214f321242f876aac488ddcc676 Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:04:31 -0400 Subject: [PATCH 23/88] New translations projects.json (Spanish) [ci skip] --- public/locales/es/projects.json | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 public/locales/es/projects.json diff --git a/public/locales/es/projects.json b/public/locales/es/projects.json new file mode 100644 index 0000000..0e7eed4 --- /dev/null +++ b/public/locales/es/projects.json @@ -0,0 +1,24 @@ +{ + "iconPicker": { + "chooseIcon": "Choose Project Icon", + "availableIcons": "Available Icons" + }, + "defaultChip": "Default", + "tasks_one": "{{count}} task", + "tasks_other": "{{count}} tasks", + "shared": "Shared", + "delete": { + "title": "Delete Project", + "message": "Are you sure you want to delete \"{{name}}\"? This will remove the project but keep all tasks (they'll move to the Default Project)." + }, + "loadError": "Failed to load projects. Please try again.", + "blurb": "Organize your tasks into projects. Create custom workspaces to keep your tasks organized and easily accessible.", + "defaultDescription": "All tasks without a specific project", + "selector": { + "title": "Projects", + "createNew": "Create New Project", + "createNewDescription": "Add a custom project workspace", + "manage": "Manage Projects", + "manageDescription": "View, edit, and organize all projects" + } +} From a88418fa361d87bb52cb0ab8e59aca4379eff7e1 Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:04:32 -0400 Subject: [PATCH 24/88] New translations things.json (Spanish) [ci skip] --- public/locales/es/things.json | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 public/locales/es/things.json diff --git a/public/locales/es/things.json b/public/locales/es/things.json new file mode 100644 index 0000000..1181eb5 --- /dev/null +++ b/public/locales/es/things.json @@ -0,0 +1,18 @@ +{ + "errName": "Name is required", + "errStateNumber": "State must be a number", + "errStateBool": "State must be true or false", + "errStateRequired": "State is required", + "name": "Name", + "namePlaceholder": "Thing name", + "value": "Value", + "valuePlaceholder": "Thing value", + "updateState": "Update state", + "update": "Update", + "history": { + "overview": "Things Overview", + "visualization": "Data Visualization", + "changeHistory": "Change History", + "updated": "Updated" + } +} From de1034278ea55d23351b54f0309fc3fef6ce1a94 Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:04:33 -0400 Subject: [PATCH 25/88] New translations timer.json (Spanish) [ci skip] --- public/locales/es/timer.json | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 public/locales/es/timer.json diff --git a/public/locales/es/timer.json b/public/locales/es/timer.json new file mode 100644 index 0000000..848fd53 --- /dev/null +++ b/public/locales/es/timer.json @@ -0,0 +1,29 @@ +{ + "toast": { + "sessionUpdatedTitle": "Session updated", + "sessionUpdatedMessage": "Timer session has been updated successfully.", + "sessionUpdateFailTitle": "Failed to update session", + "tryAgain": "Please try again.", + "sessionUpdateErrorTitle": "Error updating session", + "sessionDeletedTitle": "Session deleted", + "sessionDeletedMessage": "Timer session has been deleted successfully.", + "sessionDeleteErrorTitle": "Error deleting session", + "deleteConfirmTitle": "Delete Timer Session", + "deleteConfirmMessage": "Are you sure you want to delete this timer session?" + }, + "loading": "Loading timer data...", + "noData": "No timer data found for this chore.", + "activeWork": "Active Work", + "breakTime": "Break Time", + "workSessions": "Work Sessions", + "totalTime": "Total Time", + "distribution": "Work vs Break Distribution", + "noActiveTime": "No active time yet", + "sessionBreakdown": "Session Breakdown", + "sessions": "Sessions", + "addSession": "Add Session", + "startTime": "Start Time", + "endTime": "End Time", + "leaveEmpty": "Leave empty if session is ongoing", + "noSessionForChore": "No timer session found for this chore." +} From 1eb36ed8e99eef7d036c8107d1793ae0834155e8 Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:04:34 -0400 Subject: [PATCH 26/88] New translations auth.json (Arabic) [ci skip] --- public/locales/ar/auth.json | 111 ++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 public/locales/ar/auth.json diff --git a/public/locales/ar/auth.json b/public/locales/ar/auth.json new file mode 100644 index 0000000..28cdec1 --- /dev/null +++ b/public/locales/ar/auth.json @@ -0,0 +1,111 @@ +{ + "validationError": "Validation Error", + "primaryUsernameRequired": "Primary username is required for sub account login", + "subNameRequired": "Sub account name is required for sub account login", + "usernameRequired": "Username is required", + "passwordRequired": "Password is required", + "loginFailed": "Login Failed", + "genericError": "An error occurred, please try again", + "providerLoginFailed": "{{provider}} Login Failed", + "providerLoginFailedMsg": "Couldn't log in with {{provider}}, please try again", + "providerLoginError": "{{provider}} Login Error", + "networkError": "Network error occurred, please try again", + "mfaFailed": "Two-Factor Authentication Failed", + "oauthError": "OAuth Error", + "oauthBrowserFailed": "Failed to open authentication browser", + "primaryAccount": "Primary Account", + "subAccount": "Sub Account", + "username": "Username", + "primaryUsernamePlaceholder": "Enter primary account username", + "subNamePlaceholder": "Enter sub account name", + "forgotPassword": "Forgot password?", + "or": "or", + "email": "Email", + "displayNamePlaceholder": "How others see your name", + "signupFailed": "Signup Failed", + "signupDisabled": "Signup disabled, please contact admin", + "usernameMinLength": "Username must be at least 4 characters", + "invalidEmail": "Invalid email address", + "passwordLength": "Password must be between 8 and 64 characters", + "displayNameRequired": "Display name is required", + "displayNameChars": "Display name can only contain letters and numbers", + "resetEmailSent": "Reset Email Sent", + "resetEmailSentMsg": "Check your email for password reset instructions", + "resetFailed": "Reset Failed", + "resetFailedMsg": "Failed to send reset email, please try again later", + "emailPlaceholder": "you@example.com", + "passwordUpdated": "Password Updated", + "passwordUpdatedMsg": "Your password has been updated successfully. Redirecting to login...", + "passwordUpdateFailed": "Password Update Failed", + "passwordUpdateFailedMsg": "Failed to update password, please try again later", + "savePassword": "Save password", + "server": { + "url": "Server URL", + "dnsFailed": "Hostname could not be resolved. Check the URL for typos or verify DNS.", + "unreachable": "Unable to reach the server. Check the URL, port, and network connection.", + "invalidUrl": "Invalid URL format. Include the protocol (http:// or https://) and port if needed." + }, + "mfaModal": { + "title": "Two-factor authentication", + "codeRequired": "Please enter a verification code", + "verifyFailed": "Failed to verify code. Please try again.", + "backupHint": "Enter one of the backup codes you saved when setting up two-factor authentication.", + "codeHint": "Enter the 6-digit code from your authenticator app.", + "verify": "Verify & Sign In", + "backupLabel": "Backup code", + "codeLabel": "Verification code", + "backupPlaceholder": "Enter backup code", + "useAuthenticator": "Use authenticator app instead", + "useBackup": "Use a backup code instead", + "backupOnce": "Each backup code can only be used once.", + "invalidCode": "Invalid verification code. Please try again." + }, + "appleLoginFailed": "Apple Login Failed", + "googleLoginFailed": "Google Login Failed", + "createOne": "Create one", + "primaryAccountUsernameLabel": "Primary account username", + "subAccountNameLabel": "Sub account name", + "serverSettings": "Server settings", + "useDifferentAccount": "Use a different account", + "yourUsername": "Your username", + "backToSignIn": "Back to sign in", + "confirmNewPassword": "Confirm new password", + "newPassword": "New password", + "reenterPassword": "Re-enter your password", + "requestNewLink": "Request a new link", + "setNewPassword": "Set a new password", + "linkInvalid": "This link is not valid", + "createAccountButton": "Create account", + "createYourAccount": "Create your account", + "displayNameLabel": "Display name", + "usernameHint": "lowercase letters, numbers, dot and dash", + "termsShort": "By creating an account you agree to our Terms of Service and Privacy", + "checkYourEmail": "Check your email", + "resetYourPassword": "Reset your password", + "serverChangeWarning": "Changing the server clears locally cached data on this device.", + "serverConnected": "Connected. Taking you to sign in...", + "passwordLabel": "Password", + "showPassword": "Show password", + "hidePassword": "Hide password", + "loginPasswordPlaceholder": "Enter your password", + "signupPasswordPlaceholder": "At least 8 characters", + "signupPasswordHelper": "Use 8 to 64 characters.", + "orContinueWith": "or continue with", + "signupSignInFailed": "Your account was created, but signing in failed. Please sign in.", + "authenticating": { + "signingIn": "Signing you in", + "signingInSub": "This will only take a moment.", + "unknownProvider": "Unknown sign-in provider", + "contactSupport": "Please contact support.", + "signInFailed": "Sign-in failed", + "mfaCancelled": "Two-factor authentication was cancelled.", + "requestNotVerified": "The sign-in request could not be verified.", + "tryAgain": "Please try again.", + "mfaSessionMissing": "The MFA session is missing. Please try again.", + "twoFactor": "Two-factor authentication", + "verifyToContinue": "Verify your login to continue.", + "noToken": "No valid authentication token was returned.", + "backToSignIn": "Back to sign in", + "mfaFailed": "Two-factor authentication failed. Please try again." + } +} From c73423a5d1496d0e48d5e84bc0b28260e6e80451 Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:04:35 -0400 Subject: [PATCH 27/88] New translations common.json (German) [ci skip] --- public/locales/de/common.json | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/public/locales/de/common.json b/public/locales/de/common.json index 20c0c0a..da4073f 100644 --- a/public/locales/de/common.json +++ b/public/locales/de/common.json @@ -29,7 +29,8 @@ "filters": "Filter", "activities": "Aktivitäten", "points": "Punkte", - "settings": "Einstellungen" + "settings": "Einstellungen", + "reportBug": "Report a Bug" }, "search": { "title": "Suche", @@ -114,5 +115,37 @@ "subtitle": "Wir haben ein Problem mit Ihren Notizen und Versionsdetails vorausgefüllt. Es wurde noch nichts verschickt – überprüfe es und poste, sobald du bereit bist.", "open": "Eröffne das Problem" } + }, + "done": "Done", + "clearAll": "Clear all", + "upload": { + "quotaTitle": "Storage Quota Exceeded", + "quotaMessage": "You have exceeded your quota for uploading files.", + "tooLargeTitle": "File Too Large", + "tooLargeMessage": "The file you are trying to upload is too large.", + "deniedTitle": "Permission Denied", + "deniedMessage": "You do not have permission to upload files." + }, + "getStarted": "Get Started!", + "imageLoadFailed": "Failed to load image.", + "typeHere": "Type in here…", + "summaryOfChores": "This is a summary of your chores", + "loadingOffline": "You are offline", + "loadingOfflineSub": "This not available while offline. Please check your internet connection and try again.", + "loadingSlow": "This is taking longer than usual. There might be an issue.", + "navigateBack": "Navigate Back", + "bottomNav": "Bottom Navigation", + "profile": "Profile", + "autocompletePlaceholder": "Type here...", + "errorScreen": { + "title": "Something went wrong", + "fallback": "An unexpected error occurred. Try reloading — it usually fixes it.", + "tryAgain": "Try again", + "home": "Home", + "login": "Login", + "hideDetails": "Hide error details", + "showDetails": "Show error details", + "copyToClipboard": "Copy to clipboard", + "copied": "Error details copied to clipboard" } } From b42c5101b45acbc3ff7bed0df6885b16560fa336 Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:04:37 -0400 Subject: [PATCH 28/88] New translations settings.json (German) [ci skip] --- public/locales/de/settings.json | 73 +++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/public/locales/de/settings.json b/public/locales/de/settings.json index 8717f88..bc674cf 100644 --- a/public/locales/de/settings.json +++ b/public/locales/de/settings.json @@ -490,5 +490,78 @@ "notConnected": "Echtzeit-Updates sind aktiviert, aber derzeit nicht verbunden.", "basicPlanNotice": "Echtzeit-Updates sind im Basis-Tarif nicht verfügbar. Wechsle zu Plus, um sofort benachrichtigt zu werden, wenn du oder andere Circle-Mitglieder Aufgaben erledigen, überspringen oder ändern." } + }, + "subscription": { + "sessionFailed": "Failed to create subscription session", + "errorTitle": "Subscription Error", + "errorMessage": "Failed to start subscription process. Please try again.", + "subscribe": "Subscribe", + "cancelAnytime": "Cancel anytime. No hidden fees. Secure payment powered by Stripe." + }, + "childUsers": { + "errNameRequired": "Sub account name is required", + "errNameMin": "Sub account name must be at least 2 characters", + "errNameMax": "Sub account name must be less than 20 characters", + "errNameChars": "Sub account name can only contain lowercase letters, dot and dash", + "errPasswordRequired": "Password is required", + "errPasswordLength": "Password must be between 8 and 64 characters", + "errPasswordMatch": "Passwords do not match", + "errDisplayNameMax": "Display name must be less than 50 characters", + "createTitle": "Create Sub Account", + "createButton": "Create Account", + "nameLabel": "Sub Account Name *", + "namePlaceholder": "Enter sub account name (e.g., sarah)", + "displayNameLabel": "Display Name", + "displayNamePlaceholder": "Display name (optional, defaults to sub account name)", + "passwordLabel": "Password *", + "passwordPlaceholder": "Enter password (8-64 characters)", + "confirmPasswordLabel": "Confirm Password *", + "confirmPasswordPlaceholder": "Confirm password" + }, + "passwordChange": { + "minLength": "Password must be at least 8 characters", + "maxLength": "Password must be less than 64 characters" + }, + "payment": { + "cancelledTitle": "Payment has been cancelled", + "cancelledRedirect": "You will be redirected to the main page shortly.", + "successTitle": "Payment Successful!", + "successRedirect": "You will be redirected to the settings page shortly." + }, + "developer": { + "tokenRefreshed": "Token refreshed successfully", + "endpointCalled": "Refresh token endpoint called successfully", + "clearDbCleared": "Local offline database cleared. Starting full sync...", + "clearDbDone": "Full sync completed from the beginning", + "intro": "View technical information about your authentication tokens and session", + "refreshCookieNote": "Refresh tokens are managed via HTTP-only cookies on web platform", + "noReconnectInfo": "No reconnection information available", + "noTimeoutInfo": "No timeout information available", + "noDebugInfo": "No debug information available" + }, + "backup": { + "keyRequired": "Encryption key is required", + "created": "Backup created and downloaded successfully", + "createFailed": "Failed to create backup", + "selectFile": "Please select a backup file", + "restored": "Backup restored successfully. Please refresh the page.", + "restoreFailed": "Failed to restore backup", + "readFailed": "Failed to read backup file", + "createIntro": "Create an encrypted backup of your data. This backup will include all your chores, history, settings, and optionally your uploaded files.", + "keyPlaceholder": "Enter a strong encryption key", + "includeAssets": "Include uploaded files and assets", + "warningLabel": "Warning:", + "restoreWarning": "Restoring a backup will replace all your current data. This action cannot be undone.", + "restoreKeyPlaceholder": "Enter the encryption key used for this backup" + }, + "deletion": { + "passwordRequired": "Please enter your password to continue", + "passwordAndDelete": "Please enter your password and type DELETE to confirm", + "failed": "Failed to delete account", + "passwordPlaceholder": "Enter your password", + "transferIntro": "You own circles that require ownership transfer before deletion. Please select new owners:", + "selectOwner": "Select new owner", + "confirmPrompt": "Please enter your password and type DELETE to confirm", + "typeDelete": "DELETE" } } From 2d8cb7905392d6145c34770bf22097a1e8bb908d Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:04:38 -0400 Subject: [PATCH 29/88] New translations common.json (Japanese) [ci skip] --- public/locales/ja/common.json | 36 ++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/public/locales/ja/common.json b/public/locales/ja/common.json index 0fb166f..06cae8c 100644 --- a/public/locales/ja/common.json +++ b/public/locales/ja/common.json @@ -29,7 +29,8 @@ "filters": "フィルター", "activities": "アクティビティ", "points": "ポイント", - "settings": "設定" + "settings": "設定", + "reportBug": "Report a Bug" }, "search": { "title": "検索", @@ -64,6 +65,7 @@ "footer": { "navigate": "移動", "open": "開く", + "results_one": "{{count}} result", "results_other": "{{count}} 件の結果", "typeToSearch": "入力して検索" } @@ -113,5 +115,37 @@ "subtitle": "We've filled in an issue with your notes and version details. Nothing has been sent yet — review it and post when you're ready.", "open": "Open the issue" } + }, + "done": "Done", + "clearAll": "Clear all", + "upload": { + "quotaTitle": "Storage Quota Exceeded", + "quotaMessage": "You have exceeded your quota for uploading files.", + "tooLargeTitle": "File Too Large", + "tooLargeMessage": "The file you are trying to upload is too large.", + "deniedTitle": "Permission Denied", + "deniedMessage": "You do not have permission to upload files." + }, + "getStarted": "Get Started!", + "imageLoadFailed": "Failed to load image.", + "typeHere": "Type in here…", + "summaryOfChores": "This is a summary of your chores", + "loadingOffline": "You are offline", + "loadingOfflineSub": "This not available while offline. Please check your internet connection and try again.", + "loadingSlow": "This is taking longer than usual. There might be an issue.", + "navigateBack": "Navigate Back", + "bottomNav": "Bottom Navigation", + "profile": "Profile", + "autocompletePlaceholder": "Type here...", + "errorScreen": { + "title": "Something went wrong", + "fallback": "An unexpected error occurred. Try reloading — it usually fixes it.", + "tryAgain": "Try again", + "home": "Home", + "login": "Login", + "hideDetails": "Hide error details", + "showDetails": "Show error details", + "copyToClipboard": "Copy to clipboard", + "copied": "Error details copied to clipboard" } } From e1725e92d4350909a8f2e0210c5bb1da79b94735 Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:04:39 -0400 Subject: [PATCH 30/88] New translations settings.json (Japanese) [ci skip] --- public/locales/ja/settings.json | 73 +++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/public/locales/ja/settings.json b/public/locales/ja/settings.json index dc433ab..3199f0f 100644 --- a/public/locales/ja/settings.json +++ b/public/locales/ja/settings.json @@ -490,5 +490,78 @@ "notConnected": "リアルタイム更新は有効ですが、現在接続されていません。", "basicPlanNotice": "リアルタイム更新はベーシックプランではご利用いただけません。Plusにアップグレードすると、あなたや他のサークルメンバーがタスクを完了・スキップ・変更したときにすぐ通知を受け取れます。" } + }, + "subscription": { + "sessionFailed": "Failed to create subscription session", + "errorTitle": "Subscription Error", + "errorMessage": "Failed to start subscription process. Please try again.", + "subscribe": "Subscribe", + "cancelAnytime": "Cancel anytime. No hidden fees. Secure payment powered by Stripe." + }, + "childUsers": { + "errNameRequired": "Sub account name is required", + "errNameMin": "Sub account name must be at least 2 characters", + "errNameMax": "Sub account name must be less than 20 characters", + "errNameChars": "Sub account name can only contain lowercase letters, dot and dash", + "errPasswordRequired": "Password is required", + "errPasswordLength": "Password must be between 8 and 64 characters", + "errPasswordMatch": "Passwords do not match", + "errDisplayNameMax": "Display name must be less than 50 characters", + "createTitle": "Create Sub Account", + "createButton": "Create Account", + "nameLabel": "Sub Account Name *", + "namePlaceholder": "Enter sub account name (e.g., sarah)", + "displayNameLabel": "Display Name", + "displayNamePlaceholder": "Display name (optional, defaults to sub account name)", + "passwordLabel": "Password *", + "passwordPlaceholder": "Enter password (8-64 characters)", + "confirmPasswordLabel": "Confirm Password *", + "confirmPasswordPlaceholder": "Confirm password" + }, + "passwordChange": { + "minLength": "Password must be at least 8 characters", + "maxLength": "Password must be less than 64 characters" + }, + "payment": { + "cancelledTitle": "Payment has been cancelled", + "cancelledRedirect": "You will be redirected to the main page shortly.", + "successTitle": "Payment Successful!", + "successRedirect": "You will be redirected to the settings page shortly." + }, + "developer": { + "tokenRefreshed": "Token refreshed successfully", + "endpointCalled": "Refresh token endpoint called successfully", + "clearDbCleared": "Local offline database cleared. Starting full sync...", + "clearDbDone": "Full sync completed from the beginning", + "intro": "View technical information about your authentication tokens and session", + "refreshCookieNote": "Refresh tokens are managed via HTTP-only cookies on web platform", + "noReconnectInfo": "No reconnection information available", + "noTimeoutInfo": "No timeout information available", + "noDebugInfo": "No debug information available" + }, + "backup": { + "keyRequired": "Encryption key is required", + "created": "Backup created and downloaded successfully", + "createFailed": "Failed to create backup", + "selectFile": "Please select a backup file", + "restored": "Backup restored successfully. Please refresh the page.", + "restoreFailed": "Failed to restore backup", + "readFailed": "Failed to read backup file", + "createIntro": "Create an encrypted backup of your data. This backup will include all your chores, history, settings, and optionally your uploaded files.", + "keyPlaceholder": "Enter a strong encryption key", + "includeAssets": "Include uploaded files and assets", + "warningLabel": "Warning:", + "restoreWarning": "Restoring a backup will replace all your current data. This action cannot be undone.", + "restoreKeyPlaceholder": "Enter the encryption key used for this backup" + }, + "deletion": { + "passwordRequired": "Please enter your password to continue", + "passwordAndDelete": "Please enter your password and type DELETE to confirm", + "failed": "Failed to delete account", + "passwordPlaceholder": "Enter your password", + "transferIntro": "You own circles that require ownership transfer before deletion. Please select new owners:", + "selectOwner": "Select new owner", + "confirmPrompt": "Please enter your password and type DELETE to confirm", + "typeDelete": "DELETE" } } From 98b2692d079e328d60bb063d25f5bf07a694ae25 Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:04:41 -0400 Subject: [PATCH 31/88] New translations common.json (Dutch) [ci skip] --- public/locales/nl/common.json | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/public/locales/nl/common.json b/public/locales/nl/common.json index 5da32d4..bc5fb3f 100644 --- a/public/locales/nl/common.json +++ b/public/locales/nl/common.json @@ -29,7 +29,8 @@ "filters": "Filters", "activities": "Activiteiten", "points": "Punten", - "settings": "Instellingen" + "settings": "Instellingen", + "reportBug": "Report a Bug" }, "search": { "title": "Zoeken", @@ -114,5 +115,37 @@ "subtitle": "We've filled in an issue with your notes and version details. Nothing has been sent yet — review it and post when you're ready.", "open": "Open the issue" } + }, + "done": "Done", + "clearAll": "Clear all", + "upload": { + "quotaTitle": "Storage Quota Exceeded", + "quotaMessage": "You have exceeded your quota for uploading files.", + "tooLargeTitle": "File Too Large", + "tooLargeMessage": "The file you are trying to upload is too large.", + "deniedTitle": "Permission Denied", + "deniedMessage": "You do not have permission to upload files." + }, + "getStarted": "Get Started!", + "imageLoadFailed": "Failed to load image.", + "typeHere": "Type in here…", + "summaryOfChores": "This is a summary of your chores", + "loadingOffline": "You are offline", + "loadingOfflineSub": "This not available while offline. Please check your internet connection and try again.", + "loadingSlow": "This is taking longer than usual. There might be an issue.", + "navigateBack": "Navigate Back", + "bottomNav": "Bottom Navigation", + "profile": "Profile", + "autocompletePlaceholder": "Type here...", + "errorScreen": { + "title": "Something went wrong", + "fallback": "An unexpected error occurred. Try reloading — it usually fixes it.", + "tryAgain": "Try again", + "home": "Home", + "login": "Login", + "hideDetails": "Hide error details", + "showDetails": "Show error details", + "copyToClipboard": "Copy to clipboard", + "copied": "Error details copied to clipboard" } } From 2c82f3f4c0fbaf4988e68f8a8eeeb762dc3bff22 Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:04:42 -0400 Subject: [PATCH 32/88] New translations settings.json (Dutch) [ci skip] --- public/locales/nl/settings.json | 73 +++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/public/locales/nl/settings.json b/public/locales/nl/settings.json index a188d42..00720e6 100644 --- a/public/locales/nl/settings.json +++ b/public/locales/nl/settings.json @@ -490,5 +490,78 @@ "notConnected": "Realtime-updates staan aan maar er is momenteel geen verbinding.", "basicPlanNotice": "Realtime-updates zijn niet beschikbaar in het basisabonnement. Upgrade naar Plus om direct meldingen te ontvangen wanneer jij of andere circle-leden taken afronden, overslaan of wijzigen." } + }, + "subscription": { + "sessionFailed": "Failed to create subscription session", + "errorTitle": "Subscription Error", + "errorMessage": "Failed to start subscription process. Please try again.", + "subscribe": "Subscribe", + "cancelAnytime": "Cancel anytime. No hidden fees. Secure payment powered by Stripe." + }, + "childUsers": { + "errNameRequired": "Sub account name is required", + "errNameMin": "Sub account name must be at least 2 characters", + "errNameMax": "Sub account name must be less than 20 characters", + "errNameChars": "Sub account name can only contain lowercase letters, dot and dash", + "errPasswordRequired": "Password is required", + "errPasswordLength": "Password must be between 8 and 64 characters", + "errPasswordMatch": "Passwords do not match", + "errDisplayNameMax": "Display name must be less than 50 characters", + "createTitle": "Create Sub Account", + "createButton": "Create Account", + "nameLabel": "Sub Account Name *", + "namePlaceholder": "Enter sub account name (e.g., sarah)", + "displayNameLabel": "Display Name", + "displayNamePlaceholder": "Display name (optional, defaults to sub account name)", + "passwordLabel": "Password *", + "passwordPlaceholder": "Enter password (8-64 characters)", + "confirmPasswordLabel": "Confirm Password *", + "confirmPasswordPlaceholder": "Confirm password" + }, + "passwordChange": { + "minLength": "Password must be at least 8 characters", + "maxLength": "Password must be less than 64 characters" + }, + "payment": { + "cancelledTitle": "Payment has been cancelled", + "cancelledRedirect": "You will be redirected to the main page shortly.", + "successTitle": "Payment Successful!", + "successRedirect": "You will be redirected to the settings page shortly." + }, + "developer": { + "tokenRefreshed": "Token refreshed successfully", + "endpointCalled": "Refresh token endpoint called successfully", + "clearDbCleared": "Local offline database cleared. Starting full sync...", + "clearDbDone": "Full sync completed from the beginning", + "intro": "View technical information about your authentication tokens and session", + "refreshCookieNote": "Refresh tokens are managed via HTTP-only cookies on web platform", + "noReconnectInfo": "No reconnection information available", + "noTimeoutInfo": "No timeout information available", + "noDebugInfo": "No debug information available" + }, + "backup": { + "keyRequired": "Encryption key is required", + "created": "Backup created and downloaded successfully", + "createFailed": "Failed to create backup", + "selectFile": "Please select a backup file", + "restored": "Backup restored successfully. Please refresh the page.", + "restoreFailed": "Failed to restore backup", + "readFailed": "Failed to read backup file", + "createIntro": "Create an encrypted backup of your data. This backup will include all your chores, history, settings, and optionally your uploaded files.", + "keyPlaceholder": "Enter a strong encryption key", + "includeAssets": "Include uploaded files and assets", + "warningLabel": "Warning:", + "restoreWarning": "Restoring a backup will replace all your current data. This action cannot be undone.", + "restoreKeyPlaceholder": "Enter the encryption key used for this backup" + }, + "deletion": { + "passwordRequired": "Please enter your password to continue", + "passwordAndDelete": "Please enter your password and type DELETE to confirm", + "failed": "Failed to delete account", + "passwordPlaceholder": "Enter your password", + "transferIntro": "You own circles that require ownership transfer before deletion. Please select new owners:", + "selectOwner": "Select new owner", + "confirmPrompt": "Please enter your password and type DELETE to confirm", + "typeDelete": "DELETE" } } From 0f1b4a32961d89023176d24d3599be913a14cddd Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:04:43 -0400 Subject: [PATCH 33/88] New translations common.json (Chinese Simplified) [ci skip] --- public/locales/zh/common.json | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/public/locales/zh/common.json b/public/locales/zh/common.json index 258c263..aa1a1d5 100644 --- a/public/locales/zh/common.json +++ b/public/locales/zh/common.json @@ -29,7 +29,8 @@ "filters": "Filters", "activities": "Activities", "points": "Points", - "settings": "Settings" + "settings": "Settings", + "reportBug": "Report a Bug" }, "search": { "title": "搜索", @@ -114,5 +115,37 @@ "subtitle": "We've filled in an issue with your notes and version details. Nothing has been sent yet — review it and post when you're ready.", "open": "Open the issue" } + }, + "done": "Done", + "clearAll": "Clear all", + "upload": { + "quotaTitle": "Storage Quota Exceeded", + "quotaMessage": "You have exceeded your quota for uploading files.", + "tooLargeTitle": "File Too Large", + "tooLargeMessage": "The file you are trying to upload is too large.", + "deniedTitle": "Permission Denied", + "deniedMessage": "You do not have permission to upload files." + }, + "getStarted": "Get Started!", + "imageLoadFailed": "Failed to load image.", + "typeHere": "Type in here…", + "summaryOfChores": "This is a summary of your chores", + "loadingOffline": "You are offline", + "loadingOfflineSub": "This not available while offline. Please check your internet connection and try again.", + "loadingSlow": "This is taking longer than usual. There might be an issue.", + "navigateBack": "Navigate Back", + "bottomNav": "Bottom Navigation", + "profile": "Profile", + "autocompletePlaceholder": "Type here...", + "errorScreen": { + "title": "Something went wrong", + "fallback": "An unexpected error occurred. Try reloading — it usually fixes it.", + "tryAgain": "Try again", + "home": "Home", + "login": "Login", + "hideDetails": "Hide error details", + "showDetails": "Show error details", + "copyToClipboard": "Copy to clipboard", + "copied": "Error details copied to clipboard" } } From 436f2913a5669d2b7de48084e24a801f05b92547 Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:04:44 -0400 Subject: [PATCH 34/88] New translations settings.json (Chinese Simplified) [ci skip] --- public/locales/zh/settings.json | 73 +++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/public/locales/zh/settings.json b/public/locales/zh/settings.json index c342420..8e9c3a9 100644 --- a/public/locales/zh/settings.json +++ b/public/locales/zh/settings.json @@ -490,5 +490,78 @@ "notConnected": "实时更新已开启,但当前未连接。", "basicPlanNotice": "基础套餐不支持实时更新。升级到 Plus,当你或其他圈子成员完成、跳过或修改任务时即可立即收到通知。" } + }, + "subscription": { + "sessionFailed": "Failed to create subscription session", + "errorTitle": "Subscription Error", + "errorMessage": "Failed to start subscription process. Please try again.", + "subscribe": "Subscribe", + "cancelAnytime": "Cancel anytime. No hidden fees. Secure payment powered by Stripe." + }, + "childUsers": { + "errNameRequired": "Sub account name is required", + "errNameMin": "Sub account name must be at least 2 characters", + "errNameMax": "Sub account name must be less than 20 characters", + "errNameChars": "Sub account name can only contain lowercase letters, dot and dash", + "errPasswordRequired": "Password is required", + "errPasswordLength": "Password must be between 8 and 64 characters", + "errPasswordMatch": "Passwords do not match", + "errDisplayNameMax": "Display name must be less than 50 characters", + "createTitle": "Create Sub Account", + "createButton": "Create Account", + "nameLabel": "Sub Account Name *", + "namePlaceholder": "Enter sub account name (e.g., sarah)", + "displayNameLabel": "Display Name", + "displayNamePlaceholder": "Display name (optional, defaults to sub account name)", + "passwordLabel": "Password *", + "passwordPlaceholder": "Enter password (8-64 characters)", + "confirmPasswordLabel": "Confirm Password *", + "confirmPasswordPlaceholder": "Confirm password" + }, + "passwordChange": { + "minLength": "Password must be at least 8 characters", + "maxLength": "Password must be less than 64 characters" + }, + "payment": { + "cancelledTitle": "Payment has been cancelled", + "cancelledRedirect": "You will be redirected to the main page shortly.", + "successTitle": "Payment Successful!", + "successRedirect": "You will be redirected to the settings page shortly." + }, + "developer": { + "tokenRefreshed": "Token refreshed successfully", + "endpointCalled": "Refresh token endpoint called successfully", + "clearDbCleared": "Local offline database cleared. Starting full sync...", + "clearDbDone": "Full sync completed from the beginning", + "intro": "View technical information about your authentication tokens and session", + "refreshCookieNote": "Refresh tokens are managed via HTTP-only cookies on web platform", + "noReconnectInfo": "No reconnection information available", + "noTimeoutInfo": "No timeout information available", + "noDebugInfo": "No debug information available" + }, + "backup": { + "keyRequired": "Encryption key is required", + "created": "Backup created and downloaded successfully", + "createFailed": "Failed to create backup", + "selectFile": "Please select a backup file", + "restored": "Backup restored successfully. Please refresh the page.", + "restoreFailed": "Failed to restore backup", + "readFailed": "Failed to read backup file", + "createIntro": "Create an encrypted backup of your data. This backup will include all your chores, history, settings, and optionally your uploaded files.", + "keyPlaceholder": "Enter a strong encryption key", + "includeAssets": "Include uploaded files and assets", + "warningLabel": "Warning:", + "restoreWarning": "Restoring a backup will replace all your current data. This action cannot be undone.", + "restoreKeyPlaceholder": "Enter the encryption key used for this backup" + }, + "deletion": { + "passwordRequired": "Please enter your password to continue", + "passwordAndDelete": "Please enter your password and type DELETE to confirm", + "failed": "Failed to delete account", + "passwordPlaceholder": "Enter your password", + "transferIntro": "You own circles that require ownership transfer before deletion. Please select new owners:", + "selectOwner": "Select new owner", + "confirmPrompt": "Please enter your password and type DELETE to confirm", + "typeDelete": "DELETE" } } From 87f7f98a64f9f4ddddb4337d5254402a46a088a8 Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:04:46 -0400 Subject: [PATCH 35/88] New translations common.json (Portuguese, Brazilian) [ci skip] --- public/locales/pt/common.json | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/public/locales/pt/common.json b/public/locales/pt/common.json index dd2514a..15a71ad 100644 --- a/public/locales/pt/common.json +++ b/public/locales/pt/common.json @@ -29,7 +29,8 @@ "filters": "Filtros", "activities": "Atividades", "points": "Pontos", - "settings": "Configurações" + "settings": "Configurações", + "reportBug": "Report a Bug" }, "search": { "title": "Pesquisar", @@ -114,5 +115,37 @@ "subtitle": "We've filled in an issue with your notes and version details. Nothing has been sent yet — review it and post when you're ready.", "open": "Open the issue" } + }, + "done": "Done", + "clearAll": "Clear all", + "upload": { + "quotaTitle": "Storage Quota Exceeded", + "quotaMessage": "You have exceeded your quota for uploading files.", + "tooLargeTitle": "File Too Large", + "tooLargeMessage": "The file you are trying to upload is too large.", + "deniedTitle": "Permission Denied", + "deniedMessage": "You do not have permission to upload files." + }, + "getStarted": "Get Started!", + "imageLoadFailed": "Failed to load image.", + "typeHere": "Type in here…", + "summaryOfChores": "This is a summary of your chores", + "loadingOffline": "You are offline", + "loadingOfflineSub": "This not available while offline. Please check your internet connection and try again.", + "loadingSlow": "This is taking longer than usual. There might be an issue.", + "navigateBack": "Navigate Back", + "bottomNav": "Bottom Navigation", + "profile": "Profile", + "autocompletePlaceholder": "Type here...", + "errorScreen": { + "title": "Something went wrong", + "fallback": "An unexpected error occurred. Try reloading — it usually fixes it.", + "tryAgain": "Try again", + "home": "Home", + "login": "Login", + "hideDetails": "Hide error details", + "showDetails": "Show error details", + "copyToClipboard": "Copy to clipboard", + "copied": "Error details copied to clipboard" } } From cb5e23086a4495d8883e567178619c839069e543 Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:04:47 -0400 Subject: [PATCH 36/88] New translations settings.json (Portuguese, Brazilian) [ci skip] --- public/locales/pt/settings.json | 73 +++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/public/locales/pt/settings.json b/public/locales/pt/settings.json index b12cfee..e27322f 100644 --- a/public/locales/pt/settings.json +++ b/public/locales/pt/settings.json @@ -490,5 +490,78 @@ "notConnected": "As atualizações em tempo real estão ativadas, mas não há conexão no momento.", "basicPlanNotice": "As atualizações em tempo real não estão disponíveis no plano Básico. Mude para o Plus para receber notificações instantâneas quando você ou outros membros do círculo concluírem, pularem ou modificarem tarefas." } + }, + "subscription": { + "sessionFailed": "Failed to create subscription session", + "errorTitle": "Subscription Error", + "errorMessage": "Failed to start subscription process. Please try again.", + "subscribe": "Subscribe", + "cancelAnytime": "Cancel anytime. No hidden fees. Secure payment powered by Stripe." + }, + "childUsers": { + "errNameRequired": "Sub account name is required", + "errNameMin": "Sub account name must be at least 2 characters", + "errNameMax": "Sub account name must be less than 20 characters", + "errNameChars": "Sub account name can only contain lowercase letters, dot and dash", + "errPasswordRequired": "Password is required", + "errPasswordLength": "Password must be between 8 and 64 characters", + "errPasswordMatch": "Passwords do not match", + "errDisplayNameMax": "Display name must be less than 50 characters", + "createTitle": "Create Sub Account", + "createButton": "Create Account", + "nameLabel": "Sub Account Name *", + "namePlaceholder": "Enter sub account name (e.g., sarah)", + "displayNameLabel": "Display Name", + "displayNamePlaceholder": "Display name (optional, defaults to sub account name)", + "passwordLabel": "Password *", + "passwordPlaceholder": "Enter password (8-64 characters)", + "confirmPasswordLabel": "Confirm Password *", + "confirmPasswordPlaceholder": "Confirm password" + }, + "passwordChange": { + "minLength": "Password must be at least 8 characters", + "maxLength": "Password must be less than 64 characters" + }, + "payment": { + "cancelledTitle": "Payment has been cancelled", + "cancelledRedirect": "You will be redirected to the main page shortly.", + "successTitle": "Payment Successful!", + "successRedirect": "You will be redirected to the settings page shortly." + }, + "developer": { + "tokenRefreshed": "Token refreshed successfully", + "endpointCalled": "Refresh token endpoint called successfully", + "clearDbCleared": "Local offline database cleared. Starting full sync...", + "clearDbDone": "Full sync completed from the beginning", + "intro": "View technical information about your authentication tokens and session", + "refreshCookieNote": "Refresh tokens are managed via HTTP-only cookies on web platform", + "noReconnectInfo": "No reconnection information available", + "noTimeoutInfo": "No timeout information available", + "noDebugInfo": "No debug information available" + }, + "backup": { + "keyRequired": "Encryption key is required", + "created": "Backup created and downloaded successfully", + "createFailed": "Failed to create backup", + "selectFile": "Please select a backup file", + "restored": "Backup restored successfully. Please refresh the page.", + "restoreFailed": "Failed to restore backup", + "readFailed": "Failed to read backup file", + "createIntro": "Create an encrypted backup of your data. This backup will include all your chores, history, settings, and optionally your uploaded files.", + "keyPlaceholder": "Enter a strong encryption key", + "includeAssets": "Include uploaded files and assets", + "warningLabel": "Warning:", + "restoreWarning": "Restoring a backup will replace all your current data. This action cannot be undone.", + "restoreKeyPlaceholder": "Enter the encryption key used for this backup" + }, + "deletion": { + "passwordRequired": "Please enter your password to continue", + "passwordAndDelete": "Please enter your password and type DELETE to confirm", + "failed": "Failed to delete account", + "passwordPlaceholder": "Enter your password", + "transferIntro": "You own circles that require ownership transfer before deletion. Please select new owners:", + "selectOwner": "Select new owner", + "confirmPrompt": "Please enter your password and type DELETE to confirm", + "typeDelete": "DELETE" } } From bcd19c5f673edc9e1ae86a3d21d66e5d47246218 Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:04:48 -0400 Subject: [PATCH 37/88] New translations chores.json (German) [ci skip] --- public/locales/de/chores.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/public/locales/de/chores.json b/public/locales/de/chores.json index e47f49e..cba362c 100644 --- a/public/locales/de/chores.json +++ b/public/locales/de/chores.json @@ -71,5 +71,11 @@ "reset": "Timer zurücksetzen", "delete": "Sitzung löschen" } + }, + "toolbar": { + "defaultProject": "Default Project" + }, + "sort": { + "assignedToMe": "Assigned to me" } } From 465307481164afea60a04041d7eaf856890505ec Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:04:49 -0400 Subject: [PATCH 38/88] New translations chores.json (Japanese) [ci skip] --- public/locales/ja/chores.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/public/locales/ja/chores.json b/public/locales/ja/chores.json index cb1dac3..a9c5c99 100644 --- a/public/locales/ja/chores.json +++ b/public/locales/ja/chores.json @@ -71,5 +71,11 @@ "reset": "タイマーをリセット", "delete": "セッションを削除" } + }, + "toolbar": { + "defaultProject": "Default Project" + }, + "sort": { + "assignedToMe": "Assigned to me" } } From 7c5b5d534e4b9dab1654a34bf451a48b51b7de6d Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:04:50 -0400 Subject: [PATCH 39/88] New translations chores.json (Dutch) [ci skip] --- public/locales/nl/chores.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/public/locales/nl/chores.json b/public/locales/nl/chores.json index 04569df..0bb8f25 100644 --- a/public/locales/nl/chores.json +++ b/public/locales/nl/chores.json @@ -71,5 +71,11 @@ "reset": "Timer Resetten", "delete": "Sessie Verwijderen" } + }, + "toolbar": { + "defaultProject": "Default Project" + }, + "sort": { + "assignedToMe": "Assigned to me" } } From afe396419889f25f4be06ae3436a29449a090c4f Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:04:52 -0400 Subject: [PATCH 40/88] New translations chores.json (Chinese Simplified) [ci skip] --- public/locales/zh/chores.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/public/locales/zh/chores.json b/public/locales/zh/chores.json index ec82037..50b151f 100644 --- a/public/locales/zh/chores.json +++ b/public/locales/zh/chores.json @@ -71,5 +71,11 @@ "reset": "Reset Timer", "delete": "Delete Session" } + }, + "toolbar": { + "defaultProject": "Default Project" + }, + "sort": { + "assignedToMe": "Assigned to me" } } From ba876ac8bf77e0fd69f89e8580e44303c6d1413c Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:04:53 -0400 Subject: [PATCH 41/88] New translations chores.json (Portuguese, Brazilian) [ci skip] --- public/locales/pt/chores.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/public/locales/pt/chores.json b/public/locales/pt/chores.json index 7e4df50..52f8fbf 100644 --- a/public/locales/pt/chores.json +++ b/public/locales/pt/chores.json @@ -71,5 +71,11 @@ "reset": "Reiniciar cronômetro", "delete": "Excluir sessão" } + }, + "toolbar": { + "defaultProject": "Default Project" + }, + "sort": { + "assignedToMe": "Assigned to me" } } From 7c434602f5f0af96d383186c1ebadbbe9046bdc9 Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:04:54 -0400 Subject: [PATCH 42/88] New translations filters.json (Arabic) [ci skip] --- public/locales/ar/filters.json | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 public/locales/ar/filters.json diff --git a/public/locales/ar/filters.json b/public/locales/ar/filters.json new file mode 100644 index 0000000..6b10047 --- /dev/null +++ b/public/locales/ar/filters.json @@ -0,0 +1,17 @@ +{ + "builder": { + "errorName": "Please enter a filter name", + "errorConditions": "Please configure at least one filter condition", + "editTitle": "Edit Filter", + "newTitle": "New Filter", + "addConditions": "Add conditions to preview", + "save": "Save Filter", + "name": "Filter Name", + "namePlaceholder": "e.g. Overdue tasks for Alice", + "color": "Color" + }, + "nameExists": "A filter with this name already exists", + "tasks_one": "{{count}} task", + "tasks_other": "{{count}} tasks", + "overdue": "{{count}} overdue" +} From 43387dc56db4cb319621d542344848bf9527953b Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:04:55 -0400 Subject: [PATCH 43/88] New translations history.json (Arabic) [ci skip] --- public/locales/ar/history.json | 89 ++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 public/locales/ar/history.json diff --git a/public/locales/ar/history.json b/public/locales/ar/history.json new file mode 100644 index 0000000..1452849 --- /dev/null +++ b/public/locales/ar/history.json @@ -0,0 +1,89 @@ +{ + "edit": { + "title": "Edit History", + "completedDate": "Completed Date", + "note": "Note", + "additionalNotes": "Additional Notes", + "deleteTitle": "Delete History", + "deleteMessage": "Are you sure you want to delete this history?" + }, + "status": { + "inProgress": "In Progress", + "completed": "Completed", + "skipped": "Skipped", + "pendingApproval": "Pending Approval", + "rejected": "Rejected", + "missed": "Missed", + "rescheduled": "Rescheduled", + "scheduled": "Scheduled" + }, + "badge": { + "onTime": "On Time", + "onTimeLabel": "On time" + }, + "detail": { + "title": "Activity Detail", + "openTask": "Open Task", + "editEntry": "Edit Entry", + "performedBy": "Performed by", + "assignedTo": "Assigned to", + "lastUpdated": "Last updated", + "duration": "Duration", + "pointsEarned": "Points earned", + "points_one": "{{count}} pt", + "points_other": "{{count}} pts", + "note": "Note" + }, + "charts": { + "noData": "No data available", + "noLabels": "No Labels", + "unassigned": "Unassigned", + "unknownTask": "Unknown Task", + "late": "Late", + "status": { + "title": "Status", + "description": "Completed tasks status" + }, + "due": { + "title": "Due Date", + "description": "Current tasks due date" + }, + "priority": { + "title": "Priority", + "description": "Tasks by priority" + }, + "labels": { + "title": "Labels", + "description": "Tasks by labels" + }, + "labelsDuration": { + "title": "Labels (time)", + "description": "Time spent by labels (hours)" + }, + "tasksTime": { + "title": "Tasks (time)", + "description": "Time spent by individual tasks (hours)" + }, + "assigneeBreakdown": { + "title": "by Assignee", + "description": "Tasks grouped by assignee" + } + }, + "filter": { + "status": "Status", + "pending": "Pending", + "labels": "Labels", + "hasNotes": "Has Notes", + "hasPoints": "Has Points", + "timePeriod": "Time Period", + "user": "User" + }, + "period": { + "days_one": "{{count}} Day", + "days_other": "{{count}} Days", + "allTime": "All Time" + }, + "activities": { + "title": "Activities" + } +} From 206eb69dec463b516768097402fd2772b307c4f9 Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:04:56 -0400 Subject: [PATCH 44/88] New translations labels.json (Arabic) [ci skip] --- public/locales/ar/labels.json | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 public/locales/ar/labels.json diff --git a/public/locales/ar/labels.json b/public/locales/ar/labels.json new file mode 100644 index 0000000..93f96cb --- /dev/null +++ b/public/locales/ar/labels.json @@ -0,0 +1,9 @@ +{ + "shared": "Shared", + "delete": { + "title": "Delete Label", + "message": "Are you sure you want to delete this label? This will remove the label from all tasks." + }, + "loadError": "Failed to load labels. Please try again.", + "blurb": "Manage your labels and organize your tasks effectively. Labels will be automatically shared with your circle if they are used on a shared task." +} From 74efb4823632f30376b2cf282e7417bb0176e38f Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:04:57 -0400 Subject: [PATCH 45/88] New translations points.json (Arabic) [ci skip] --- public/locales/ar/points.json | 74 +++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 public/locales/ar/points.json diff --git a/public/locales/ar/points.json b/public/locales/ar/points.json new file mode 100644 index 0000000..a6ccd40 --- /dev/null +++ b/public/locales/ar/points.json @@ -0,0 +1,74 @@ +{ + "redeem": "Redeem Points", + "redeemModal": { + "redeemButton": "Redeem", + "pointsAvailable": "{{count}} points available", + "pointsToRedeem": "Points to Redeem", + "placeholder": "Enter points...", + "cannotExceed": "Cannot exceed available points", + "quickAdd": "Quick Add:", + "aboutToRedeem": "You are about to redeem", + "amount": "{{count}} points", + "remaining": "Remaining: {{count}} points" + }, + "leaderboard": { + "titlePoints": "Points Leaderboard", + "titleTasks": "Tasks Leaderboard", + "subtitlePoints": "Rankings based on points earned during the selected time period", + "subtitleTasks": "Rankings based on tasks completed during the selected time period", + "modePoints": "Points", + "modeTasks": "Tasks", + "you": "You", + "tasksAndAvg": "{{tasks}} tasks • {{avg}} avg per task", + "available": "{{count}} available", + "points_one": "{{count}} point", + "points_other": "{{count}} points" + }, + "tabs": { + "short7d": "7D", + "short6m": "6M", + "shortAll": "All", + "days7": "7 Days", + "months6": "6 Months", + "allTime": "All Time" + }, + "filter": { + "analysisTitle": "Filter & Analysis", + "title": "Filter Points", + "showFor": "Show points for:", + "timePeriod": "Time period:" + }, + "cards": { + "available": { + "title": "Available", + "subtext": "Ready to redeem" + }, + "redeemed": { + "title": "Redeemed", + "subtext": "Previously used" + }, + "total": { + "title": "Total", + "subtext": "All time earned" + }, + "period": { + "title": "Period Points", + "allTime": "All time", + "last6Months": "Last 6 months", + "lastDays_one": "Last {{count}} day", + "lastDays_other": "Last {{count}} days" + } + }, + "summary": { + "showingFor": "Showing points for", + "unknownUser": "Unknown User", + "overThe": "over the", + "allTime": "All Time", + "last6Months": "Last 6 Months", + "lastDays_one": "Last {{count}} Day", + "lastDays_other": "Last {{count}} Days" + }, + "trend": { + "title": "Points Trend" + } +} From 68d9d3d642eb14064e5515b2ba1736194000dcfd Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:04:58 -0400 Subject: [PATCH 46/88] New translations projects.json (Arabic) [ci skip] --- public/locales/ar/projects.json | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 public/locales/ar/projects.json diff --git a/public/locales/ar/projects.json b/public/locales/ar/projects.json new file mode 100644 index 0000000..0e7eed4 --- /dev/null +++ b/public/locales/ar/projects.json @@ -0,0 +1,24 @@ +{ + "iconPicker": { + "chooseIcon": "Choose Project Icon", + "availableIcons": "Available Icons" + }, + "defaultChip": "Default", + "tasks_one": "{{count}} task", + "tasks_other": "{{count}} tasks", + "shared": "Shared", + "delete": { + "title": "Delete Project", + "message": "Are you sure you want to delete \"{{name}}\"? This will remove the project but keep all tasks (they'll move to the Default Project)." + }, + "loadError": "Failed to load projects. Please try again.", + "blurb": "Organize your tasks into projects. Create custom workspaces to keep your tasks organized and easily accessible.", + "defaultDescription": "All tasks without a specific project", + "selector": { + "title": "Projects", + "createNew": "Create New Project", + "createNewDescription": "Add a custom project workspace", + "manage": "Manage Projects", + "manageDescription": "View, edit, and organize all projects" + } +} From dc9ec6f9bdd5b3575f341fa80e48afa4d90ac96d Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:04:59 -0400 Subject: [PATCH 47/88] New translations things.json (Arabic) [ci skip] --- public/locales/ar/things.json | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 public/locales/ar/things.json diff --git a/public/locales/ar/things.json b/public/locales/ar/things.json new file mode 100644 index 0000000..1181eb5 --- /dev/null +++ b/public/locales/ar/things.json @@ -0,0 +1,18 @@ +{ + "errName": "Name is required", + "errStateNumber": "State must be a number", + "errStateBool": "State must be true or false", + "errStateRequired": "State is required", + "name": "Name", + "namePlaceholder": "Thing name", + "value": "Value", + "valuePlaceholder": "Thing value", + "updateState": "Update state", + "update": "Update", + "history": { + "overview": "Things Overview", + "visualization": "Data Visualization", + "changeHistory": "Change History", + "updated": "Updated" + } +} From 8b6d82c657407b0d6bda8388ce859114c08e5cb6 Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:05:01 -0400 Subject: [PATCH 48/88] New translations timer.json (Arabic) [ci skip] --- public/locales/ar/timer.json | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 public/locales/ar/timer.json diff --git a/public/locales/ar/timer.json b/public/locales/ar/timer.json new file mode 100644 index 0000000..848fd53 --- /dev/null +++ b/public/locales/ar/timer.json @@ -0,0 +1,29 @@ +{ + "toast": { + "sessionUpdatedTitle": "Session updated", + "sessionUpdatedMessage": "Timer session has been updated successfully.", + "sessionUpdateFailTitle": "Failed to update session", + "tryAgain": "Please try again.", + "sessionUpdateErrorTitle": "Error updating session", + "sessionDeletedTitle": "Session deleted", + "sessionDeletedMessage": "Timer session has been deleted successfully.", + "sessionDeleteErrorTitle": "Error deleting session", + "deleteConfirmTitle": "Delete Timer Session", + "deleteConfirmMessage": "Are you sure you want to delete this timer session?" + }, + "loading": "Loading timer data...", + "noData": "No timer data found for this chore.", + "activeWork": "Active Work", + "breakTime": "Break Time", + "workSessions": "Work Sessions", + "totalTime": "Total Time", + "distribution": "Work vs Break Distribution", + "noActiveTime": "No active time yet", + "sessionBreakdown": "Session Breakdown", + "sessions": "Sessions", + "addSession": "Add Session", + "startTime": "Start Time", + "endTime": "End Time", + "leaveEmpty": "Leave empty if session is ongoing", + "noSessionForChore": "No timer session found for this chore." +} From d09c32216fa62637b9c7694f0f3efcb21552b53f Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:05:02 -0400 Subject: [PATCH 49/88] New translations auth.json (German) [ci skip] --- public/locales/de/auth.json | 111 ++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 public/locales/de/auth.json diff --git a/public/locales/de/auth.json b/public/locales/de/auth.json new file mode 100644 index 0000000..28cdec1 --- /dev/null +++ b/public/locales/de/auth.json @@ -0,0 +1,111 @@ +{ + "validationError": "Validation Error", + "primaryUsernameRequired": "Primary username is required for sub account login", + "subNameRequired": "Sub account name is required for sub account login", + "usernameRequired": "Username is required", + "passwordRequired": "Password is required", + "loginFailed": "Login Failed", + "genericError": "An error occurred, please try again", + "providerLoginFailed": "{{provider}} Login Failed", + "providerLoginFailedMsg": "Couldn't log in with {{provider}}, please try again", + "providerLoginError": "{{provider}} Login Error", + "networkError": "Network error occurred, please try again", + "mfaFailed": "Two-Factor Authentication Failed", + "oauthError": "OAuth Error", + "oauthBrowserFailed": "Failed to open authentication browser", + "primaryAccount": "Primary Account", + "subAccount": "Sub Account", + "username": "Username", + "primaryUsernamePlaceholder": "Enter primary account username", + "subNamePlaceholder": "Enter sub account name", + "forgotPassword": "Forgot password?", + "or": "or", + "email": "Email", + "displayNamePlaceholder": "How others see your name", + "signupFailed": "Signup Failed", + "signupDisabled": "Signup disabled, please contact admin", + "usernameMinLength": "Username must be at least 4 characters", + "invalidEmail": "Invalid email address", + "passwordLength": "Password must be between 8 and 64 characters", + "displayNameRequired": "Display name is required", + "displayNameChars": "Display name can only contain letters and numbers", + "resetEmailSent": "Reset Email Sent", + "resetEmailSentMsg": "Check your email for password reset instructions", + "resetFailed": "Reset Failed", + "resetFailedMsg": "Failed to send reset email, please try again later", + "emailPlaceholder": "you@example.com", + "passwordUpdated": "Password Updated", + "passwordUpdatedMsg": "Your password has been updated successfully. Redirecting to login...", + "passwordUpdateFailed": "Password Update Failed", + "passwordUpdateFailedMsg": "Failed to update password, please try again later", + "savePassword": "Save password", + "server": { + "url": "Server URL", + "dnsFailed": "Hostname could not be resolved. Check the URL for typos or verify DNS.", + "unreachable": "Unable to reach the server. Check the URL, port, and network connection.", + "invalidUrl": "Invalid URL format. Include the protocol (http:// or https://) and port if needed." + }, + "mfaModal": { + "title": "Two-factor authentication", + "codeRequired": "Please enter a verification code", + "verifyFailed": "Failed to verify code. Please try again.", + "backupHint": "Enter one of the backup codes you saved when setting up two-factor authentication.", + "codeHint": "Enter the 6-digit code from your authenticator app.", + "verify": "Verify & Sign In", + "backupLabel": "Backup code", + "codeLabel": "Verification code", + "backupPlaceholder": "Enter backup code", + "useAuthenticator": "Use authenticator app instead", + "useBackup": "Use a backup code instead", + "backupOnce": "Each backup code can only be used once.", + "invalidCode": "Invalid verification code. Please try again." + }, + "appleLoginFailed": "Apple Login Failed", + "googleLoginFailed": "Google Login Failed", + "createOne": "Create one", + "primaryAccountUsernameLabel": "Primary account username", + "subAccountNameLabel": "Sub account name", + "serverSettings": "Server settings", + "useDifferentAccount": "Use a different account", + "yourUsername": "Your username", + "backToSignIn": "Back to sign in", + "confirmNewPassword": "Confirm new password", + "newPassword": "New password", + "reenterPassword": "Re-enter your password", + "requestNewLink": "Request a new link", + "setNewPassword": "Set a new password", + "linkInvalid": "This link is not valid", + "createAccountButton": "Create account", + "createYourAccount": "Create your account", + "displayNameLabel": "Display name", + "usernameHint": "lowercase letters, numbers, dot and dash", + "termsShort": "By creating an account you agree to our Terms of Service and Privacy", + "checkYourEmail": "Check your email", + "resetYourPassword": "Reset your password", + "serverChangeWarning": "Changing the server clears locally cached data on this device.", + "serverConnected": "Connected. Taking you to sign in...", + "passwordLabel": "Password", + "showPassword": "Show password", + "hidePassword": "Hide password", + "loginPasswordPlaceholder": "Enter your password", + "signupPasswordPlaceholder": "At least 8 characters", + "signupPasswordHelper": "Use 8 to 64 characters.", + "orContinueWith": "or continue with", + "signupSignInFailed": "Your account was created, but signing in failed. Please sign in.", + "authenticating": { + "signingIn": "Signing you in", + "signingInSub": "This will only take a moment.", + "unknownProvider": "Unknown sign-in provider", + "contactSupport": "Please contact support.", + "signInFailed": "Sign-in failed", + "mfaCancelled": "Two-factor authentication was cancelled.", + "requestNotVerified": "The sign-in request could not be verified.", + "tryAgain": "Please try again.", + "mfaSessionMissing": "The MFA session is missing. Please try again.", + "twoFactor": "Two-factor authentication", + "verifyToContinue": "Verify your login to continue.", + "noToken": "No valid authentication token was returned.", + "backToSignIn": "Back to sign in", + "mfaFailed": "Two-factor authentication failed. Please try again." + } +} From 249434de44bba9636080b82869f02324ae8574c7 Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:05:03 -0400 Subject: [PATCH 50/88] New translations filters.json (German) [ci skip] --- public/locales/de/filters.json | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 public/locales/de/filters.json diff --git a/public/locales/de/filters.json b/public/locales/de/filters.json new file mode 100644 index 0000000..6b10047 --- /dev/null +++ b/public/locales/de/filters.json @@ -0,0 +1,17 @@ +{ + "builder": { + "errorName": "Please enter a filter name", + "errorConditions": "Please configure at least one filter condition", + "editTitle": "Edit Filter", + "newTitle": "New Filter", + "addConditions": "Add conditions to preview", + "save": "Save Filter", + "name": "Filter Name", + "namePlaceholder": "e.g. Overdue tasks for Alice", + "color": "Color" + }, + "nameExists": "A filter with this name already exists", + "tasks_one": "{{count}} task", + "tasks_other": "{{count}} tasks", + "overdue": "{{count}} overdue" +} From 689e390190f468c704b207f176b54b97b5caaa82 Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:05:04 -0400 Subject: [PATCH 51/88] New translations history.json (German) [ci skip] --- public/locales/de/history.json | 89 ++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 public/locales/de/history.json diff --git a/public/locales/de/history.json b/public/locales/de/history.json new file mode 100644 index 0000000..1452849 --- /dev/null +++ b/public/locales/de/history.json @@ -0,0 +1,89 @@ +{ + "edit": { + "title": "Edit History", + "completedDate": "Completed Date", + "note": "Note", + "additionalNotes": "Additional Notes", + "deleteTitle": "Delete History", + "deleteMessage": "Are you sure you want to delete this history?" + }, + "status": { + "inProgress": "In Progress", + "completed": "Completed", + "skipped": "Skipped", + "pendingApproval": "Pending Approval", + "rejected": "Rejected", + "missed": "Missed", + "rescheduled": "Rescheduled", + "scheduled": "Scheduled" + }, + "badge": { + "onTime": "On Time", + "onTimeLabel": "On time" + }, + "detail": { + "title": "Activity Detail", + "openTask": "Open Task", + "editEntry": "Edit Entry", + "performedBy": "Performed by", + "assignedTo": "Assigned to", + "lastUpdated": "Last updated", + "duration": "Duration", + "pointsEarned": "Points earned", + "points_one": "{{count}} pt", + "points_other": "{{count}} pts", + "note": "Note" + }, + "charts": { + "noData": "No data available", + "noLabels": "No Labels", + "unassigned": "Unassigned", + "unknownTask": "Unknown Task", + "late": "Late", + "status": { + "title": "Status", + "description": "Completed tasks status" + }, + "due": { + "title": "Due Date", + "description": "Current tasks due date" + }, + "priority": { + "title": "Priority", + "description": "Tasks by priority" + }, + "labels": { + "title": "Labels", + "description": "Tasks by labels" + }, + "labelsDuration": { + "title": "Labels (time)", + "description": "Time spent by labels (hours)" + }, + "tasksTime": { + "title": "Tasks (time)", + "description": "Time spent by individual tasks (hours)" + }, + "assigneeBreakdown": { + "title": "by Assignee", + "description": "Tasks grouped by assignee" + } + }, + "filter": { + "status": "Status", + "pending": "Pending", + "labels": "Labels", + "hasNotes": "Has Notes", + "hasPoints": "Has Points", + "timePeriod": "Time Period", + "user": "User" + }, + "period": { + "days_one": "{{count}} Day", + "days_other": "{{count}} Days", + "allTime": "All Time" + }, + "activities": { + "title": "Activities" + } +} From a1f609c5513ca4d0c44cfe5031d512ebac896ca3 Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:05:05 -0400 Subject: [PATCH 52/88] New translations labels.json (German) [ci skip] --- public/locales/de/labels.json | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 public/locales/de/labels.json diff --git a/public/locales/de/labels.json b/public/locales/de/labels.json new file mode 100644 index 0000000..93f96cb --- /dev/null +++ b/public/locales/de/labels.json @@ -0,0 +1,9 @@ +{ + "shared": "Shared", + "delete": { + "title": "Delete Label", + "message": "Are you sure you want to delete this label? This will remove the label from all tasks." + }, + "loadError": "Failed to load labels. Please try again.", + "blurb": "Manage your labels and organize your tasks effectively. Labels will be automatically shared with your circle if they are used on a shared task." +} From dedc5f4cdc32a3d0bdd46d572c89184ec398a675 Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:05:06 -0400 Subject: [PATCH 53/88] New translations points.json (German) [ci skip] --- public/locales/de/points.json | 74 +++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 public/locales/de/points.json diff --git a/public/locales/de/points.json b/public/locales/de/points.json new file mode 100644 index 0000000..a6ccd40 --- /dev/null +++ b/public/locales/de/points.json @@ -0,0 +1,74 @@ +{ + "redeem": "Redeem Points", + "redeemModal": { + "redeemButton": "Redeem", + "pointsAvailable": "{{count}} points available", + "pointsToRedeem": "Points to Redeem", + "placeholder": "Enter points...", + "cannotExceed": "Cannot exceed available points", + "quickAdd": "Quick Add:", + "aboutToRedeem": "You are about to redeem", + "amount": "{{count}} points", + "remaining": "Remaining: {{count}} points" + }, + "leaderboard": { + "titlePoints": "Points Leaderboard", + "titleTasks": "Tasks Leaderboard", + "subtitlePoints": "Rankings based on points earned during the selected time period", + "subtitleTasks": "Rankings based on tasks completed during the selected time period", + "modePoints": "Points", + "modeTasks": "Tasks", + "you": "You", + "tasksAndAvg": "{{tasks}} tasks • {{avg}} avg per task", + "available": "{{count}} available", + "points_one": "{{count}} point", + "points_other": "{{count}} points" + }, + "tabs": { + "short7d": "7D", + "short6m": "6M", + "shortAll": "All", + "days7": "7 Days", + "months6": "6 Months", + "allTime": "All Time" + }, + "filter": { + "analysisTitle": "Filter & Analysis", + "title": "Filter Points", + "showFor": "Show points for:", + "timePeriod": "Time period:" + }, + "cards": { + "available": { + "title": "Available", + "subtext": "Ready to redeem" + }, + "redeemed": { + "title": "Redeemed", + "subtext": "Previously used" + }, + "total": { + "title": "Total", + "subtext": "All time earned" + }, + "period": { + "title": "Period Points", + "allTime": "All time", + "last6Months": "Last 6 months", + "lastDays_one": "Last {{count}} day", + "lastDays_other": "Last {{count}} days" + } + }, + "summary": { + "showingFor": "Showing points for", + "unknownUser": "Unknown User", + "overThe": "over the", + "allTime": "All Time", + "last6Months": "Last 6 Months", + "lastDays_one": "Last {{count}} Day", + "lastDays_other": "Last {{count}} Days" + }, + "trend": { + "title": "Points Trend" + } +} From 78ddbaf4ed54c342f7a5ac06878d978708aed62f Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:05:07 -0400 Subject: [PATCH 54/88] New translations projects.json (German) [ci skip] --- public/locales/de/projects.json | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 public/locales/de/projects.json diff --git a/public/locales/de/projects.json b/public/locales/de/projects.json new file mode 100644 index 0000000..0e7eed4 --- /dev/null +++ b/public/locales/de/projects.json @@ -0,0 +1,24 @@ +{ + "iconPicker": { + "chooseIcon": "Choose Project Icon", + "availableIcons": "Available Icons" + }, + "defaultChip": "Default", + "tasks_one": "{{count}} task", + "tasks_other": "{{count}} tasks", + "shared": "Shared", + "delete": { + "title": "Delete Project", + "message": "Are you sure you want to delete \"{{name}}\"? This will remove the project but keep all tasks (they'll move to the Default Project)." + }, + "loadError": "Failed to load projects. Please try again.", + "blurb": "Organize your tasks into projects. Create custom workspaces to keep your tasks organized and easily accessible.", + "defaultDescription": "All tasks without a specific project", + "selector": { + "title": "Projects", + "createNew": "Create New Project", + "createNewDescription": "Add a custom project workspace", + "manage": "Manage Projects", + "manageDescription": "View, edit, and organize all projects" + } +} From feae64883b3d39aa1818170fe65121fdd0f15d04 Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:05:08 -0400 Subject: [PATCH 55/88] New translations things.json (German) [ci skip] --- public/locales/de/things.json | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 public/locales/de/things.json diff --git a/public/locales/de/things.json b/public/locales/de/things.json new file mode 100644 index 0000000..1181eb5 --- /dev/null +++ b/public/locales/de/things.json @@ -0,0 +1,18 @@ +{ + "errName": "Name is required", + "errStateNumber": "State must be a number", + "errStateBool": "State must be true or false", + "errStateRequired": "State is required", + "name": "Name", + "namePlaceholder": "Thing name", + "value": "Value", + "valuePlaceholder": "Thing value", + "updateState": "Update state", + "update": "Update", + "history": { + "overview": "Things Overview", + "visualization": "Data Visualization", + "changeHistory": "Change History", + "updated": "Updated" + } +} From 6b066846c885ecfcda4768aedf3ce348bf5b95cf Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:05:09 -0400 Subject: [PATCH 56/88] New translations timer.json (German) [ci skip] --- public/locales/de/timer.json | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 public/locales/de/timer.json diff --git a/public/locales/de/timer.json b/public/locales/de/timer.json new file mode 100644 index 0000000..848fd53 --- /dev/null +++ b/public/locales/de/timer.json @@ -0,0 +1,29 @@ +{ + "toast": { + "sessionUpdatedTitle": "Session updated", + "sessionUpdatedMessage": "Timer session has been updated successfully.", + "sessionUpdateFailTitle": "Failed to update session", + "tryAgain": "Please try again.", + "sessionUpdateErrorTitle": "Error updating session", + "sessionDeletedTitle": "Session deleted", + "sessionDeletedMessage": "Timer session has been deleted successfully.", + "sessionDeleteErrorTitle": "Error deleting session", + "deleteConfirmTitle": "Delete Timer Session", + "deleteConfirmMessage": "Are you sure you want to delete this timer session?" + }, + "loading": "Loading timer data...", + "noData": "No timer data found for this chore.", + "activeWork": "Active Work", + "breakTime": "Break Time", + "workSessions": "Work Sessions", + "totalTime": "Total Time", + "distribution": "Work vs Break Distribution", + "noActiveTime": "No active time yet", + "sessionBreakdown": "Session Breakdown", + "sessions": "Sessions", + "addSession": "Add Session", + "startTime": "Start Time", + "endTime": "End Time", + "leaveEmpty": "Leave empty if session is ongoing", + "noSessionForChore": "No timer session found for this chore." +} From 3bb1cc7114c35df590756d09f6c837d6de189421 Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:05:10 -0400 Subject: [PATCH 57/88] New translations auth.json (Japanese) [ci skip] --- public/locales/ja/auth.json | 111 ++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 public/locales/ja/auth.json diff --git a/public/locales/ja/auth.json b/public/locales/ja/auth.json new file mode 100644 index 0000000..28cdec1 --- /dev/null +++ b/public/locales/ja/auth.json @@ -0,0 +1,111 @@ +{ + "validationError": "Validation Error", + "primaryUsernameRequired": "Primary username is required for sub account login", + "subNameRequired": "Sub account name is required for sub account login", + "usernameRequired": "Username is required", + "passwordRequired": "Password is required", + "loginFailed": "Login Failed", + "genericError": "An error occurred, please try again", + "providerLoginFailed": "{{provider}} Login Failed", + "providerLoginFailedMsg": "Couldn't log in with {{provider}}, please try again", + "providerLoginError": "{{provider}} Login Error", + "networkError": "Network error occurred, please try again", + "mfaFailed": "Two-Factor Authentication Failed", + "oauthError": "OAuth Error", + "oauthBrowserFailed": "Failed to open authentication browser", + "primaryAccount": "Primary Account", + "subAccount": "Sub Account", + "username": "Username", + "primaryUsernamePlaceholder": "Enter primary account username", + "subNamePlaceholder": "Enter sub account name", + "forgotPassword": "Forgot password?", + "or": "or", + "email": "Email", + "displayNamePlaceholder": "How others see your name", + "signupFailed": "Signup Failed", + "signupDisabled": "Signup disabled, please contact admin", + "usernameMinLength": "Username must be at least 4 characters", + "invalidEmail": "Invalid email address", + "passwordLength": "Password must be between 8 and 64 characters", + "displayNameRequired": "Display name is required", + "displayNameChars": "Display name can only contain letters and numbers", + "resetEmailSent": "Reset Email Sent", + "resetEmailSentMsg": "Check your email for password reset instructions", + "resetFailed": "Reset Failed", + "resetFailedMsg": "Failed to send reset email, please try again later", + "emailPlaceholder": "you@example.com", + "passwordUpdated": "Password Updated", + "passwordUpdatedMsg": "Your password has been updated successfully. Redirecting to login...", + "passwordUpdateFailed": "Password Update Failed", + "passwordUpdateFailedMsg": "Failed to update password, please try again later", + "savePassword": "Save password", + "server": { + "url": "Server URL", + "dnsFailed": "Hostname could not be resolved. Check the URL for typos or verify DNS.", + "unreachable": "Unable to reach the server. Check the URL, port, and network connection.", + "invalidUrl": "Invalid URL format. Include the protocol (http:// or https://) and port if needed." + }, + "mfaModal": { + "title": "Two-factor authentication", + "codeRequired": "Please enter a verification code", + "verifyFailed": "Failed to verify code. Please try again.", + "backupHint": "Enter one of the backup codes you saved when setting up two-factor authentication.", + "codeHint": "Enter the 6-digit code from your authenticator app.", + "verify": "Verify & Sign In", + "backupLabel": "Backup code", + "codeLabel": "Verification code", + "backupPlaceholder": "Enter backup code", + "useAuthenticator": "Use authenticator app instead", + "useBackup": "Use a backup code instead", + "backupOnce": "Each backup code can only be used once.", + "invalidCode": "Invalid verification code. Please try again." + }, + "appleLoginFailed": "Apple Login Failed", + "googleLoginFailed": "Google Login Failed", + "createOne": "Create one", + "primaryAccountUsernameLabel": "Primary account username", + "subAccountNameLabel": "Sub account name", + "serverSettings": "Server settings", + "useDifferentAccount": "Use a different account", + "yourUsername": "Your username", + "backToSignIn": "Back to sign in", + "confirmNewPassword": "Confirm new password", + "newPassword": "New password", + "reenterPassword": "Re-enter your password", + "requestNewLink": "Request a new link", + "setNewPassword": "Set a new password", + "linkInvalid": "This link is not valid", + "createAccountButton": "Create account", + "createYourAccount": "Create your account", + "displayNameLabel": "Display name", + "usernameHint": "lowercase letters, numbers, dot and dash", + "termsShort": "By creating an account you agree to our Terms of Service and Privacy", + "checkYourEmail": "Check your email", + "resetYourPassword": "Reset your password", + "serverChangeWarning": "Changing the server clears locally cached data on this device.", + "serverConnected": "Connected. Taking you to sign in...", + "passwordLabel": "Password", + "showPassword": "Show password", + "hidePassword": "Hide password", + "loginPasswordPlaceholder": "Enter your password", + "signupPasswordPlaceholder": "At least 8 characters", + "signupPasswordHelper": "Use 8 to 64 characters.", + "orContinueWith": "or continue with", + "signupSignInFailed": "Your account was created, but signing in failed. Please sign in.", + "authenticating": { + "signingIn": "Signing you in", + "signingInSub": "This will only take a moment.", + "unknownProvider": "Unknown sign-in provider", + "contactSupport": "Please contact support.", + "signInFailed": "Sign-in failed", + "mfaCancelled": "Two-factor authentication was cancelled.", + "requestNotVerified": "The sign-in request could not be verified.", + "tryAgain": "Please try again.", + "mfaSessionMissing": "The MFA session is missing. Please try again.", + "twoFactor": "Two-factor authentication", + "verifyToContinue": "Verify your login to continue.", + "noToken": "No valid authentication token was returned.", + "backToSignIn": "Back to sign in", + "mfaFailed": "Two-factor authentication failed. Please try again." + } +} From 1fabd374abeb988c8b9e05ae1a2e2c5370aa0738 Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:05:12 -0400 Subject: [PATCH 58/88] New translations filters.json (Japanese) [ci skip] --- public/locales/ja/filters.json | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 public/locales/ja/filters.json diff --git a/public/locales/ja/filters.json b/public/locales/ja/filters.json new file mode 100644 index 0000000..6b10047 --- /dev/null +++ b/public/locales/ja/filters.json @@ -0,0 +1,17 @@ +{ + "builder": { + "errorName": "Please enter a filter name", + "errorConditions": "Please configure at least one filter condition", + "editTitle": "Edit Filter", + "newTitle": "New Filter", + "addConditions": "Add conditions to preview", + "save": "Save Filter", + "name": "Filter Name", + "namePlaceholder": "e.g. Overdue tasks for Alice", + "color": "Color" + }, + "nameExists": "A filter with this name already exists", + "tasks_one": "{{count}} task", + "tasks_other": "{{count}} tasks", + "overdue": "{{count}} overdue" +} From f914a4d9bd116b8779b3f6c3666e2285072e77e6 Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:05:13 -0400 Subject: [PATCH 59/88] New translations history.json (Japanese) [ci skip] --- public/locales/ja/history.json | 89 ++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 public/locales/ja/history.json diff --git a/public/locales/ja/history.json b/public/locales/ja/history.json new file mode 100644 index 0000000..1452849 --- /dev/null +++ b/public/locales/ja/history.json @@ -0,0 +1,89 @@ +{ + "edit": { + "title": "Edit History", + "completedDate": "Completed Date", + "note": "Note", + "additionalNotes": "Additional Notes", + "deleteTitle": "Delete History", + "deleteMessage": "Are you sure you want to delete this history?" + }, + "status": { + "inProgress": "In Progress", + "completed": "Completed", + "skipped": "Skipped", + "pendingApproval": "Pending Approval", + "rejected": "Rejected", + "missed": "Missed", + "rescheduled": "Rescheduled", + "scheduled": "Scheduled" + }, + "badge": { + "onTime": "On Time", + "onTimeLabel": "On time" + }, + "detail": { + "title": "Activity Detail", + "openTask": "Open Task", + "editEntry": "Edit Entry", + "performedBy": "Performed by", + "assignedTo": "Assigned to", + "lastUpdated": "Last updated", + "duration": "Duration", + "pointsEarned": "Points earned", + "points_one": "{{count}} pt", + "points_other": "{{count}} pts", + "note": "Note" + }, + "charts": { + "noData": "No data available", + "noLabels": "No Labels", + "unassigned": "Unassigned", + "unknownTask": "Unknown Task", + "late": "Late", + "status": { + "title": "Status", + "description": "Completed tasks status" + }, + "due": { + "title": "Due Date", + "description": "Current tasks due date" + }, + "priority": { + "title": "Priority", + "description": "Tasks by priority" + }, + "labels": { + "title": "Labels", + "description": "Tasks by labels" + }, + "labelsDuration": { + "title": "Labels (time)", + "description": "Time spent by labels (hours)" + }, + "tasksTime": { + "title": "Tasks (time)", + "description": "Time spent by individual tasks (hours)" + }, + "assigneeBreakdown": { + "title": "by Assignee", + "description": "Tasks grouped by assignee" + } + }, + "filter": { + "status": "Status", + "pending": "Pending", + "labels": "Labels", + "hasNotes": "Has Notes", + "hasPoints": "Has Points", + "timePeriod": "Time Period", + "user": "User" + }, + "period": { + "days_one": "{{count}} Day", + "days_other": "{{count}} Days", + "allTime": "All Time" + }, + "activities": { + "title": "Activities" + } +} From a4f141c7b9377ac87c6f1abb10b0ac267b4d2ae2 Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:05:14 -0400 Subject: [PATCH 60/88] New translations labels.json (Japanese) [ci skip] --- public/locales/ja/labels.json | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 public/locales/ja/labels.json diff --git a/public/locales/ja/labels.json b/public/locales/ja/labels.json new file mode 100644 index 0000000..93f96cb --- /dev/null +++ b/public/locales/ja/labels.json @@ -0,0 +1,9 @@ +{ + "shared": "Shared", + "delete": { + "title": "Delete Label", + "message": "Are you sure you want to delete this label? This will remove the label from all tasks." + }, + "loadError": "Failed to load labels. Please try again.", + "blurb": "Manage your labels and organize your tasks effectively. Labels will be automatically shared with your circle if they are used on a shared task." +} From 061ca90ef18c77a686498dda16174b6bcaa88d8f Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:05:15 -0400 Subject: [PATCH 61/88] New translations points.json (Japanese) [ci skip] --- public/locales/ja/points.json | 74 +++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 public/locales/ja/points.json diff --git a/public/locales/ja/points.json b/public/locales/ja/points.json new file mode 100644 index 0000000..a6ccd40 --- /dev/null +++ b/public/locales/ja/points.json @@ -0,0 +1,74 @@ +{ + "redeem": "Redeem Points", + "redeemModal": { + "redeemButton": "Redeem", + "pointsAvailable": "{{count}} points available", + "pointsToRedeem": "Points to Redeem", + "placeholder": "Enter points...", + "cannotExceed": "Cannot exceed available points", + "quickAdd": "Quick Add:", + "aboutToRedeem": "You are about to redeem", + "amount": "{{count}} points", + "remaining": "Remaining: {{count}} points" + }, + "leaderboard": { + "titlePoints": "Points Leaderboard", + "titleTasks": "Tasks Leaderboard", + "subtitlePoints": "Rankings based on points earned during the selected time period", + "subtitleTasks": "Rankings based on tasks completed during the selected time period", + "modePoints": "Points", + "modeTasks": "Tasks", + "you": "You", + "tasksAndAvg": "{{tasks}} tasks • {{avg}} avg per task", + "available": "{{count}} available", + "points_one": "{{count}} point", + "points_other": "{{count}} points" + }, + "tabs": { + "short7d": "7D", + "short6m": "6M", + "shortAll": "All", + "days7": "7 Days", + "months6": "6 Months", + "allTime": "All Time" + }, + "filter": { + "analysisTitle": "Filter & Analysis", + "title": "Filter Points", + "showFor": "Show points for:", + "timePeriod": "Time period:" + }, + "cards": { + "available": { + "title": "Available", + "subtext": "Ready to redeem" + }, + "redeemed": { + "title": "Redeemed", + "subtext": "Previously used" + }, + "total": { + "title": "Total", + "subtext": "All time earned" + }, + "period": { + "title": "Period Points", + "allTime": "All time", + "last6Months": "Last 6 months", + "lastDays_one": "Last {{count}} day", + "lastDays_other": "Last {{count}} days" + } + }, + "summary": { + "showingFor": "Showing points for", + "unknownUser": "Unknown User", + "overThe": "over the", + "allTime": "All Time", + "last6Months": "Last 6 Months", + "lastDays_one": "Last {{count}} Day", + "lastDays_other": "Last {{count}} Days" + }, + "trend": { + "title": "Points Trend" + } +} From 3eedf2bc6bd1df61c46ded8fbdde898fbe6d275f Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:05:16 -0400 Subject: [PATCH 62/88] New translations projects.json (Japanese) [ci skip] --- public/locales/ja/projects.json | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 public/locales/ja/projects.json diff --git a/public/locales/ja/projects.json b/public/locales/ja/projects.json new file mode 100644 index 0000000..0e7eed4 --- /dev/null +++ b/public/locales/ja/projects.json @@ -0,0 +1,24 @@ +{ + "iconPicker": { + "chooseIcon": "Choose Project Icon", + "availableIcons": "Available Icons" + }, + "defaultChip": "Default", + "tasks_one": "{{count}} task", + "tasks_other": "{{count}} tasks", + "shared": "Shared", + "delete": { + "title": "Delete Project", + "message": "Are you sure you want to delete \"{{name}}\"? This will remove the project but keep all tasks (they'll move to the Default Project)." + }, + "loadError": "Failed to load projects. Please try again.", + "blurb": "Organize your tasks into projects. Create custom workspaces to keep your tasks organized and easily accessible.", + "defaultDescription": "All tasks without a specific project", + "selector": { + "title": "Projects", + "createNew": "Create New Project", + "createNewDescription": "Add a custom project workspace", + "manage": "Manage Projects", + "manageDescription": "View, edit, and organize all projects" + } +} From 735b288c40e169acbfd6ba6121f3ad7085f33891 Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:05:17 -0400 Subject: [PATCH 63/88] New translations things.json (Japanese) [ci skip] --- public/locales/ja/things.json | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 public/locales/ja/things.json diff --git a/public/locales/ja/things.json b/public/locales/ja/things.json new file mode 100644 index 0000000..1181eb5 --- /dev/null +++ b/public/locales/ja/things.json @@ -0,0 +1,18 @@ +{ + "errName": "Name is required", + "errStateNumber": "State must be a number", + "errStateBool": "State must be true or false", + "errStateRequired": "State is required", + "name": "Name", + "namePlaceholder": "Thing name", + "value": "Value", + "valuePlaceholder": "Thing value", + "updateState": "Update state", + "update": "Update", + "history": { + "overview": "Things Overview", + "visualization": "Data Visualization", + "changeHistory": "Change History", + "updated": "Updated" + } +} From 96ccf63367833bffa91806a82adbfcab6def9602 Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:05:18 -0400 Subject: [PATCH 64/88] New translations timer.json (Japanese) [ci skip] --- public/locales/ja/timer.json | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 public/locales/ja/timer.json diff --git a/public/locales/ja/timer.json b/public/locales/ja/timer.json new file mode 100644 index 0000000..848fd53 --- /dev/null +++ b/public/locales/ja/timer.json @@ -0,0 +1,29 @@ +{ + "toast": { + "sessionUpdatedTitle": "Session updated", + "sessionUpdatedMessage": "Timer session has been updated successfully.", + "sessionUpdateFailTitle": "Failed to update session", + "tryAgain": "Please try again.", + "sessionUpdateErrorTitle": "Error updating session", + "sessionDeletedTitle": "Session deleted", + "sessionDeletedMessage": "Timer session has been deleted successfully.", + "sessionDeleteErrorTitle": "Error deleting session", + "deleteConfirmTitle": "Delete Timer Session", + "deleteConfirmMessage": "Are you sure you want to delete this timer session?" + }, + "loading": "Loading timer data...", + "noData": "No timer data found for this chore.", + "activeWork": "Active Work", + "breakTime": "Break Time", + "workSessions": "Work Sessions", + "totalTime": "Total Time", + "distribution": "Work vs Break Distribution", + "noActiveTime": "No active time yet", + "sessionBreakdown": "Session Breakdown", + "sessions": "Sessions", + "addSession": "Add Session", + "startTime": "Start Time", + "endTime": "End Time", + "leaveEmpty": "Leave empty if session is ongoing", + "noSessionForChore": "No timer session found for this chore." +} From dd04d6536c7fa4d6f1a46c53368c7e2115623a2b Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:05:19 -0400 Subject: [PATCH 65/88] New translations auth.json (Dutch) [ci skip] --- public/locales/nl/auth.json | 111 ++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 public/locales/nl/auth.json diff --git a/public/locales/nl/auth.json b/public/locales/nl/auth.json new file mode 100644 index 0000000..28cdec1 --- /dev/null +++ b/public/locales/nl/auth.json @@ -0,0 +1,111 @@ +{ + "validationError": "Validation Error", + "primaryUsernameRequired": "Primary username is required for sub account login", + "subNameRequired": "Sub account name is required for sub account login", + "usernameRequired": "Username is required", + "passwordRequired": "Password is required", + "loginFailed": "Login Failed", + "genericError": "An error occurred, please try again", + "providerLoginFailed": "{{provider}} Login Failed", + "providerLoginFailedMsg": "Couldn't log in with {{provider}}, please try again", + "providerLoginError": "{{provider}} Login Error", + "networkError": "Network error occurred, please try again", + "mfaFailed": "Two-Factor Authentication Failed", + "oauthError": "OAuth Error", + "oauthBrowserFailed": "Failed to open authentication browser", + "primaryAccount": "Primary Account", + "subAccount": "Sub Account", + "username": "Username", + "primaryUsernamePlaceholder": "Enter primary account username", + "subNamePlaceholder": "Enter sub account name", + "forgotPassword": "Forgot password?", + "or": "or", + "email": "Email", + "displayNamePlaceholder": "How others see your name", + "signupFailed": "Signup Failed", + "signupDisabled": "Signup disabled, please contact admin", + "usernameMinLength": "Username must be at least 4 characters", + "invalidEmail": "Invalid email address", + "passwordLength": "Password must be between 8 and 64 characters", + "displayNameRequired": "Display name is required", + "displayNameChars": "Display name can only contain letters and numbers", + "resetEmailSent": "Reset Email Sent", + "resetEmailSentMsg": "Check your email for password reset instructions", + "resetFailed": "Reset Failed", + "resetFailedMsg": "Failed to send reset email, please try again later", + "emailPlaceholder": "you@example.com", + "passwordUpdated": "Password Updated", + "passwordUpdatedMsg": "Your password has been updated successfully. Redirecting to login...", + "passwordUpdateFailed": "Password Update Failed", + "passwordUpdateFailedMsg": "Failed to update password, please try again later", + "savePassword": "Save password", + "server": { + "url": "Server URL", + "dnsFailed": "Hostname could not be resolved. Check the URL for typos or verify DNS.", + "unreachable": "Unable to reach the server. Check the URL, port, and network connection.", + "invalidUrl": "Invalid URL format. Include the protocol (http:// or https://) and port if needed." + }, + "mfaModal": { + "title": "Two-factor authentication", + "codeRequired": "Please enter a verification code", + "verifyFailed": "Failed to verify code. Please try again.", + "backupHint": "Enter one of the backup codes you saved when setting up two-factor authentication.", + "codeHint": "Enter the 6-digit code from your authenticator app.", + "verify": "Verify & Sign In", + "backupLabel": "Backup code", + "codeLabel": "Verification code", + "backupPlaceholder": "Enter backup code", + "useAuthenticator": "Use authenticator app instead", + "useBackup": "Use a backup code instead", + "backupOnce": "Each backup code can only be used once.", + "invalidCode": "Invalid verification code. Please try again." + }, + "appleLoginFailed": "Apple Login Failed", + "googleLoginFailed": "Google Login Failed", + "createOne": "Create one", + "primaryAccountUsernameLabel": "Primary account username", + "subAccountNameLabel": "Sub account name", + "serverSettings": "Server settings", + "useDifferentAccount": "Use a different account", + "yourUsername": "Your username", + "backToSignIn": "Back to sign in", + "confirmNewPassword": "Confirm new password", + "newPassword": "New password", + "reenterPassword": "Re-enter your password", + "requestNewLink": "Request a new link", + "setNewPassword": "Set a new password", + "linkInvalid": "This link is not valid", + "createAccountButton": "Create account", + "createYourAccount": "Create your account", + "displayNameLabel": "Display name", + "usernameHint": "lowercase letters, numbers, dot and dash", + "termsShort": "By creating an account you agree to our Terms of Service and Privacy", + "checkYourEmail": "Check your email", + "resetYourPassword": "Reset your password", + "serverChangeWarning": "Changing the server clears locally cached data on this device.", + "serverConnected": "Connected. Taking you to sign in...", + "passwordLabel": "Password", + "showPassword": "Show password", + "hidePassword": "Hide password", + "loginPasswordPlaceholder": "Enter your password", + "signupPasswordPlaceholder": "At least 8 characters", + "signupPasswordHelper": "Use 8 to 64 characters.", + "orContinueWith": "or continue with", + "signupSignInFailed": "Your account was created, but signing in failed. Please sign in.", + "authenticating": { + "signingIn": "Signing you in", + "signingInSub": "This will only take a moment.", + "unknownProvider": "Unknown sign-in provider", + "contactSupport": "Please contact support.", + "signInFailed": "Sign-in failed", + "mfaCancelled": "Two-factor authentication was cancelled.", + "requestNotVerified": "The sign-in request could not be verified.", + "tryAgain": "Please try again.", + "mfaSessionMissing": "The MFA session is missing. Please try again.", + "twoFactor": "Two-factor authentication", + "verifyToContinue": "Verify your login to continue.", + "noToken": "No valid authentication token was returned.", + "backToSignIn": "Back to sign in", + "mfaFailed": "Two-factor authentication failed. Please try again." + } +} From f3808dc0e139f10496a5ff11102558fe73f494f3 Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:05:20 -0400 Subject: [PATCH 66/88] New translations filters.json (Dutch) [ci skip] --- public/locales/nl/filters.json | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 public/locales/nl/filters.json diff --git a/public/locales/nl/filters.json b/public/locales/nl/filters.json new file mode 100644 index 0000000..6b10047 --- /dev/null +++ b/public/locales/nl/filters.json @@ -0,0 +1,17 @@ +{ + "builder": { + "errorName": "Please enter a filter name", + "errorConditions": "Please configure at least one filter condition", + "editTitle": "Edit Filter", + "newTitle": "New Filter", + "addConditions": "Add conditions to preview", + "save": "Save Filter", + "name": "Filter Name", + "namePlaceholder": "e.g. Overdue tasks for Alice", + "color": "Color" + }, + "nameExists": "A filter with this name already exists", + "tasks_one": "{{count}} task", + "tasks_other": "{{count}} tasks", + "overdue": "{{count}} overdue" +} From 57e75d689ad828eaeefbfaf4abe0b2f718bd4975 Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:05:22 -0400 Subject: [PATCH 67/88] New translations history.json (Dutch) [ci skip] --- public/locales/nl/history.json | 89 ++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 public/locales/nl/history.json diff --git a/public/locales/nl/history.json b/public/locales/nl/history.json new file mode 100644 index 0000000..1452849 --- /dev/null +++ b/public/locales/nl/history.json @@ -0,0 +1,89 @@ +{ + "edit": { + "title": "Edit History", + "completedDate": "Completed Date", + "note": "Note", + "additionalNotes": "Additional Notes", + "deleteTitle": "Delete History", + "deleteMessage": "Are you sure you want to delete this history?" + }, + "status": { + "inProgress": "In Progress", + "completed": "Completed", + "skipped": "Skipped", + "pendingApproval": "Pending Approval", + "rejected": "Rejected", + "missed": "Missed", + "rescheduled": "Rescheduled", + "scheduled": "Scheduled" + }, + "badge": { + "onTime": "On Time", + "onTimeLabel": "On time" + }, + "detail": { + "title": "Activity Detail", + "openTask": "Open Task", + "editEntry": "Edit Entry", + "performedBy": "Performed by", + "assignedTo": "Assigned to", + "lastUpdated": "Last updated", + "duration": "Duration", + "pointsEarned": "Points earned", + "points_one": "{{count}} pt", + "points_other": "{{count}} pts", + "note": "Note" + }, + "charts": { + "noData": "No data available", + "noLabels": "No Labels", + "unassigned": "Unassigned", + "unknownTask": "Unknown Task", + "late": "Late", + "status": { + "title": "Status", + "description": "Completed tasks status" + }, + "due": { + "title": "Due Date", + "description": "Current tasks due date" + }, + "priority": { + "title": "Priority", + "description": "Tasks by priority" + }, + "labels": { + "title": "Labels", + "description": "Tasks by labels" + }, + "labelsDuration": { + "title": "Labels (time)", + "description": "Time spent by labels (hours)" + }, + "tasksTime": { + "title": "Tasks (time)", + "description": "Time spent by individual tasks (hours)" + }, + "assigneeBreakdown": { + "title": "by Assignee", + "description": "Tasks grouped by assignee" + } + }, + "filter": { + "status": "Status", + "pending": "Pending", + "labels": "Labels", + "hasNotes": "Has Notes", + "hasPoints": "Has Points", + "timePeriod": "Time Period", + "user": "User" + }, + "period": { + "days_one": "{{count}} Day", + "days_other": "{{count}} Days", + "allTime": "All Time" + }, + "activities": { + "title": "Activities" + } +} From 0ed140a9aad5d05f85694b82f24a7eab9cc79f1b Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:05:23 -0400 Subject: [PATCH 68/88] New translations labels.json (Dutch) [ci skip] --- public/locales/nl/labels.json | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 public/locales/nl/labels.json diff --git a/public/locales/nl/labels.json b/public/locales/nl/labels.json new file mode 100644 index 0000000..93f96cb --- /dev/null +++ b/public/locales/nl/labels.json @@ -0,0 +1,9 @@ +{ + "shared": "Shared", + "delete": { + "title": "Delete Label", + "message": "Are you sure you want to delete this label? This will remove the label from all tasks." + }, + "loadError": "Failed to load labels. Please try again.", + "blurb": "Manage your labels and organize your tasks effectively. Labels will be automatically shared with your circle if they are used on a shared task." +} From 1163085c614c955868d1380110c72331d83f9d52 Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:05:24 -0400 Subject: [PATCH 69/88] New translations points.json (Dutch) [ci skip] --- public/locales/nl/points.json | 74 +++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 public/locales/nl/points.json diff --git a/public/locales/nl/points.json b/public/locales/nl/points.json new file mode 100644 index 0000000..a6ccd40 --- /dev/null +++ b/public/locales/nl/points.json @@ -0,0 +1,74 @@ +{ + "redeem": "Redeem Points", + "redeemModal": { + "redeemButton": "Redeem", + "pointsAvailable": "{{count}} points available", + "pointsToRedeem": "Points to Redeem", + "placeholder": "Enter points...", + "cannotExceed": "Cannot exceed available points", + "quickAdd": "Quick Add:", + "aboutToRedeem": "You are about to redeem", + "amount": "{{count}} points", + "remaining": "Remaining: {{count}} points" + }, + "leaderboard": { + "titlePoints": "Points Leaderboard", + "titleTasks": "Tasks Leaderboard", + "subtitlePoints": "Rankings based on points earned during the selected time period", + "subtitleTasks": "Rankings based on tasks completed during the selected time period", + "modePoints": "Points", + "modeTasks": "Tasks", + "you": "You", + "tasksAndAvg": "{{tasks}} tasks • {{avg}} avg per task", + "available": "{{count}} available", + "points_one": "{{count}} point", + "points_other": "{{count}} points" + }, + "tabs": { + "short7d": "7D", + "short6m": "6M", + "shortAll": "All", + "days7": "7 Days", + "months6": "6 Months", + "allTime": "All Time" + }, + "filter": { + "analysisTitle": "Filter & Analysis", + "title": "Filter Points", + "showFor": "Show points for:", + "timePeriod": "Time period:" + }, + "cards": { + "available": { + "title": "Available", + "subtext": "Ready to redeem" + }, + "redeemed": { + "title": "Redeemed", + "subtext": "Previously used" + }, + "total": { + "title": "Total", + "subtext": "All time earned" + }, + "period": { + "title": "Period Points", + "allTime": "All time", + "last6Months": "Last 6 months", + "lastDays_one": "Last {{count}} day", + "lastDays_other": "Last {{count}} days" + } + }, + "summary": { + "showingFor": "Showing points for", + "unknownUser": "Unknown User", + "overThe": "over the", + "allTime": "All Time", + "last6Months": "Last 6 Months", + "lastDays_one": "Last {{count}} Day", + "lastDays_other": "Last {{count}} Days" + }, + "trend": { + "title": "Points Trend" + } +} From 605eb7f4e67889799b6006a5bd87f057eaa75999 Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:05:25 -0400 Subject: [PATCH 70/88] New translations projects.json (Dutch) [ci skip] --- public/locales/nl/projects.json | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 public/locales/nl/projects.json diff --git a/public/locales/nl/projects.json b/public/locales/nl/projects.json new file mode 100644 index 0000000..0e7eed4 --- /dev/null +++ b/public/locales/nl/projects.json @@ -0,0 +1,24 @@ +{ + "iconPicker": { + "chooseIcon": "Choose Project Icon", + "availableIcons": "Available Icons" + }, + "defaultChip": "Default", + "tasks_one": "{{count}} task", + "tasks_other": "{{count}} tasks", + "shared": "Shared", + "delete": { + "title": "Delete Project", + "message": "Are you sure you want to delete \"{{name}}\"? This will remove the project but keep all tasks (they'll move to the Default Project)." + }, + "loadError": "Failed to load projects. Please try again.", + "blurb": "Organize your tasks into projects. Create custom workspaces to keep your tasks organized and easily accessible.", + "defaultDescription": "All tasks without a specific project", + "selector": { + "title": "Projects", + "createNew": "Create New Project", + "createNewDescription": "Add a custom project workspace", + "manage": "Manage Projects", + "manageDescription": "View, edit, and organize all projects" + } +} From 415b2af31af32513ec8ff1b555fdf662e9b9ab46 Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:05:26 -0400 Subject: [PATCH 71/88] New translations things.json (Dutch) [ci skip] --- public/locales/nl/things.json | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 public/locales/nl/things.json diff --git a/public/locales/nl/things.json b/public/locales/nl/things.json new file mode 100644 index 0000000..1181eb5 --- /dev/null +++ b/public/locales/nl/things.json @@ -0,0 +1,18 @@ +{ + "errName": "Name is required", + "errStateNumber": "State must be a number", + "errStateBool": "State must be true or false", + "errStateRequired": "State is required", + "name": "Name", + "namePlaceholder": "Thing name", + "value": "Value", + "valuePlaceholder": "Thing value", + "updateState": "Update state", + "update": "Update", + "history": { + "overview": "Things Overview", + "visualization": "Data Visualization", + "changeHistory": "Change History", + "updated": "Updated" + } +} From a77c63b73c6729af4d40b897d853bd25b228a9a2 Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:05:27 -0400 Subject: [PATCH 72/88] New translations timer.json (Dutch) [ci skip] --- public/locales/nl/timer.json | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 public/locales/nl/timer.json diff --git a/public/locales/nl/timer.json b/public/locales/nl/timer.json new file mode 100644 index 0000000..848fd53 --- /dev/null +++ b/public/locales/nl/timer.json @@ -0,0 +1,29 @@ +{ + "toast": { + "sessionUpdatedTitle": "Session updated", + "sessionUpdatedMessage": "Timer session has been updated successfully.", + "sessionUpdateFailTitle": "Failed to update session", + "tryAgain": "Please try again.", + "sessionUpdateErrorTitle": "Error updating session", + "sessionDeletedTitle": "Session deleted", + "sessionDeletedMessage": "Timer session has been deleted successfully.", + "sessionDeleteErrorTitle": "Error deleting session", + "deleteConfirmTitle": "Delete Timer Session", + "deleteConfirmMessage": "Are you sure you want to delete this timer session?" + }, + "loading": "Loading timer data...", + "noData": "No timer data found for this chore.", + "activeWork": "Active Work", + "breakTime": "Break Time", + "workSessions": "Work Sessions", + "totalTime": "Total Time", + "distribution": "Work vs Break Distribution", + "noActiveTime": "No active time yet", + "sessionBreakdown": "Session Breakdown", + "sessions": "Sessions", + "addSession": "Add Session", + "startTime": "Start Time", + "endTime": "End Time", + "leaveEmpty": "Leave empty if session is ongoing", + "noSessionForChore": "No timer session found for this chore." +} From 92795317fe010fcfc492d2f2717805bc3f4e1177 Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:05:28 -0400 Subject: [PATCH 73/88] New translations auth.json (Chinese Simplified) [ci skip] --- public/locales/zh/auth.json | 111 ++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 public/locales/zh/auth.json diff --git a/public/locales/zh/auth.json b/public/locales/zh/auth.json new file mode 100644 index 0000000..28cdec1 --- /dev/null +++ b/public/locales/zh/auth.json @@ -0,0 +1,111 @@ +{ + "validationError": "Validation Error", + "primaryUsernameRequired": "Primary username is required for sub account login", + "subNameRequired": "Sub account name is required for sub account login", + "usernameRequired": "Username is required", + "passwordRequired": "Password is required", + "loginFailed": "Login Failed", + "genericError": "An error occurred, please try again", + "providerLoginFailed": "{{provider}} Login Failed", + "providerLoginFailedMsg": "Couldn't log in with {{provider}}, please try again", + "providerLoginError": "{{provider}} Login Error", + "networkError": "Network error occurred, please try again", + "mfaFailed": "Two-Factor Authentication Failed", + "oauthError": "OAuth Error", + "oauthBrowserFailed": "Failed to open authentication browser", + "primaryAccount": "Primary Account", + "subAccount": "Sub Account", + "username": "Username", + "primaryUsernamePlaceholder": "Enter primary account username", + "subNamePlaceholder": "Enter sub account name", + "forgotPassword": "Forgot password?", + "or": "or", + "email": "Email", + "displayNamePlaceholder": "How others see your name", + "signupFailed": "Signup Failed", + "signupDisabled": "Signup disabled, please contact admin", + "usernameMinLength": "Username must be at least 4 characters", + "invalidEmail": "Invalid email address", + "passwordLength": "Password must be between 8 and 64 characters", + "displayNameRequired": "Display name is required", + "displayNameChars": "Display name can only contain letters and numbers", + "resetEmailSent": "Reset Email Sent", + "resetEmailSentMsg": "Check your email for password reset instructions", + "resetFailed": "Reset Failed", + "resetFailedMsg": "Failed to send reset email, please try again later", + "emailPlaceholder": "you@example.com", + "passwordUpdated": "Password Updated", + "passwordUpdatedMsg": "Your password has been updated successfully. Redirecting to login...", + "passwordUpdateFailed": "Password Update Failed", + "passwordUpdateFailedMsg": "Failed to update password, please try again later", + "savePassword": "Save password", + "server": { + "url": "Server URL", + "dnsFailed": "Hostname could not be resolved. Check the URL for typos or verify DNS.", + "unreachable": "Unable to reach the server. Check the URL, port, and network connection.", + "invalidUrl": "Invalid URL format. Include the protocol (http:// or https://) and port if needed." + }, + "mfaModal": { + "title": "Two-factor authentication", + "codeRequired": "Please enter a verification code", + "verifyFailed": "Failed to verify code. Please try again.", + "backupHint": "Enter one of the backup codes you saved when setting up two-factor authentication.", + "codeHint": "Enter the 6-digit code from your authenticator app.", + "verify": "Verify & Sign In", + "backupLabel": "Backup code", + "codeLabel": "Verification code", + "backupPlaceholder": "Enter backup code", + "useAuthenticator": "Use authenticator app instead", + "useBackup": "Use a backup code instead", + "backupOnce": "Each backup code can only be used once.", + "invalidCode": "Invalid verification code. Please try again." + }, + "appleLoginFailed": "Apple Login Failed", + "googleLoginFailed": "Google Login Failed", + "createOne": "Create one", + "primaryAccountUsernameLabel": "Primary account username", + "subAccountNameLabel": "Sub account name", + "serverSettings": "Server settings", + "useDifferentAccount": "Use a different account", + "yourUsername": "Your username", + "backToSignIn": "Back to sign in", + "confirmNewPassword": "Confirm new password", + "newPassword": "New password", + "reenterPassword": "Re-enter your password", + "requestNewLink": "Request a new link", + "setNewPassword": "Set a new password", + "linkInvalid": "This link is not valid", + "createAccountButton": "Create account", + "createYourAccount": "Create your account", + "displayNameLabel": "Display name", + "usernameHint": "lowercase letters, numbers, dot and dash", + "termsShort": "By creating an account you agree to our Terms of Service and Privacy", + "checkYourEmail": "Check your email", + "resetYourPassword": "Reset your password", + "serverChangeWarning": "Changing the server clears locally cached data on this device.", + "serverConnected": "Connected. Taking you to sign in...", + "passwordLabel": "Password", + "showPassword": "Show password", + "hidePassword": "Hide password", + "loginPasswordPlaceholder": "Enter your password", + "signupPasswordPlaceholder": "At least 8 characters", + "signupPasswordHelper": "Use 8 to 64 characters.", + "orContinueWith": "or continue with", + "signupSignInFailed": "Your account was created, but signing in failed. Please sign in.", + "authenticating": { + "signingIn": "Signing you in", + "signingInSub": "This will only take a moment.", + "unknownProvider": "Unknown sign-in provider", + "contactSupport": "Please contact support.", + "signInFailed": "Sign-in failed", + "mfaCancelled": "Two-factor authentication was cancelled.", + "requestNotVerified": "The sign-in request could not be verified.", + "tryAgain": "Please try again.", + "mfaSessionMissing": "The MFA session is missing. Please try again.", + "twoFactor": "Two-factor authentication", + "verifyToContinue": "Verify your login to continue.", + "noToken": "No valid authentication token was returned.", + "backToSignIn": "Back to sign in", + "mfaFailed": "Two-factor authentication failed. Please try again." + } +} From 222b24069cffda2806d56df811834ddb580b6970 Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:05:30 -0400 Subject: [PATCH 74/88] New translations filters.json (Chinese Simplified) [ci skip] --- public/locales/zh/filters.json | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 public/locales/zh/filters.json diff --git a/public/locales/zh/filters.json b/public/locales/zh/filters.json new file mode 100644 index 0000000..6b10047 --- /dev/null +++ b/public/locales/zh/filters.json @@ -0,0 +1,17 @@ +{ + "builder": { + "errorName": "Please enter a filter name", + "errorConditions": "Please configure at least one filter condition", + "editTitle": "Edit Filter", + "newTitle": "New Filter", + "addConditions": "Add conditions to preview", + "save": "Save Filter", + "name": "Filter Name", + "namePlaceholder": "e.g. Overdue tasks for Alice", + "color": "Color" + }, + "nameExists": "A filter with this name already exists", + "tasks_one": "{{count}} task", + "tasks_other": "{{count}} tasks", + "overdue": "{{count}} overdue" +} From 1a06928f8bf07bcebf0867ec8bfae8d315270867 Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:05:31 -0400 Subject: [PATCH 75/88] New translations history.json (Chinese Simplified) [ci skip] --- public/locales/zh/history.json | 89 ++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 public/locales/zh/history.json diff --git a/public/locales/zh/history.json b/public/locales/zh/history.json new file mode 100644 index 0000000..1452849 --- /dev/null +++ b/public/locales/zh/history.json @@ -0,0 +1,89 @@ +{ + "edit": { + "title": "Edit History", + "completedDate": "Completed Date", + "note": "Note", + "additionalNotes": "Additional Notes", + "deleteTitle": "Delete History", + "deleteMessage": "Are you sure you want to delete this history?" + }, + "status": { + "inProgress": "In Progress", + "completed": "Completed", + "skipped": "Skipped", + "pendingApproval": "Pending Approval", + "rejected": "Rejected", + "missed": "Missed", + "rescheduled": "Rescheduled", + "scheduled": "Scheduled" + }, + "badge": { + "onTime": "On Time", + "onTimeLabel": "On time" + }, + "detail": { + "title": "Activity Detail", + "openTask": "Open Task", + "editEntry": "Edit Entry", + "performedBy": "Performed by", + "assignedTo": "Assigned to", + "lastUpdated": "Last updated", + "duration": "Duration", + "pointsEarned": "Points earned", + "points_one": "{{count}} pt", + "points_other": "{{count}} pts", + "note": "Note" + }, + "charts": { + "noData": "No data available", + "noLabels": "No Labels", + "unassigned": "Unassigned", + "unknownTask": "Unknown Task", + "late": "Late", + "status": { + "title": "Status", + "description": "Completed tasks status" + }, + "due": { + "title": "Due Date", + "description": "Current tasks due date" + }, + "priority": { + "title": "Priority", + "description": "Tasks by priority" + }, + "labels": { + "title": "Labels", + "description": "Tasks by labels" + }, + "labelsDuration": { + "title": "Labels (time)", + "description": "Time spent by labels (hours)" + }, + "tasksTime": { + "title": "Tasks (time)", + "description": "Time spent by individual tasks (hours)" + }, + "assigneeBreakdown": { + "title": "by Assignee", + "description": "Tasks grouped by assignee" + } + }, + "filter": { + "status": "Status", + "pending": "Pending", + "labels": "Labels", + "hasNotes": "Has Notes", + "hasPoints": "Has Points", + "timePeriod": "Time Period", + "user": "User" + }, + "period": { + "days_one": "{{count}} Day", + "days_other": "{{count}} Days", + "allTime": "All Time" + }, + "activities": { + "title": "Activities" + } +} From b2a30558408adcb0a8d7856568cc8ba28e3877b2 Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:05:32 -0400 Subject: [PATCH 76/88] New translations labels.json (Chinese Simplified) [ci skip] --- public/locales/zh/labels.json | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 public/locales/zh/labels.json diff --git a/public/locales/zh/labels.json b/public/locales/zh/labels.json new file mode 100644 index 0000000..93f96cb --- /dev/null +++ b/public/locales/zh/labels.json @@ -0,0 +1,9 @@ +{ + "shared": "Shared", + "delete": { + "title": "Delete Label", + "message": "Are you sure you want to delete this label? This will remove the label from all tasks." + }, + "loadError": "Failed to load labels. Please try again.", + "blurb": "Manage your labels and organize your tasks effectively. Labels will be automatically shared with your circle if they are used on a shared task." +} From bb5acd820475130813d798068ac9bf751b2cd7d1 Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:05:33 -0400 Subject: [PATCH 77/88] New translations points.json (Chinese Simplified) [ci skip] --- public/locales/zh/points.json | 74 +++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 public/locales/zh/points.json diff --git a/public/locales/zh/points.json b/public/locales/zh/points.json new file mode 100644 index 0000000..a6ccd40 --- /dev/null +++ b/public/locales/zh/points.json @@ -0,0 +1,74 @@ +{ + "redeem": "Redeem Points", + "redeemModal": { + "redeemButton": "Redeem", + "pointsAvailable": "{{count}} points available", + "pointsToRedeem": "Points to Redeem", + "placeholder": "Enter points...", + "cannotExceed": "Cannot exceed available points", + "quickAdd": "Quick Add:", + "aboutToRedeem": "You are about to redeem", + "amount": "{{count}} points", + "remaining": "Remaining: {{count}} points" + }, + "leaderboard": { + "titlePoints": "Points Leaderboard", + "titleTasks": "Tasks Leaderboard", + "subtitlePoints": "Rankings based on points earned during the selected time period", + "subtitleTasks": "Rankings based on tasks completed during the selected time period", + "modePoints": "Points", + "modeTasks": "Tasks", + "you": "You", + "tasksAndAvg": "{{tasks}} tasks • {{avg}} avg per task", + "available": "{{count}} available", + "points_one": "{{count}} point", + "points_other": "{{count}} points" + }, + "tabs": { + "short7d": "7D", + "short6m": "6M", + "shortAll": "All", + "days7": "7 Days", + "months6": "6 Months", + "allTime": "All Time" + }, + "filter": { + "analysisTitle": "Filter & Analysis", + "title": "Filter Points", + "showFor": "Show points for:", + "timePeriod": "Time period:" + }, + "cards": { + "available": { + "title": "Available", + "subtext": "Ready to redeem" + }, + "redeemed": { + "title": "Redeemed", + "subtext": "Previously used" + }, + "total": { + "title": "Total", + "subtext": "All time earned" + }, + "period": { + "title": "Period Points", + "allTime": "All time", + "last6Months": "Last 6 months", + "lastDays_one": "Last {{count}} day", + "lastDays_other": "Last {{count}} days" + } + }, + "summary": { + "showingFor": "Showing points for", + "unknownUser": "Unknown User", + "overThe": "over the", + "allTime": "All Time", + "last6Months": "Last 6 Months", + "lastDays_one": "Last {{count}} Day", + "lastDays_other": "Last {{count}} Days" + }, + "trend": { + "title": "Points Trend" + } +} From a1c614d1ff868d86b7f38947afa733176c7200ac Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:05:34 -0400 Subject: [PATCH 78/88] New translations projects.json (Chinese Simplified) [ci skip] --- public/locales/zh/projects.json | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 public/locales/zh/projects.json diff --git a/public/locales/zh/projects.json b/public/locales/zh/projects.json new file mode 100644 index 0000000..0e7eed4 --- /dev/null +++ b/public/locales/zh/projects.json @@ -0,0 +1,24 @@ +{ + "iconPicker": { + "chooseIcon": "Choose Project Icon", + "availableIcons": "Available Icons" + }, + "defaultChip": "Default", + "tasks_one": "{{count}} task", + "tasks_other": "{{count}} tasks", + "shared": "Shared", + "delete": { + "title": "Delete Project", + "message": "Are you sure you want to delete \"{{name}}\"? This will remove the project but keep all tasks (they'll move to the Default Project)." + }, + "loadError": "Failed to load projects. Please try again.", + "blurb": "Organize your tasks into projects. Create custom workspaces to keep your tasks organized and easily accessible.", + "defaultDescription": "All tasks without a specific project", + "selector": { + "title": "Projects", + "createNew": "Create New Project", + "createNewDescription": "Add a custom project workspace", + "manage": "Manage Projects", + "manageDescription": "View, edit, and organize all projects" + } +} From 87a623657f7589952e1de4a3dbc001c8ecd27a67 Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:05:35 -0400 Subject: [PATCH 79/88] New translations things.json (Chinese Simplified) [ci skip] --- public/locales/zh/things.json | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 public/locales/zh/things.json diff --git a/public/locales/zh/things.json b/public/locales/zh/things.json new file mode 100644 index 0000000..1181eb5 --- /dev/null +++ b/public/locales/zh/things.json @@ -0,0 +1,18 @@ +{ + "errName": "Name is required", + "errStateNumber": "State must be a number", + "errStateBool": "State must be true or false", + "errStateRequired": "State is required", + "name": "Name", + "namePlaceholder": "Thing name", + "value": "Value", + "valuePlaceholder": "Thing value", + "updateState": "Update state", + "update": "Update", + "history": { + "overview": "Things Overview", + "visualization": "Data Visualization", + "changeHistory": "Change History", + "updated": "Updated" + } +} From 578a5dbc84993b7453ab6d19c5bf198b39820da9 Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:05:36 -0400 Subject: [PATCH 80/88] New translations timer.json (Chinese Simplified) [ci skip] --- public/locales/zh/timer.json | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 public/locales/zh/timer.json diff --git a/public/locales/zh/timer.json b/public/locales/zh/timer.json new file mode 100644 index 0000000..848fd53 --- /dev/null +++ b/public/locales/zh/timer.json @@ -0,0 +1,29 @@ +{ + "toast": { + "sessionUpdatedTitle": "Session updated", + "sessionUpdatedMessage": "Timer session has been updated successfully.", + "sessionUpdateFailTitle": "Failed to update session", + "tryAgain": "Please try again.", + "sessionUpdateErrorTitle": "Error updating session", + "sessionDeletedTitle": "Session deleted", + "sessionDeletedMessage": "Timer session has been deleted successfully.", + "sessionDeleteErrorTitle": "Error deleting session", + "deleteConfirmTitle": "Delete Timer Session", + "deleteConfirmMessage": "Are you sure you want to delete this timer session?" + }, + "loading": "Loading timer data...", + "noData": "No timer data found for this chore.", + "activeWork": "Active Work", + "breakTime": "Break Time", + "workSessions": "Work Sessions", + "totalTime": "Total Time", + "distribution": "Work vs Break Distribution", + "noActiveTime": "No active time yet", + "sessionBreakdown": "Session Breakdown", + "sessions": "Sessions", + "addSession": "Add Session", + "startTime": "Start Time", + "endTime": "End Time", + "leaveEmpty": "Leave empty if session is ongoing", + "noSessionForChore": "No timer session found for this chore." +} From 3e9c9b465dfc33204ba5cdaaf8a36357834eb8c8 Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:05:37 -0400 Subject: [PATCH 81/88] New translations auth.json (Portuguese, Brazilian) [ci skip] --- public/locales/pt/auth.json | 111 ++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 public/locales/pt/auth.json diff --git a/public/locales/pt/auth.json b/public/locales/pt/auth.json new file mode 100644 index 0000000..28cdec1 --- /dev/null +++ b/public/locales/pt/auth.json @@ -0,0 +1,111 @@ +{ + "validationError": "Validation Error", + "primaryUsernameRequired": "Primary username is required for sub account login", + "subNameRequired": "Sub account name is required for sub account login", + "usernameRequired": "Username is required", + "passwordRequired": "Password is required", + "loginFailed": "Login Failed", + "genericError": "An error occurred, please try again", + "providerLoginFailed": "{{provider}} Login Failed", + "providerLoginFailedMsg": "Couldn't log in with {{provider}}, please try again", + "providerLoginError": "{{provider}} Login Error", + "networkError": "Network error occurred, please try again", + "mfaFailed": "Two-Factor Authentication Failed", + "oauthError": "OAuth Error", + "oauthBrowserFailed": "Failed to open authentication browser", + "primaryAccount": "Primary Account", + "subAccount": "Sub Account", + "username": "Username", + "primaryUsernamePlaceholder": "Enter primary account username", + "subNamePlaceholder": "Enter sub account name", + "forgotPassword": "Forgot password?", + "or": "or", + "email": "Email", + "displayNamePlaceholder": "How others see your name", + "signupFailed": "Signup Failed", + "signupDisabled": "Signup disabled, please contact admin", + "usernameMinLength": "Username must be at least 4 characters", + "invalidEmail": "Invalid email address", + "passwordLength": "Password must be between 8 and 64 characters", + "displayNameRequired": "Display name is required", + "displayNameChars": "Display name can only contain letters and numbers", + "resetEmailSent": "Reset Email Sent", + "resetEmailSentMsg": "Check your email for password reset instructions", + "resetFailed": "Reset Failed", + "resetFailedMsg": "Failed to send reset email, please try again later", + "emailPlaceholder": "you@example.com", + "passwordUpdated": "Password Updated", + "passwordUpdatedMsg": "Your password has been updated successfully. Redirecting to login...", + "passwordUpdateFailed": "Password Update Failed", + "passwordUpdateFailedMsg": "Failed to update password, please try again later", + "savePassword": "Save password", + "server": { + "url": "Server URL", + "dnsFailed": "Hostname could not be resolved. Check the URL for typos or verify DNS.", + "unreachable": "Unable to reach the server. Check the URL, port, and network connection.", + "invalidUrl": "Invalid URL format. Include the protocol (http:// or https://) and port if needed." + }, + "mfaModal": { + "title": "Two-factor authentication", + "codeRequired": "Please enter a verification code", + "verifyFailed": "Failed to verify code. Please try again.", + "backupHint": "Enter one of the backup codes you saved when setting up two-factor authentication.", + "codeHint": "Enter the 6-digit code from your authenticator app.", + "verify": "Verify & Sign In", + "backupLabel": "Backup code", + "codeLabel": "Verification code", + "backupPlaceholder": "Enter backup code", + "useAuthenticator": "Use authenticator app instead", + "useBackup": "Use a backup code instead", + "backupOnce": "Each backup code can only be used once.", + "invalidCode": "Invalid verification code. Please try again." + }, + "appleLoginFailed": "Apple Login Failed", + "googleLoginFailed": "Google Login Failed", + "createOne": "Create one", + "primaryAccountUsernameLabel": "Primary account username", + "subAccountNameLabel": "Sub account name", + "serverSettings": "Server settings", + "useDifferentAccount": "Use a different account", + "yourUsername": "Your username", + "backToSignIn": "Back to sign in", + "confirmNewPassword": "Confirm new password", + "newPassword": "New password", + "reenterPassword": "Re-enter your password", + "requestNewLink": "Request a new link", + "setNewPassword": "Set a new password", + "linkInvalid": "This link is not valid", + "createAccountButton": "Create account", + "createYourAccount": "Create your account", + "displayNameLabel": "Display name", + "usernameHint": "lowercase letters, numbers, dot and dash", + "termsShort": "By creating an account you agree to our Terms of Service and Privacy", + "checkYourEmail": "Check your email", + "resetYourPassword": "Reset your password", + "serverChangeWarning": "Changing the server clears locally cached data on this device.", + "serverConnected": "Connected. Taking you to sign in...", + "passwordLabel": "Password", + "showPassword": "Show password", + "hidePassword": "Hide password", + "loginPasswordPlaceholder": "Enter your password", + "signupPasswordPlaceholder": "At least 8 characters", + "signupPasswordHelper": "Use 8 to 64 characters.", + "orContinueWith": "or continue with", + "signupSignInFailed": "Your account was created, but signing in failed. Please sign in.", + "authenticating": { + "signingIn": "Signing you in", + "signingInSub": "This will only take a moment.", + "unknownProvider": "Unknown sign-in provider", + "contactSupport": "Please contact support.", + "signInFailed": "Sign-in failed", + "mfaCancelled": "Two-factor authentication was cancelled.", + "requestNotVerified": "The sign-in request could not be verified.", + "tryAgain": "Please try again.", + "mfaSessionMissing": "The MFA session is missing. Please try again.", + "twoFactor": "Two-factor authentication", + "verifyToContinue": "Verify your login to continue.", + "noToken": "No valid authentication token was returned.", + "backToSignIn": "Back to sign in", + "mfaFailed": "Two-factor authentication failed. Please try again." + } +} From 3d140091d4928579332ac8f730ca27e0ab9ccf0a Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:05:38 -0400 Subject: [PATCH 82/88] New translations filters.json (Portuguese, Brazilian) [ci skip] --- public/locales/pt/filters.json | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 public/locales/pt/filters.json diff --git a/public/locales/pt/filters.json b/public/locales/pt/filters.json new file mode 100644 index 0000000..6b10047 --- /dev/null +++ b/public/locales/pt/filters.json @@ -0,0 +1,17 @@ +{ + "builder": { + "errorName": "Please enter a filter name", + "errorConditions": "Please configure at least one filter condition", + "editTitle": "Edit Filter", + "newTitle": "New Filter", + "addConditions": "Add conditions to preview", + "save": "Save Filter", + "name": "Filter Name", + "namePlaceholder": "e.g. Overdue tasks for Alice", + "color": "Color" + }, + "nameExists": "A filter with this name already exists", + "tasks_one": "{{count}} task", + "tasks_other": "{{count}} tasks", + "overdue": "{{count}} overdue" +} From dce6ba46f2ac62a174bf58a00d9d1aaea9afb62f Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:05:39 -0400 Subject: [PATCH 83/88] New translations history.json (Portuguese, Brazilian) [ci skip] --- public/locales/pt/history.json | 89 ++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 public/locales/pt/history.json diff --git a/public/locales/pt/history.json b/public/locales/pt/history.json new file mode 100644 index 0000000..1452849 --- /dev/null +++ b/public/locales/pt/history.json @@ -0,0 +1,89 @@ +{ + "edit": { + "title": "Edit History", + "completedDate": "Completed Date", + "note": "Note", + "additionalNotes": "Additional Notes", + "deleteTitle": "Delete History", + "deleteMessage": "Are you sure you want to delete this history?" + }, + "status": { + "inProgress": "In Progress", + "completed": "Completed", + "skipped": "Skipped", + "pendingApproval": "Pending Approval", + "rejected": "Rejected", + "missed": "Missed", + "rescheduled": "Rescheduled", + "scheduled": "Scheduled" + }, + "badge": { + "onTime": "On Time", + "onTimeLabel": "On time" + }, + "detail": { + "title": "Activity Detail", + "openTask": "Open Task", + "editEntry": "Edit Entry", + "performedBy": "Performed by", + "assignedTo": "Assigned to", + "lastUpdated": "Last updated", + "duration": "Duration", + "pointsEarned": "Points earned", + "points_one": "{{count}} pt", + "points_other": "{{count}} pts", + "note": "Note" + }, + "charts": { + "noData": "No data available", + "noLabels": "No Labels", + "unassigned": "Unassigned", + "unknownTask": "Unknown Task", + "late": "Late", + "status": { + "title": "Status", + "description": "Completed tasks status" + }, + "due": { + "title": "Due Date", + "description": "Current tasks due date" + }, + "priority": { + "title": "Priority", + "description": "Tasks by priority" + }, + "labels": { + "title": "Labels", + "description": "Tasks by labels" + }, + "labelsDuration": { + "title": "Labels (time)", + "description": "Time spent by labels (hours)" + }, + "tasksTime": { + "title": "Tasks (time)", + "description": "Time spent by individual tasks (hours)" + }, + "assigneeBreakdown": { + "title": "by Assignee", + "description": "Tasks grouped by assignee" + } + }, + "filter": { + "status": "Status", + "pending": "Pending", + "labels": "Labels", + "hasNotes": "Has Notes", + "hasPoints": "Has Points", + "timePeriod": "Time Period", + "user": "User" + }, + "period": { + "days_one": "{{count}} Day", + "days_other": "{{count}} Days", + "allTime": "All Time" + }, + "activities": { + "title": "Activities" + } +} From a71ccbe16bb31bc50e034697a318a5298690d2ee Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:05:40 -0400 Subject: [PATCH 84/88] New translations labels.json (Portuguese, Brazilian) [ci skip] --- public/locales/pt/labels.json | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 public/locales/pt/labels.json diff --git a/public/locales/pt/labels.json b/public/locales/pt/labels.json new file mode 100644 index 0000000..93f96cb --- /dev/null +++ b/public/locales/pt/labels.json @@ -0,0 +1,9 @@ +{ + "shared": "Shared", + "delete": { + "title": "Delete Label", + "message": "Are you sure you want to delete this label? This will remove the label from all tasks." + }, + "loadError": "Failed to load labels. Please try again.", + "blurb": "Manage your labels and organize your tasks effectively. Labels will be automatically shared with your circle if they are used on a shared task." +} From 9e6f21fc188a25202c6d41ebb825dc9f30517a4e Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:05:42 -0400 Subject: [PATCH 85/88] New translations points.json (Portuguese, Brazilian) [ci skip] --- public/locales/pt/points.json | 74 +++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 public/locales/pt/points.json diff --git a/public/locales/pt/points.json b/public/locales/pt/points.json new file mode 100644 index 0000000..a6ccd40 --- /dev/null +++ b/public/locales/pt/points.json @@ -0,0 +1,74 @@ +{ + "redeem": "Redeem Points", + "redeemModal": { + "redeemButton": "Redeem", + "pointsAvailable": "{{count}} points available", + "pointsToRedeem": "Points to Redeem", + "placeholder": "Enter points...", + "cannotExceed": "Cannot exceed available points", + "quickAdd": "Quick Add:", + "aboutToRedeem": "You are about to redeem", + "amount": "{{count}} points", + "remaining": "Remaining: {{count}} points" + }, + "leaderboard": { + "titlePoints": "Points Leaderboard", + "titleTasks": "Tasks Leaderboard", + "subtitlePoints": "Rankings based on points earned during the selected time period", + "subtitleTasks": "Rankings based on tasks completed during the selected time period", + "modePoints": "Points", + "modeTasks": "Tasks", + "you": "You", + "tasksAndAvg": "{{tasks}} tasks • {{avg}} avg per task", + "available": "{{count}} available", + "points_one": "{{count}} point", + "points_other": "{{count}} points" + }, + "tabs": { + "short7d": "7D", + "short6m": "6M", + "shortAll": "All", + "days7": "7 Days", + "months6": "6 Months", + "allTime": "All Time" + }, + "filter": { + "analysisTitle": "Filter & Analysis", + "title": "Filter Points", + "showFor": "Show points for:", + "timePeriod": "Time period:" + }, + "cards": { + "available": { + "title": "Available", + "subtext": "Ready to redeem" + }, + "redeemed": { + "title": "Redeemed", + "subtext": "Previously used" + }, + "total": { + "title": "Total", + "subtext": "All time earned" + }, + "period": { + "title": "Period Points", + "allTime": "All time", + "last6Months": "Last 6 months", + "lastDays_one": "Last {{count}} day", + "lastDays_other": "Last {{count}} days" + } + }, + "summary": { + "showingFor": "Showing points for", + "unknownUser": "Unknown User", + "overThe": "over the", + "allTime": "All Time", + "last6Months": "Last 6 Months", + "lastDays_one": "Last {{count}} Day", + "lastDays_other": "Last {{count}} Days" + }, + "trend": { + "title": "Points Trend" + } +} From 4e0c7eb03cdc21f3de4904361a0ddc48749d97c4 Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:05:43 -0400 Subject: [PATCH 86/88] New translations projects.json (Portuguese, Brazilian) [ci skip] --- public/locales/pt/projects.json | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 public/locales/pt/projects.json diff --git a/public/locales/pt/projects.json b/public/locales/pt/projects.json new file mode 100644 index 0000000..0e7eed4 --- /dev/null +++ b/public/locales/pt/projects.json @@ -0,0 +1,24 @@ +{ + "iconPicker": { + "chooseIcon": "Choose Project Icon", + "availableIcons": "Available Icons" + }, + "defaultChip": "Default", + "tasks_one": "{{count}} task", + "tasks_other": "{{count}} tasks", + "shared": "Shared", + "delete": { + "title": "Delete Project", + "message": "Are you sure you want to delete \"{{name}}\"? This will remove the project but keep all tasks (they'll move to the Default Project)." + }, + "loadError": "Failed to load projects. Please try again.", + "blurb": "Organize your tasks into projects. Create custom workspaces to keep your tasks organized and easily accessible.", + "defaultDescription": "All tasks without a specific project", + "selector": { + "title": "Projects", + "createNew": "Create New Project", + "createNewDescription": "Add a custom project workspace", + "manage": "Manage Projects", + "manageDescription": "View, edit, and organize all projects" + } +} From bd54ee6ab8da8d6170b2a01fce674549ff23c7da Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:05:44 -0400 Subject: [PATCH 87/88] New translations things.json (Portuguese, Brazilian) [ci skip] --- public/locales/pt/things.json | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 public/locales/pt/things.json diff --git a/public/locales/pt/things.json b/public/locales/pt/things.json new file mode 100644 index 0000000..1181eb5 --- /dev/null +++ b/public/locales/pt/things.json @@ -0,0 +1,18 @@ +{ + "errName": "Name is required", + "errStateNumber": "State must be a number", + "errStateBool": "State must be true or false", + "errStateRequired": "State is required", + "name": "Name", + "namePlaceholder": "Thing name", + "value": "Value", + "valuePlaceholder": "Thing value", + "updateState": "Update state", + "update": "Update", + "history": { + "overview": "Things Overview", + "visualization": "Data Visualization", + "changeHistory": "Change History", + "updated": "Updated" + } +} From cf460b3ba7128cf0eae0ae7745a742fb1a7ec80b Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 14 Aug 2026 01:05:45 -0400 Subject: [PATCH 88/88] New translations timer.json (Portuguese, Brazilian) [ci skip] --- public/locales/pt/timer.json | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 public/locales/pt/timer.json diff --git a/public/locales/pt/timer.json b/public/locales/pt/timer.json new file mode 100644 index 0000000..848fd53 --- /dev/null +++ b/public/locales/pt/timer.json @@ -0,0 +1,29 @@ +{ + "toast": { + "sessionUpdatedTitle": "Session updated", + "sessionUpdatedMessage": "Timer session has been updated successfully.", + "sessionUpdateFailTitle": "Failed to update session", + "tryAgain": "Please try again.", + "sessionUpdateErrorTitle": "Error updating session", + "sessionDeletedTitle": "Session deleted", + "sessionDeletedMessage": "Timer session has been deleted successfully.", + "sessionDeleteErrorTitle": "Error deleting session", + "deleteConfirmTitle": "Delete Timer Session", + "deleteConfirmMessage": "Are you sure you want to delete this timer session?" + }, + "loading": "Loading timer data...", + "noData": "No timer data found for this chore.", + "activeWork": "Active Work", + "breakTime": "Break Time", + "workSessions": "Work Sessions", + "totalTime": "Total Time", + "distribution": "Work vs Break Distribution", + "noActiveTime": "No active time yet", + "sessionBreakdown": "Session Breakdown", + "sessions": "Sessions", + "addSession": "Add Session", + "startTime": "Start Time", + "endTime": "End Time", + "leaveEmpty": "Leave empty if session is ongoing", + "noSessionForChore": "No timer session found for this chore." +}