diff --git a/locale/cs/LC_MESSAGES/timetracker.mo b/locale/cs/LC_MESSAGES/timetracker.mo index ad725c9..5f0b5af 100644 Binary files a/locale/cs/LC_MESSAGES/timetracker.mo and b/locale/cs/LC_MESSAGES/timetracker.mo differ diff --git a/locale/cs/LC_MESSAGES/timetracker.po b/locale/cs/LC_MESSAGES/timetracker.po index fb4d7be..5504da9 100644 --- a/locale/cs/LC_MESSAGES/timetracker.po +++ b/locale/cs/LC_MESSAGES/timetracker.po @@ -3,11 +3,10 @@ # This file is distributed under the same license as the TimeTracker package. # msgid "" -msgstr "" -"Project-Id-Version: TimeControl\n" +msgstr "Project-Id-Version: TimeControl\n" "Report-Msgid-Bugs-To: https://github.com/FrankFaulstich/TimeControl/issues\n" -"POT-Creation-Date: 2025-10-30 10:00+0200\n" -"PO-Revision-Date: 2025-10-30 12:00+0200\n" +"POT-Creation-Date: 2024-05-15 10:00+0200\n" +"PO-Revision-Date: 2024-05-15 12:00+0200\n" "Last-Translator: Frank Faulstich\n" "Language-Team: Czech\n" "Language: cs\n" @@ -16,6 +15,9 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +msgid "Edit current task" +msgstr "" + msgid "Warning: Could not read {file}. Error: {error}" msgstr "Varování: Nelze přečíst soubor {file}. Chyba: {error}" @@ -77,6 +79,9 @@ msgstr "Úkol s názvem '{sub_name}' již v projektu '{main_name}' existuje." msgid "Task '{name}' moved successfully." msgstr "Úkol '{name}' byl úspěšně přesunut." +msgid "No project selected. Please start again." +msgstr "" + msgid "A project named '{name}' already exists." msgstr "Projekt s názvem '{name}' již existuje." @@ -108,6 +113,9 @@ msgstr "" "Projekt '{demoted_name}' byl degradován na úkol pod '" "{parent_name}'." +msgid "No open projects found." +msgstr "" + msgid "# Daily Time Report: {date}\n" msgstr "# Denní zpráva o čase: {date}\n" diff --git a/locale/de/LC_MESSAGES/timetracker.mo b/locale/de/LC_MESSAGES/timetracker.mo index cb385fd..be00872 100644 Binary files a/locale/de/LC_MESSAGES/timetracker.mo and b/locale/de/LC_MESSAGES/timetracker.mo differ diff --git a/locale/de/LC_MESSAGES/timetracker.po b/locale/de/LC_MESSAGES/timetracker.po index 6b259d7..4774f3e 100644 --- a/locale/de/LC_MESSAGES/timetracker.po +++ b/locale/de/LC_MESSAGES/timetracker.po @@ -3,7 +3,7 @@ # This file is distributed under the same license as the TimeTracker package. # msgid "" -msgstr "" +msgstr "Project-Id-Version: TimeControl\n" "Project-Id-Version: TimeControl\n" "Report-Msgid-Bugs-To: https://github.com/FrankFaulstich/TimeControl/issues\n" "POT-Creation-Date: 2025-10-30 10:00+0200\n" @@ -16,7 +16,10 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: TimeTracker.py:63 +msgid "Edit current task" +msgstr "Aktuellen Task bearbeiten" + +#: tt/TimeTracker.py:63 msgid "Warning: Could not read {file}. Error: {error}" msgstr "Warnung: Konnte {file} nicht lesen. Fehler: {error}" @@ -79,7 +82,7 @@ msgstr[1] "{hours} Stunden ({dlp} DLP)" msgid "closed" msgstr "geschlossen" -#: TimeTracker.py:350 +#: tt/TimeTracker.py:350 msgid "Source project '{name}' not found." msgstr "Quell-Projekt '{name}' nicht gefunden." @@ -94,34 +97,34 @@ msgstr "Eine Aufgabe mit dem Namen '{sub_name}' existiert bereits in '{main_name msgid "Task '{name}' moved successfully." msgstr "Aufgabe '{name}' erfolgreich verschoben." -#: TimeTracker.py:378 +#: tt/TimeTracker.py:378 msgid "A project named '{name}' already exists." msgstr "Ein Projekt mit dem Namen '{name}' existiert bereits." msgid "Project '{old_name}' renamed to '{new_name}'." msgstr "Projekt '{old_name}' wurde in '{new_name}' umbenannt." -#: TimeTracker.py:398 +#: tt/TimeTracker.py:398 msgid "Task '{sub_name}' not found in '{main_name}'." msgstr "Aufgabe '{sub_name}' in '{main_name}' nicht gefunden." -#: TimeTracker.py:406 +#: tt/TimeTracker.py:406 msgid "General" msgstr "Allgemein" -#: TimeTracker.py:410 +#: tt/TimeTracker.py:410 msgid "Task '{name}' was promoted to a new project." msgstr "Aufgabe '{name}' wurde zu einem neuen Projekt befördert." -#: TimeTracker.py:439 +#: tt/TimeTracker.py:439 msgid "Project to demote '{name}' not found." msgstr "Projekt '{name}' zum Herabstufen nicht gefunden." -#: TimeTracker.py:441 +#: tt/TimeTracker.py:441 msgid "New parent project '{name}' not found." msgstr "Neues übergeordnetes Projekt '{name}' nicht gefunden." -#: TimeTracker.py:455 +#: tt/TimeTracker.py:455 msgid "Task '{old_name}' has been renamed to '{new_name}'." msgstr "Aufgabe '{old_name}' wurde in '{new_name}' umbenannt." @@ -133,6 +136,84 @@ msgstr "" "Projekt '{demoted_name}' wurde zu einer Aufgabe unter " "'{parent_name}' herabgestuft." +msgid "Task Planning" +msgstr "Aufgabenplanung" + +msgid "Today View" +msgstr "Heute-Ansicht" + +msgid "E-Mail Task Assignment" +msgstr "Zuordnung von E-Mail-Tasks" + +msgid "Fetching emails..." +msgstr "E-Mails werden abgerufen..." + +msgid "Error fetching emails: {error}" +msgstr "Fehler beim E-Mail-Abruf: {error}" + +msgid "{count} new tasks created from emails." +msgstr "{count} neue Aufgaben aus E-Mails erstellt." + +msgid "No new emails found." +msgstr "Keine neuen E-Mails gefunden." + +msgid "No unassigned email tasks available." +msgstr "Keine nicht zugeordneten E-Mail-Tasks vorhanden." + +msgid "Assign Project" +msgstr "Projekt zuordnen" + +msgid "Edit Details" +msgstr "Details bearbeiten" + +msgid "Due Date" +msgstr "Fälligkeitsdatum" + +msgid "Clear" +msgstr "Löschen" + +msgid "Task Name" +msgstr "Aufgabenname" + +msgid "Task details updated successfully." +msgstr "Aufgabendetails erfolgreich aktualisiert." + +msgid "Error updating task details." +msgstr "Fehler beim Aktualisieren der Aufgabendetails." + +msgid "Email Settings" +msgstr "E-Mail-Einstellungen" + +msgid "Enable email import" +msgstr "E-Mail-Import aktivieren" + +msgid "Username" +msgstr "Benutzername" + +msgid "Password" +msgstr "Passwort" + +msgid "Use SSL" +msgstr "SSL verwenden" + +msgid "Email settings saved." +msgstr "E-Mail-Einstellungen gespeichert." + +msgid "4. Change Streamlit Port" +msgstr "4. Streamlit-Port ändern" + +msgid "Current Streamlit Port: {port}" +msgstr "Aktueller Streamlit-Port: {port}" + +msgid "Enter new port (or press Enter to keep current): " +msgstr "Neuen Port eingeben (oder Enter drücken, um aktuellen beizubehalten): " + +msgid "Port updated to {port}. Please restart Streamlit for changes to take effect." +msgstr "Port auf {port} aktualisiert. Bitte Streamlit neu starten, damit die Änderungen wirksam werden." + +msgid "Work started on '{task_name}' in project '{main_name}'." +msgstr "Arbeit an '{task_name}' im Projekt '{main_name}' begonnen." + #: TimeTracker.py:651 msgid "- {name}: {hours} hour" msgid_plural "- {name}: {hours} hours" diff --git a/locale/en/LC_MESSAGES/timetracker.mo b/locale/en/LC_MESSAGES/timetracker.mo index 411c20e..a6cf713 100644 Binary files a/locale/en/LC_MESSAGES/timetracker.mo and b/locale/en/LC_MESSAGES/timetracker.mo differ diff --git a/locale/en/LC_MESSAGES/timetracker.po b/locale/en/LC_MESSAGES/timetracker.po index 0980e3f..80f53bf 100644 --- a/locale/en/LC_MESSAGES/timetracker.po +++ b/locale/en/LC_MESSAGES/timetracker.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: TimeControl\n" "Report-Msgid-Bugs-To: https://github.com/FrankFaulstich/TimeControl/issues\n" -"POT-Creation-Date: 2025-10-30 10:00+0200\n" -"PO-Revision-Date: 2026-01-01 12:05+0200\n" +"POT-Creation-Date: 2026-01-01 14:00+0200\n" +"PO-Revision-Date: 2026-01-01 14:10+0200\n" "Last-Translator: Frank Faulstich\n" "Language-Team: English\n" "Language: en\n" @@ -16,6 +16,9 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +msgid "Edit current task" +msgstr "Edit current task" + #: TimeTracker.py:63 msgid "Warning: Could not read {file}. Error: {error}" msgstr "Warning: Could not read {file}. Error: {error}" @@ -87,12 +90,12 @@ msgstr "Source main project '{name}' not found." msgid "Destination main project '{name}' not found." msgstr "Destination main project '{name}' not found." -#: TimeTracker.py:356 -msgid "A sub-project named '{sub_name}' already exists in '{main_name}'." -msgstr "A sub-project named '{sub_name}' already exists in '{main_name}'." +#: tt/TimeTracker.py:356 +msgid "A task named '{task_name}' already exists in '{main_name}'." +msgstr "A task named '{task_name}' already exists in '{main_name}'." -msgid "Sub-project '{name}' moved successfully." -msgstr "Sub-project '{name}' moved successfully." +msgid "Task '{task_name}' moved successfully." +msgstr "Task '{task_name}' moved successfully." #: TimeTracker.py:378 msgid "A main project named '{name}' already exists." @@ -102,16 +105,16 @@ msgid "Main project '{old_name}' renamed to '{new_name}'." msgstr "Main project '{old_name}' renamed to '{new_name}'." #: TimeTracker.py:398 -msgid "Sub-project '{sub_name}' not found in '{main_name}'." -msgstr "Sub-project '{sub_name}' not found in '{main_name}'." +msgid "Task '{sub_name}' not found in '{main_name}'." +msgstr "Task '{sub_name}' not found in '{main_name}'." #: TimeTracker.py:406 msgid "General" msgstr "General" #: TimeTracker.py:410 -msgid "Sub-project '{name}' was promoted to a new main project." -msgstr "Sub-project '{name}' was promoted to a new main project." +msgid "Task '{name}' was promoted to a new main project." +msgstr "Task '{name}' was promoted to a new main project." #: TimeTracker.py:439 msgid "Main project to demote '{name}' not found." @@ -122,16 +125,59 @@ msgid "New parent main project '{name}' not found." msgstr "New parent main project '{name}' not found." #: TimeTracker.py:455 -msgid "Sub-project '{old_name}' has been renamed to '{new_name}'." -msgstr "Sub-project '{old_name}' has been renamed to '{new_name}'." +msgid "Task '{old_name}' has been renamed to '{new_name}'." +msgstr "Task '{old_name}' has been renamed to '{new_name}'." + #: TimeTracker.py:463 msgid "" -"Main project '{demoted_name}' was demoted to a sub-project under " +"Main project '{demoted_name}' was demoted to a task under " "'{parent_name}'." msgstr "" -"Main project '{demoted_name}' was demoted to a sub-project under " +"Main project '{demoted_name}' was demoted to a task under " "'{parent_name}'." +msgid "Task Planning" +msgstr "Task Planning" + +msgid "Today View" +msgstr "Today View" + +msgid "E-Mail Task Assignment" +msgstr "E-Mail Task Assignment" + +msgid "Fetching emails..." +msgstr "Fetching emails..." + +msgid "Error fetching emails: {error}" +msgstr "Error fetching emails: {error}" + +msgid "{count} new tasks created from emails." +msgstr "{count} new tasks created from emails." + +msgid "No unassigned email tasks available." +msgstr "No unassigned email tasks available." + +msgid "Assign Project" +msgstr "Assign Project" + +msgid "Edit Details" +msgstr "Edit Details" + +msgid "Due Date" +msgstr "Due Date" + +msgid "Task Name" +msgstr "Task Name" + +msgid "Task details updated successfully." +msgstr "Task details updated successfully." + +msgid "Error updating task details." +msgstr "Error updating task details." + +msgid "Email Settings" +msgstr "Email Settings" + #: TimeTracker.py:651 msgid "- {name}: {hours} hour" msgid_plural "- {name}: {hours} hours" @@ -148,11 +194,9 @@ msgstr[1] "## {name} ({hours} hours)\n" msgid "# Daily Time Report: {date}\n" msgstr "# Daily Time Report: {date}\n" -#: TimeTracker.py:666 +#: tt/TimeTracker.py:917 msgid "\n**Total Daily Time: {hours} hours**" -msgid_plural "\n**Total Daily Time: {hours} hours**" -msgstr[0] "\n**Total Daily Time: {hours} hours**" -msgstr[1] "\n**Total Daily Time: {hours} hours**" +msgstr "\n**Total Daily Time: {hours} hours**" #: TimeTracker.py:670 msgid "No time tracked for {date}." @@ -221,16 +265,16 @@ msgid "11. Re-open Sub-Project" msgstr "11. Re-open Sub-Project" msgid "12. Delete Sub-Project" -msgstr "12. Delete Sub-Project" +msgstr "12. Delete Task" msgid "13. Move Sub-Project" -msgstr "13. Move Sub-Project" +msgstr "13. Move Task" msgid "14. List Inactive Sub-Projects" -msgstr "14. List Inactive Sub-Projects" +msgstr "14. List Inactive Tasks" msgid "15. List All Closed Sub-Projects" -msgstr "15. List All Closed Sub-Projects" +msgstr "15. List All Closed Tasks" msgid "16. Delete All Closed Sub-Projects" msgstr "16. Delete All Closed Sub-Projects" diff --git a/locale/es/LC_MESSAGES/timetracker.mo b/locale/es/LC_MESSAGES/timetracker.mo index 2e1e912..8f24d52 100644 Binary files a/locale/es/LC_MESSAGES/timetracker.mo and b/locale/es/LC_MESSAGES/timetracker.mo differ diff --git a/locale/es/LC_MESSAGES/timetracker.po b/locale/es/LC_MESSAGES/timetracker.po index fbabbf6..f68ccdc 100644 --- a/locale/es/LC_MESSAGES/timetracker.po +++ b/locale/es/LC_MESSAGES/timetracker.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: TimeControl\n" "Report-Msgid-Bugs-To: https://github.com/FrankFaulstich/TimeControl/issues\n" -"POT-Creation-Date: 2025-10-30 10:00+0200\n" -"PO-Revision-Date: 2026-01-01 12:10+0200\n" +"POT-Creation-Date: 2026-01-01 14:30+0200\n" +"PO-Revision-Date: 2026-01-01 14:40+0200\n" "Last-Translator: Frank Faulstich\n" "Language-Team: Spanish\n" "Language: es\n" @@ -16,6 +16,9 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +msgid "Edit current task" +msgstr "Editar tarea actual" + #: TimeTracker.py:63 msgid "Warning: Could not read {file}. Error: {error}" msgstr "Advertencia: No se pudo leer {file}. Error: {error}" @@ -93,12 +96,12 @@ msgstr "Proyecto principal de origen '{name}' no encontrado." msgid "Destination main project '{name}' not found." msgstr "Proyecto principal de destino '{name}' no encontrado." -#: TimeTracker.py:356 -msgid "A sub-project named '{sub_name}' already exists in '{main_name}'." -msgstr "Ya existe un subproyecto llamado '{sub_name}' en '{main_name}'." +#: tt/TimeTracker.py:356 +msgid "A task named '{task_name}' already exists in '{main_name}'." +msgstr "Ya existe una tarea llamada '{task_name}' en '{main_name}'." -msgid "Sub-project '{name}' moved successfully." -msgstr "Subproyecto '{name}' movido con éxito." +msgid "Task '{task_name}' moved successfully." +msgstr "Tarea '{task_name}' movida con éxito." #: TimeTracker.py:378 msgid "A main project named '{name}' already exists." @@ -108,16 +111,16 @@ msgid "Main project '{old_name}' renamed to '{new_name}'." msgstr "Proyecto principal '{old_name}' renombrado a '{new_name}'." #: TimeTracker.py:398 -msgid "Sub-project '{sub_name}' not found in '{main_name}'." -msgstr "No se encontró el subproyecto '{sub_name}' en '{main_name}'." +msgid "Task '{sub_name}' not found in '{main_name}'." +msgstr "No se encontró la tarea '{sub_name}' en '{main_name}'." #: TimeTracker.py:406 msgid "General" msgstr "General" #: TimeTracker.py:410 -msgid "Sub-project '{name}' was promoted to a new main project." -msgstr "El subproyecto '{name}' fue promovido a un nuevo proyecto principal." +msgid "Task '{name}' was promoted to a new main project." +msgstr "La tarea '{name}' fue promovida a un nuevo proyecto principal." #: TimeTracker.py:439 msgid "Main project to demote '{name}' not found." @@ -128,17 +131,95 @@ msgid "New parent main project '{name}' not found." msgstr "No se encontró el nuevo proyecto principal padre '{name}'." #: TimeTracker.py:455 -msgid "Sub-project '{old_name}' has been renamed to '{new_name}'." -msgstr "El subproyecto '{old_name}' ha sido renombrado a '{new_name}'." +msgid "Task '{old_name}' has been renamed to '{new_name}'." +msgstr "La tarea '{old_name}' ha sido renombrada a '{new_name}'." #: TimeTracker.py:463 msgid "" -"Main project '{demoted_name}' was demoted to a sub-project under " +"Main project '{demoted_name}' was demoted to a task under " "'{parent_name}'." msgstr "" "El proyecto principal '{demoted_name}' fue degradado a un subproyecto bajo " "'{parent_name}'." +msgid "Task Planning" +msgstr "Planificación de tareas" + +msgid "Today View" +msgstr "Vista de hoy" + +msgid "E-Mail Task Assignment" +msgstr "Asignación de tareas por correo" + +msgid "Fetching emails..." +msgstr "Recuperando correos electrónicos..." + +msgid "Error fetching emails: {error}" +msgstr "Error al recuperar correos: {error}" + +msgid "{count} new tasks created from emails." +msgstr "{count} nuevas tareas creadas desde correos." + +msgid "No new emails found." +msgstr "No se encontraron correos nuevos." + +msgid "No unassigned email tasks available." +msgstr "No hay tareas de correo sin asignar disponibles." + +msgid "Assign Project" +msgstr "Asignar proyecto" + +msgid "Edit Details" +msgstr "Editar detalles" + +msgid "Due Date" +msgstr "Fecha de vencimiento" + +msgid "Clear" +msgstr "Limpiar" + +msgid "Task Name" +msgstr "Nombre de la tarea" + +msgid "Task details updated successfully." +msgstr "Detalles de la tarea actualizados con éxito." + +msgid "Error updating task details." +msgstr "Error al actualizar los detalles de la tarea." + +msgid "Email Settings" +msgstr "Configuración de correo" + +msgid "Enable email import" +msgstr "Activar importación de correo" + +msgid "Username" +msgstr "Usuario" + +msgid "Password" +msgstr "Contraseña" + +msgid "Use SSL" +msgstr "Usar SSL" + +msgid "Email settings saved." +msgstr "Configuración de correo guardada." + +msgid "4. Change Streamlit Port" +msgstr "4. Cambiar puerto de Streamlit" + +msgid "Current Streamlit Port: {port}" +msgstr "Puerto actual de Streamlit: {port}" + +msgid "Enter new port (or press Enter to keep current): " +msgstr "Ingrese el nuevo puerto (o presione Enter para mantener el actual): " + +msgid "Port updated to {port}. Please restart Streamlit for changes to take effect." +msgstr "Puerto actualizado a {port}. Reinicie Streamlit para que los cambios surtan efecto." + +msgid "Work started on '{task_name}' in project '{main_name}'." +msgstr "Trabajo iniciado en '{task_name}' en el proyecto '{main_name}'." + #: TimeTracker.py:651 msgid "- {name}: {hours} hour" msgid_plural "- {name}: {hours} hours" diff --git a/locale/fr/LC_MESSAGES/timetracker.mo b/locale/fr/LC_MESSAGES/timetracker.mo index 365fe1a..9b198b9 100644 Binary files a/locale/fr/LC_MESSAGES/timetracker.mo and b/locale/fr/LC_MESSAGES/timetracker.mo differ diff --git a/locale/fr/LC_MESSAGES/timetracker.po b/locale/fr/LC_MESSAGES/timetracker.po index a138a0b..654e1da 100644 --- a/locale/fr/LC_MESSAGES/timetracker.po +++ b/locale/fr/LC_MESSAGES/timetracker.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: TimeControl\n" "Report-Msgid-Bugs-To: https://github.com/FrankFaulstich/TimeControl/issues\n" -"POT-Creation-Date: 2025-10-30 10:00+0200\n" -"PO-Revision-Date: 2026-01-01 12:25+0200\n" +"POT-Creation-Date: 2026-01-01 14:50+0200\n" +"PO-Revision-Date: 2026-01-01 15:00+0200\n" "Last-Translator: Frank Faulstich\n" "Language-Team: French\n" "Language: fr\n" @@ -16,6 +16,9 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" +msgid "Edit current task" +msgstr "Modifier la tâche actuelle" + #: TimeTracker.py:63 msgid "Warning: Could not read {file}. Error: {error}" msgstr "Avertissement : Impossible de lire {file}. Erreur : {error}" @@ -93,12 +96,12 @@ msgstr "Projet source '{name}' non trouvé." msgid "Destination project '{name}' not found." msgstr "Projet de destination '{name}' non trouvé." -#: TimeTracker.py:356 -msgid "A task named '{sub_name}' already exists in '{main_name}'." -msgstr "Une tâche nommée '{sub_name}' existe déjà dans '{main_name}'." +#: tt/TimeTracker.py:356 +msgid "A task named '{task_name}' already exists in '{main_name}'." +msgstr "Une tâche nommée '{task_name}' existe déjà dans '{main_name}'." -msgid "Task '{name}' moved successfully." -msgstr "La tâche '{name}' a été déplacée avec succès." +msgid "Task '{task_name}' moved successfully." +msgstr "La tâche '{task_name}' a été déplacée avec succès." #: TimeTracker.py:378 msgid "A project named '{name}' already exists." @@ -108,16 +111,16 @@ msgid "Project '{old_name}' renamed to '{new_name}'." msgstr "Le projet '{old_name}' a été renommé en '{new_name}'." #: TimeTracker.py:398 -msgid "Task '{sub_name}' not found in '{main_name}'." -msgstr "La tâche '{sub_name}' n'a pas été trouvée dans '{main_name}'." +msgid "Task '{task_name}' not found in '{main_name}'." +msgstr "La tâche '{task_name}' n'a pas été trouvée dans '{main_name}'." #: TimeTracker.py:406 msgid "General" msgstr "Général" #: TimeTracker.py:410 -msgid "Task '{name}' was promoted to a new project." -msgstr "La tâche '{name}' a été promue en nouveau projet." +msgid "Task '{task_name}' was promoted to a new main project." +msgstr "La tâche '{task_name}' a été promue en nouveau projet principal." #: TimeTracker.py:439 msgid "Project to demote '{name}' not found." @@ -139,6 +142,96 @@ msgstr "" "Le projet '{demoted_name}' a été rétrogradé en tâche sous " "'{parent_name}'." +msgid "Task Planning" +msgstr "Planification des tâches" + +msgid "Today View" +msgstr "Vue du jour" + +msgid "E-Mail Task Assignment" +msgstr "Attribution des tâches par e-mail" + +msgid "Fetching emails..." +msgstr "Récupération des e-mails..." + +msgid "Error fetching emails: {error}" +msgstr "Erreur lors de la récupération des e-mails : {error}" + +msgid "{count} new tasks created from emails." +msgstr "{count} nouvelles tâches créées à partir des e-mails." + +msgid "No new emails found." +msgstr "Aucun nouvel e-mail trouvé." + +msgid "No unassigned email tasks available." +msgstr "Aucune tâche par e-mail non attribuée disponible." + +msgid "Assign Project" +msgstr "Attribuer un projet" + +msgid "Edit Details" +msgstr "Modifier les détails" + +msgid "Due Date" +msgstr "Date d'échéance" + +msgid "Clear" +msgstr "Effacer" + +msgid "Task Name" +msgstr "Nom de la tâche" + +msgid "Task details updated successfully." +msgstr "Détails de la tâche mis à jour avec succès." + +msgid "Error updating task details." +msgstr "Erreur lors de la mise à jour des détails de la tâche." + +msgid "Email Settings" +msgstr "Paramètres de messagerie" + +msgid "Enable email import" +msgstr "Activer l'importation d'e-mails" + +msgid "Username" +msgstr "Nom d'utilisateur" + +msgid "Password" +msgstr "Mot de passe" + +msgid "Use SSL" +msgstr "Utiliser SSL" + +msgid "Email settings saved." +msgstr "Paramètres de messagerie enregistrés." + +msgid "4. Change Streamlit Port" +msgstr "4. Changer le port Streamlit" + +msgid "Current Streamlit Port: {port}" +msgstr "Port Streamlit actuel : {port}" + +msgid "Enter new port (or press Enter to keep current): " +msgstr "Entrez le nouveau port (ou appuyez sur Entrée pour conserver l'actuel) : " + +msgid "Port updated to {port}. Please restart Streamlit for changes to take effect." +msgstr "Port mis à jour vers {port}. Veuillez redémarrer Streamlit pour que les changements prennent effet." + +msgid "Work started on '{task_name}' in project '{main_name}'." +msgstr "Travail commencé sur '{task_name}' dans le projet '{main_name}'." + +msgid "1. Main Project Management" +msgstr "1. Gestion des projets principaux" + +msgid "2. Task Management" +msgstr "2. Gestion des tâches" + +msgid "1. Add Main Project" +msgstr "1. Ajouter un projet principal" + +msgid "6. Demote Main-Project to Task" +msgstr "6. Rétrograder un projet principal en tâche" + #: TimeTracker.py:651 msgid "- {name}: {hours} hour" msgid_plural "- {name}: {hours} hours" @@ -190,11 +283,11 @@ msgstr "# Rapport journalier détaillé : {date}" msgid "\nNo time tracked for {date}." msgstr "\nAucun temps suivi pour le {date}." -msgid "Active (working on '{sub_name}')" -msgstr "Actif (travail sur '{sub_name}')" +msgid "Active (working on '{task_name}')" +msgstr "Actif (travail sur '{task_name}')" -msgid "# Detailed Report for Sub-Project: {name}" -msgstr "# Rapport détaillé pour le sous-projet : {name}" +msgid "# Detailed Report for Task: {name}" +msgstr "# Rapport détaillé pour la tâche : {name}" msgid "Part of Main Project: {name}" msgstr "Fait partie du projet principal : {name}" @@ -257,10 +350,10 @@ msgid "# Detailed Report for Main Project: {name}" msgstr "# Rapport détaillé pour le projet principal : {name}" msgid "Number of sub-projects" -msgstr "Nombre de sous-projets" +msgstr "Nombre de tâches" -msgid "Sub-Project Breakdown" -msgstr "Répartition par sous-projet" +msgid "Task Breakdown" +msgstr "Répartition par tâche" msgid "{num_sessions} sessions" msgstr "{num_sessions} sessions" diff --git a/sl/SL_Menu.py b/sl/SL_Menu.py index 8a22e26..a561077 100644 --- a/sl/SL_Menu.py +++ b/sl/SL_Menu.py @@ -201,7 +201,7 @@ def view_main(): st.rerun() with col_edit: - if st.button("✎", help=_("Aktuellen Task bearbeiten"), disabled=not current_work): + if st.button("✎", help=_("Edit current task"), disabled=not current_work): st.session_state.context['selected_main'] = current_work['main_project_name'] st.session_state.context['selected_task'] = current_work['task_name'] st.session_state.context['return_to'] = 'main' @@ -218,13 +218,13 @@ def view_main(): set_feedback(_("No active work session to stop."), 'info') st.rerun() - if st.button(_("Aufgabenplanung"), use_container_width=True): + if st.button(_("Task Planning"), use_container_width=True): navigate_to('task_planning') if st.button(_("Today View"), use_container_width=True): navigate_to('today_view') - if st.button(_("Zuordnung von E-Mail-Tasks"), use_container_width=True): + if st.button(_("E-Mail Task Assignment"), use_container_width=True): navigate_to('email_assignment') st.divider() @@ -245,7 +245,7 @@ def view_task_planning(): """ Renders the task planning view, showing all tasks that are not closed. """ - render_header(_("Aufgabenplanung")) + render_header(_("Task Planning")) filter_options = [ _("Today"), @@ -401,27 +401,27 @@ def view_email_assignment(): """ Renders the view to assign tasks fetched from emails to active projects. """ - render_header(_("Zuordnung von E-Mail-Tasks")) + render_header(_("E-Mail Task Assignment")) if 'confirm_delete_email_task_id' not in st.session_state: st.session_state.confirm_delete_email_task_id = None if 'email_fetched' not in st.session_state: - with st.spinner(_("Rufe E-Mails ab...")): + with st.spinner(_("Fetching emails...")): count, error = st.session_state.tracker.fetch_emails_to_tasks() if error: - st.error(_("Fehler beim E-Mail-Abruf: {error}").format(error=error)) + st.error(_("Error fetching emails: {error}").format(error=error)) else: if count > 0: - st.success(_("{count} neue Tasks aus E-Mails erstellt.").format(count=count)) + st.success(_("{count} new tasks created from emails.").format(count=count)) else: - st.info(_("Keine neuen E-Mails gefunden.")) + st.info(_("No new emails found.")) st.session_state.email_fetched = True hidden_tasks = st.session_state.tracker.list_tasks(main_project_name="hide", status_filter='open') if not hidden_tasks: - st.info(_("Keine nicht zugeordneten E-Mail-Tasks vorhanden.")) + st.info(_("No unassigned email tasks available.")) else: active_projects = st.session_state.tracker.list_main_projects(status_filter='open') project_names = [""] + [p['main_project_name'] for p in active_projects] @@ -433,7 +433,7 @@ def view_email_assignment(): with col_name: st.write(f"**{task['task_name']}**") with col_move: - selected_proj = st.selectbox(_("Projekt zuordnen"), options=project_names, key=f"move_email_{task['id']}", label_visibility="collapsed") + selected_proj = st.selectbox(_("Assign Project"), options=project_names, key=f"move_email_{task['id']}", label_visibility="collapsed") if selected_proj: success, msg = st.session_state.tracker.move_task("hide", task['task_name'], selected_proj, task_id=task['id']) if success: @@ -463,7 +463,7 @@ def view_email_assignment(): st.session_state.confirm_delete_email_task_id = task['id'] st.rerun() - with st.expander(_("Details bearbeiten")): + with st.expander(_("Edit Details")): # Current values for pre-filling current_due_date_str = task.get('due_date') current_due_date_obj = datetime.fromisoformat(current_due_date_str).date() if current_due_date_str else None @@ -516,7 +516,7 @@ def view_email_assignment(): else: st.error(_("Error updating task details.")) - if st.button(_("Zurück"), use_container_width=True): + if st.button(_("Back"), use_container_width=True): if 'email_fetched' in st.session_state: del st.session_state.email_fetched navigate_to('main') @@ -614,7 +614,7 @@ def view_settings(): if st.button(t_label("2. Restore Previous Version"), use_container_width=True): navigate_to('settings_restore') if st.button(t_label("3. Change Data Storage Location"), use_container_width=True): navigate_to('settings_storage') if st.button(t_label("4. Change Streamlit Port"), use_container_width=True): navigate_to('settings_port') - if st.button(_("E-Mail-Einstellungen"), use_container_width=True): navigate_to('settings_email') + if st.button(_("Email Settings"), use_container_width=True): navigate_to('settings_email') if st.button(_("Change CSS Style"), use_container_width=True): navigate_to('settings_css') if st.button(_("Change View Mode"), use_container_width=True): navigate_to('settings_view_mode') @@ -1811,21 +1811,21 @@ def view_settings_email(): """ Renders the form to configure email account settings. """ - render_header(_("E-Mail-Einstellungen")) + render_header(_("Email Settings")) config = get_config() email_cfg = config.get('email', { "imap_server": "", "imap_port": 993, "user": "", "password": "", "use_ssl": True, "enabled": False }) with st.form("email_settings_form"): - enabled = st.checkbox(_("E-Mail-Import aktivieren"), value=email_cfg.get('enabled', False)) + enabled = st.checkbox(_("Enable email import"), value=email_cfg.get('enabled', False)) server = st.text_input(_("IMAP Server"), value=email_cfg.get('imap_server', '')) port = st.number_input(_("Port"), value=email_cfg.get('imap_port', 993)) - user = st.text_input(_("Benutzer"), value=email_cfg.get('user', '')) - password = st.text_input(_("Passwort"), value=email_cfg.get('password', ''), type="password") - use_ssl = st.checkbox(_("SSL verwenden"), value=email_cfg.get('use_ssl', True)) + user = st.text_input(_("Username"), value=email_cfg.get('user', '')) + password = st.text_input(_("Password"), value=email_cfg.get('password', ''), type="password") + use_ssl = st.checkbox(_("Use SSL"), value=email_cfg.get('use_ssl', True)) - submitted = st.form_submit_button(_("Speichern"), use_container_width=True) + submitted = st.form_submit_button(_("Save"), use_container_width=True) if submitted: config['email'] = { "imap_server": server, @@ -1836,11 +1836,11 @@ def view_settings_email(): "enabled": enabled } save_config(config) - set_feedback(_("E-Mail-Einstellungen gespeichert.")) + set_feedback(_("Email settings saved.")) navigate_to('settings') st.rerun() - if st.button(_("Abbrechen"), use_container_width=True): + if st.button(_("Cancel"), use_container_width=True): navigate_to('settings') def view_report_specific_day():