From 3bb2b032325cef50cc23e914a407c4471e0b1be7 Mon Sep 17 00:00:00 2001 From: Frank Faulstich Date: Wed, 6 May 2026 18:10:53 +0200 Subject: [PATCH] Update translation Fixes #393 --- locale/cs/LC_MESSAGES/timetracker.mo | Bin 26193 -> 26193 bytes locale/cs/LC_MESSAGES/timetracker.po | 16 +++- locale/de/LC_MESSAGES/timetracker.mo | Bin 28428 -> 30516 bytes locale/de/LC_MESSAGES/timetracker.po | 101 ++++++++++++++++++--- locale/en/LC_MESSAGES/timetracker.mo | Bin 27913 -> 28695 bytes locale/en/LC_MESSAGES/timetracker.po | 90 ++++++++++++++----- locale/es/LC_MESSAGES/timetracker.mo | Bin 37620 -> 39665 bytes locale/es/LC_MESSAGES/timetracker.po | 109 +++++++++++++++++++--- locale/fr/LC_MESSAGES/timetracker.mo | Bin 26954 -> 29502 bytes locale/fr/LC_MESSAGES/timetracker.po | 129 +++++++++++++++++++++++---- sl/SL_Menu.py | 44 ++++----- 11 files changed, 398 insertions(+), 91 deletions(-) diff --git a/locale/cs/LC_MESSAGES/timetracker.mo b/locale/cs/LC_MESSAGES/timetracker.mo index ad725c9d0a1b6aca97310c2eddb3aac5548963ce..5f0b5af494e2d34fe88233b3b2bf67ece8dcdc1a 100644 GIT binary patch delta 22 dcmcb3hVkMV#toV_>?XPfrn-ivn+=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 cb385fdb5da4e88caffd4b088250702de9e90f43..be0087202cb8a7b4a12e80c662445258d4de2505 100644 GIT binary patch delta 8606 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 delta 6807 zcmZwL3w+P@9>?+T?%2l0Y_{3_?ZU=v#+Z=|V{0;(+L-%tX=vm&htfZx6czqSR8lCn zME~k^ayhA!OQc5S$T4+J*2OI)9fi*8z2A3_)8jnO@8R=*e!t)U_xHX3e*V01(PwG3 zkGs0D|4PG^>0?ZD+)&?`)uhv!sMMHc(Z&?ua%_!XU^DcMF{UZTqVCJYcq~E}R$vr9 zff4vJw!mGedZ*B3jNAN5B94OCSYujY4rbyQOvM#Q6|)<4;|WwlS5X~D@)3z0QDZK| z#yAS8Vy2-BA4d&nJ8D4tu`&IdQzXJExQH5vKGZ-wGFg*}>aZVb=94iQ7vdD$f=L+7 z=vv~fNK4H^9s}e7o%pn1{>i{R7d-e zKc<=wb$AoCa!D>@+F%i8;T%lI?Wp!nqg#7;i9`?vFno0ois~Q9@LCJM9t(Rw!`mGr$35~ z)?W6&u2_!hXg#`cFRHyW*d5PdE~c_Cn$RTdh;Gb5uM!%`1@y;29s#XLFlz7Oa1a(? zAg)0z^^2&ze;qZ@k8SxGtVjL_)D~Prbr{6xbze8sR@{!d±Jmb?-*!WF0iy@DFZ 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 nbK<mKXx&FgurX1h*pv%G1&Zv6j^z5jm!QqV*# 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 2e1e912e9a82d00b0a72e6d0fcaf2cbee463619d..8f24d52de7cf1684f3a466e572009c8f37e2c5ba 100644 GIT binary patch delta 10387 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 delta 8619 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 EKi0Ew^Z)<= 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 365fe1a45ae221413d967670fb1da8effbd239ba..9b198b965ef74818bbf8d710ac4b79e83d0a69b9 100644 GIT binary patch delta 8347 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 BB(?wm 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():