From 61a6cf866718fc9a0ac1d53cff789426d282c145 Mon Sep 17 00:00:00 2001 From: Frank Faulstich Date: Wed, 5 Aug 2026 18:22:10 +0200 Subject: [PATCH] Notice of New Version Fixes #530 --- locale/cs/LC_MESSAGES/timetracker.mo | Bin 49229 -> 49542 bytes locale/cs/LC_MESSAGES/timetracker.po | 738 +++++++++++++------------- locale/de/LC_MESSAGES/timetracker.mo | Bin 50613 -> 50939 bytes locale/de/LC_MESSAGES/timetracker.po | 742 ++++++++++++++------------- locale/en/LC_MESSAGES/timetracker.mo | Bin 45987 -> 46287 bytes locale/en/LC_MESSAGES/timetracker.po | 741 +++++++++++++------------- locale/es/LC_MESSAGES/timetracker.mo | Bin 50118 -> 50443 bytes locale/es/LC_MESSAGES/timetracker.po | 742 ++++++++++++++------------- locale/fr/LC_MESSAGES/timetracker.mo | Bin 51366 -> 51705 bytes locale/fr/LC_MESSAGES/timetracker.po | 742 ++++++++++++++------------- locale/timetracker.pot | 727 +++++++++++++------------- sl/SL_Menu.py | 26 +- update.py | 14 + 13 files changed, 2314 insertions(+), 2158 deletions(-) diff --git a/locale/cs/LC_MESSAGES/timetracker.mo b/locale/cs/LC_MESSAGES/timetracker.mo index f86b7ee1ce42eabb084e3405cb67a29300d958d8..806f585055fcd46ca193665f67ba3b5e2fc97bab 100644 GIT binary patch delta 12075 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 bVVV0pcJvGk?3+1ZYUclLw6Eu(hhF~$(sLJ$ delta 11950 zcmZwN2V7Ux|HtvGAP5eIfPf%h6mWy6xKb1~_ds#y-nl2v`ntEK;VMV&%rpmP=E#vb za+GGSoDEC;l`G4U`g^@O$KS*LkN!4!W={ zhT>=p!+98mpV;z~7)$%kuOu|0JY^jx8Y`eW(gus7+veAyMs^Zi_yChJsGMma4gJaY zLpA(1YK9hK2yV3=wO&KFM)o%e^(-jKaf)L()be+<`SGZVHe!A}f*ScX)X45*PRw22 z%vdl6kuQPXSRF&Kt}X9~xycVL&-@3H7)OCBo`=D>0oC9Eo4<@&q6g?gzY3L*vd^pFLcE`I03cW=b{?gfnoS9y6_fq5}jO? zvyP8b36<}TI-VIAj=NBM=`5<@N2msKzGjvx2=%->l7t6|*Rd+r!|FH%HFZajedb(7 z+I9k}m_5<})5xczX6S3w$S$BK-bd|`zfpV2hsv8`IrPHG$c(w2StKGTScdB9E_1^< zhMIv(sLk~!=D=sDnet%k`(gm9gAteyQ&CIN4K;vasHL2a1#tzcWBV{n=l?VbHT)ke zfd8Og46SBHR0{P%ZPdtGqejpk)q!rPjt)T0#1zz2FR=NQs19twl6VBQ$sb~VH;G); zO@oE82KkDphDO``Skwz&qL%6cYDO+wZ=fo^WAhOyromWLJylSfF$I0FF={}q(XAf$ zCZQ!5i3M>1s=-fD4<18J?PXNM_b?HkV0kP_uOqQ5M&mf^Dy&KVE94vJ_>j@&u7c`t z*P6^fzXY5)6lfRkMs?s8s$!p7#_Fi^I~)t+bX12wvH4@DFXkOo2ZCQWU(^by`Z{Ac zjzuliV$>36zRvu|k~l(vD*VIV$W_~MSRTiP+7q3y4vxWAcn~>JP6UM-c`MWihhcME zhehxisspig&B$wE68SzDhAZ48G!?s0yZATM?v1Et)~*z)fikFFpNe{}18PRzMK4@~ z+H@Px2Y1-=1L#fuC~A|RLT$$DsOQ~}NDLz3S>LQ}I>zV*YARQwmf{d<%ATR7FtCBC zusEtil~FU$-@3wj#_HYBod3#Lg6C!;d(Z9cAfY8VjGCI??E{4yna$J0nt>dB=NzVD zaAPwgJ*-1fBO8y}yzikpy2+LwMs4CNm7^NxF2)k zSN8r%^dX`kE zI(C0xUVMl;C7vD34ESfs`WGY-!i|!s7i*$+Ya`T5j6kjFT+|5HU;#Xb3HSgt!onTR z%#=iRBoWoIWK_eAQB&X6miNNEZVE<_P(xEtYr5RJ9rfaI)Ks5GP3cXH!hlX@&m>x# zp$0MpwV9`*W^A+dob@?IP#)Wv`PU0INa(>fsNFmk)zA*iS`thm@6p9{v=XWV%}^sB zi~%?rwaI3omS`nb$DP;&pJEC&=xPQut1IiThL%yF56~g&Db$)@vfi=f*}IuF&4cQA z5NhU1pgK?swYgeiYaEE`$Wbhe*Rd7m=x*w1-`#CCM>h&QxiJK__9IZA&Q+*mcmm7f zQ`Af(^f2Ft?x+UmqP`0sqmJuEERTLY&CJ$D-S3AgUxM0{-?>R>ll+Luk*0r%9PDMTUA*#Mj*i`3#2MJA? zFWuuC;#9-ZxEM8M$B~bn^At5hE&7>F))CdvP*lez;%r=mnzenz1Q&ANTN4+-z)!=k{e z26ED}v45~A`4NNIYqamIAfbwnqt4|6j7I;#W_OoC?cN3$g9ETQ&ci6&i~4R{#RPna zdOvoEX}AvR{dCl+c^}n*E$G&6zDOb#{fC-ORvt@`Z;FZdmd$TMb>Ih7h0ZWD!WdM( z3Tot?P@8oWs-F3%2KS>nd<)f{Z#wg@Pig6NGlGVgk9-%@2+~pKdl6>!7(>WkL^XI1 zT^Kyvb{tEQZ;F};H)>`#q251heSuoCq9d4p^{~MR^GzR)HOOb6cI{aVz=x=jd5<(p z6pi`GCtF)$9`gNB9Up^gU>T|-`%yD@4>hA9qfCeEx=E;_t{8-)Q6rm!IdL0mhW4QL z#sypc7plS+7>+Tc%_p^*H5EfC?~LluC@g?WtUFLk;66h_Q}hJ2OQXk_W0Hy*d4E)g z#$p7nMjfO5=#N)XYkC)h(f=*;yCV*jZ;X1r8y3LvsCt(n9d|pMNkmd`3^nC9u^8rj z+f-ZzwRX)=4UR?+oQe8i%|TVX0JQ{LQ6t-j+DkW3^*up77sHZk=Bi_y&cA*KXia8f z75u{HpJEa6rN){mZh@MqfvAx!L_ge!YIqNp!DHx&&#@MIj5B+xE^4V~U=psvinQTe zAfe3?IG#T`FbM;30*2uN)JQj@D%g(Y@Fdnoj|t|3RUb7&%}^ukit5-@%&G^qCpM!# za7WRt#3>Sb@d9c@x9~N5g4$f=Cz=sA#R&2}QByn-V{kpHfp0JxZ=xE`HOU;$Fw~4y zM%_sb*;tQ6q1Tx}T0(%4u#AYH$VC$E}!*&rl<&GR;hN8!SxTjdgGp>bTyv<>AxK zOeA9*NtLmy8jo(W9mEh z%Y|C|HK-Xmi`s+*=a@}d5w(fiqd&ffIdDB{DK=wXo&VD$s!?zqHC54b&4ZOOFZt@| zgH2GIs115!Ck((|sLeDAbKzW^fJ@OAqu(_ju#%{yX@O;M42IIavx$T%ID-Co6-(k> z)Ko@h80%qK^22QYBh<`%kDBU)dFK7@s1c^4W^fTE>N#wJ-t*00$F0y^nS#wEYT#`Q z#P|iq6jVjct?8&^w+OY?+fXxh8vXD#=E0{Jf<6n)AE7SP(hNg&_#G^SHy1MhMM>md zWTqwwHS%^?1g9aJ#My#brvmGfukxN*k}0Sen~R#6m8f%n7K88}=0~shO$Q62_CP%5 z#&Yj7|Jscy6sYH&P;1uT=0~E|bPBe>4Ahj~L@iC+V)M`LW>|^*V$|OF9<_HaV`=;k z>Xbw-F?%5eE0XW+CQ*UJDpZ9(pq9dWsrjcoKpoe6s7)KO%pAvdsF|CL zX_$$cLGKUDR3~5(`DWM{r(zj&pCeIq zK+V(%tc{P+h1J)Xj(0|Vz-C&vqXu#fYoh;JGjq)`LFa!S33cEgYBOg4(5!h0tVg~A z#^5;Au3n2;+dUY7$5E%|3P$5S%z^pVnavl5k>nFG0-K-<`=b8$CubH3Py7m1;n$do zm#_+!`p9gm-l#Pmj5+ZGTfPo8Lz}T69=F~`HSD|I44^1#1{$H-nTuI}|F0quPQeA# zvH25qY6vW~=OvGoXW0~-Ysh}t7xQsQHVk?%w8 zp}$cBjM!{WO(Qo6^>6}e%9fxn?nN!h*XY7utX^BpW-Wp`CEc+e?!sWqvDFNq0Q!?} zgn6+8YQ+6e?M=a4=w41jn{NYZindsfqB?LLi{d}n3S%?v-wCMlrPvJ*p_Zz|Hq$^^ z)DkvCeIL>=5vO4S?!vOP@7yM#DUABm+-QT^wbM{j_aT4Qad{>P9|PgkQJ{1{VkAC|`KJIt{vi=D_fLybHW zhvOw=a-8O$n`7y{(@d>DYGxxa4@RRpmVj!n8fN|X|Jo!9Q_vYTg_EqaP%q3!b!-jR z#hq9ZJ$9MhTpD%1DmKAps2N>}J@FE13e$+%q$^}|GxcP; zkQsuLiBzI3@tCqW)TL?E8m^X<^~UoUiPP*eB%KYUIjPRqcvA&j&0e{$ydU{WL>uBX z?PndI#@LI3KXE8gm2@kj9qHeQ*+dk1U4P^ECi$)l;)&3z0bj)5}5!}>u50~S2#1FRYE|w+qe^&bcu0a%zBv#tz^-L{dKT(MI zkn%=EAA&u~#rU7Y@vICR4%4~$6u%@wXy`3`Mwzag7)@l5USP{quJ6EM@*S1o8bx}K zy?@mdW&ONJ*+}9Bx%aWI+dibbHHcN@eQntV^4CfKgAs&|macM?9VdPvek8vPGYMTw zFoaOOkBKeBMau7Ey{sqx{UdArS8y{Y<#SP&j@YKG6zj+gEO;jnd z(7xx-v$2G(zlrRmd*ChZe`B9HfbS6c4m8bX_MbC`f(I1*Oz83<<`ZvFUXwULdI0ea zF`E2Ze1WZrbHq=?S42S?Y{b1H#1LWu@jB(YPU9}DM#K_5oMI&s!DVqdh%jd6>!B7%ZPBwS`t@C=cPkI#1EtwQ|3wN7g7h7PauTP= zH^h0wMAGizBr21bLG&ebEi^dZRI2a3uGu_yjhIfHC7*|TrEn~Hf8tZ31^FD5>zCPb z^7?ddAX<>tH5j+y3nG@7tY54>?9Cb0t*BYi^2bDPd_dX%F48;ym*F2{6eLtGfC?@1w5V+zY@+%5v(3SFXmC z`ICP`oAFH&+bJkUJR&@J_%3BnN#`P_5+}*GAzohJQuaHcD+hM4=}zQl+O(H$a=lHy zCib`G)vZOd?y~;xQt&>R-FPOe(EMTc73uFOiyAm{FewA26+Lw5F?W3#{p{q8I z#^10GZp6z(3DR@0KCxZpg!>4YP!caMFY>yk6ZeQ4p#RU z%7ziIUS-MLu?6{gH!t_UB>GYIF|NQ+$_wCiVuwD4>qvY}yhrF-LU{0SON`;+J{XRd z@YU-K&%C_iNmL*zQq~?X*?UQ(XOX^*uU_BUOlT-KyOWuMf7q91>SktAd|tmiuAu{5 zjXJ;C-_@vl|6!TQRS$b)7EhTJnen(oSjMj%{4!%YR?U++r0?^Pkbwsm4|R1L;Of=4 zb9(Zex*Oz7d6`Dn`On2aYIVtq#SJGi)ie0;o<(fO_L%(@%P`en}8{nYcn Di>(3> diff --git a/locale/cs/LC_MESSAGES/timetracker.po b/locale/cs/LC_MESSAGES/timetracker.po index 98d7483..831af35 100644 --- a/locale/cs/LC_MESSAGES/timetracker.po +++ b/locale/cs/LC_MESSAGES/timetracker.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: TimeControl\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-05 09:08+0200\n" +"POT-Creation-Date: 2026-08-05 18:15+0200\n" "PO-Revision-Date: 2024-05-15 12:00+0200\n" "Last-Translator: Frank Faulstich\n" "Language-Team: Czech\n" @@ -119,8 +119,8 @@ msgstr "" "\n" "--- Seznam hlavních projektů ---" -#: TimeTrackerCLI.py:76 TimeTrackerCLI.py:313 sl/SL_Menu.py:1880 -#: sl/SL_Menu.py:1944 +#: TimeTrackerCLI.py:76 TimeTrackerCLI.py:313 sl/SL_Menu.py:1964 +#: sl/SL_Menu.py:2028 msgid "closed" msgstr "uzavřeno" @@ -162,7 +162,7 @@ msgstr "Zadejte nový název pro '{name}': " msgid "Main project '{old_name}' successfully renamed to '{new_name}'." msgstr "Hlavní projekt '{old_name}' byl úspěšně přejmenován na '{new_name}'." -#: TimeTrackerCLI.py:101 sl/SL_Menu.py:1917 +#: TimeTrackerCLI.py:101 sl/SL_Menu.py:2001 #, python-brace-format msgid "Error: Could not rename. The new name '{new_name}' might already exist." msgstr "Chyba: Nelze přejmenovat. Nový název '{new_name}' již možná existuje." @@ -455,22 +455,22 @@ msgstr "Nebyly nalezeny žádné hlavní projekty. Nelze vypsat úkoly." msgid "Select the main project whose tasks you want to list:" msgstr "Vyberte hlavní projekt, jehož úkoly chcete vypsat:" -#: TimeTrackerCLI.py:305 sl/SL_Menu.py:1941 +#: TimeTrackerCLI.py:305 sl/SL_Menu.py:2025 #, python-brace-format msgid "Tasks for '{name}':" msgstr "Úkoly pro '{name}':" -#: TimeTrackerCLI.py:308 sl/SL_Menu.py:745 sl/SL_Menu.py:895 +#: TimeTrackerCLI.py:308 sl/SL_Menu.py:785 sl/SL_Menu.py:977 msgid "Due" msgstr "Termín" -#: TimeTrackerCLI.py:309 sl/SL_Menu.py:596 sl/SL_Menu.py:616 sl/SL_Menu.py:682 -#: sl/SL_Menu.py:768 sl/SL_Menu.py:1077 sl/SL_Menu.py:2238 sl/SL_Menu.py:2409 +#: TimeTrackerCLI.py:309 sl/SL_Menu.py:636 sl/SL_Menu.py:656 sl/SL_Menu.py:722 +#: sl/SL_Menu.py:808 sl/SL_Menu.py:1161 sl/SL_Menu.py:2322 sl/SL_Menu.py:2493 msgid "Today" msgstr "Dnes" -#: TimeTrackerCLI.py:317 TimeTrackerCLI.py:861 sl/SL_Menu.py:1950 -#: sl/SL_Menu.py:2642 +#: TimeTrackerCLI.py:317 TimeTrackerCLI.py:861 sl/SL_Menu.py:2034 +#: sl/SL_Menu.py:2726 #, python-brace-format msgid "No tasks found for '{name}'." msgstr "Pro '{name}' nebyly nalezeny žádné úkoly." @@ -509,7 +509,7 @@ msgstr "Vyberte úkol z '{name}' k přejmenování:" msgid "Enter the number of the task: " msgstr "Zadejte číslo úkolu: " -#: TimeTrackerCLI.py:352 sl/SL_Menu.py:1993 +#: TimeTrackerCLI.py:352 sl/SL_Menu.py:2077 #, python-brace-format msgid "Task '{old_name}' renamed to '{new_name}'." msgstr "Úkol '{old_name}' byl přejmenován na '{new_name}'." @@ -546,7 +546,7 @@ msgid "Task '{task_name}' in '{main_name}' has been closed." msgstr "Úloha '{task_name}' v '{main_name}' byla uzavřena." #: TimeTrackerCLI.py:389 TimeTrackerCLI.py:424 TimeTrackerCLI.py:460 -#: sl/SL_Menu.py:1579 sl/SL_Menu.py:1624 sl/SL_Menu.py:1670 +#: sl/SL_Menu.py:1663 sl/SL_Menu.py:1708 sl/SL_Menu.py:1754 msgid "Error: Main project or task not found." msgstr "Chyba: Hlavní projekt nebo úkol nebyl nalezen." @@ -682,7 +682,7 @@ msgstr "" msgid " Task: {name}" msgstr " Úkol: {name}" -#: TimeTrackerCLI.py:531 sl/SL_Menu.py:1752 +#: TimeTrackerCLI.py:531 sl/SL_Menu.py:1836 #, python-brace-format msgid "No tasks found inactive for more than {weeks} weeks." msgstr "Žádné úkoly nebyly nalezeny neaktivní déle než {weeks} týdnů." @@ -695,7 +695,7 @@ msgstr "" "\n" "--- Seznam všech uzavřených úkolů ---" -#: TimeTrackerCLI.py:543 sl/SL_Menu.py:1777 sl/SL_Menu.py:1800 +#: TimeTrackerCLI.py:543 sl/SL_Menu.py:1861 sl/SL_Menu.py:1884 msgid "No closed tasks found." msgstr "Nebyly nalezeny žádné uzavřené úkoly." @@ -754,9 +754,9 @@ msgstr "" "\n" "--- Upravit úkol ---" -#: TimeTrackerCLI.py:596 sl/SL_Menu.py:1547 sl/SL_Menu.py:1592 -#: sl/SL_Menu.py:1637 sl/SL_Menu.py:1683 sl/SL_Menu.py:1832 sl/SL_Menu.py:1963 -#: sl/SL_Menu.py:2122 sl/SL_Menu.py:2315 +#: TimeTrackerCLI.py:596 sl/SL_Menu.py:1631 sl/SL_Menu.py:1676 +#: sl/SL_Menu.py:1721 sl/SL_Menu.py:1767 sl/SL_Menu.py:1916 sl/SL_Menu.py:2047 +#: sl/SL_Menu.py:2206 sl/SL_Menu.py:2399 msgid "No open projects found." msgstr "Nebyly nalezeny žádné otevřené projekty." @@ -807,7 +807,7 @@ msgstr "" "Je tento úkol dokončen? (aktuální:{current}, y/n, pro zachování stiskněte " "Enter):" -#: TimeTrackerCLI.py:639 sl/SL_Menu.py:2475 +#: TimeTrackerCLI.py:639 sl/SL_Menu.py:2559 msgid "Task updated successfully." msgstr "Úloha byla úspěšně aktualizována." @@ -905,7 +905,7 @@ msgstr "Ponechte prázdné pro zrušení." msgid "New Path: " msgstr "Nová cesta: " -#: TimeTrackerCLI.py:738 sl/SL_Menu.py:1334 +#: TimeTrackerCLI.py:738 sl/SL_Menu.py:1418 #, python-brace-format msgid "Error: The directory '{dir}' does not exist." msgstr "Chyba: Adresář '{dir}' neexistuje." @@ -918,11 +918,11 @@ msgstr "Umístění úložiště aktualizováno." msgid "Do you want to move the existing data to the new location? (y/n): " msgstr "Chcete přesunout stávající data do nového umístění? (a/n): " -#: TimeTrackerCLI.py:760 sl/SL_Menu.py:1344 +#: TimeTrackerCLI.py:760 sl/SL_Menu.py:1428 msgid "Data moved successfully." msgstr "Data byla úspěšně přesunuta." -#: TimeTrackerCLI.py:762 sl/SL_Menu.py:1346 +#: TimeTrackerCLI.py:762 sl/SL_Menu.py:1430 #, python-brace-format msgid "Error moving data: {error}" msgstr "Chyba při přesunu dat: {error}" @@ -1033,7 +1033,7 @@ msgstr "Zadejte počáteční datum (RRRR-MM-DD): " msgid "Enter the end date (YYYY-MM-DD): " msgstr "Zadejte koncové datum (RRRR-MM-DD): " -#: TimeTrackerCLI.py:837 sl/SL_Menu.py:2593 +#: TimeTrackerCLI.py:837 sl/SL_Menu.py:2677 msgid "Error: The start date cannot be after the end date." msgstr "Chyba: Počáteční datum nemůže být po koncovém datu." @@ -1045,8 +1045,8 @@ msgstr "" "\n" "--- Podrobná zpráva o úkolu ---" -#: TimeTrackerCLI.py:847 TimeTrackerCLI.py:880 sl/SL_Menu.py:1883 -#: sl/SL_Menu.py:1930 sl/SL_Menu.py:2070 sl/SL_Menu.py:2611 sl/SL_Menu.py:2670 +#: TimeTrackerCLI.py:847 TimeTrackerCLI.py:880 sl/SL_Menu.py:1967 +#: sl/SL_Menu.py:2014 sl/SL_Menu.py:2154 sl/SL_Menu.py:2695 sl/SL_Menu.py:2754 msgid "No projects found." msgstr "Nebyly nalezeny žádné projekty." @@ -1191,12 +1191,12 @@ msgstr "" msgid "Select a task from '{name}':" msgstr "Vyberte úkol z '{name}':" -#: TimeTrackerCLI.py:987 sl/SL_Menu.py:2526 +#: TimeTrackerCLI.py:987 sl/SL_Menu.py:2610 #, python-brace-format msgid "Work started on '{task_name}' in project '{main_name}'." msgstr "Zahájena práce na '{task_name}' v projektu '{main_name}'." -#: TimeTrackerCLI.py:989 sl/SL_Menu.py:2530 +#: TimeTrackerCLI.py:989 sl/SL_Menu.py:2614 msgid "Error starting work." msgstr "Chyba při zahájení práce." @@ -1232,7 +1232,7 @@ msgstr " Zahájeno v: {date}" msgid " Duration: {duration}" msgstr " Trvání: {duration}" -#: TimeTrackerCLI.py:1012 sl/SL_Menu.py:559 sl/SL_Menu.py:2552 +#: TimeTrackerCLI.py:1012 sl/SL_Menu.py:870 sl/SL_Menu.py:2636 msgid "No active work session." msgstr "Žádná aktivní pracovní relace." @@ -1244,11 +1244,11 @@ msgstr "" "\n" "--- Zastavit práci ---" -#: TimeTrackerCLI.py:1018 sl/SL_Menu.py:504 +#: TimeTrackerCLI.py:1018 sl/SL_Menu.py:594 msgid "Work session stopped successfully." msgstr "Pracovní relace byla úspěšně zastavena." -#: TimeTrackerCLI.py:1020 sl/SL_Menu.py:506 +#: TimeTrackerCLI.py:1020 sl/SL_Menu.py:596 msgid "No active work session to stop." msgstr "Žádná aktivní pracovní relace k zastavení." @@ -1264,410 +1264,424 @@ msgstr "" msgid "Exiting application. Goodbye!" msgstr "Ukončuji aplikaci. Na shledanou!" -#: sl/SL_Menu.py:399 +#: sl/SL_Menu.py:278 sl/SL_Menu.py:989 sl/SL_Menu.py:2327 sl/SL_Menu.py:2499 +msgid "Priority" +msgstr "Priorita" + +#: sl/SL_Menu.py:450 +#, python-brace-format +msgid "Version {version}" +msgstr "Verze {version}" + +#: sl/SL_Menu.py:455 update.py:49 +#, python-brace-format +msgid "A new version ({version}) is available." +msgstr "Je k dispozici nová verze ({version})." + +#: sl/SL_Menu.py:457 +msgid "Restart and install the update" +msgstr "Restartovat a nainstalovat aktualizaci" + +#: sl/SL_Menu.py:458 +msgid "Downloading and installing update..." +msgstr "Stahuji a instaluji aktualizaci..." + +#: sl/SL_Menu.py:489 msgid "New" msgstr "Nové" -#: sl/SL_Menu.py:400 +#: sl/SL_Menu.py:490 msgid "New Project" msgstr "Nový projekt" -#: sl/SL_Menu.py:403 +#: sl/SL_Menu.py:493 msgid "New Task" msgstr "Nový úkol" -#: sl/SL_Menu.py:408 +#: sl/SL_Menu.py:498 msgid "Project & Task Management" msgstr "Správa projektů a úkolů" -#: sl/SL_Menu.py:409 sl/SL_Menu.py:1117 +#: sl/SL_Menu.py:499 sl/SL_Menu.py:1201 msgid "Main Project Management" msgstr "Hlavní správa projektů" -#: sl/SL_Menu.py:410 sl/SL_Menu.py:1133 sl/SL_Menu.py:1528 +#: sl/SL_Menu.py:500 sl/SL_Menu.py:1217 sl/SL_Menu.py:1612 msgid "Add Project" msgstr "Přidat projekt" -#: sl/SL_Menu.py:413 sl/SL_Menu.py:1136 sl/SL_Menu.py:1876 +#: sl/SL_Menu.py:503 sl/SL_Menu.py:1220 sl/SL_Menu.py:1960 msgid "List Projects" msgstr "Vypsat projekty" -#: sl/SL_Menu.py:416 sl/SL_Menu.py:1139 sl/SL_Menu.py:1891 +#: sl/SL_Menu.py:506 sl/SL_Menu.py:1223 sl/SL_Menu.py:1975 msgid "Rename Project" msgstr "Přejmenovat projekt" -#: sl/SL_Menu.py:419 sl/SL_Menu.py:1142 sl/SL_Menu.py:2006 sl/SL_Menu.py:2019 +#: sl/SL_Menu.py:509 sl/SL_Menu.py:1226 sl/SL_Menu.py:2090 sl/SL_Menu.py:2103 msgid "Close Project" msgstr "Zavřít projekt" -#: sl/SL_Menu.py:422 sl/SL_Menu.py:1145 sl/SL_Menu.py:2036 sl/SL_Menu.py:2049 +#: sl/SL_Menu.py:512 sl/SL_Menu.py:1229 sl/SL_Menu.py:2120 sl/SL_Menu.py:2133 msgid "Re-open Project" msgstr "Znovu otevřít projekt" -#: sl/SL_Menu.py:425 sl/SL_Menu.py:1148 sl/SL_Menu.py:2066 sl/SL_Menu.py:2080 +#: sl/SL_Menu.py:515 sl/SL_Menu.py:1232 sl/SL_Menu.py:2150 sl/SL_Menu.py:2164 msgid "Delete Project" msgstr "Smazat projekt" -#: sl/SL_Menu.py:428 sl/SL_Menu.py:1151 sl/SL_Menu.py:2097 +#: sl/SL_Menu.py:518 sl/SL_Menu.py:1235 sl/SL_Menu.py:2181 msgid "List Inactive Projects" msgstr "Seznam neaktivních projektů" -#: sl/SL_Menu.py:431 sl/SL_Menu.py:1154 +#: sl/SL_Menu.py:521 sl/SL_Menu.py:1238 msgid "Demote Project to Task" msgstr "Degradovat projekt na úkol" -#: sl/SL_Menu.py:434 sl/SL_Menu.py:1157 sl/SL_Menu.py:2159 +#: sl/SL_Menu.py:524 sl/SL_Menu.py:1241 sl/SL_Menu.py:2243 msgid "List Completed Projects" msgstr "Vypsat dokončené projekty" -#: sl/SL_Menu.py:438 sl/SL_Menu.py:1119 sl/SL_Menu.py:1170 +#: sl/SL_Menu.py:528 sl/SL_Menu.py:1203 sl/SL_Menu.py:1254 msgid "Task Management" msgstr "Správa úkolů" -#: sl/SL_Menu.py:439 sl/SL_Menu.py:1172 sl/SL_Menu.py:2177 sl/SL_Menu.py:2208 -#: sl/SL_Menu.py:2283 +#: sl/SL_Menu.py:529 sl/SL_Menu.py:1256 sl/SL_Menu.py:2261 sl/SL_Menu.py:2292 +#: sl/SL_Menu.py:2367 msgid "Add Task" msgstr "Přidat úkol" -#: sl/SL_Menu.py:442 sl/SL_Menu.py:1175 sl/SL_Menu.py:1926 +#: sl/SL_Menu.py:532 sl/SL_Menu.py:1259 sl/SL_Menu.py:2010 msgid "List Tasks" msgstr "Vypsat úkoly" -#: sl/SL_Menu.py:445 sl/SL_Menu.py:1178 sl/SL_Menu.py:1959 +#: sl/SL_Menu.py:535 sl/SL_Menu.py:1262 sl/SL_Menu.py:2043 msgid "Rename Task" msgstr "Přejmenovat úkol" -#: sl/SL_Menu.py:448 sl/SL_Menu.py:1181 sl/SL_Menu.py:1543 sl/SL_Menu.py:1569 -#: sl/SL_Menu.py:1748 +#: sl/SL_Menu.py:538 sl/SL_Menu.py:1265 sl/SL_Menu.py:1627 sl/SL_Menu.py:1653 +#: sl/SL_Menu.py:1832 msgid "Close Task" msgstr "Uzavřít úkol" -#: sl/SL_Menu.py:451 sl/SL_Menu.py:1184 sl/SL_Menu.py:1588 sl/SL_Menu.py:1614 +#: sl/SL_Menu.py:541 sl/SL_Menu.py:1268 sl/SL_Menu.py:1672 sl/SL_Menu.py:1698 msgid "Re-open Task" msgstr "Znovu otevřít úkol" -#: sl/SL_Menu.py:454 sl/SL_Menu.py:1187 sl/SL_Menu.py:1633 sl/SL_Menu.py:1660 +#: sl/SL_Menu.py:544 sl/SL_Menu.py:1271 sl/SL_Menu.py:1717 sl/SL_Menu.py:1744 msgid "Delete Task" msgstr "Smazat úkol" -#: sl/SL_Menu.py:457 sl/SL_Menu.py:1190 sl/SL_Menu.py:1679 sl/SL_Menu.py:1715 +#: sl/SL_Menu.py:547 sl/SL_Menu.py:1274 sl/SL_Menu.py:1763 sl/SL_Menu.py:1799 msgid "Move Task" msgstr "Přesunout úkol" -#: sl/SL_Menu.py:460 sl/SL_Menu.py:1193 sl/SL_Menu.py:1734 +#: sl/SL_Menu.py:550 sl/SL_Menu.py:1277 sl/SL_Menu.py:1818 msgid "List Inactive Tasks" msgstr "Vypsat neaktivní úkoly" -#: sl/SL_Menu.py:463 sl/SL_Menu.py:1196 sl/SL_Menu.py:1761 +#: sl/SL_Menu.py:553 sl/SL_Menu.py:1280 sl/SL_Menu.py:1845 msgid "List All Closed Tasks" msgstr "Vypsat všechny uzavřené úkoly" -#: sl/SL_Menu.py:466 sl/SL_Menu.py:675 sl/SL_Menu.py:761 sl/SL_Menu.py:929 -#: sl/SL_Menu.py:1199 sl/SL_Menu.py:2311 sl/SL_Menu.py:2331 sl/SL_Menu.py:2366 +#: sl/SL_Menu.py:556 sl/SL_Menu.py:715 sl/SL_Menu.py:801 sl/SL_Menu.py:1011 +#: sl/SL_Menu.py:1283 sl/SL_Menu.py:2395 sl/SL_Menu.py:2415 sl/SL_Menu.py:2450 msgid "Edit Task" msgstr "Upravit úkol" -#: sl/SL_Menu.py:469 sl/SL_Menu.py:1202 sl/SL_Menu.py:1786 +#: sl/SL_Menu.py:559 sl/SL_Menu.py:1286 sl/SL_Menu.py:1870 msgid "Delete All Closed Tasks" msgstr "Smazat všechny uzavřené úkoly" -#: sl/SL_Menu.py:472 sl/SL_Menu.py:1205 sl/SL_Menu.py:1828 +#: sl/SL_Menu.py:562 sl/SL_Menu.py:1289 sl/SL_Menu.py:1912 msgid "Promote Task to Project" msgstr "Povýšit úkol na projekt" -#: sl/SL_Menu.py:477 +#: sl/SL_Menu.py:567 msgid "Today View" msgstr "Dnes Zobrazit" -#: sl/SL_Menu.py:482 sl/SL_Menu.py:591 +#: sl/SL_Menu.py:572 sl/SL_Menu.py:631 msgid "Task Planning" msgstr "Plánování úkolů" -#: sl/SL_Menu.py:487 sl/SL_Menu.py:962 +#: sl/SL_Menu.py:577 sl/SL_Menu.py:1046 msgid "E-Mail Task Assignment" msgstr "Zadání úkolu E-" -#: sl/SL_Menu.py:492 sl/SL_Menu.py:671 sl/SL_Menu.py:757 sl/SL_Menu.py:925 +#: sl/SL_Menu.py:582 sl/SL_Menu.py:711 sl/SL_Menu.py:797 sl/SL_Menu.py:1007 msgid "Start work on task" msgstr "Začít práci na úkolu" -#: sl/SL_Menu.py:497 +#: sl/SL_Menu.py:587 msgid "Show current work" msgstr "Zobrazit aktuální práci" -#: sl/SL_Menu.py:502 +#: sl/SL_Menu.py:592 msgid "Stop current work" msgstr "Zastavit aktuální práci" -#: sl/SL_Menu.py:510 sl/SL_Menu.py:1218 +#: sl/SL_Menu.py:600 sl/SL_Menu.py:1302 msgid "Reporting" msgstr "Reportování" -#: sl/SL_Menu.py:511 sl/SL_Menu.py:1221 +#: sl/SL_Menu.py:601 sl/SL_Menu.py:1305 msgid "Daily Report (Today)" msgstr "Denní zpráva (dnes)" -#: sl/SL_Menu.py:516 sl/SL_Menu.py:1227 sl/SL_Menu.py:2561 +#: sl/SL_Menu.py:606 sl/SL_Menu.py:1311 sl/SL_Menu.py:2645 msgid "Daily Report (Specific Day)" msgstr "Denní zpráva (konkrétní den)" -#: sl/SL_Menu.py:519 sl/SL_Menu.py:1230 sl/SL_Menu.py:2580 +#: sl/SL_Menu.py:609 sl/SL_Menu.py:1314 sl/SL_Menu.py:2664 msgid "Date Range Report" msgstr "Zpráva za období" -#: sl/SL_Menu.py:522 sl/SL_Menu.py:1233 sl/SL_Menu.py:2607 sl/SL_Menu.py:2638 +#: sl/SL_Menu.py:612 sl/SL_Menu.py:1317 sl/SL_Menu.py:2691 sl/SL_Menu.py:2722 msgid "Detailed Task Report" msgstr "Podrobná zpráva o úkolu" -#: sl/SL_Menu.py:525 sl/SL_Menu.py:1236 sl/SL_Menu.py:2666 +#: sl/SL_Menu.py:615 sl/SL_Menu.py:1320 sl/SL_Menu.py:2750 msgid "Detailed Project Report" msgstr "Podrobná zpráva o projektu" -#: sl/SL_Menu.py:528 sl/SL_Menu.py:1239 sl/SL_Menu.py:2693 +#: sl/SL_Menu.py:618 sl/SL_Menu.py:1323 sl/SL_Menu.py:2777 msgid "Detailed Daily Report" msgstr "Podrobná denní zpráva" -#: sl/SL_Menu.py:533 sl/SL_Menu.py:1256 +#: sl/SL_Menu.py:623 sl/SL_Menu.py:1340 msgid "Settings" msgstr "Nastavení" -#: sl/SL_Menu.py:557 sl/SL_Menu.py:2539 -msgid "Current Active Work" -msgstr "Aktuální aktivní práce" - -#: sl/SL_Menu.py:562 sl/SL_Menu.py:695 sl/SL_Menu.py:781 sl/SL_Menu.py:936 -#: sl/SL_Menu.py:2411 -msgid "Done" -msgstr "Hotovo" - -#: sl/SL_Menu.py:576 -msgid "Edit current task" -msgstr "Upravit aktuální úkol" - -#: sl/SL_Menu.py:584 -msgid "Exit" -msgstr "Konec" - -#: sl/SL_Menu.py:597 sl/SL_Menu.py:617 +#: sl/SL_Menu.py:637 sl/SL_Menu.py:657 msgid "Tomorrow" msgstr "Zítra" -#: sl/SL_Menu.py:598 sl/SL_Menu.py:618 +#: sl/SL_Menu.py:638 sl/SL_Menu.py:658 msgid "Weekly overview" msgstr "Týdenní přehled" -#: sl/SL_Menu.py:599 sl/SL_Menu.py:619 +#: sl/SL_Menu.py:639 sl/SL_Menu.py:659 msgid "Overdue tasks" msgstr "Zpožděné úkoly" -#: sl/SL_Menu.py:600 sl/SL_Menu.py:620 +#: sl/SL_Menu.py:640 sl/SL_Menu.py:660 msgid "Unplanned tasks" msgstr "Neplánované úkoly" -#: sl/SL_Menu.py:601 +#: sl/SL_Menu.py:641 msgid "All" msgstr "Vše" -#: sl/SL_Menu.py:608 +#: sl/SL_Menu.py:648 msgid "Filter" msgstr "Filtr" -#: sl/SL_Menu.py:627 +#: sl/SL_Menu.py:667 msgid "Tasks" msgstr "Úkoly" -#: sl/SL_Menu.py:634 tt/TimeTracker.py:1471 tt/TimeTracker.py:1569 +#: sl/SL_Menu.py:674 tt/TimeTracker.py:1479 tt/TimeTracker.py:1577 msgid "Friday" msgstr "Pátek" -#: sl/SL_Menu.py:634 tt/TimeTracker.py:1471 tt/TimeTracker.py:1569 +#: sl/SL_Menu.py:674 tt/TimeTracker.py:1479 tt/TimeTracker.py:1577 msgid "Monday" msgstr "Pondělí" -#: sl/SL_Menu.py:634 tt/TimeTracker.py:1471 tt/TimeTracker.py:1569 +#: sl/SL_Menu.py:674 tt/TimeTracker.py:1479 tt/TimeTracker.py:1577 msgid "Saturday" msgstr "Sobota" -#: sl/SL_Menu.py:634 tt/TimeTracker.py:1471 tt/TimeTracker.py:1569 +#: sl/SL_Menu.py:674 tt/TimeTracker.py:1479 tt/TimeTracker.py:1577 msgid "Sunday" msgstr "Neděle" -#: sl/SL_Menu.py:634 tt/TimeTracker.py:1471 tt/TimeTracker.py:1569 +#: sl/SL_Menu.py:674 tt/TimeTracker.py:1479 tt/TimeTracker.py:1577 msgid "Thursday" msgstr "Čtvrtek" -#: sl/SL_Menu.py:634 tt/TimeTracker.py:1471 tt/TimeTracker.py:1569 +#: sl/SL_Menu.py:674 tt/TimeTracker.py:1479 tt/TimeTracker.py:1577 msgid "Tuesday" msgstr "Úterý" -#: sl/SL_Menu.py:634 tt/TimeTracker.py:1471 tt/TimeTracker.py:1569 +#: sl/SL_Menu.py:674 tt/TimeTracker.py:1479 tt/TimeTracker.py:1577 msgid "Wednesday" msgstr "Středa" -#: sl/SL_Menu.py:796 +#: sl/SL_Menu.py:735 sl/SL_Menu.py:821 sl/SL_Menu.py:873 sl/SL_Menu.py:1018 +#: sl/SL_Menu.py:2495 +msgid "Done" +msgstr "Hotovo" + +#: sl/SL_Menu.py:836 msgid "No tasks found." msgstr "Nebyly nalezeny žádné úkoly." -#: sl/SL_Menu.py:798 sl/SL_Menu.py:955 sl/SL_Menu.py:1106 sl/SL_Menu.py:1163 -#: sl/SL_Menu.py:1211 sl/SL_Menu.py:1515 sl/SL_Menu.py:1548 sl/SL_Menu.py:1559 -#: sl/SL_Menu.py:1593 sl/SL_Menu.py:1604 sl/SL_Menu.py:1638 sl/SL_Menu.py:1649 -#: sl/SL_Menu.py:1684 sl/SL_Menu.py:1695 sl/SL_Menu.py:1703 sl/SL_Menu.py:1754 -#: sl/SL_Menu.py:1779 sl/SL_Menu.py:1801 sl/SL_Menu.py:1833 sl/SL_Menu.py:1844 -#: sl/SL_Menu.py:1884 sl/SL_Menu.py:1896 sl/SL_Menu.py:1931 sl/SL_Menu.py:1952 -#: sl/SL_Menu.py:1964 sl/SL_Menu.py:1975 sl/SL_Menu.py:2011 sl/SL_Menu.py:2041 -#: sl/SL_Menu.py:2071 sl/SL_Menu.py:2111 sl/SL_Menu.py:2123 sl/SL_Menu.py:2170 -#: sl/SL_Menu.py:2182 sl/SL_Menu.py:2316 sl/SL_Menu.py:2335 sl/SL_Menu.py:2348 -#: sl/SL_Menu.py:2363 sl/SL_Menu.py:2500 sl/SL_Menu.py:2510 sl/SL_Menu.py:2554 -#: sl/SL_Menu.py:2573 sl/SL_Menu.py:2600 sl/SL_Menu.py:2612 sl/SL_Menu.py:2624 -#: sl/SL_Menu.py:2643 sl/SL_Menu.py:2659 sl/SL_Menu.py:2671 sl/SL_Menu.py:2686 -#: sl/SL_Menu.py:2705 sl/SL_Menu.py:2746 sl/SL_Menu.py:2761 +#: sl/SL_Menu.py:838 sl/SL_Menu.py:1190 sl/SL_Menu.py:1208 sl/SL_Menu.py:1247 +#: sl/SL_Menu.py:1295 sl/SL_Menu.py:1329 sl/SL_Menu.py:1599 sl/SL_Menu.py:1632 +#: sl/SL_Menu.py:1643 sl/SL_Menu.py:1677 sl/SL_Menu.py:1688 sl/SL_Menu.py:1722 +#: sl/SL_Menu.py:1733 sl/SL_Menu.py:1768 sl/SL_Menu.py:1779 sl/SL_Menu.py:1787 +#: sl/SL_Menu.py:1838 sl/SL_Menu.py:1863 sl/SL_Menu.py:1885 sl/SL_Menu.py:1917 +#: sl/SL_Menu.py:1928 sl/SL_Menu.py:1968 sl/SL_Menu.py:1980 sl/SL_Menu.py:2015 +#: sl/SL_Menu.py:2036 sl/SL_Menu.py:2048 sl/SL_Menu.py:2059 sl/SL_Menu.py:2095 +#: sl/SL_Menu.py:2125 sl/SL_Menu.py:2155 sl/SL_Menu.py:2195 sl/SL_Menu.py:2207 +#: sl/SL_Menu.py:2254 sl/SL_Menu.py:2266 sl/SL_Menu.py:2400 sl/SL_Menu.py:2419 +#: sl/SL_Menu.py:2432 sl/SL_Menu.py:2447 sl/SL_Menu.py:2584 sl/SL_Menu.py:2594 +#: sl/SL_Menu.py:2638 sl/SL_Menu.py:2657 sl/SL_Menu.py:2684 sl/SL_Menu.py:2696 +#: sl/SL_Menu.py:2708 sl/SL_Menu.py:2727 sl/SL_Menu.py:2743 sl/SL_Menu.py:2755 +#: sl/SL_Menu.py:2770 sl/SL_Menu.py:2789 sl/SL_Menu.py:2830 sl/SL_Menu.py:2845 msgid "Back" msgstr "Zpět" -#: sl/SL_Menu.py:805 +#: sl/SL_Menu.py:849 msgid "Today's Tasks" msgstr "Dnešní úkoly" -#: sl/SL_Menu.py:826 +#: sl/SL_Menu.py:868 sl/SL_Menu.py:2623 +msgid "Current Active Work" +msgstr "Aktuální aktivní práce" + +#: sl/SL_Menu.py:887 +msgid "Edit current task" +msgstr "Upravit aktuální úkol" + +#: sl/SL_Menu.py:908 msgid "Show only open tasks" msgstr "Zobrazit pouze otevřené úkoly" -#: sl/SL_Menu.py:838 +#: sl/SL_Menu.py:920 msgid "Sort by priority" msgstr "Řadit podle priority" -#: sl/SL_Menu.py:907 sl/SL_Menu.py:2243 sl/SL_Menu.py:2415 -msgid "Priority" -msgstr "Priorita" - -#: sl/SL_Menu.py:910 sl/SL_Menu.py:2243 sl/SL_Menu.py:2415 +#: sl/SL_Menu.py:992 sl/SL_Menu.py:2327 sl/SL_Menu.py:2499 msgid "0 (lowest) to 9 (highest)" msgstr "0 (nejnižší) až 9 (nejvyšší)" -#: sl/SL_Menu.py:951 +#: sl/SL_Menu.py:1033 msgid "No open tasks for today." msgstr "Žádné otevřené úkoly na dnešek." -#: sl/SL_Menu.py:953 +#: sl/SL_Menu.py:1035 msgid "No tasks for today." msgstr "Žádné úkoly na dnešek." -#: sl/SL_Menu.py:968 +#: sl/SL_Menu.py:1039 +msgid "Exit" +msgstr "Konec" + +#: sl/SL_Menu.py:1052 msgid "Fetching emails..." msgstr "Načítání e-mailů..." -#: sl/SL_Menu.py:971 +#: sl/SL_Menu.py:1055 #, python-brace-format msgid "Error fetching emails: {error}" msgstr "Chyba při načítání e-mailů: {error}" -#: sl/SL_Menu.py:974 +#: sl/SL_Menu.py:1058 #, python-brace-format msgid "{count} new tasks created from emails." msgstr "{count} nových úkolů vytvořených z e-mailů." -#: sl/SL_Menu.py:976 +#: sl/SL_Menu.py:1060 msgid "No new emails found." msgstr "Nebyly nalezeny žádné nové e-maily." -#: sl/SL_Menu.py:1001 +#: sl/SL_Menu.py:1085 #, python-brace-format msgid "{remaining} of {total} emails still to process" msgstr "{remaining} z {total} e-mailů zbývá zpracovat" -#: sl/SL_Menu.py:1005 +#: sl/SL_Menu.py:1089 msgid "No unassigned email tasks available." msgstr "Nejsou k dispozici žádné nepřiřazené e-mailové úkoly." -#: sl/SL_Menu.py:1017 +#: sl/SL_Menu.py:1101 msgid "Assign Project" msgstr "Přiřadit projekt" -#: sl/SL_Menu.py:1028 +#: sl/SL_Menu.py:1112 msgid "Are you sure you want to delete this task?" msgstr "Opravdu chcete smazat tento úkol?" -#: sl/SL_Menu.py:1031 +#: sl/SL_Menu.py:1115 msgid "Yes, delete" msgstr "Ano, smazat" -#: sl/SL_Menu.py:1036 +#: sl/SL_Menu.py:1120 msgid "No, cancel" msgstr "Ne, zrušit" -#: sl/SL_Menu.py:1043 +#: sl/SL_Menu.py:1127 msgid "Delete" msgstr "Smazat" -#: sl/SL_Menu.py:1047 +#: sl/SL_Menu.py:1131 msgid "Edit Details" msgstr "Upravit podrobnosti" -#: sl/SL_Menu.py:1055 sl/SL_Menu.py:2395 +#: sl/SL_Menu.py:1139 sl/SL_Menu.py:2479 msgid "Task Name" msgstr "Název úkolu" -#: sl/SL_Menu.py:1064 sl/SL_Menu.py:2399 +#: sl/SL_Menu.py:1148 sl/SL_Menu.py:2483 msgid "Due Date" msgstr "Termín" -#: sl/SL_Menu.py:1072 sl/SL_Menu.py:2403 +#: sl/SL_Menu.py:1156 sl/SL_Menu.py:2487 msgid "Clear" msgstr "Vymazat" -#: sl/SL_Menu.py:1079 sl/SL_Menu.py:2271 sl/SL_Menu.py:2444 +#: sl/SL_Menu.py:1163 sl/SL_Menu.py:2355 sl/SL_Menu.py:2528 msgid "Notes (Markdown)" msgstr "Poznámky (označení)" -#: sl/SL_Menu.py:1098 +#: sl/SL_Menu.py:1182 msgid "Task details updated successfully." msgstr "Podrobnosti úkolu byly úspěšně aktualizovány." -#: sl/SL_Menu.py:1104 +#: sl/SL_Menu.py:1188 msgid "Error updating task details." msgstr "Při aktualizaci podrobností úkolu došlo k chybě." -#: sl/SL_Menu.py:1115 sl/SL_Menu.py:1131 +#: sl/SL_Menu.py:1199 sl/SL_Menu.py:1215 msgid "Project Management" msgstr "Správa projektů" -#: sl/SL_Menu.py:1124 sl/SL_Menu.py:1245 -msgid "Back to Main Menu" -msgstr "Zpět do hlavního menu" - -#: sl/SL_Menu.py:1259 +#: sl/SL_Menu.py:1343 msgid "Change Language" msgstr "Změnit jazyk" -#: sl/SL_Menu.py:1277 +#: sl/SL_Menu.py:1361 msgid "Select Language" msgstr "Vybrat jazyk" -#: sl/SL_Menu.py:1278 sl/SL_Menu.py:1318 sl/SL_Menu.py:1359 sl/SL_Menu.py:1372 -#: sl/SL_Menu.py:1392 sl/SL_Menu.py:1426 sl/SL_Menu.py:1449 sl/SL_Menu.py:1504 +#: sl/SL_Menu.py:1362 sl/SL_Menu.py:1402 sl/SL_Menu.py:1443 sl/SL_Menu.py:1456 +#: sl/SL_Menu.py:1476 sl/SL_Menu.py:1510 sl/SL_Menu.py:1533 sl/SL_Menu.py:1588 msgid "Save" msgstr "Uložit" -#: sl/SL_Menu.py:1284 +#: sl/SL_Menu.py:1368 msgid "" "Language changed. Please restart the application for the changes to take " "effect." msgstr "Jazyk byl změněn. Restartujte aplikaci, aby se změny projevily." -#: sl/SL_Menu.py:1287 +#: sl/SL_Menu.py:1371 msgid "Restore Previous Version" msgstr "Obnovit předchozí verzi" -#: sl/SL_Menu.py:1290 +#: sl/SL_Menu.py:1374 msgid "The 'update' module is not available. This feature is disabled." msgstr "Modul 'aktualizace' není k dispozici. Tato funkce je zakázána." -#: sl/SL_Menu.py:1292 +#: sl/SL_Menu.py:1376 #, python-brace-format msgid "No previous version backup '{filename}' found." msgstr "Nebyla nalezena žádná záloha předchozí verze{filename}." -#: sl/SL_Menu.py:1294 +#: sl/SL_Menu.py:1378 msgid "" "This will restore the application to the previously backed-up version. The " "application will then restart. You may need to manually refresh your browser " @@ -1677,35 +1691,35 @@ msgstr "" "restartuje. Pokud se prohlížeč automaticky znovu nepřipojí, možná budete " "muset aktualizovat ručně." -#: sl/SL_Menu.py:1295 +#: sl/SL_Menu.py:1379 msgid "Restore and Restart" msgstr "Obnovit a restartovat" -#: sl/SL_Menu.py:1296 +#: sl/SL_Menu.py:1380 msgid "Restoring and restarting..." msgstr "Obnovování a restartování..." -#: sl/SL_Menu.py:1299 +#: sl/SL_Menu.py:1383 msgid "Restore complete. Please restart the application." msgstr "Obnovení dokončeno. Restartujte aplikaci." -#: sl/SL_Menu.py:1301 +#: sl/SL_Menu.py:1385 msgid "Change Data Storage Location" msgstr "Změnit umístění úložiště dat" -#: sl/SL_Menu.py:1303 +#: sl/SL_Menu.py:1387 msgid "Current data file" msgstr "Aktuální datový soubor" -#: sl/SL_Menu.py:1306 +#: sl/SL_Menu.py:1390 msgid "New Path for data file" msgstr "Nová cesta pro datový soubor" -#: sl/SL_Menu.py:1312 +#: sl/SL_Menu.py:1396 msgid "Move existing data to the new location" msgstr "Přesunout existující data do nového umístění" -#: sl/SL_Menu.py:1315 +#: sl/SL_Menu.py:1399 msgid "" "If unchecked, the old data file will remain, and a new empty one might be " "created at the new location on restart." @@ -1713,11 +1727,11 @@ msgstr "" "Pokud není zaškrtnuto, starý datový soubor zůstane a při restartu může být " "vytvořen nový prázdný v novém umístění." -#: sl/SL_Menu.py:1322 +#: sl/SL_Menu.py:1406 msgid "Please enter a new path." msgstr "Zadejte prosím novou cestu." -#: sl/SL_Menu.py:1330 +#: sl/SL_Menu.py:1414 msgid "" "Error: For security, the data file must be located within the application " "directory." @@ -1725,7 +1739,7 @@ msgstr "" "Chyba: Z důvodu zabezpečení musí být datový soubor umístěn v adresáři " "aplikace." -#: sl/SL_Menu.py:1339 +#: sl/SL_Menu.py:1423 msgid "" "Storage location updated. Please restart the application for the changes to " "take effect." @@ -1733,257 +1747,261 @@ msgstr "" "Umístění úložiště aktualizováno. Restartujte aplikaci, aby se změny " "projevily." -#: sl/SL_Menu.py:1353 +#: sl/SL_Menu.py:1437 msgid "Report Format" msgstr "Formát zprávy" -#: sl/SL_Menu.py:1358 +#: sl/SL_Menu.py:1442 msgid "Select Format" msgstr "Vyberte formát" -#: sl/SL_Menu.py:1363 +#: sl/SL_Menu.py:1447 msgid "Report format updated." msgstr "Formát zprávy byl aktualizován." -#: sl/SL_Menu.py:1366 +#: sl/SL_Menu.py:1450 msgid "Streamlit Port Settings" msgstr "Nastavení streamovaného portu" -#: sl/SL_Menu.py:1368 +#: sl/SL_Menu.py:1452 msgid "Current Streamlit Port" msgstr "Aktuální port streamovaného proudu" -#: sl/SL_Menu.py:1371 +#: sl/SL_Menu.py:1455 msgid "New Port" msgstr "Nový port" -#: sl/SL_Menu.py:1376 +#: sl/SL_Menu.py:1460 #, python-brace-format msgid "Port updated to {port}. Please restart Streamlit." msgstr "Port aktualizován na {port}. Restartujte prosím Streamlit." -#: sl/SL_Menu.py:1379 +#: sl/SL_Menu.py:1463 msgid "Email Settings" msgstr "Nastavení e-mailu" -#: sl/SL_Menu.py:1385 +#: sl/SL_Menu.py:1469 msgid "Enable email import" msgstr "Povolit import e-mailů" -#: sl/SL_Menu.py:1386 +#: sl/SL_Menu.py:1470 msgid "IMAP Server" msgstr "Server IMAP" -#: sl/SL_Menu.py:1387 +#: sl/SL_Menu.py:1471 msgid "Port" msgstr "Port" -#: sl/SL_Menu.py:1388 +#: sl/SL_Menu.py:1472 msgid "Username" msgstr "Uživatelské jméno" -#: sl/SL_Menu.py:1389 +#: sl/SL_Menu.py:1473 msgid "Password" msgstr "Heslo" -#: sl/SL_Menu.py:1390 +#: sl/SL_Menu.py:1474 msgid "Use SSL" msgstr "Použít SSL" -#: sl/SL_Menu.py:1403 +#: sl/SL_Menu.py:1487 msgid "Email settings saved." msgstr "Nastavení e-mailu bylo uloženo." -#: sl/SL_Menu.py:1406 +#: sl/SL_Menu.py:1490 msgid "Change CSS Style" msgstr "Změnit styl CSS" -#: sl/SL_Menu.py:1408 +#: sl/SL_Menu.py:1492 msgid "Current CSS file" msgstr "Aktuální soubor CSS" -#: sl/SL_Menu.py:1425 +#: sl/SL_Menu.py:1509 msgid "Select CSS File" msgstr "Vybrat soubor CSS" -#: sl/SL_Menu.py:1431 +#: sl/SL_Menu.py:1515 msgid "" "CSS style updated. Please restart the application for the changes to take " "effect." msgstr "Styl CSS byl aktualizován. Pro projevení změn restartujte aplikaci." -#: sl/SL_Menu.py:1434 +#: sl/SL_Menu.py:1518 msgid "Change View Mode" msgstr "Změnit režim zobrazení" -#: sl/SL_Menu.py:1438 +#: sl/SL_Menu.py:1522 msgid "App Window (Webview)" msgstr "Okno aplikace (Webview)" -#: sl/SL_Menu.py:1438 +#: sl/SL_Menu.py:1522 msgid "System Browser" msgstr "Systémový prohlížeč" -#: sl/SL_Menu.py:1448 +#: sl/SL_Menu.py:1532 msgid "Select View Mode" msgstr "Vyberte režim zobrazení" -#: sl/SL_Menu.py:1455 +#: sl/SL_Menu.py:1539 msgid "" "View mode updated. Please restart the application for the changes to take " "effect." msgstr "" "Režim zobrazení byl aktualizován. Pro projevení změn restartujte aplikaci." -#: sl/SL_Menu.py:1458 +#: sl/SL_Menu.py:1542 msgid "MCP Server Settings" msgstr "Nastavení serveru MCP" -#: sl/SL_Menu.py:1460 +#: sl/SL_Menu.py:1544 msgid "HTTP (Streamable HTTP)" msgstr "HTTP (Streamable HTTP)" -#: sl/SL_Menu.py:1461 +#: sl/SL_Menu.py:1545 msgid "stdio (recommended for Claude Desktop)" msgstr "stdio (doporučeno pro Claude Desktop)" -#: sl/SL_Menu.py:1475 +#: sl/SL_Menu.py:1559 msgid "Transport" msgstr "Přenos" -#: sl/SL_Menu.py:1486 +#: sl/SL_Menu.py:1570 msgid "Enable MCP server" msgstr "Povolit server MCP" -#: sl/SL_Menu.py:1489 +#: sl/SL_Menu.py:1573 msgid "" "Not used with stdio - the MCP client starts and stops the server itself." msgstr "Nepoužívá se s stdio – klient MCP server spouští a zastavuje sám." -#: sl/SL_Menu.py:1492 +#: sl/SL_Menu.py:1576 msgid "Port (HTTP only)" msgstr "Port (pouze HTTP)" -#: sl/SL_Menu.py:1499 +#: sl/SL_Menu.py:1583 msgid "" "With stdio, the app does not start the MCP server itself - the MCP client " "(e.g. Claude Desktop) launches it directly, and the port is ignored." -msgstr "Se stdio aplikace nespouští server MCP sama – klient MCP (např. Claude Desktop) jej spouští přímo a port se ignoruje." +msgstr "" +"Se stdio aplikace nespouští server MCP sama – klient MCP (např. Claude " +"Desktop) jej spouští přímo a port se ignoruje." -#: sl/SL_Menu.py:1510 +#: sl/SL_Menu.py:1594 msgid "" "MCP server settings saved. Please restart the application for the changes to " "take effect." -msgstr "Nastavení serveru MCP bylo uloženo. Restartujte aplikaci, aby se změny projevily." +msgstr "" +"Nastavení serveru MCP bylo uloženo. Restartujte aplikaci, aby se změny " +"projevily." -#: sl/SL_Menu.py:1524 +#: sl/SL_Menu.py:1608 msgid "Add New Project" msgstr "Přidat nový projekt" -#: sl/SL_Menu.py:1527 +#: sl/SL_Menu.py:1611 msgid "Name of the project" msgstr "Název projektu" -#: sl/SL_Menu.py:1531 +#: sl/SL_Menu.py:1615 #, python-brace-format msgid "Project '{name}' added." msgstr "Projekt '{name}' byl přidán." -#: sl/SL_Menu.py:1535 sl/SL_Menu.py:1581 sl/SL_Menu.py:1626 sl/SL_Menu.py:1672 -#: sl/SL_Menu.py:1727 sl/SL_Menu.py:1821 sl/SL_Menu.py:1869 sl/SL_Menu.py:1919 -#: sl/SL_Menu.py:1999 sl/SL_Menu.py:2029 sl/SL_Menu.py:2059 sl/SL_Menu.py:2090 -#: sl/SL_Menu.py:2152 sl/SL_Menu.py:2192 sl/SL_Menu.py:2304 sl/SL_Menu.py:2323 -#: sl/SL_Menu.py:2484 sl/SL_Menu.py:2532 +#: sl/SL_Menu.py:1619 sl/SL_Menu.py:1665 sl/SL_Menu.py:1710 sl/SL_Menu.py:1756 +#: sl/SL_Menu.py:1811 sl/SL_Menu.py:1905 sl/SL_Menu.py:1953 sl/SL_Menu.py:2003 +#: sl/SL_Menu.py:2083 sl/SL_Menu.py:2113 sl/SL_Menu.py:2143 sl/SL_Menu.py:2174 +#: sl/SL_Menu.py:2236 sl/SL_Menu.py:2276 sl/SL_Menu.py:2388 sl/SL_Menu.py:2407 +#: sl/SL_Menu.py:2568 sl/SL_Menu.py:2616 msgid "Cancel" msgstr "Zrušit" -#: sl/SL_Menu.py:1553 sl/SL_Menu.py:1598 sl/SL_Menu.py:1643 sl/SL_Menu.py:1838 -#: sl/SL_Menu.py:1901 sl/SL_Menu.py:1936 sl/SL_Menu.py:1969 sl/SL_Menu.py:2018 -#: sl/SL_Menu.py:2048 sl/SL_Menu.py:2078 sl/SL_Menu.py:2505 sl/SL_Menu.py:2617 -#: sl/SL_Menu.py:2678 +#: sl/SL_Menu.py:1637 sl/SL_Menu.py:1682 sl/SL_Menu.py:1727 sl/SL_Menu.py:1922 +#: sl/SL_Menu.py:1985 sl/SL_Menu.py:2020 sl/SL_Menu.py:2053 sl/SL_Menu.py:2102 +#: sl/SL_Menu.py:2132 sl/SL_Menu.py:2162 sl/SL_Menu.py:2589 sl/SL_Menu.py:2701 +#: sl/SL_Menu.py:2762 msgid "Select Project" msgstr "Vybrat projekt" -#: sl/SL_Menu.py:1558 +#: sl/SL_Menu.py:1642 #, python-brace-format msgid "No open tasks to close in '{name}'." msgstr "Žádné otevřené úkoly k uzavření v '{name}'." -#: sl/SL_Menu.py:1565 sl/SL_Menu.py:1610 sl/SL_Menu.py:1655 sl/SL_Menu.py:1709 -#: sl/SL_Menu.py:1850 sl/SL_Menu.py:1979 sl/SL_Menu.py:2338 sl/SL_Menu.py:2516 -#: sl/SL_Menu.py:2648 +#: sl/SL_Menu.py:1649 sl/SL_Menu.py:1694 sl/SL_Menu.py:1739 sl/SL_Menu.py:1793 +#: sl/SL_Menu.py:1934 sl/SL_Menu.py:2063 sl/SL_Menu.py:2422 sl/SL_Menu.py:2600 +#: sl/SL_Menu.py:2732 msgid "Select Task" msgstr "Vybrat úkol" -#: sl/SL_Menu.py:1575 +#: sl/SL_Menu.py:1659 #, python-brace-format msgid "Task '{sub_name}' in '{main_name}' has been closed." msgstr "Úloha '{sub_name}' v '{main_name}' byla uzavřena." -#: sl/SL_Menu.py:1603 +#: sl/SL_Menu.py:1687 #, python-brace-format msgid "No closed tasks to reopen in '{name}'." msgstr "Žádné uzavřené úlohy k opětovnému otevření v '{name}'." -#: sl/SL_Menu.py:1620 +#: sl/SL_Menu.py:1704 #, python-brace-format msgid "Task '{sub_name}' in '{main_name}' has been reopened." msgstr "Úloha '{sub_name}' v '{main_name}' byla znovu otevřena." -#: sl/SL_Menu.py:1648 +#: sl/SL_Menu.py:1732 #, python-brace-format msgid "No open tasks to delete in '{name}'." msgstr "Žádné otevřené úkoly k odstranění v '{name}'." -#: sl/SL_Menu.py:1659 +#: sl/SL_Menu.py:1743 msgid "This action cannot be undone." msgstr "Tuto akci nelze vrátit zpět." -#: sl/SL_Menu.py:1666 +#: sl/SL_Menu.py:1750 #, python-brace-format msgid "Task '{sub_name}' deleted from '{main_name}'." msgstr "Úkol '{sub_name}' byl smazán z '{main_name}'." -#: sl/SL_Menu.py:1689 +#: sl/SL_Menu.py:1773 msgid "Select Source Project" msgstr "Vybrat zdrojový projekt" -#: sl/SL_Menu.py:1694 +#: sl/SL_Menu.py:1778 #, python-brace-format msgid "No tasks found in '{name}'." msgstr "V '{name}' nebyly nalezeny žádné úkoly." -#: sl/SL_Menu.py:1702 +#: sl/SL_Menu.py:1786 msgid "No other projects available to move to." msgstr "Žádné další projekty k přesunu." -#: sl/SL_Menu.py:1713 sl/SL_Menu.py:2138 +#: sl/SL_Menu.py:1797 sl/SL_Menu.py:2222 msgid "Select Target Project" msgstr "Vybrat cílový projekt" -#: sl/SL_Menu.py:1721 +#: sl/SL_Menu.py:1805 #, python-brace-format msgid "Task '{sub}' moved from '{src}' to '{dst}'." msgstr "Úloha '{sub}' přesunuta z '{src}' do '{dst}'." -#: sl/SL_Menu.py:1725 +#: sl/SL_Menu.py:1809 msgid "Error: Could not move task." msgstr "Chyba: Úkol nelze přesunout." -#: sl/SL_Menu.py:1736 sl/SL_Menu.py:2099 +#: sl/SL_Menu.py:1820 sl/SL_Menu.py:2183 msgid "Weeks of inactivity" msgstr "Týdny neaktivity" -#: sl/SL_Menu.py:1741 +#: sl/SL_Menu.py:1825 #, python-brace-format msgid "Inactive Tasks (> {weeks} weeks):" msgstr "Neaktivní úkoly (> {weeks} týdnů):" -#: sl/SL_Menu.py:1746 sl/SL_Menu.py:2107 +#: sl/SL_Menu.py:1830 sl/SL_Menu.py:2191 msgid "Last Activity" msgstr "Poslední aktivita" -#: sl/SL_Menu.py:1805 +#: sl/SL_Menu.py:1889 #, python-brace-format msgid "" "Are you sure you want to delete {count} closed tasks? This action cannot be " @@ -1991,25 +2009,25 @@ msgid "" msgstr "" "Opravdu chcete smazat{count}uzavřené úkoly? Tuto akci nelze vrátit zpět." -#: sl/SL_Menu.py:1807 +#: sl/SL_Menu.py:1891 msgid "Show projects to delete" msgstr "Zobrazit projekty k odstranění" -#: sl/SL_Menu.py:1811 +#: sl/SL_Menu.py:1895 msgid "Delete All" msgstr "Smazat vše" -#: sl/SL_Menu.py:1817 +#: sl/SL_Menu.py:1901 #, python-brace-format msgid "Successfully deleted {count} tasks." msgstr "Úspěšně odstraněno {count} úkolů." -#: sl/SL_Menu.py:1843 +#: sl/SL_Menu.py:1927 #, python-brace-format msgid "No open tasks to promote in '{name}'." msgstr "Žádné otevřené úkoly k povýšení v '{name}'." -#: sl/SL_Menu.py:1854 +#: sl/SL_Menu.py:1938 msgid "" "This will create a new Project with the task's name and move all time " "entries to a 'General' task within it." @@ -2017,67 +2035,67 @@ msgstr "" "Tím vytvoříte nový projekt s názvem úkolu a přesunete všechny časové záznamy " "do úkolu „Obecné“ v něm." -#: sl/SL_Menu.py:1856 +#: sl/SL_Menu.py:1940 msgid "Promote to Project" msgstr "Povýšit na projekt" -#: sl/SL_Menu.py:1895 +#: sl/SL_Menu.py:1979 msgid "No open projects to rename." msgstr "Žádné otevřené projekty k přejmenování." -#: sl/SL_Menu.py:1904 sl/SL_Menu.py:1984 +#: sl/SL_Menu.py:1988 sl/SL_Menu.py:2068 msgid "New Name" msgstr "Nové jméno" -#: sl/SL_Menu.py:1905 sl/SL_Menu.py:1985 +#: sl/SL_Menu.py:1989 sl/SL_Menu.py:2069 msgid "Rename" msgstr "Přejmenovat" -#: sl/SL_Menu.py:1909 sl/SL_Menu.py:1989 +#: sl/SL_Menu.py:1993 sl/SL_Menu.py:2073 msgid "Please enter a new name." msgstr "Zadejte prosím nový název." -#: sl/SL_Menu.py:1911 sl/SL_Menu.py:1991 +#: sl/SL_Menu.py:1995 sl/SL_Menu.py:2075 msgid "New name is the same as the old name." msgstr "Nový název je stejný jako starý název." -#: sl/SL_Menu.py:1913 +#: sl/SL_Menu.py:1997 #, python-brace-format msgid "Project '{old_name}' successfully renamed to '{new_name}'." msgstr "Projekt '{old_name}' byl úspěšně přejmenován na '{new_name}'." -#: sl/SL_Menu.py:1974 +#: sl/SL_Menu.py:2058 #, python-brace-format msgid "No open tasks to rename in '{name}'." msgstr "Žádné otevřené úkoly k přejmenování v '{name}'." -#: sl/SL_Menu.py:1997 +#: sl/SL_Menu.py:2081 msgid "Error: Could not rename. The new name might already exist." msgstr "Chyba: Nelze přejmenovat. Nový název již možná existuje." -#: sl/SL_Menu.py:2010 +#: sl/SL_Menu.py:2094 msgid "No open projects to close." msgstr "Žádné otevřené projekty k uzavření." -#: sl/SL_Menu.py:2023 +#: sl/SL_Menu.py:2107 #, python-brace-format msgid "Project '{name}' has been closed." msgstr "Projekt '{name}' byl uzavřen." -#: sl/SL_Menu.py:2027 sl/SL_Menu.py:2057 sl/SL_Menu.py:2088 +#: sl/SL_Menu.py:2111 sl/SL_Menu.py:2141 sl/SL_Menu.py:2172 msgid "Error: Project not found." msgstr "Chyba: Projekt nenalezen." -#: sl/SL_Menu.py:2040 +#: sl/SL_Menu.py:2124 msgid "No closed projects to reopen." msgstr "Žádné uzavřené projekty k opětovnému otevření." -#: sl/SL_Menu.py:2053 +#: sl/SL_Menu.py:2137 #, python-brace-format msgid "Project '{name}' has been reopened." msgstr "Projekt '{name}' byl znovu otevřen." -#: sl/SL_Menu.py:2079 +#: sl/SL_Menu.py:2163 msgid "" "This action cannot be undone. All associated tasks and time entries will be " "deleted." @@ -2085,206 +2103,206 @@ msgstr "" "Tuto akci nelze vrátit zpět. Všechny související úkoly a časové záznamy " "budou smazány." -#: sl/SL_Menu.py:2084 +#: sl/SL_Menu.py:2168 #, python-brace-format msgid "Project '{name}' has been deleted." msgstr "Projekt '{name}' byl smazán." -#: sl/SL_Menu.py:2104 +#: sl/SL_Menu.py:2188 #, python-brace-format msgid "Inactive Projects (> {weeks} weeks):" msgstr "Neaktivní projekty (> {weeks} týdnů):" -#: sl/SL_Menu.py:2109 +#: sl/SL_Menu.py:2193 #, python-brace-format msgid "No projects found inactive for more than {weeks} weeks." msgstr "" "Žádné projekty nebyly nalezeny jako neaktivní po dobu delší než{weeks}týdnů." -#: sl/SL_Menu.py:2118 sl/SL_Menu.py:2141 +#: sl/SL_Menu.py:2202 sl/SL_Menu.py:2225 msgid "Demote Project" msgstr "Degradovat projekt" -#: sl/SL_Menu.py:2130 +#: sl/SL_Menu.py:2214 msgid "Select Project to Demote" msgstr "Vyberte projekt ke snížení úrovně" -#: sl/SL_Menu.py:2136 +#: sl/SL_Menu.py:2220 msgid "No other projects available to demote into." msgstr "" "Nejsou k dispozici žádné další projekty, na které by bylo možné snížit " "úroveň." -#: sl/SL_Menu.py:2139 +#: sl/SL_Menu.py:2223 #, python-brace-format msgid "This will convert '{src}' into a task of '{dst}'." msgstr "Toto převede '{src}' na úlohu '{dst}'." -#: sl/SL_Menu.py:2164 +#: sl/SL_Menu.py:2248 msgid "Projects with only closed or no tasks:" msgstr "Projekty pouze s uzavřenými nebo žádnými úkoly:" -#: sl/SL_Menu.py:2168 +#: sl/SL_Menu.py:2252 msgid "No completed projects found." msgstr "Nebyly nalezeny žádné dokončené projekty." -#: sl/SL_Menu.py:2177 sl/SL_Menu.py:2311 sl/SL_Menu.py:2607 +#: sl/SL_Menu.py:2261 sl/SL_Menu.py:2395 sl/SL_Menu.py:2691 msgid "Step 1: Select Project" msgstr "Krok 1: Vyberte projekt" -#: sl/SL_Menu.py:2181 sl/SL_Menu.py:2499 +#: sl/SL_Menu.py:2265 sl/SL_Menu.py:2583 msgid "No open projects found. Please add one first." msgstr "Nebyly nalezeny žádné otevřené projekty. Nejprve přidejte jednu." -#: sl/SL_Menu.py:2186 sl/SL_Menu.py:2318 sl/SL_Menu.py:2547 +#: sl/SL_Menu.py:2270 sl/SL_Menu.py:2402 sl/SL_Menu.py:2631 msgid "Project" msgstr "Project" -#: sl/SL_Menu.py:2188 sl/SL_Menu.py:2319 sl/SL_Menu.py:2343 sl/SL_Menu.py:2619 +#: sl/SL_Menu.py:2272 sl/SL_Menu.py:2403 sl/SL_Menu.py:2427 sl/SL_Menu.py:2703 msgid "Next" msgstr "Další" -#: sl/SL_Menu.py:2203 sl/SL_Menu.py:2633 +#: sl/SL_Menu.py:2287 sl/SL_Menu.py:2717 msgid "No project selected. Please start again." msgstr "Nebyl vybrán žádný projekt. Začněte prosím znovu." -#: sl/SL_Menu.py:2208 +#: sl/SL_Menu.py:2292 msgid "To Project:" msgstr "To Project:" -#: sl/SL_Menu.py:2229 +#: sl/SL_Menu.py:2313 msgid "Name of the new task" msgstr "Name of the new task" -#: sl/SL_Menu.py:2235 +#: sl/SL_Menu.py:2319 msgid "Due date" msgstr "Datum splatnosti" -#: sl/SL_Menu.py:2241 sl/SL_Menu.py:2413 +#: sl/SL_Menu.py:2325 sl/SL_Menu.py:2497 msgid "Recurring" msgstr "Opakující se" -#: sl/SL_Menu.py:2257 sl/SL_Menu.py:2428 +#: sl/SL_Menu.py:2341 sl/SL_Menu.py:2512 msgid "daily" msgstr "denně" -#: sl/SL_Menu.py:2257 sl/SL_Menu.py:2428 +#: sl/SL_Menu.py:2341 sl/SL_Menu.py:2512 msgid "monthly" msgstr "měsíčně" -#: sl/SL_Menu.py:2257 sl/SL_Menu.py:2428 +#: sl/SL_Menu.py:2341 sl/SL_Menu.py:2512 msgid "on all business days" msgstr "ve všech pracovních dnech" -#: sl/SL_Menu.py:2257 sl/SL_Menu.py:2428 +#: sl/SL_Menu.py:2341 sl/SL_Menu.py:2512 msgid "userdefined" msgstr "uživatelsky definované" -#: sl/SL_Menu.py:2257 sl/SL_Menu.py:2428 +#: sl/SL_Menu.py:2341 sl/SL_Menu.py:2512 msgid "weekly" msgstr "týdně" -#: sl/SL_Menu.py:2261 sl/SL_Menu.py:2437 +#: sl/SL_Menu.py:2345 sl/SL_Menu.py:2521 msgid "Frequency" msgstr "Frekvence" -#: sl/SL_Menu.py:2265 sl/SL_Menu.py:2440 +#: sl/SL_Menu.py:2349 sl/SL_Menu.py:2524 msgid "Days" msgstr "Dny" -#: sl/SL_Menu.py:2269 sl/SL_Menu.py:2442 +#: sl/SL_Menu.py:2353 sl/SL_Menu.py:2526 msgid "Edit" msgstr "Upravit" -#: sl/SL_Menu.py:2269 sl/SL_Menu.py:2442 +#: sl/SL_Menu.py:2353 sl/SL_Menu.py:2526 msgid "Preview" msgstr "Náhled" -#: sl/SL_Menu.py:2274 sl/SL_Menu.py:2447 +#: sl/SL_Menu.py:2358 sl/SL_Menu.py:2531 msgid "No notes provided." msgstr "Nebyly zadány žádné poznámky." -#: sl/SL_Menu.py:2279 sl/SL_Menu.py:2452 +#: sl/SL_Menu.py:2363 sl/SL_Menu.py:2536 msgid "A due date is required for recurring tasks." msgstr "Pro opakující se úkoly je vyžadováno datum dokončení." -#: sl/SL_Menu.py:2287 +#: sl/SL_Menu.py:2371 msgid "Please enter a name." msgstr "Zadejte prosím jméno." -#: sl/SL_Menu.py:2299 +#: sl/SL_Menu.py:2383 #, python-brace-format msgid "Task '{sub_name}' added to '{main_name}'." msgstr "Úkol '{sub_name}' byl přidán do '{main_name}'." -#: sl/SL_Menu.py:2331 sl/SL_Menu.py:2638 +#: sl/SL_Menu.py:2415 sl/SL_Menu.py:2722 msgid "Step 2: Select Task from" msgstr "Krok 2: Vyberte úkol z" -#: sl/SL_Menu.py:2334 +#: sl/SL_Menu.py:2418 msgid "No open tasks found." msgstr "Nebyly nalezeny žádné otevřené úkoly." -#: sl/SL_Menu.py:2362 +#: sl/SL_Menu.py:2446 msgid "Task not found." msgstr "Úkol nenalezen." -#: sl/SL_Menu.py:2456 +#: sl/SL_Menu.py:2540 msgid "Save Changes" msgstr "Uložit změny" -#: sl/SL_Menu.py:2481 +#: sl/SL_Menu.py:2565 msgid "Error: Could not update task." msgstr "Chyba: Úlohu nelze aktualizovat." -#: sl/SL_Menu.py:2494 +#: sl/SL_Menu.py:2578 msgid "Start Work on Task" msgstr "Zahájit práci na úloze" -#: sl/SL_Menu.py:2509 +#: sl/SL_Menu.py:2593 #, python-brace-format msgid "No open tasks to start work on in '{name}'." msgstr "" "Žádné otevřené úkoly, na kterých by bylo možné začít pracovat v '{name}'." -#: sl/SL_Menu.py:2520 +#: sl/SL_Menu.py:2604 msgid "Start Work" msgstr "Začít práci" -#: sl/SL_Menu.py:2548 +#: sl/SL_Menu.py:2632 msgid "Task" msgstr "Úloha" -#: sl/SL_Menu.py:2549 +#: sl/SL_Menu.py:2633 msgid "Started at" msgstr "Zahájeno v" -#: sl/SL_Menu.py:2550 tt/TimeTracker.py:1446 +#: sl/SL_Menu.py:2634 tt/TimeTracker.py:1454 msgid "Duration" msgstr "Trvání" -#: sl/SL_Menu.py:2564 sl/SL_Menu.py:2696 +#: sl/SL_Menu.py:2648 sl/SL_Menu.py:2780 msgid "Select Date" msgstr "Vyberte datum" -#: sl/SL_Menu.py:2565 sl/SL_Menu.py:2589 sl/SL_Menu.py:2653 sl/SL_Menu.py:2679 -#: sl/SL_Menu.py:2697 +#: sl/SL_Menu.py:2649 sl/SL_Menu.py:2673 sl/SL_Menu.py:2737 sl/SL_Menu.py:2763 +#: sl/SL_Menu.py:2781 msgid "Generate Report" msgstr "Vytvořit zprávu" -#: sl/SL_Menu.py:2585 +#: sl/SL_Menu.py:2669 msgid "Start Date" msgstr "Datum zahájení" -#: sl/SL_Menu.py:2587 +#: sl/SL_Menu.py:2671 msgid "End Date" msgstr "Datum ukončení" -#: sl/SL_Menu.py:2712 +#: sl/SL_Menu.py:2796 msgid "Report Result" msgstr "Výsledek zprávy" -#: sl/SL_Menu.py:2741 +#: sl/SL_Menu.py:2825 msgid "Export Report" msgstr "Export zprávy" @@ -2366,7 +2384,7 @@ msgstr "Cílový hlavní projekt '{name}' nebyl nalezen." msgid "Task '{task_name}' moved successfully." msgstr "Úloha '{task_name}' byla úspěšně přesunuta." -#: tt/TimeTracker.py:892 tt/TimeTracker.py:927 tt/TimeTracker.py:1408 +#: tt/TimeTracker.py:892 tt/TimeTracker.py:927 tt/TimeTracker.py:1416 #, python-brace-format msgid "Task '{task_name}' not found in '{main_name}'." msgstr "Úloha '{task_name}' nebyla nalezena v '{main_name}'." @@ -2424,22 +2442,22 @@ msgstr "Bez předmětu" msgid "Unknown Task" msgstr "Neznámý úkol" -#: tt/TimeTracker.py:1365 +#: tt/TimeTracker.py:1373 #, python-brace-format msgid "- {name}: {hours} hours" msgstr "- {name}: {hours} hodin" -#: tt/TimeTracker.py:1373 +#: tt/TimeTracker.py:1381 #, python-brace-format msgid "## {name} ({hours} hours)\n" msgstr "## {name} ({hours} hodin)\n" -#: tt/TimeTracker.py:1382 +#: tt/TimeTracker.py:1390 #, python-brace-format msgid "# Daily Time Report: {date}\n" msgstr "# Denní zpráva o čase: {date}\n" -#: tt/TimeTracker.py:1383 +#: tt/TimeTracker.py:1391 #, python-brace-format msgid "" "\n" @@ -2448,104 +2466,104 @@ msgstr "" "\n" "**Celkový denní čas: {hours} hodin**" -#: tt/TimeTracker.py:1387 tt/TimeTracker.py:1700 +#: tt/TimeTracker.py:1395 tt/TimeTracker.py:1708 #, python-brace-format msgid "No time tracked for {date}." msgstr "Pro den {date} nebyl zaznamenán žádný čas." -#: tt/TimeTracker.py:1404 tt/TimeTracker.py:1499 +#: tt/TimeTracker.py:1412 tt/TimeTracker.py:1507 #, python-brace-format msgid "Main project '{name}' not found." msgstr "Hlavní projekt '{name}' nebyl nalezen." -#: tt/TimeTracker.py:1412 +#: tt/TimeTracker.py:1420 #, python-brace-format msgid "No time entries found for task '{task_name}'." msgstr "Pro úkol '{task_name}' nebyly nalezeny žádné časové záznamy." -#: tt/TimeTracker.py:1445 tt/TimeTracker.py:1675 +#: tt/TimeTracker.py:1453 tt/TimeTracker.py:1683 msgid "now" msgstr "nyní" -#: tt/TimeTracker.py:1450 +#: tt/TimeTracker.py:1458 #, python-brace-format msgid "# Detailed Report for Task: {name}" msgstr "# Podrobná zpráva o úkolu: {name}" -#: tt/TimeTracker.py:1451 +#: tt/TimeTracker.py:1459 #, python-brace-format msgid "Part of Main Project: {name}" msgstr "Část hlavního projektu: {name}" -#: tt/TimeTracker.py:1454 +#: tt/TimeTracker.py:1462 msgid "Active (currently running)" msgstr "Aktivní (právě běží)" -#: tt/TimeTracker.py:1454 tt/TimeTracker.py:1551 +#: tt/TimeTracker.py:1462 tt/TimeTracker.py:1559 msgid "Inactive" msgstr "Neaktivní" -#: tt/TimeTracker.py:1455 tt/TimeTracker.py:1552 +#: tt/TimeTracker.py:1463 tt/TimeTracker.py:1560 msgid "Status" msgstr "Stav" -#: tt/TimeTracker.py:1457 tt/TimeTracker.py:1554 +#: tt/TimeTracker.py:1465 tt/TimeTracker.py:1562 msgid "First entry" msgstr "První záznam" -#: tt/TimeTracker.py:1459 tt/TimeTracker.py:1556 +#: tt/TimeTracker.py:1467 tt/TimeTracker.py:1564 msgid "Last activity" msgstr "Poslední aktivita" -#: tt/TimeTracker.py:1461 tt/TimeTracker.py:1558 +#: tt/TimeTracker.py:1469 tt/TimeTracker.py:1566 msgid "Total recorded time" msgstr "Celkový zaznamenaný čas" -#: tt/TimeTracker.py:1462 tt/TimeTracker.py:1560 +#: tt/TimeTracker.py:1470 tt/TimeTracker.py:1568 msgid "Total work sessions" msgstr "Celkový počet pracovních relací" -#: tt/TimeTracker.py:1466 tt/TimeTracker.py:1564 +#: tt/TimeTracker.py:1474 tt/TimeTracker.py:1572 msgid "Average session duration" msgstr "Průměrná délka relace" -#: tt/TimeTracker.py:1469 tt/TimeTracker.py:1567 +#: tt/TimeTracker.py:1477 tt/TimeTracker.py:1575 msgid "Weekday Distribution" msgstr "Rozložení v týdnu" -#: tt/TimeTracker.py:1479 +#: tt/TimeTracker.py:1487 msgid "Daily Breakdown" msgstr "Denní rozpis" -#: tt/TimeTracker.py:1548 +#: tt/TimeTracker.py:1556 #, python-brace-format msgid "# Detailed Report for Main Project: {name}" msgstr "# Podrobná zpráva pro hlavní projekt: {name}" -#: tt/TimeTracker.py:1551 +#: tt/TimeTracker.py:1559 #, python-brace-format msgid "Active (working on '{task_name}')" msgstr "Aktivní (pracuje se na '{task_name}')" -#: tt/TimeTracker.py:1559 +#: tt/TimeTracker.py:1567 msgid "Number of tasks" msgstr "Počet úkolů" -#: tt/TimeTracker.py:1578 +#: tt/TimeTracker.py:1586 msgid "Task Breakdown" msgstr "Rozpis úkolů" -#: tt/TimeTracker.py:1587 +#: tt/TimeTracker.py:1595 #, python-brace-format msgid "{num_sessions} sessions" msgstr "{num_sessions} relací" -#: tt/TimeTracker.py:1640 +#: tt/TimeTracker.py:1648 #, python-brace-format msgid "# Time Report: {start_date} to {end_date}\n" msgstr "# Zpráva o čase: od {start_date} do {end_date}\n" -#: tt/TimeTracker.py:1641 +#: tt/TimeTracker.py:1649 #, python-brace-format msgid "" "\n" @@ -2554,12 +2572,12 @@ msgstr "" "\n" "**Celkový čas v období: {total_time}**" -#: tt/TimeTracker.py:1645 +#: tt/TimeTracker.py:1653 #, python-brace-format msgid "No time tracked between {start_date} and {end_date}." msgstr "Mezi {start_date} a {end_date} nebyl zaznamenán žádný čas." -#: tt/TimeTracker.py:1661 +#: tt/TimeTracker.py:1669 #, python-brace-format msgid "# Detailed Daily Report: {date}" msgstr "# Podrobná denní zpráva: {date}" @@ -2572,11 +2590,6 @@ msgstr "" "Varování: Kontrola aktualizací přeskočena. 'github_repo' nebylo nalezeno v " "config.json nebo je soubor neplatný." -#: update.py:49 -#, python-brace-format -msgid "A new version ({version}) is available." -msgstr "Je k dispozici nová verze ({version})." - #: update.py:55 msgid "Error: Download URL for the new version not found." msgstr "Chyba: Adresa URL pro stažení nové verze nebyla nalezena." @@ -2605,49 +2618,53 @@ msgstr "" msgid "Error downloading the update: {error}" msgstr "Chyba při stahování aktualizace: {error}" -#: update.py:108 +#: update.py:98 +msgid "Restarting application to apply the update..." +msgstr "Restartování aplikace za účelem použití aktualizace..." + +#: update.py:122 msgid "Creating backup of current version before update..." msgstr "Vytváření zálohy aktuální verze před aktualizací..." -#: update.py:118 +#: update.py:132 #, python-brace-format msgid "Backup created successfully as {filename}." msgstr "Záloha byla úspěšně vytvořena jako {filename}." -#: update.py:120 +#: update.py:134 #, python-brace-format msgid "Warning: Could not create backup. Error: {error}" msgstr "Varování: Nelze vytvořit zálohu. Chyba: {error}" -#: update.py:122 +#: update.py:136 msgid "Installing update..." msgstr "Instaluji aktualizaci..." -#: update.py:142 +#: update.py:156 #, python-brace-format msgid "Skipping protected file: {filename}. It will not be overwritten." msgstr "Přeskakuji chráněný soubor: {filename}. Nebude přepsán." -#: update.py:151 +#: update.py:165 msgid "Update installed successfully." msgstr "Aktualizace byla úspěšně nainstalována." -#: update.py:153 +#: update.py:167 #, python-brace-format msgid "Error during update installation: {error}" msgstr "Chyba během instalace aktualizace: {error}" -#: update.py:168 +#: update.py:182 #, python-brace-format msgid "Error: No previous version backup '{filename}' found." msgstr "Chyba: Nebyla nalezena žádná záloha předchozí verze '{filename}'." -#: update.py:171 +#: update.py:185 #, python-brace-format msgid "Restoring previous version from '{filename}'..." msgstr "Obnovování předchozí verze z '{filename}'..." -#: update.py:192 +#: update.py:206 #, python-brace-format msgid "" "Skipping user data file: {filename}. It will not be overwritten during " @@ -2655,36 +2672,39 @@ msgid "" msgstr "" "Přeskočení souboru uživatelských dat:{filename}. Během obnovy nebude přepsán." -#: update.py:199 +#: update.py:213 msgid "Previous version restored successfully." msgstr "Předchozí verze byla úspěšně obnovena." -#: update.py:201 +#: update.py:215 msgid "Restarting application to apply changes..." msgstr "Restartování aplikace za účelem použití změn..." -#: update.py:204 +#: update.py:218 #, python-brace-format msgid "Error during restoration: {error}" msgstr "Chyba při obnovování: {error}" -#: update.py:205 +#: update.py:219 #, python-brace-format msgid "The backup file '{filename}' was not deleted." msgstr "Záložní soubor '{filename}' nebyl odstraněn." -#: update.py:212 +#: update.py:226 msgid "Error: Could not import TimeTracker to get the current version." msgstr "Chyba: Nelze importovat TimeTracker pro získání aktuální verze." -#: update.py:215 +#: update.py:229 msgid "Checking for updates..." msgstr "Kontrola aktualizací..." -#: update.py:222 +#: update.py:236 msgid "No updates available." msgstr "Nejsou k dispozici žádné aktualizace." +#~ msgid "Back to Main Menu" +#~ msgstr "Zpět do hlavního menu" + #~ msgid "" #~ "\n" #~ "Error: Failed to install dependencies. Please install them manually " diff --git a/locale/de/LC_MESSAGES/timetracker.mo b/locale/de/LC_MESSAGES/timetracker.mo index a09de30b60e3f1be0ba6111116d87f3ca730047c..32c99f7fdc3b9a4e6c3dfba0076595e5ce51751f 100644 GIT binary patch delta 12107 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 delta 11921 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 TPi%?KEU`5`DD%{TV&4A;U^f6{ diff --git a/locale/de/LC_MESSAGES/timetracker.po b/locale/de/LC_MESSAGES/timetracker.po index a1691a4..9af9b9d 100644 --- a/locale/de/LC_MESSAGES/timetracker.po +++ b/locale/de/LC_MESSAGES/timetracker.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: TimeControl\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-05 09:08+0200\n" +"POT-Creation-Date: 2026-08-05 18:15+0200\n" "PO-Revision-Date: 2025-10-30 12:00+0200\n" "Last-Translator: Frank Faulstich\n" "Language-Team: German\n" @@ -119,8 +119,8 @@ msgstr "" "\n" "--- Hauptprojekte auflisten ---" -#: TimeTrackerCLI.py:76 TimeTrackerCLI.py:313 sl/SL_Menu.py:1880 -#: sl/SL_Menu.py:1944 +#: TimeTrackerCLI.py:76 TimeTrackerCLI.py:313 sl/SL_Menu.py:1964 +#: sl/SL_Menu.py:2028 msgid "closed" msgstr "geschlossen" @@ -162,7 +162,7 @@ msgstr "Gib den neuen Namen für '{name}' ein: " msgid "Main project '{old_name}' successfully renamed to '{new_name}'." msgstr "Hauptprojekt „{old_name}“ wurde erfolgreich in „{new_name}“ umbenannt." -#: TimeTrackerCLI.py:101 sl/SL_Menu.py:1917 +#: TimeTrackerCLI.py:101 sl/SL_Menu.py:2001 #, python-brace-format msgid "Error: Could not rename. The new name '{new_name}' might already exist." msgstr "" @@ -462,22 +462,22 @@ msgid "Select the main project whose tasks you want to list:" msgstr "" "Wählen Sie das Hauptprojekt aus, dessen Aufgaben Sie auflisten möchten:" -#: TimeTrackerCLI.py:305 sl/SL_Menu.py:1941 +#: TimeTrackerCLI.py:305 sl/SL_Menu.py:2025 #, python-brace-format msgid "Tasks for '{name}':" msgstr "Aufgaben für '{name}':" -#: TimeTrackerCLI.py:308 sl/SL_Menu.py:745 sl/SL_Menu.py:895 +#: TimeTrackerCLI.py:308 sl/SL_Menu.py:785 sl/SL_Menu.py:977 msgid "Due" msgstr "Fällig" -#: TimeTrackerCLI.py:309 sl/SL_Menu.py:596 sl/SL_Menu.py:616 sl/SL_Menu.py:682 -#: sl/SL_Menu.py:768 sl/SL_Menu.py:1077 sl/SL_Menu.py:2238 sl/SL_Menu.py:2409 +#: TimeTrackerCLI.py:309 sl/SL_Menu.py:636 sl/SL_Menu.py:656 sl/SL_Menu.py:722 +#: sl/SL_Menu.py:808 sl/SL_Menu.py:1161 sl/SL_Menu.py:2322 sl/SL_Menu.py:2493 msgid "Today" msgstr "Heute" -#: TimeTrackerCLI.py:317 TimeTrackerCLI.py:861 sl/SL_Menu.py:1950 -#: sl/SL_Menu.py:2642 +#: TimeTrackerCLI.py:317 TimeTrackerCLI.py:861 sl/SL_Menu.py:2034 +#: sl/SL_Menu.py:2726 #, python-brace-format msgid "No tasks found for '{name}'." msgstr "Keine Aufgaben für '{name}' gefunden." @@ -516,7 +516,7 @@ msgstr "Wähle eine Aufgabe von '{name}' zum Umbenennen aus:" msgid "Enter the number of the task: " msgstr "Gib die Nummer der Aufgabe ein: " -#: TimeTrackerCLI.py:352 sl/SL_Menu.py:1993 +#: TimeTrackerCLI.py:352 sl/SL_Menu.py:2077 #, python-brace-format msgid "Task '{old_name}' renamed to '{new_name}'." msgstr "Aufgabe '{old_name}' in '{new_name}' umbenannt." @@ -553,7 +553,7 @@ msgid "Task '{task_name}' in '{main_name}' has been closed." msgstr "Die Aufgabe „{task_name}“ in „{main_name}“ wurde geschlossen." #: TimeTrackerCLI.py:389 TimeTrackerCLI.py:424 TimeTrackerCLI.py:460 -#: sl/SL_Menu.py:1579 sl/SL_Menu.py:1624 sl/SL_Menu.py:1670 +#: sl/SL_Menu.py:1663 sl/SL_Menu.py:1708 sl/SL_Menu.py:1754 msgid "Error: Main project or task not found." msgstr "Fehler: Hauptprojekt oder Hauptaufgabe nicht gefunden." @@ -691,7 +691,7 @@ msgstr "" msgid " Task: {name}" msgstr " Aufgabe: {name}" -#: TimeTrackerCLI.py:531 sl/SL_Menu.py:1752 +#: TimeTrackerCLI.py:531 sl/SL_Menu.py:1836 #, python-brace-format msgid "No tasks found inactive for more than {weeks} weeks." msgstr "" @@ -705,7 +705,7 @@ msgstr "" "\n" "--- Alle geschlossenen Aufgaben auflisten ---" -#: TimeTrackerCLI.py:543 sl/SL_Menu.py:1777 sl/SL_Menu.py:1800 +#: TimeTrackerCLI.py:543 sl/SL_Menu.py:1861 sl/SL_Menu.py:1884 msgid "No closed tasks found." msgstr "Keine geschlossenen Aufgaben gefunden." @@ -766,9 +766,9 @@ msgstr "" "\n" "--- Aufgabe bearbeiten ---" -#: TimeTrackerCLI.py:596 sl/SL_Menu.py:1547 sl/SL_Menu.py:1592 -#: sl/SL_Menu.py:1637 sl/SL_Menu.py:1683 sl/SL_Menu.py:1832 sl/SL_Menu.py:1963 -#: sl/SL_Menu.py:2122 sl/SL_Menu.py:2315 +#: TimeTrackerCLI.py:596 sl/SL_Menu.py:1631 sl/SL_Menu.py:1676 +#: sl/SL_Menu.py:1721 sl/SL_Menu.py:1767 sl/SL_Menu.py:1916 sl/SL_Menu.py:2047 +#: sl/SL_Menu.py:2206 sl/SL_Menu.py:2399 msgid "No open projects found." msgstr "Keine offenen Projekte gefunden." @@ -822,7 +822,7 @@ msgstr "" "Ist diese Aufgabe erledigt? (aktuell:{current}, j/n, drücken Sie die " "Eingabetaste, um beizubehalten):" -#: TimeTrackerCLI.py:639 sl/SL_Menu.py:2475 +#: TimeTrackerCLI.py:639 sl/SL_Menu.py:2559 msgid "Task updated successfully." msgstr "Aufgabe erfolgreich aktualisiert." @@ -921,7 +921,7 @@ msgstr "Leer lassen zum Abbrechen." msgid "New Path: " msgstr "Neuer Pfad: " -#: TimeTrackerCLI.py:738 sl/SL_Menu.py:1334 +#: TimeTrackerCLI.py:738 sl/SL_Menu.py:1418 #, python-brace-format msgid "Error: The directory '{dir}' does not exist." msgstr "Fehler: Das Verzeichnis '{dir}' existiert nicht." @@ -935,11 +935,11 @@ msgid "Do you want to move the existing data to the new location? (y/n): " msgstr "" "Möchtest du die vorhandenen Daten an den neuen Ort verschieben? (j/n): " -#: TimeTrackerCLI.py:760 sl/SL_Menu.py:1344 +#: TimeTrackerCLI.py:760 sl/SL_Menu.py:1428 msgid "Data moved successfully." msgstr "Daten erfolgreich verschoben." -#: TimeTrackerCLI.py:762 sl/SL_Menu.py:1346 +#: TimeTrackerCLI.py:762 sl/SL_Menu.py:1430 #, python-brace-format msgid "Error moving data: {error}" msgstr "Fehler beim Verschieben der Daten: {error}" @@ -1050,7 +1050,7 @@ msgstr "Startdatum eingeben (JJJJ-MM-TT): " msgid "Enter the end date (YYYY-MM-DD): " msgstr "Enddatum eingeben (JJJJ-MM-TT): " -#: TimeTrackerCLI.py:837 sl/SL_Menu.py:2593 +#: TimeTrackerCLI.py:837 sl/SL_Menu.py:2677 msgid "Error: The start date cannot be after the end date." msgstr "Fehler: Das Startdatum darf nicht nach dem Enddatum liegen." @@ -1062,8 +1062,8 @@ msgstr "" "\n" "--- Detaillierter Aufgaben-Bericht ---" -#: TimeTrackerCLI.py:847 TimeTrackerCLI.py:880 sl/SL_Menu.py:1883 -#: sl/SL_Menu.py:1930 sl/SL_Menu.py:2070 sl/SL_Menu.py:2611 sl/SL_Menu.py:2670 +#: TimeTrackerCLI.py:847 TimeTrackerCLI.py:880 sl/SL_Menu.py:1967 +#: sl/SL_Menu.py:2014 sl/SL_Menu.py:2154 sl/SL_Menu.py:2695 sl/SL_Menu.py:2754 msgid "No projects found." msgstr "Keine Projekte gefunden." @@ -1208,12 +1208,12 @@ msgstr "" msgid "Select a task from '{name}':" msgstr "Wähle eine Aufgabe von '{name}' aus:" -#: TimeTrackerCLI.py:987 sl/SL_Menu.py:2526 +#: TimeTrackerCLI.py:987 sl/SL_Menu.py:2610 #, python-brace-format msgid "Work started on '{task_name}' in project '{main_name}'." msgstr "Arbeit an '{task_name}' im Projekt '{main_name}' begonnen." -#: TimeTrackerCLI.py:989 sl/SL_Menu.py:2530 +#: TimeTrackerCLI.py:989 sl/SL_Menu.py:2614 msgid "Error starting work." msgstr "Fehler beim Starten der Arbeit." @@ -1249,7 +1249,7 @@ msgstr " Begonnen um: {date}" msgid " Duration: {duration}" msgstr " Dauer: {duration}" -#: TimeTrackerCLI.py:1012 sl/SL_Menu.py:559 sl/SL_Menu.py:2552 +#: TimeTrackerCLI.py:1012 sl/SL_Menu.py:870 sl/SL_Menu.py:2636 msgid "No active work session." msgstr "Keine aktive Arbeitssitzung." @@ -1261,11 +1261,11 @@ msgstr "" "\n" "--- Arbeit beenden ---" -#: TimeTrackerCLI.py:1018 sl/SL_Menu.py:504 +#: TimeTrackerCLI.py:1018 sl/SL_Menu.py:594 msgid "Work session stopped successfully." msgstr "Arbeitssitzung erfolgreich beendet." -#: TimeTrackerCLI.py:1020 sl/SL_Menu.py:506 +#: TimeTrackerCLI.py:1020 sl/SL_Menu.py:596 msgid "No active work session to stop." msgstr "Keine aktive Arbeitssitzung zum Beenden." @@ -1281,391 +1281,405 @@ msgstr "" msgid "Exiting application. Goodbye!" msgstr "Anwendung wird beendet. Auf Wiedersehen!" -#: sl/SL_Menu.py:399 +#: sl/SL_Menu.py:278 sl/SL_Menu.py:989 sl/SL_Menu.py:2327 sl/SL_Menu.py:2499 +msgid "Priority" +msgstr "Priorität" + +#: sl/SL_Menu.py:450 +#, python-brace-format +msgid "Version {version}" +msgstr "Version {version}" + +#: sl/SL_Menu.py:455 update.py:49 +#, python-brace-format +msgid "A new version ({version}) is available." +msgstr "Eine neue Version ({version}) ist verfügbar." + +#: sl/SL_Menu.py:457 +msgid "Restart and install the update" +msgstr "Neu starten und Update installieren" + +#: sl/SL_Menu.py:458 +msgid "Downloading and installing update..." +msgstr "Update wird heruntergeladen und installiert..." + +#: sl/SL_Menu.py:489 msgid "New" msgstr "Neu" -#: sl/SL_Menu.py:400 +#: sl/SL_Menu.py:490 msgid "New Project" msgstr "Neues Projekt" -#: sl/SL_Menu.py:403 +#: sl/SL_Menu.py:493 msgid "New Task" msgstr "Neue Aufgabe" -#: sl/SL_Menu.py:408 +#: sl/SL_Menu.py:498 msgid "Project & Task Management" msgstr "Projekt- und Aufgabenverwaltung" -#: sl/SL_Menu.py:409 sl/SL_Menu.py:1117 +#: sl/SL_Menu.py:499 sl/SL_Menu.py:1201 msgid "Main Project Management" msgstr "Hauptprojektverwaltung" -#: sl/SL_Menu.py:410 sl/SL_Menu.py:1133 sl/SL_Menu.py:1528 +#: sl/SL_Menu.py:500 sl/SL_Menu.py:1217 sl/SL_Menu.py:1612 msgid "Add Project" msgstr "Projekt hinzufügen" -#: sl/SL_Menu.py:413 sl/SL_Menu.py:1136 sl/SL_Menu.py:1876 +#: sl/SL_Menu.py:503 sl/SL_Menu.py:1220 sl/SL_Menu.py:1960 msgid "List Projects" msgstr "Projekte auflisten" -#: sl/SL_Menu.py:416 sl/SL_Menu.py:1139 sl/SL_Menu.py:1891 +#: sl/SL_Menu.py:506 sl/SL_Menu.py:1223 sl/SL_Menu.py:1975 msgid "Rename Project" msgstr "Projekt umbenennen" -#: sl/SL_Menu.py:419 sl/SL_Menu.py:1142 sl/SL_Menu.py:2006 sl/SL_Menu.py:2019 +#: sl/SL_Menu.py:509 sl/SL_Menu.py:1226 sl/SL_Menu.py:2090 sl/SL_Menu.py:2103 msgid "Close Project" msgstr "Projekt schließen" -#: sl/SL_Menu.py:422 sl/SL_Menu.py:1145 sl/SL_Menu.py:2036 sl/SL_Menu.py:2049 +#: sl/SL_Menu.py:512 sl/SL_Menu.py:1229 sl/SL_Menu.py:2120 sl/SL_Menu.py:2133 msgid "Re-open Project" msgstr "Projekt wieder öffnen" -#: sl/SL_Menu.py:425 sl/SL_Menu.py:1148 sl/SL_Menu.py:2066 sl/SL_Menu.py:2080 +#: sl/SL_Menu.py:515 sl/SL_Menu.py:1232 sl/SL_Menu.py:2150 sl/SL_Menu.py:2164 msgid "Delete Project" msgstr "Projekt löschen" -#: sl/SL_Menu.py:428 sl/SL_Menu.py:1151 sl/SL_Menu.py:2097 +#: sl/SL_Menu.py:518 sl/SL_Menu.py:1235 sl/SL_Menu.py:2181 msgid "List Inactive Projects" msgstr "Inaktive Projekte auflisten" -#: sl/SL_Menu.py:431 sl/SL_Menu.py:1154 +#: sl/SL_Menu.py:521 sl/SL_Menu.py:1238 msgid "Demote Project to Task" msgstr "Projekt zu Aufgabe herabstufen" -#: sl/SL_Menu.py:434 sl/SL_Menu.py:1157 sl/SL_Menu.py:2159 +#: sl/SL_Menu.py:524 sl/SL_Menu.py:1241 sl/SL_Menu.py:2243 msgid "List Completed Projects" msgstr "Abgeschlossene Projekte auflisten" -#: sl/SL_Menu.py:438 sl/SL_Menu.py:1119 sl/SL_Menu.py:1170 +#: sl/SL_Menu.py:528 sl/SL_Menu.py:1203 sl/SL_Menu.py:1254 msgid "Task Management" msgstr "Aufgabenverwaltung" -#: sl/SL_Menu.py:439 sl/SL_Menu.py:1172 sl/SL_Menu.py:2177 sl/SL_Menu.py:2208 -#: sl/SL_Menu.py:2283 +#: sl/SL_Menu.py:529 sl/SL_Menu.py:1256 sl/SL_Menu.py:2261 sl/SL_Menu.py:2292 +#: sl/SL_Menu.py:2367 msgid "Add Task" msgstr "Aufgabe hinzufügen" -#: sl/SL_Menu.py:442 sl/SL_Menu.py:1175 sl/SL_Menu.py:1926 +#: sl/SL_Menu.py:532 sl/SL_Menu.py:1259 sl/SL_Menu.py:2010 msgid "List Tasks" msgstr "Aufgaben auflisten" -#: sl/SL_Menu.py:445 sl/SL_Menu.py:1178 sl/SL_Menu.py:1959 +#: sl/SL_Menu.py:535 sl/SL_Menu.py:1262 sl/SL_Menu.py:2043 msgid "Rename Task" msgstr "Aufgabe umbenennen" -#: sl/SL_Menu.py:448 sl/SL_Menu.py:1181 sl/SL_Menu.py:1543 sl/SL_Menu.py:1569 -#: sl/SL_Menu.py:1748 +#: sl/SL_Menu.py:538 sl/SL_Menu.py:1265 sl/SL_Menu.py:1627 sl/SL_Menu.py:1653 +#: sl/SL_Menu.py:1832 msgid "Close Task" msgstr "Aufgabe schließen" -#: sl/SL_Menu.py:451 sl/SL_Menu.py:1184 sl/SL_Menu.py:1588 sl/SL_Menu.py:1614 +#: sl/SL_Menu.py:541 sl/SL_Menu.py:1268 sl/SL_Menu.py:1672 sl/SL_Menu.py:1698 msgid "Re-open Task" msgstr "Aufgabe erneut öffnen" -#: sl/SL_Menu.py:454 sl/SL_Menu.py:1187 sl/SL_Menu.py:1633 sl/SL_Menu.py:1660 +#: sl/SL_Menu.py:544 sl/SL_Menu.py:1271 sl/SL_Menu.py:1717 sl/SL_Menu.py:1744 msgid "Delete Task" msgstr "Aufgabe löschen" -#: sl/SL_Menu.py:457 sl/SL_Menu.py:1190 sl/SL_Menu.py:1679 sl/SL_Menu.py:1715 +#: sl/SL_Menu.py:547 sl/SL_Menu.py:1274 sl/SL_Menu.py:1763 sl/SL_Menu.py:1799 msgid "Move Task" msgstr "Aufgabe verschieben" -#: sl/SL_Menu.py:460 sl/SL_Menu.py:1193 sl/SL_Menu.py:1734 +#: sl/SL_Menu.py:550 sl/SL_Menu.py:1277 sl/SL_Menu.py:1818 msgid "List Inactive Tasks" msgstr "Inaktive Aufgaben auflisten" -#: sl/SL_Menu.py:463 sl/SL_Menu.py:1196 sl/SL_Menu.py:1761 +#: sl/SL_Menu.py:553 sl/SL_Menu.py:1280 sl/SL_Menu.py:1845 msgid "List All Closed Tasks" msgstr "Alle geschlossenen Aufgaben auflisten" -#: sl/SL_Menu.py:466 sl/SL_Menu.py:675 sl/SL_Menu.py:761 sl/SL_Menu.py:929 -#: sl/SL_Menu.py:1199 sl/SL_Menu.py:2311 sl/SL_Menu.py:2331 sl/SL_Menu.py:2366 +#: sl/SL_Menu.py:556 sl/SL_Menu.py:715 sl/SL_Menu.py:801 sl/SL_Menu.py:1011 +#: sl/SL_Menu.py:1283 sl/SL_Menu.py:2395 sl/SL_Menu.py:2415 sl/SL_Menu.py:2450 msgid "Edit Task" msgstr "Aufgabe bearbeiten" -#: sl/SL_Menu.py:469 sl/SL_Menu.py:1202 sl/SL_Menu.py:1786 +#: sl/SL_Menu.py:559 sl/SL_Menu.py:1286 sl/SL_Menu.py:1870 msgid "Delete All Closed Tasks" msgstr "Alle geschlossenen Aufgaben löschen" -#: sl/SL_Menu.py:472 sl/SL_Menu.py:1205 sl/SL_Menu.py:1828 +#: sl/SL_Menu.py:562 sl/SL_Menu.py:1289 sl/SL_Menu.py:1912 msgid "Promote Task to Project" msgstr "Aufgabe zum Projekt hochstufen" -#: sl/SL_Menu.py:477 +#: sl/SL_Menu.py:567 msgid "Today View" msgstr "Heute-Ansicht" -#: sl/SL_Menu.py:482 sl/SL_Menu.py:591 +#: sl/SL_Menu.py:572 sl/SL_Menu.py:631 msgid "Task Planning" msgstr "Aufgabenplanung" -#: sl/SL_Menu.py:487 sl/SL_Menu.py:962 +#: sl/SL_Menu.py:577 sl/SL_Menu.py:1046 msgid "E-Mail Task Assignment" msgstr "Zuordnung von E-Mail-Tasks" -#: sl/SL_Menu.py:492 sl/SL_Menu.py:671 sl/SL_Menu.py:757 sl/SL_Menu.py:925 +#: sl/SL_Menu.py:582 sl/SL_Menu.py:711 sl/SL_Menu.py:797 sl/SL_Menu.py:1007 msgid "Start work on task" msgstr "Arbeit an Aufgabe beginnen" -#: sl/SL_Menu.py:497 +#: sl/SL_Menu.py:587 msgid "Show current work" msgstr "Aktuelle Arbeit anzeigen" -#: sl/SL_Menu.py:502 +#: sl/SL_Menu.py:592 msgid "Stop current work" msgstr "Aktuelle Arbeit beenden" -#: sl/SL_Menu.py:510 sl/SL_Menu.py:1218 +#: sl/SL_Menu.py:600 sl/SL_Menu.py:1302 msgid "Reporting" msgstr "Berichterstattung" -#: sl/SL_Menu.py:511 sl/SL_Menu.py:1221 +#: sl/SL_Menu.py:601 sl/SL_Menu.py:1305 msgid "Daily Report (Today)" msgstr "Tagesbericht (Heute)" -#: sl/SL_Menu.py:516 sl/SL_Menu.py:1227 sl/SL_Menu.py:2561 +#: sl/SL_Menu.py:606 sl/SL_Menu.py:1311 sl/SL_Menu.py:2645 msgid "Daily Report (Specific Day)" msgstr "Tagesbericht (Bestimmter Tag)" -#: sl/SL_Menu.py:519 sl/SL_Menu.py:1230 sl/SL_Menu.py:2580 +#: sl/SL_Menu.py:609 sl/SL_Menu.py:1314 sl/SL_Menu.py:2664 msgid "Date Range Report" msgstr "Zeitraum-Bericht" -#: sl/SL_Menu.py:522 sl/SL_Menu.py:1233 sl/SL_Menu.py:2607 sl/SL_Menu.py:2638 +#: sl/SL_Menu.py:612 sl/SL_Menu.py:1317 sl/SL_Menu.py:2691 sl/SL_Menu.py:2722 msgid "Detailed Task Report" msgstr "Detaillierter Aufgaben-Bericht" -#: sl/SL_Menu.py:525 sl/SL_Menu.py:1236 sl/SL_Menu.py:2666 +#: sl/SL_Menu.py:615 sl/SL_Menu.py:1320 sl/SL_Menu.py:2750 msgid "Detailed Project Report" msgstr "Detaillierter Projekt-Bericht" -#: sl/SL_Menu.py:528 sl/SL_Menu.py:1239 sl/SL_Menu.py:2693 +#: sl/SL_Menu.py:618 sl/SL_Menu.py:1323 sl/SL_Menu.py:2777 msgid "Detailed Daily Report" msgstr "Detaillierter Tagesbericht" -#: sl/SL_Menu.py:533 sl/SL_Menu.py:1256 +#: sl/SL_Menu.py:623 sl/SL_Menu.py:1340 msgid "Settings" msgstr "Einstellungen" -#: sl/SL_Menu.py:557 sl/SL_Menu.py:2539 -msgid "Current Active Work" -msgstr "Aktuell laufende Arbeit" - -#: sl/SL_Menu.py:562 sl/SL_Menu.py:695 sl/SL_Menu.py:781 sl/SL_Menu.py:936 -#: sl/SL_Menu.py:2411 -msgid "Done" -msgstr "Erledigt" - -#: sl/SL_Menu.py:576 -msgid "Edit current task" -msgstr "Aktuellen Task bearbeiten" - -#: sl/SL_Menu.py:584 -msgid "Exit" -msgstr "Beenden" - -#: sl/SL_Menu.py:597 sl/SL_Menu.py:617 +#: sl/SL_Menu.py:637 sl/SL_Menu.py:657 msgid "Tomorrow" msgstr "Morgen" -#: sl/SL_Menu.py:598 sl/SL_Menu.py:618 +#: sl/SL_Menu.py:638 sl/SL_Menu.py:658 msgid "Weekly overview" msgstr "Wochenübersicht" -#: sl/SL_Menu.py:599 sl/SL_Menu.py:619 +#: sl/SL_Menu.py:639 sl/SL_Menu.py:659 msgid "Overdue tasks" msgstr "Überfällige Aufgaben" -#: sl/SL_Menu.py:600 sl/SL_Menu.py:620 +#: sl/SL_Menu.py:640 sl/SL_Menu.py:660 msgid "Unplanned tasks" msgstr "Ungeplante Aufgaben" -#: sl/SL_Menu.py:601 +#: sl/SL_Menu.py:641 msgid "All" msgstr "Alle" -#: sl/SL_Menu.py:608 +#: sl/SL_Menu.py:648 msgid "Filter" msgstr "Filter" -#: sl/SL_Menu.py:627 +#: sl/SL_Menu.py:667 msgid "Tasks" msgstr "Aufgaben" -#: sl/SL_Menu.py:634 tt/TimeTracker.py:1471 tt/TimeTracker.py:1569 +#: sl/SL_Menu.py:674 tt/TimeTracker.py:1479 tt/TimeTracker.py:1577 msgid "Friday" msgstr "Freitag" -#: sl/SL_Menu.py:634 tt/TimeTracker.py:1471 tt/TimeTracker.py:1569 +#: sl/SL_Menu.py:674 tt/TimeTracker.py:1479 tt/TimeTracker.py:1577 msgid "Monday" msgstr "Montag" -#: sl/SL_Menu.py:634 tt/TimeTracker.py:1471 tt/TimeTracker.py:1569 +#: sl/SL_Menu.py:674 tt/TimeTracker.py:1479 tt/TimeTracker.py:1577 msgid "Saturday" msgstr "Samstag" -#: sl/SL_Menu.py:634 tt/TimeTracker.py:1471 tt/TimeTracker.py:1569 +#: sl/SL_Menu.py:674 tt/TimeTracker.py:1479 tt/TimeTracker.py:1577 msgid "Sunday" msgstr "Sonntag" -#: sl/SL_Menu.py:634 tt/TimeTracker.py:1471 tt/TimeTracker.py:1569 +#: sl/SL_Menu.py:674 tt/TimeTracker.py:1479 tt/TimeTracker.py:1577 msgid "Thursday" msgstr "Donnerstag" -#: sl/SL_Menu.py:634 tt/TimeTracker.py:1471 tt/TimeTracker.py:1569 +#: sl/SL_Menu.py:674 tt/TimeTracker.py:1479 tt/TimeTracker.py:1577 msgid "Tuesday" msgstr "Dienstag" -#: sl/SL_Menu.py:634 tt/TimeTracker.py:1471 tt/TimeTracker.py:1569 +#: sl/SL_Menu.py:674 tt/TimeTracker.py:1479 tt/TimeTracker.py:1577 msgid "Wednesday" msgstr "Mittwoch" -#: sl/SL_Menu.py:796 +#: sl/SL_Menu.py:735 sl/SL_Menu.py:821 sl/SL_Menu.py:873 sl/SL_Menu.py:1018 +#: sl/SL_Menu.py:2495 +msgid "Done" +msgstr "Erledigt" + +#: sl/SL_Menu.py:836 msgid "No tasks found." msgstr "Keine Aufgaben gefunden." -#: sl/SL_Menu.py:798 sl/SL_Menu.py:955 sl/SL_Menu.py:1106 sl/SL_Menu.py:1163 -#: sl/SL_Menu.py:1211 sl/SL_Menu.py:1515 sl/SL_Menu.py:1548 sl/SL_Menu.py:1559 -#: sl/SL_Menu.py:1593 sl/SL_Menu.py:1604 sl/SL_Menu.py:1638 sl/SL_Menu.py:1649 -#: sl/SL_Menu.py:1684 sl/SL_Menu.py:1695 sl/SL_Menu.py:1703 sl/SL_Menu.py:1754 -#: sl/SL_Menu.py:1779 sl/SL_Menu.py:1801 sl/SL_Menu.py:1833 sl/SL_Menu.py:1844 -#: sl/SL_Menu.py:1884 sl/SL_Menu.py:1896 sl/SL_Menu.py:1931 sl/SL_Menu.py:1952 -#: sl/SL_Menu.py:1964 sl/SL_Menu.py:1975 sl/SL_Menu.py:2011 sl/SL_Menu.py:2041 -#: sl/SL_Menu.py:2071 sl/SL_Menu.py:2111 sl/SL_Menu.py:2123 sl/SL_Menu.py:2170 -#: sl/SL_Menu.py:2182 sl/SL_Menu.py:2316 sl/SL_Menu.py:2335 sl/SL_Menu.py:2348 -#: sl/SL_Menu.py:2363 sl/SL_Menu.py:2500 sl/SL_Menu.py:2510 sl/SL_Menu.py:2554 -#: sl/SL_Menu.py:2573 sl/SL_Menu.py:2600 sl/SL_Menu.py:2612 sl/SL_Menu.py:2624 -#: sl/SL_Menu.py:2643 sl/SL_Menu.py:2659 sl/SL_Menu.py:2671 sl/SL_Menu.py:2686 -#: sl/SL_Menu.py:2705 sl/SL_Menu.py:2746 sl/SL_Menu.py:2761 +#: sl/SL_Menu.py:838 sl/SL_Menu.py:1190 sl/SL_Menu.py:1208 sl/SL_Menu.py:1247 +#: sl/SL_Menu.py:1295 sl/SL_Menu.py:1329 sl/SL_Menu.py:1599 sl/SL_Menu.py:1632 +#: sl/SL_Menu.py:1643 sl/SL_Menu.py:1677 sl/SL_Menu.py:1688 sl/SL_Menu.py:1722 +#: sl/SL_Menu.py:1733 sl/SL_Menu.py:1768 sl/SL_Menu.py:1779 sl/SL_Menu.py:1787 +#: sl/SL_Menu.py:1838 sl/SL_Menu.py:1863 sl/SL_Menu.py:1885 sl/SL_Menu.py:1917 +#: sl/SL_Menu.py:1928 sl/SL_Menu.py:1968 sl/SL_Menu.py:1980 sl/SL_Menu.py:2015 +#: sl/SL_Menu.py:2036 sl/SL_Menu.py:2048 sl/SL_Menu.py:2059 sl/SL_Menu.py:2095 +#: sl/SL_Menu.py:2125 sl/SL_Menu.py:2155 sl/SL_Menu.py:2195 sl/SL_Menu.py:2207 +#: sl/SL_Menu.py:2254 sl/SL_Menu.py:2266 sl/SL_Menu.py:2400 sl/SL_Menu.py:2419 +#: sl/SL_Menu.py:2432 sl/SL_Menu.py:2447 sl/SL_Menu.py:2584 sl/SL_Menu.py:2594 +#: sl/SL_Menu.py:2638 sl/SL_Menu.py:2657 sl/SL_Menu.py:2684 sl/SL_Menu.py:2696 +#: sl/SL_Menu.py:2708 sl/SL_Menu.py:2727 sl/SL_Menu.py:2743 sl/SL_Menu.py:2755 +#: sl/SL_Menu.py:2770 sl/SL_Menu.py:2789 sl/SL_Menu.py:2830 sl/SL_Menu.py:2845 msgid "Back" msgstr "Zurück" -#: sl/SL_Menu.py:805 +#: sl/SL_Menu.py:849 msgid "Today's Tasks" msgstr "Heutige Aufgaben" -#: sl/SL_Menu.py:826 +#: sl/SL_Menu.py:868 sl/SL_Menu.py:2623 +msgid "Current Active Work" +msgstr "Aktuell laufende Arbeit" + +#: sl/SL_Menu.py:887 +msgid "Edit current task" +msgstr "Aktuellen Task bearbeiten" + +#: sl/SL_Menu.py:908 msgid "Show only open tasks" msgstr "Nur offene Aufgaben anzeigen" -#: sl/SL_Menu.py:838 +#: sl/SL_Menu.py:920 msgid "Sort by priority" msgstr "Nach Priorität sortieren" -#: sl/SL_Menu.py:907 sl/SL_Menu.py:2243 sl/SL_Menu.py:2415 -msgid "Priority" -msgstr "Priorität" - -#: sl/SL_Menu.py:910 sl/SL_Menu.py:2243 sl/SL_Menu.py:2415 +#: sl/SL_Menu.py:992 sl/SL_Menu.py:2327 sl/SL_Menu.py:2499 msgid "0 (lowest) to 9 (highest)" msgstr "0 (niedrigste) bis 9 (höchste)" -#: sl/SL_Menu.py:951 +#: sl/SL_Menu.py:1033 msgid "No open tasks for today." msgstr "Keine offenen Aufgaben für heute." -#: sl/SL_Menu.py:953 +#: sl/SL_Menu.py:1035 msgid "No tasks for today." msgstr "Keine Aufgaben für heute." -#: sl/SL_Menu.py:968 +#: sl/SL_Menu.py:1039 +msgid "Exit" +msgstr "Beenden" + +#: sl/SL_Menu.py:1052 msgid "Fetching emails..." msgstr "E-Mails werden abgerufen..." -#: sl/SL_Menu.py:971 +#: sl/SL_Menu.py:1055 #, python-brace-format msgid "Error fetching emails: {error}" msgstr "Fehler beim E-Mail-Abruf: {error}" -#: sl/SL_Menu.py:974 +#: sl/SL_Menu.py:1058 #, python-brace-format msgid "{count} new tasks created from emails." msgstr "{count} neue Aufgaben aus E-Mails erstellt." -#: sl/SL_Menu.py:976 +#: sl/SL_Menu.py:1060 msgid "No new emails found." msgstr "Keine neuen E-Mails gefunden." -#: sl/SL_Menu.py:1001 +#: sl/SL_Menu.py:1085 #, python-brace-format msgid "{remaining} of {total} emails still to process" msgstr "{remaining} von {total} E-Mails noch zu bearbeiten" -#: sl/SL_Menu.py:1005 +#: sl/SL_Menu.py:1089 msgid "No unassigned email tasks available." msgstr "Keine nicht zugeordneten E-Mail-Tasks vorhanden." -#: sl/SL_Menu.py:1017 +#: sl/SL_Menu.py:1101 msgid "Assign Project" msgstr "Projekt zuordnen" -#: sl/SL_Menu.py:1028 +#: sl/SL_Menu.py:1112 msgid "Are you sure you want to delete this task?" msgstr "Sind Sie sicher, dass Sie diese Aufgabe löschen möchten?" -#: sl/SL_Menu.py:1031 +#: sl/SL_Menu.py:1115 msgid "Yes, delete" msgstr "Ja, löschen" -#: sl/SL_Menu.py:1036 +#: sl/SL_Menu.py:1120 msgid "No, cancel" msgstr "Nein, abbrechen" -#: sl/SL_Menu.py:1043 +#: sl/SL_Menu.py:1127 msgid "Delete" msgstr "Löschen" -#: sl/SL_Menu.py:1047 +#: sl/SL_Menu.py:1131 msgid "Edit Details" msgstr "Details bearbeiten" -#: sl/SL_Menu.py:1055 sl/SL_Menu.py:2395 +#: sl/SL_Menu.py:1139 sl/SL_Menu.py:2479 msgid "Task Name" msgstr "Aufgabenname" -#: sl/SL_Menu.py:1064 sl/SL_Menu.py:2399 +#: sl/SL_Menu.py:1148 sl/SL_Menu.py:2483 msgid "Due Date" msgstr "Fälligkeitsdatum" -#: sl/SL_Menu.py:1072 sl/SL_Menu.py:2403 +#: sl/SL_Menu.py:1156 sl/SL_Menu.py:2487 msgid "Clear" msgstr "Löschen" -#: sl/SL_Menu.py:1079 sl/SL_Menu.py:2271 sl/SL_Menu.py:2444 +#: sl/SL_Menu.py:1163 sl/SL_Menu.py:2355 sl/SL_Menu.py:2528 msgid "Notes (Markdown)" msgstr "Notizen (Markdown)" -#: sl/SL_Menu.py:1098 +#: sl/SL_Menu.py:1182 msgid "Task details updated successfully." msgstr "Aufgabendetails erfolgreich aktualisiert." -#: sl/SL_Menu.py:1104 +#: sl/SL_Menu.py:1188 msgid "Error updating task details." msgstr "Fehler beim Aktualisieren der Aufgabendetails." -#: sl/SL_Menu.py:1115 sl/SL_Menu.py:1131 +#: sl/SL_Menu.py:1199 sl/SL_Menu.py:1215 msgid "Project Management" msgstr "Projektverwaltung" -#: sl/SL_Menu.py:1124 sl/SL_Menu.py:1245 -msgid "Back to Main Menu" -msgstr "Zurück zum Hauptmenü" - -#: sl/SL_Menu.py:1259 +#: sl/SL_Menu.py:1343 msgid "Change Language" msgstr "Sprache ändern" -#: sl/SL_Menu.py:1277 +#: sl/SL_Menu.py:1361 msgid "Select Language" msgstr "Sprache auswählen" -#: sl/SL_Menu.py:1278 sl/SL_Menu.py:1318 sl/SL_Menu.py:1359 sl/SL_Menu.py:1372 -#: sl/SL_Menu.py:1392 sl/SL_Menu.py:1426 sl/SL_Menu.py:1449 sl/SL_Menu.py:1504 +#: sl/SL_Menu.py:1362 sl/SL_Menu.py:1402 sl/SL_Menu.py:1443 sl/SL_Menu.py:1456 +#: sl/SL_Menu.py:1476 sl/SL_Menu.py:1510 sl/SL_Menu.py:1533 sl/SL_Menu.py:1588 msgid "Save" msgstr "Speichern" -#: sl/SL_Menu.py:1284 +#: sl/SL_Menu.py:1368 msgid "" "Language changed. Please restart the application for the changes to take " "effect." @@ -1673,21 +1687,21 @@ msgstr "" "Sprache geändert. Bitte starten Sie die Anwendung neu, damit die Änderungen " "wirksam werden." -#: sl/SL_Menu.py:1287 +#: sl/SL_Menu.py:1371 msgid "Restore Previous Version" msgstr "Vorherige Version wiederherstellen" -#: sl/SL_Menu.py:1290 +#: sl/SL_Menu.py:1374 msgid "The 'update' module is not available. This feature is disabled." msgstr "" "Das Modul „Update“ ist nicht verfügbar. Diese Funktion ist deaktiviert." -#: sl/SL_Menu.py:1292 +#: sl/SL_Menu.py:1376 #, python-brace-format msgid "No previous version backup '{filename}' found." msgstr "Keine Sicherung der vorherigen Version „{filename}“ gefunden." -#: sl/SL_Menu.py:1294 +#: sl/SL_Menu.py:1378 msgid "" "This will restore the application to the previously backed-up version. The " "application will then restart. You may need to manually refresh your browser " @@ -1698,35 +1712,35 @@ msgstr "" "müssen Sie Ihren Browser manuell aktualisieren, wenn die Verbindung nicht " "automatisch wiederhergestellt wird." -#: sl/SL_Menu.py:1295 +#: sl/SL_Menu.py:1379 msgid "Restore and Restart" msgstr "Wiederherstellen und neu starten" -#: sl/SL_Menu.py:1296 +#: sl/SL_Menu.py:1380 msgid "Restoring and restarting..." msgstr "Wiederherstellung und Neustart..." -#: sl/SL_Menu.py:1299 +#: sl/SL_Menu.py:1383 msgid "Restore complete. Please restart the application." msgstr "Wiederherstellung abgeschlossen. Bitte starten Sie die Anwendung neu." -#: sl/SL_Menu.py:1301 +#: sl/SL_Menu.py:1385 msgid "Change Data Storage Location" msgstr "Speicherort der Daten ändern" -#: sl/SL_Menu.py:1303 +#: sl/SL_Menu.py:1387 msgid "Current data file" msgstr "Aktuelle Datendatei" -#: sl/SL_Menu.py:1306 +#: sl/SL_Menu.py:1390 msgid "New Path for data file" msgstr "Neuer Pfad für Datendatei" -#: sl/SL_Menu.py:1312 +#: sl/SL_Menu.py:1396 msgid "Move existing data to the new location" msgstr "Vorhandene Daten an den neuen Speicherort verschieben" -#: sl/SL_Menu.py:1315 +#: sl/SL_Menu.py:1399 msgid "" "If unchecked, the old data file will remain, and a new empty one might be " "created at the new location on restart." @@ -1735,11 +1749,11 @@ msgstr "" "beim Neustart wird möglicherweise eine neue leere Datei am neuen Speicherort " "erstellt." -#: sl/SL_Menu.py:1322 +#: sl/SL_Menu.py:1406 msgid "Please enter a new path." msgstr "Bitte geben Sie einen neuen Pfad ein." -#: sl/SL_Menu.py:1330 +#: sl/SL_Menu.py:1414 msgid "" "Error: For security, the data file must be located within the application " "directory." @@ -1747,7 +1761,7 @@ msgstr "" "Fehler: Aus Sicherheitsgründen muss sich die Datendatei im " "Anwendungsverzeichnis befinden." -#: sl/SL_Menu.py:1339 +#: sl/SL_Menu.py:1423 msgid "" "Storage location updated. Please restart the application for the changes to " "take effect." @@ -1755,103 +1769,103 @@ msgstr "" "Speicherort aktualisiert. Bitte starten Sie die Anwendung neu, damit die " "Änderungen wirksam werden." -#: sl/SL_Menu.py:1353 +#: sl/SL_Menu.py:1437 msgid "Report Format" msgstr "Berichtsformat" -#: sl/SL_Menu.py:1358 +#: sl/SL_Menu.py:1442 msgid "Select Format" msgstr "Format auswählen" -#: sl/SL_Menu.py:1363 +#: sl/SL_Menu.py:1447 msgid "Report format updated." msgstr "Berichtsformat aktualisiert." -#: sl/SL_Menu.py:1366 +#: sl/SL_Menu.py:1450 msgid "Streamlit Port Settings" msgstr "Streamlit-Port-Einstellungen" -#: sl/SL_Menu.py:1368 +#: sl/SL_Menu.py:1452 msgid "Current Streamlit Port" msgstr "Aktueller Streamlit-Port" -#: sl/SL_Menu.py:1371 +#: sl/SL_Menu.py:1455 msgid "New Port" msgstr "Neuer Port" -#: sl/SL_Menu.py:1376 +#: sl/SL_Menu.py:1460 #, python-brace-format msgid "Port updated to {port}. Please restart Streamlit." msgstr "Port aktualisiert auf {port}. Bitte starten Sie Streamlit neu." -#: sl/SL_Menu.py:1379 +#: sl/SL_Menu.py:1463 msgid "Email Settings" msgstr "E-Mail-Einstellungen" -#: sl/SL_Menu.py:1385 +#: sl/SL_Menu.py:1469 msgid "Enable email import" msgstr "E-Mail-Import aktivieren" -#: sl/SL_Menu.py:1386 +#: sl/SL_Menu.py:1470 msgid "IMAP Server" msgstr "IMAP-Server" -#: sl/SL_Menu.py:1387 +#: sl/SL_Menu.py:1471 msgid "Port" msgstr "Port" -#: sl/SL_Menu.py:1388 +#: sl/SL_Menu.py:1472 msgid "Username" msgstr "Benutzername" -#: sl/SL_Menu.py:1389 +#: sl/SL_Menu.py:1473 msgid "Password" msgstr "Passwort" -#: sl/SL_Menu.py:1390 +#: sl/SL_Menu.py:1474 msgid "Use SSL" msgstr "SSL verwenden" -#: sl/SL_Menu.py:1403 +#: sl/SL_Menu.py:1487 msgid "Email settings saved." msgstr "E-Mail-Einstellungen gespeichert." -#: sl/SL_Menu.py:1406 +#: sl/SL_Menu.py:1490 msgid "Change CSS Style" msgstr "CSS-Stil ändern" -#: sl/SL_Menu.py:1408 +#: sl/SL_Menu.py:1492 msgid "Current CSS file" msgstr "Aktuelle CSS-Datei" -#: sl/SL_Menu.py:1425 +#: sl/SL_Menu.py:1509 msgid "Select CSS File" msgstr "CSS-Datei auswählen" -#: sl/SL_Menu.py:1431 +#: sl/SL_Menu.py:1515 msgid "" "CSS style updated. Please restart the application for the changes to take " "effect." msgstr "" "CSS-Stil aktualisiert. Bitte die Anwendung für die Änderungen neu starten." -#: sl/SL_Menu.py:1434 +#: sl/SL_Menu.py:1518 msgid "Change View Mode" msgstr "Anzeigemodus ändern" -#: sl/SL_Menu.py:1438 +#: sl/SL_Menu.py:1522 msgid "App Window (Webview)" msgstr "App-Fenster (Webview)" -#: sl/SL_Menu.py:1438 +#: sl/SL_Menu.py:1522 msgid "System Browser" msgstr "System-Browser" -#: sl/SL_Menu.py:1448 +#: sl/SL_Menu.py:1532 msgid "Select View Mode" msgstr "Anzeigemodus auswählen" -#: sl/SL_Menu.py:1455 +#: sl/SL_Menu.py:1539 msgid "" "View mode updated. Please restart the application for the changes to take " "effect." @@ -1859,155 +1873,161 @@ msgstr "" "Anzeigemodus aktualisiert. Bitte die Anwendung für die Änderungen neu " "starten." -#: sl/SL_Menu.py:1458 +#: sl/SL_Menu.py:1542 msgid "MCP Server Settings" msgstr "MCP-Server-Einstellungen" -#: sl/SL_Menu.py:1460 +#: sl/SL_Menu.py:1544 msgid "HTTP (Streamable HTTP)" msgstr "HTTP (Streamable HTTP)" -#: sl/SL_Menu.py:1461 +#: sl/SL_Menu.py:1545 msgid "stdio (recommended for Claude Desktop)" msgstr "stdio (empfohlen für Claude Desktop)" -#: sl/SL_Menu.py:1475 +#: sl/SL_Menu.py:1559 msgid "Transport" msgstr "Transport" -#: sl/SL_Menu.py:1486 +#: sl/SL_Menu.py:1570 msgid "Enable MCP server" msgstr "MCP-Server aktivieren" -#: sl/SL_Menu.py:1489 +#: sl/SL_Menu.py:1573 msgid "" "Not used with stdio - the MCP client starts and stops the server itself." -msgstr "Wird bei stdio nicht verwendet – der MCP-Client startet und stoppt den Server selbst." +msgstr "" +"Wird bei stdio nicht verwendet – der MCP-Client startet und stoppt den " +"Server selbst." -#: sl/SL_Menu.py:1492 +#: sl/SL_Menu.py:1576 msgid "Port (HTTP only)" msgstr "Port (nur HTTP)" -#: sl/SL_Menu.py:1499 +#: sl/SL_Menu.py:1583 msgid "" "With stdio, the app does not start the MCP server itself - the MCP client " "(e.g. Claude Desktop) launches it directly, and the port is ignored." -msgstr "Bei stdio startet die App den MCP-Server nicht selbst – der MCP-Client (z.B. Claude Desktop) startet ihn direkt, und der Port wird ignoriert." +msgstr "" +"Bei stdio startet die App den MCP-Server nicht selbst – der MCP-Client (z.B. " +"Claude Desktop) startet ihn direkt, und der Port wird ignoriert." -#: sl/SL_Menu.py:1510 +#: sl/SL_Menu.py:1594 msgid "" "MCP server settings saved. Please restart the application for the changes to " "take effect." -msgstr "MCP-Server-Einstellungen gespeichert. Bitte starten Sie die Anwendung neu, damit die Änderungen wirksam werden." +msgstr "" +"MCP-Server-Einstellungen gespeichert. Bitte starten Sie die Anwendung neu, " +"damit die Änderungen wirksam werden." -#: sl/SL_Menu.py:1524 +#: sl/SL_Menu.py:1608 msgid "Add New Project" msgstr "Neues Projekt hinzufügen" -#: sl/SL_Menu.py:1527 +#: sl/SL_Menu.py:1611 msgid "Name of the project" msgstr "Name des Projekts" -#: sl/SL_Menu.py:1531 +#: sl/SL_Menu.py:1615 #, python-brace-format msgid "Project '{name}' added." msgstr "Projekt '{name}' hinzugefügt." -#: sl/SL_Menu.py:1535 sl/SL_Menu.py:1581 sl/SL_Menu.py:1626 sl/SL_Menu.py:1672 -#: sl/SL_Menu.py:1727 sl/SL_Menu.py:1821 sl/SL_Menu.py:1869 sl/SL_Menu.py:1919 -#: sl/SL_Menu.py:1999 sl/SL_Menu.py:2029 sl/SL_Menu.py:2059 sl/SL_Menu.py:2090 -#: sl/SL_Menu.py:2152 sl/SL_Menu.py:2192 sl/SL_Menu.py:2304 sl/SL_Menu.py:2323 -#: sl/SL_Menu.py:2484 sl/SL_Menu.py:2532 +#: sl/SL_Menu.py:1619 sl/SL_Menu.py:1665 sl/SL_Menu.py:1710 sl/SL_Menu.py:1756 +#: sl/SL_Menu.py:1811 sl/SL_Menu.py:1905 sl/SL_Menu.py:1953 sl/SL_Menu.py:2003 +#: sl/SL_Menu.py:2083 sl/SL_Menu.py:2113 sl/SL_Menu.py:2143 sl/SL_Menu.py:2174 +#: sl/SL_Menu.py:2236 sl/SL_Menu.py:2276 sl/SL_Menu.py:2388 sl/SL_Menu.py:2407 +#: sl/SL_Menu.py:2568 sl/SL_Menu.py:2616 msgid "Cancel" msgstr "Abbrechen" -#: sl/SL_Menu.py:1553 sl/SL_Menu.py:1598 sl/SL_Menu.py:1643 sl/SL_Menu.py:1838 -#: sl/SL_Menu.py:1901 sl/SL_Menu.py:1936 sl/SL_Menu.py:1969 sl/SL_Menu.py:2018 -#: sl/SL_Menu.py:2048 sl/SL_Menu.py:2078 sl/SL_Menu.py:2505 sl/SL_Menu.py:2617 -#: sl/SL_Menu.py:2678 +#: sl/SL_Menu.py:1637 sl/SL_Menu.py:1682 sl/SL_Menu.py:1727 sl/SL_Menu.py:1922 +#: sl/SL_Menu.py:1985 sl/SL_Menu.py:2020 sl/SL_Menu.py:2053 sl/SL_Menu.py:2102 +#: sl/SL_Menu.py:2132 sl/SL_Menu.py:2162 sl/SL_Menu.py:2589 sl/SL_Menu.py:2701 +#: sl/SL_Menu.py:2762 msgid "Select Project" msgstr "Projekt auswählen" -#: sl/SL_Menu.py:1558 +#: sl/SL_Menu.py:1642 #, python-brace-format msgid "No open tasks to close in '{name}'." msgstr "Keine offenen Aufgaben zum Schließen in „{name}“." -#: sl/SL_Menu.py:1565 sl/SL_Menu.py:1610 sl/SL_Menu.py:1655 sl/SL_Menu.py:1709 -#: sl/SL_Menu.py:1850 sl/SL_Menu.py:1979 sl/SL_Menu.py:2338 sl/SL_Menu.py:2516 -#: sl/SL_Menu.py:2648 +#: sl/SL_Menu.py:1649 sl/SL_Menu.py:1694 sl/SL_Menu.py:1739 sl/SL_Menu.py:1793 +#: sl/SL_Menu.py:1934 sl/SL_Menu.py:2063 sl/SL_Menu.py:2422 sl/SL_Menu.py:2600 +#: sl/SL_Menu.py:2732 msgid "Select Task" msgstr "Aufgabe auswählen" -#: sl/SL_Menu.py:1575 +#: sl/SL_Menu.py:1659 #, python-brace-format msgid "Task '{sub_name}' in '{main_name}' has been closed." msgstr "Aufgabe „{sub_name}“ in „{main_name}“ wurde geschlossen." -#: sl/SL_Menu.py:1603 +#: sl/SL_Menu.py:1687 #, python-brace-format msgid "No closed tasks to reopen in '{name}'." msgstr "Keine geschlossenen Aufgaben zum erneuten Öffnen in „{name}“." -#: sl/SL_Menu.py:1620 +#: sl/SL_Menu.py:1704 #, python-brace-format msgid "Task '{sub_name}' in '{main_name}' has been reopened." msgstr "Aufgabe „{sub_name}“ in „{main_name}“ wurde erneut geöffnet." -#: sl/SL_Menu.py:1648 +#: sl/SL_Menu.py:1732 #, python-brace-format msgid "No open tasks to delete in '{name}'." msgstr "Keine offenen Aufgaben zum Löschen in „{name}“." -#: sl/SL_Menu.py:1659 +#: sl/SL_Menu.py:1743 msgid "This action cannot be undone." msgstr "Diese Aktion kann nicht rückgängig gemacht werden." -#: sl/SL_Menu.py:1666 +#: sl/SL_Menu.py:1750 #, python-brace-format msgid "Task '{sub_name}' deleted from '{main_name}'." msgstr "Aufgabe '{sub_name}' von '{main_name}' gelöscht." -#: sl/SL_Menu.py:1689 +#: sl/SL_Menu.py:1773 msgid "Select Source Project" msgstr "Quellprojekt auswählen" -#: sl/SL_Menu.py:1694 +#: sl/SL_Menu.py:1778 #, python-brace-format msgid "No tasks found in '{name}'." msgstr "Keine Aufgaben in „{name}“ gefunden." -#: sl/SL_Menu.py:1702 +#: sl/SL_Menu.py:1786 msgid "No other projects available to move to." msgstr "Keine anderen Projekte zum Verschieben verfügbar." -#: sl/SL_Menu.py:1713 sl/SL_Menu.py:2138 +#: sl/SL_Menu.py:1797 sl/SL_Menu.py:2222 msgid "Select Target Project" msgstr "Zielprojekt auswählen" -#: sl/SL_Menu.py:1721 +#: sl/SL_Menu.py:1805 #, python-brace-format msgid "Task '{sub}' moved from '{src}' to '{dst}'." msgstr "Aufgabe „{sub}“ wurde von „{src}“ nach „{dst}“ verschoben." -#: sl/SL_Menu.py:1725 +#: sl/SL_Menu.py:1809 msgid "Error: Could not move task." msgstr "Fehler: Aufgabe konnte nicht verschoben werden." -#: sl/SL_Menu.py:1736 sl/SL_Menu.py:2099 +#: sl/SL_Menu.py:1820 sl/SL_Menu.py:2183 msgid "Weeks of inactivity" msgstr "Wochen der Inaktivität" -#: sl/SL_Menu.py:1741 +#: sl/SL_Menu.py:1825 #, python-brace-format msgid "Inactive Tasks (> {weeks} weeks):" msgstr "Inaktive Aufgaben (> {weeks} Wochen):" -#: sl/SL_Menu.py:1746 sl/SL_Menu.py:2107 +#: sl/SL_Menu.py:1830 sl/SL_Menu.py:2191 msgid "Last Activity" msgstr "Letzte Aktivität" -#: sl/SL_Menu.py:1805 +#: sl/SL_Menu.py:1889 #, python-brace-format msgid "" "Are you sure you want to delete {count} closed tasks? This action cannot be " @@ -2016,25 +2036,25 @@ msgstr "" "Sind Sie sicher, dass Sie{count}geschlossene Aufgaben löschen möchten? Diese " "Aktion kann nicht rückgängig gemacht werden." -#: sl/SL_Menu.py:1807 +#: sl/SL_Menu.py:1891 msgid "Show projects to delete" msgstr "Zu löschende Projekte anzeigen" -#: sl/SL_Menu.py:1811 +#: sl/SL_Menu.py:1895 msgid "Delete All" msgstr "Alle löschen" -#: sl/SL_Menu.py:1817 +#: sl/SL_Menu.py:1901 #, python-brace-format msgid "Successfully deleted {count} tasks." msgstr "{count} Aufgaben erfolgreich gelöscht." -#: sl/SL_Menu.py:1843 +#: sl/SL_Menu.py:1927 #, python-brace-format msgid "No open tasks to promote in '{name}'." msgstr "Keine offenen Aufgaben zum Heraufstufen in „{name}“." -#: sl/SL_Menu.py:1854 +#: sl/SL_Menu.py:1938 msgid "" "This will create a new Project with the task's name and move all time " "entries to a 'General' task within it." @@ -2042,69 +2062,69 @@ msgstr "" "Dadurch wird ein neues Projekt mit dem Namen der Aufgabe erstellt und alle " "Zeiteinträge in eine darin enthaltene „Allgemeine“ Aufgabe verschoben." -#: sl/SL_Menu.py:1856 +#: sl/SL_Menu.py:1940 msgid "Promote to Project" msgstr "Hochstufen zum Projekt" -#: sl/SL_Menu.py:1895 +#: sl/SL_Menu.py:1979 msgid "No open projects to rename." msgstr "Keine offenen Projekte zum Umbenennen." -#: sl/SL_Menu.py:1904 sl/SL_Menu.py:1984 +#: sl/SL_Menu.py:1988 sl/SL_Menu.py:2068 msgid "New Name" msgstr "Neuer Name" -#: sl/SL_Menu.py:1905 sl/SL_Menu.py:1985 +#: sl/SL_Menu.py:1989 sl/SL_Menu.py:2069 msgid "Rename" msgstr "Umbenennen" -#: sl/SL_Menu.py:1909 sl/SL_Menu.py:1989 +#: sl/SL_Menu.py:1993 sl/SL_Menu.py:2073 msgid "Please enter a new name." msgstr "Bitte geben Sie einen neuen Namen ein." -#: sl/SL_Menu.py:1911 sl/SL_Menu.py:1991 +#: sl/SL_Menu.py:1995 sl/SL_Menu.py:2075 msgid "New name is the same as the old name." msgstr "Neuer Name ist derselbe wie der alte Name." -#: sl/SL_Menu.py:1913 +#: sl/SL_Menu.py:1997 #, python-brace-format msgid "Project '{old_name}' successfully renamed to '{new_name}'." msgstr "Projekt '{old_name}' erfolgreich in '{new_name}' umbenannt." -#: sl/SL_Menu.py:1974 +#: sl/SL_Menu.py:2058 #, python-brace-format msgid "No open tasks to rename in '{name}'." msgstr "Keine offenen Aufgaben zum Umbenennen in „{name}“." -#: sl/SL_Menu.py:1997 +#: sl/SL_Menu.py:2081 msgid "Error: Could not rename. The new name might already exist." msgstr "" "Fehler: Umbenennen nicht möglich. Der neue Name ist möglicherweise bereits " "vorhanden." -#: sl/SL_Menu.py:2010 +#: sl/SL_Menu.py:2094 msgid "No open projects to close." msgstr "Keine offenen Projekte zum Schließen." -#: sl/SL_Menu.py:2023 +#: sl/SL_Menu.py:2107 #, python-brace-format msgid "Project '{name}' has been closed." msgstr "Das Projekt „{name}“ wurde geschlossen." -#: sl/SL_Menu.py:2027 sl/SL_Menu.py:2057 sl/SL_Menu.py:2088 +#: sl/SL_Menu.py:2111 sl/SL_Menu.py:2141 sl/SL_Menu.py:2172 msgid "Error: Project not found." msgstr "Fehler: Projekt nicht gefunden." -#: sl/SL_Menu.py:2040 +#: sl/SL_Menu.py:2124 msgid "No closed projects to reopen." msgstr "Keine geschlossenen Projekte zum erneuten Öffnen." -#: sl/SL_Menu.py:2053 +#: sl/SL_Menu.py:2137 #, python-brace-format msgid "Project '{name}' has been reopened." msgstr "Das Projekt „{name}“ wurde erneut geöffnet." -#: sl/SL_Menu.py:2079 +#: sl/SL_Menu.py:2163 msgid "" "This action cannot be undone. All associated tasks and time entries will be " "deleted." @@ -2112,204 +2132,204 @@ msgstr "" "Diese Aktion kann nicht rückgängig gemacht werden. Alle zugehörigen Aufgaben " "und Zeiteinträge werden gelöscht." -#: sl/SL_Menu.py:2084 +#: sl/SL_Menu.py:2168 #, python-brace-format msgid "Project '{name}' has been deleted." msgstr "Projekt „{name}“ wurde gelöscht." -#: sl/SL_Menu.py:2104 +#: sl/SL_Menu.py:2188 #, python-brace-format msgid "Inactive Projects (> {weeks} weeks):" msgstr "Inaktive Projekte (> {weeks} Wochen):" -#: sl/SL_Menu.py:2109 +#: sl/SL_Menu.py:2193 #, python-brace-format msgid "No projects found inactive for more than {weeks} weeks." msgstr "Keine Projekte gefunden, die länger als {weeks} Wochen inaktiv waren." -#: sl/SL_Menu.py:2118 sl/SL_Menu.py:2141 +#: sl/SL_Menu.py:2202 sl/SL_Menu.py:2225 msgid "Demote Project" msgstr "Projekt herabstufen" -#: sl/SL_Menu.py:2130 +#: sl/SL_Menu.py:2214 msgid "Select Project to Demote" msgstr "Wählen Sie das Projekt zum Herabstufen aus." -#: sl/SL_Menu.py:2136 +#: sl/SL_Menu.py:2220 msgid "No other projects available to demote into." msgstr "Es sind keine anderen Projekte zum Herabstufen verfügbar." -#: sl/SL_Menu.py:2139 +#: sl/SL_Menu.py:2223 #, python-brace-format msgid "This will convert '{src}' into a task of '{dst}'." msgstr "Dadurch wird „{src}“ in eine Aufgabe von „{dst}“ umgewandelt." -#: sl/SL_Menu.py:2164 +#: sl/SL_Menu.py:2248 msgid "Projects with only closed or no tasks:" msgstr "Projekte mit nur abgeschlossenen oder keinen Aufgaben:" -#: sl/SL_Menu.py:2168 +#: sl/SL_Menu.py:2252 msgid "No completed projects found." msgstr "Keine abgeschlossenen Projekte gefunden." -#: sl/SL_Menu.py:2177 sl/SL_Menu.py:2311 sl/SL_Menu.py:2607 +#: sl/SL_Menu.py:2261 sl/SL_Menu.py:2395 sl/SL_Menu.py:2691 msgid "Step 1: Select Project" msgstr "Schritt 1: Projekt auswählen" -#: sl/SL_Menu.py:2181 sl/SL_Menu.py:2499 +#: sl/SL_Menu.py:2265 sl/SL_Menu.py:2583 msgid "No open projects found. Please add one first." msgstr "Keine offenen Projekte gefunden. Bitte fügen Sie zuerst eines hinzu." -#: sl/SL_Menu.py:2186 sl/SL_Menu.py:2318 sl/SL_Menu.py:2547 +#: sl/SL_Menu.py:2270 sl/SL_Menu.py:2402 sl/SL_Menu.py:2631 msgid "Project" msgstr "Projekt" -#: sl/SL_Menu.py:2188 sl/SL_Menu.py:2319 sl/SL_Menu.py:2343 sl/SL_Menu.py:2619 +#: sl/SL_Menu.py:2272 sl/SL_Menu.py:2403 sl/SL_Menu.py:2427 sl/SL_Menu.py:2703 msgid "Next" msgstr "Weiter" -#: sl/SL_Menu.py:2203 sl/SL_Menu.py:2633 +#: sl/SL_Menu.py:2287 sl/SL_Menu.py:2717 msgid "No project selected. Please start again." msgstr "Kein Projekt ausgewählt. Bitte beginnen Sie erneut." -#: sl/SL_Menu.py:2208 +#: sl/SL_Menu.py:2292 msgid "To Project:" msgstr "Zum Projekt:" -#: sl/SL_Menu.py:2229 +#: sl/SL_Menu.py:2313 msgid "Name of the new task" msgstr "Name der neuen Aufgabe" -#: sl/SL_Menu.py:2235 +#: sl/SL_Menu.py:2319 msgid "Due date" msgstr "Fälligkeitsdatum" -#: sl/SL_Menu.py:2241 sl/SL_Menu.py:2413 +#: sl/SL_Menu.py:2325 sl/SL_Menu.py:2497 msgid "Recurring" msgstr "Wiederkehrend" -#: sl/SL_Menu.py:2257 sl/SL_Menu.py:2428 +#: sl/SL_Menu.py:2341 sl/SL_Menu.py:2512 msgid "daily" msgstr "täglich" -#: sl/SL_Menu.py:2257 sl/SL_Menu.py:2428 +#: sl/SL_Menu.py:2341 sl/SL_Menu.py:2512 msgid "monthly" msgstr "monatlich" -#: sl/SL_Menu.py:2257 sl/SL_Menu.py:2428 +#: sl/SL_Menu.py:2341 sl/SL_Menu.py:2512 msgid "on all business days" msgstr "an allen Geschäftstagen" -#: sl/SL_Menu.py:2257 sl/SL_Menu.py:2428 +#: sl/SL_Menu.py:2341 sl/SL_Menu.py:2512 msgid "userdefined" msgstr "benutzerdefiniert" -#: sl/SL_Menu.py:2257 sl/SL_Menu.py:2428 +#: sl/SL_Menu.py:2341 sl/SL_Menu.py:2512 msgid "weekly" msgstr "wöchentlich" -#: sl/SL_Menu.py:2261 sl/SL_Menu.py:2437 +#: sl/SL_Menu.py:2345 sl/SL_Menu.py:2521 msgid "Frequency" msgstr "Häufigkeit" -#: sl/SL_Menu.py:2265 sl/SL_Menu.py:2440 +#: sl/SL_Menu.py:2349 sl/SL_Menu.py:2524 msgid "Days" msgstr "Tage" -#: sl/SL_Menu.py:2269 sl/SL_Menu.py:2442 +#: sl/SL_Menu.py:2353 sl/SL_Menu.py:2526 msgid "Edit" msgstr "Bearbeiten" -#: sl/SL_Menu.py:2269 sl/SL_Menu.py:2442 +#: sl/SL_Menu.py:2353 sl/SL_Menu.py:2526 msgid "Preview" msgstr "Vorschau" -#: sl/SL_Menu.py:2274 sl/SL_Menu.py:2447 +#: sl/SL_Menu.py:2358 sl/SL_Menu.py:2531 msgid "No notes provided." msgstr "Keine Notizen bereitgestellt." -#: sl/SL_Menu.py:2279 sl/SL_Menu.py:2452 +#: sl/SL_Menu.py:2363 sl/SL_Menu.py:2536 msgid "A due date is required for recurring tasks." msgstr "Für wiederkehrende Aufgaben ist ein Fälligkeitsdatum erforderlich." -#: sl/SL_Menu.py:2287 +#: sl/SL_Menu.py:2371 msgid "Please enter a name." msgstr "Bitte geben Sie einen Namen ein." -#: sl/SL_Menu.py:2299 +#: sl/SL_Menu.py:2383 #, python-brace-format msgid "Task '{sub_name}' added to '{main_name}'." msgstr "Aufgabe '{sub_name}' zu '{main_name}' hinzugefügt." -#: sl/SL_Menu.py:2331 sl/SL_Menu.py:2638 +#: sl/SL_Menu.py:2415 sl/SL_Menu.py:2722 msgid "Step 2: Select Task from" msgstr "Schritt 2: Aufgabe auswählen aus" -#: sl/SL_Menu.py:2334 +#: sl/SL_Menu.py:2418 msgid "No open tasks found." msgstr "Keine offenen Aufgaben gefunden." -#: sl/SL_Menu.py:2362 +#: sl/SL_Menu.py:2446 msgid "Task not found." msgstr "Aufgabe nicht gefunden." -#: sl/SL_Menu.py:2456 +#: sl/SL_Menu.py:2540 msgid "Save Changes" msgstr "Änderungen speichern" -#: sl/SL_Menu.py:2481 +#: sl/SL_Menu.py:2565 msgid "Error: Could not update task." msgstr "Fehler: Aufgabe konnte nicht aktualisiert werden." -#: sl/SL_Menu.py:2494 +#: sl/SL_Menu.py:2578 msgid "Start Work on Task" msgstr "Arbeit an Aufgabe beginnen" -#: sl/SL_Menu.py:2509 +#: sl/SL_Menu.py:2593 #, python-brace-format msgid "No open tasks to start work on in '{name}'." msgstr "" "Keine offenen Aufgaben, an denen in „{name}“ mit der Arbeit begonnen werden " "kann." -#: sl/SL_Menu.py:2520 +#: sl/SL_Menu.py:2604 msgid "Start Work" msgstr "Arbeit beginnen" -#: sl/SL_Menu.py:2548 +#: sl/SL_Menu.py:2632 msgid "Task" msgstr "Aufgabe" -#: sl/SL_Menu.py:2549 +#: sl/SL_Menu.py:2633 msgid "Started at" msgstr "Gestartet um" -#: sl/SL_Menu.py:2550 tt/TimeTracker.py:1446 +#: sl/SL_Menu.py:2634 tt/TimeTracker.py:1454 msgid "Duration" msgstr "Dauer" -#: sl/SL_Menu.py:2564 sl/SL_Menu.py:2696 +#: sl/SL_Menu.py:2648 sl/SL_Menu.py:2780 msgid "Select Date" msgstr "Datum auswählen" -#: sl/SL_Menu.py:2565 sl/SL_Menu.py:2589 sl/SL_Menu.py:2653 sl/SL_Menu.py:2679 -#: sl/SL_Menu.py:2697 +#: sl/SL_Menu.py:2649 sl/SL_Menu.py:2673 sl/SL_Menu.py:2737 sl/SL_Menu.py:2763 +#: sl/SL_Menu.py:2781 msgid "Generate Report" msgstr "Bericht erstellen" -#: sl/SL_Menu.py:2585 +#: sl/SL_Menu.py:2669 msgid "Start Date" msgstr "Startdatum" -#: sl/SL_Menu.py:2587 +#: sl/SL_Menu.py:2671 msgid "End Date" msgstr "Enddatum" -#: sl/SL_Menu.py:2712 +#: sl/SL_Menu.py:2796 msgid "Report Result" msgstr "Berichtsergebnis" -#: sl/SL_Menu.py:2741 +#: sl/SL_Menu.py:2825 msgid "Export Report" msgstr "Bericht exportieren" @@ -2393,7 +2413,7 @@ msgstr "Ziel-Hauptprojekt „{name}“ nicht gefunden." msgid "Task '{task_name}' moved successfully." msgstr "Aufgabe „{task_name}“ wurde erfolgreich verschoben." -#: tt/TimeTracker.py:892 tt/TimeTracker.py:927 tt/TimeTracker.py:1408 +#: tt/TimeTracker.py:892 tt/TimeTracker.py:927 tt/TimeTracker.py:1416 #, python-brace-format msgid "Task '{task_name}' not found in '{main_name}'." msgstr "Aufgabe „{task_name}“ nicht in „{main_name}“ gefunden." @@ -2451,22 +2471,22 @@ msgstr "Kein Betreff" msgid "Unknown Task" msgstr "Unbekannte Aufgabe" -#: tt/TimeTracker.py:1365 +#: tt/TimeTracker.py:1373 #, python-brace-format msgid "- {name}: {hours} hours" msgstr "- {name}: {hours} Stunden" -#: tt/TimeTracker.py:1373 +#: tt/TimeTracker.py:1381 #, python-brace-format msgid "## {name} ({hours} hours)\n" msgstr "## {name} ({hours} Stunden)\n" -#: tt/TimeTracker.py:1382 +#: tt/TimeTracker.py:1390 #, python-brace-format msgid "# Daily Time Report: {date}\n" msgstr "# Tagesbericht: {date}\n" -#: tt/TimeTracker.py:1383 +#: tt/TimeTracker.py:1391 #, python-brace-format msgid "" "\n" @@ -2475,104 +2495,104 @@ msgstr "" "\n" "**Tägliche Gesamtzeit:{hours}Stunden**" -#: tt/TimeTracker.py:1387 tt/TimeTracker.py:1700 +#: tt/TimeTracker.py:1395 tt/TimeTracker.py:1708 #, python-brace-format msgid "No time tracked for {date}." msgstr "Keine Zeit für {date} erfasst." -#: tt/TimeTracker.py:1404 tt/TimeTracker.py:1499 +#: tt/TimeTracker.py:1412 tt/TimeTracker.py:1507 #, python-brace-format msgid "Main project '{name}' not found." msgstr "Hauptprojekt „{name}“ nicht gefunden." -#: tt/TimeTracker.py:1412 +#: tt/TimeTracker.py:1420 #, python-brace-format msgid "No time entries found for task '{task_name}'." msgstr "Für Aufgabe „{task_name}“ wurden keine Zeiteinträge gefunden." -#: tt/TimeTracker.py:1445 tt/TimeTracker.py:1675 +#: tt/TimeTracker.py:1453 tt/TimeTracker.py:1683 msgid "now" msgstr "jetzt" -#: tt/TimeTracker.py:1450 +#: tt/TimeTracker.py:1458 #, python-brace-format msgid "# Detailed Report for Task: {name}" msgstr "# Detaillierter Bericht für Aufgabe: {name}" -#: tt/TimeTracker.py:1451 +#: tt/TimeTracker.py:1459 #, python-brace-format msgid "Part of Main Project: {name}" msgstr "Teil des Hauptprojekts: {name}" -#: tt/TimeTracker.py:1454 +#: tt/TimeTracker.py:1462 msgid "Active (currently running)" msgstr "Aktiv (läuft gerade)" -#: tt/TimeTracker.py:1454 tt/TimeTracker.py:1551 +#: tt/TimeTracker.py:1462 tt/TimeTracker.py:1559 msgid "Inactive" msgstr "Inaktiv" -#: tt/TimeTracker.py:1455 tt/TimeTracker.py:1552 +#: tt/TimeTracker.py:1463 tt/TimeTracker.py:1560 msgid "Status" msgstr "Status" -#: tt/TimeTracker.py:1457 tt/TimeTracker.py:1554 +#: tt/TimeTracker.py:1465 tt/TimeTracker.py:1562 msgid "First entry" msgstr "Erster Eintrag" -#: tt/TimeTracker.py:1459 tt/TimeTracker.py:1556 +#: tt/TimeTracker.py:1467 tt/TimeTracker.py:1564 msgid "Last activity" msgstr "Letzte Aktivität" -#: tt/TimeTracker.py:1461 tt/TimeTracker.py:1558 +#: tt/TimeTracker.py:1469 tt/TimeTracker.py:1566 msgid "Total recorded time" msgstr "Erfasste Gesamtzeit" -#: tt/TimeTracker.py:1462 tt/TimeTracker.py:1560 +#: tt/TimeTracker.py:1470 tt/TimeTracker.py:1568 msgid "Total work sessions" msgstr "Gesamtzahl der Arbeitssitzungen" -#: tt/TimeTracker.py:1466 tt/TimeTracker.py:1564 +#: tt/TimeTracker.py:1474 tt/TimeTracker.py:1572 msgid "Average session duration" msgstr "Durchschnittliche Sitzungsdauer" -#: tt/TimeTracker.py:1469 tt/TimeTracker.py:1567 +#: tt/TimeTracker.py:1477 tt/TimeTracker.py:1575 msgid "Weekday Distribution" msgstr "Verteilung auf Wochentage" -#: tt/TimeTracker.py:1479 +#: tt/TimeTracker.py:1487 msgid "Daily Breakdown" msgstr "Tagesaufschlüsselung" -#: tt/TimeTracker.py:1548 +#: tt/TimeTracker.py:1556 #, python-brace-format msgid "# Detailed Report for Main Project: {name}" msgstr "# Detaillierter Bericht für Hauptprojekt: {name}" -#: tt/TimeTracker.py:1551 +#: tt/TimeTracker.py:1559 #, python-brace-format msgid "Active (working on '{task_name}')" msgstr "Aktiv (arbeitet an '{task_name}')" -#: tt/TimeTracker.py:1559 +#: tt/TimeTracker.py:1567 msgid "Number of tasks" msgstr "Anzahl der Aufgaben" -#: tt/TimeTracker.py:1578 +#: tt/TimeTracker.py:1586 msgid "Task Breakdown" msgstr "Aufschlüsselung nach Aufgaben" -#: tt/TimeTracker.py:1587 +#: tt/TimeTracker.py:1595 #, python-brace-format msgid "{num_sessions} sessions" msgstr "{num_sessions} Sitzungen" -#: tt/TimeTracker.py:1640 +#: tt/TimeTracker.py:1648 #, python-brace-format msgid "# Time Report: {start_date} to {end_date}\n" msgstr "# Zeitbericht: {start_date} bis {end_date}\n" -#: tt/TimeTracker.py:1641 +#: tt/TimeTracker.py:1649 #, python-brace-format msgid "" "\n" @@ -2581,12 +2601,12 @@ msgstr "" "\n" "**Gesamtzeit im Zeitraum: {total_time}**" -#: tt/TimeTracker.py:1645 +#: tt/TimeTracker.py:1653 #, python-brace-format msgid "No time tracked between {start_date} and {end_date}." msgstr "Keine Zeit zwischen {start_date} und {end_date} erfasst." -#: tt/TimeTracker.py:1661 +#: tt/TimeTracker.py:1669 #, python-brace-format msgid "# Detailed Daily Report: {date}" msgstr "# Detaillierter Tagesbericht: {date}" @@ -2599,11 +2619,6 @@ msgstr "" "Warnung: Update-Prüfung übersprungen. 'github_repo' nicht in config.json " "gefunden oder Datei ist ungültig." -#: update.py:49 -#, python-brace-format -msgid "A new version ({version}) is available." -msgstr "Eine neue Version ({version}) ist verfügbar." - #: update.py:55 msgid "Error: Download URL for the new version not found." msgstr "Fehler: Download-URL für die neue Version nicht gefunden." @@ -2633,50 +2648,54 @@ msgstr "" msgid "Error downloading the update: {error}" msgstr "Fehler beim Herunterladen des Updates: {error}" -#: update.py:108 +#: update.py:98 +msgid "Restarting application to apply the update..." +msgstr "Anwendung wird neu gestartet, um das Update zu übernehmen..." + +#: update.py:122 msgid "Creating backup of current version before update..." msgstr "Erstelle Backup der aktuellen Version vor dem Update..." -#: update.py:118 +#: update.py:132 #, python-brace-format msgid "Backup created successfully as {filename}." msgstr "Backup erfolgreich als {filename} erstellt." -#: update.py:120 +#: update.py:134 #, python-brace-format msgid "Warning: Could not create backup. Error: {error}" msgstr "Warnung: Backup konnte nicht erstellt werden. Fehler: {error}" -#: update.py:122 +#: update.py:136 msgid "Installing update..." msgstr "Update wird installiert..." -#: update.py:142 +#: update.py:156 #, python-brace-format msgid "Skipping protected file: {filename}. It will not be overwritten." msgstr "" "Geschützte Datei wird übersprungen: {filename}. Sie wird nicht überschrieben." -#: update.py:151 +#: update.py:165 msgid "Update installed successfully." msgstr "Update erfolgreich installiert." -#: update.py:153 +#: update.py:167 #, python-brace-format msgid "Error during update installation: {error}" msgstr "Fehler bei der Installation des Updates: {error}" -#: update.py:168 +#: update.py:182 #, python-brace-format msgid "Error: No previous version backup '{filename}' found." msgstr "Fehler: Kein Backup der vorherigen Version '{filename}' gefunden." -#: update.py:171 +#: update.py:185 #, python-brace-format msgid "Restoring previous version from '{filename}'..." msgstr "Stelle vorherige Version aus '{filename}' wieder her..." -#: update.py:192 +#: update.py:206 #, python-brace-format msgid "" "Skipping user data file: {filename}. It will not be overwritten during " @@ -2685,38 +2704,41 @@ msgstr "" "Überspringe Benutzerdatendatei: {filename}. Sie wird bei der " "Wiederherstellung nicht überschrieben." -#: update.py:199 +#: update.py:213 msgid "Previous version restored successfully." msgstr "Vorherige Version erfolgreich wiederhergestellt." -#: update.py:201 +#: update.py:215 msgid "Restarting application to apply changes..." msgstr "Anwendung wird neu gestartet, um die Änderungen zu übernehmen..." -#: update.py:204 +#: update.py:218 #, python-brace-format msgid "Error during restoration: {error}" msgstr "Fehler bei der Wiederherstellung: {error}" -#: update.py:205 +#: update.py:219 #, python-brace-format msgid "The backup file '{filename}' was not deleted." msgstr "Die Backup-Datei '{filename}' wurde nicht gelöscht." -#: update.py:212 +#: update.py:226 msgid "Error: Could not import TimeTracker to get the current version." msgstr "" "Fehler: TimeTracker konnte nicht importiert werden, um die aktuelle Version " "zu erhalten." -#: update.py:215 +#: update.py:229 msgid "Checking for updates..." msgstr "Suche nach Updates..." -#: update.py:222 +#: update.py:236 msgid "No updates available." msgstr "Keine Updates verfügbar." +#~ msgid "Back to Main Menu" +#~ msgstr "Zurück zum Hauptmenü" + #~ msgid "" #~ "\n" #~ "Error: Failed to install dependencies. Please install them manually " diff --git a/locale/en/LC_MESSAGES/timetracker.mo b/locale/en/LC_MESSAGES/timetracker.mo index 9b4ed39fdd5b5a9ac775e79013b6092c51365723..bced8a7e9b73c485a9854d8b26f210b6835ac3ef 100644 GIT binary patch delta 12106 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 delta 11931 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 {weeks} weeks):" msgstr "Inactive Tasks (> {weeks} weeks):" -#: sl/SL_Menu.py:1746 sl/SL_Menu.py:2107 +#: sl/SL_Menu.py:1830 sl/SL_Menu.py:2191 msgid "Last Activity" msgstr "Last Activity" -#: sl/SL_Menu.py:1805 +#: sl/SL_Menu.py:1889 #, python-brace-format msgid "" "Are you sure you want to delete {count} closed tasks? This action cannot be " @@ -1988,25 +2007,25 @@ msgstr "" "Are you sure you want to delete {count} closed tasks? This action cannot be " "undone." -#: sl/SL_Menu.py:1807 +#: sl/SL_Menu.py:1891 msgid "Show projects to delete" msgstr "Show projects to delete" -#: sl/SL_Menu.py:1811 +#: sl/SL_Menu.py:1895 msgid "Delete All" msgstr "Delete All" -#: sl/SL_Menu.py:1817 +#: sl/SL_Menu.py:1901 #, python-brace-format msgid "Successfully deleted {count} tasks." msgstr "Successfully deleted {count} tasks." -#: sl/SL_Menu.py:1843 +#: sl/SL_Menu.py:1927 #, python-brace-format msgid "No open tasks to promote in '{name}'." msgstr "No open tasks to promote in '{name}'." -#: sl/SL_Menu.py:1854 +#: sl/SL_Menu.py:1938 msgid "" "This will create a new Project with the task's name and move all time " "entries to a 'General' task within it." @@ -2014,67 +2033,67 @@ msgstr "" "This will create a new Project with the task's name and move all time " "entries to a 'General' task within it." -#: sl/SL_Menu.py:1856 +#: sl/SL_Menu.py:1940 msgid "Promote to Project" msgstr "Promote to Project" -#: sl/SL_Menu.py:1895 +#: sl/SL_Menu.py:1979 msgid "No open projects to rename." msgstr "No open projects to rename." -#: sl/SL_Menu.py:1904 sl/SL_Menu.py:1984 +#: sl/SL_Menu.py:1988 sl/SL_Menu.py:2068 msgid "New Name" msgstr "New Name" -#: sl/SL_Menu.py:1905 sl/SL_Menu.py:1985 +#: sl/SL_Menu.py:1989 sl/SL_Menu.py:2069 msgid "Rename" msgstr "Rename" -#: sl/SL_Menu.py:1909 sl/SL_Menu.py:1989 +#: sl/SL_Menu.py:1993 sl/SL_Menu.py:2073 msgid "Please enter a new name." msgstr "Please enter a new name." -#: sl/SL_Menu.py:1911 sl/SL_Menu.py:1991 +#: sl/SL_Menu.py:1995 sl/SL_Menu.py:2075 msgid "New name is the same as the old name." msgstr "New name is the same as the old name." -#: sl/SL_Menu.py:1913 +#: sl/SL_Menu.py:1997 #, python-brace-format msgid "Project '{old_name}' successfully renamed to '{new_name}'." msgstr "Project '{old_name}' successfully renamed to '{new_name}'." -#: sl/SL_Menu.py:1974 +#: sl/SL_Menu.py:2058 #, python-brace-format msgid "No open tasks to rename in '{name}'." msgstr "No open tasks to rename in '{name}'." -#: sl/SL_Menu.py:1997 +#: sl/SL_Menu.py:2081 msgid "Error: Could not rename. The new name might already exist." msgstr "Error: Could not rename. The new name might already exist." -#: sl/SL_Menu.py:2010 +#: sl/SL_Menu.py:2094 msgid "No open projects to close." msgstr "No open projects to close." -#: sl/SL_Menu.py:2023 +#: sl/SL_Menu.py:2107 #, python-brace-format msgid "Project '{name}' has been closed." msgstr "Project '{name}' has been closed." -#: sl/SL_Menu.py:2027 sl/SL_Menu.py:2057 sl/SL_Menu.py:2088 +#: sl/SL_Menu.py:2111 sl/SL_Menu.py:2141 sl/SL_Menu.py:2172 msgid "Error: Project not found." msgstr "Error: Project not found." -#: sl/SL_Menu.py:2040 +#: sl/SL_Menu.py:2124 msgid "No closed projects to reopen." msgstr "No closed projects to reopen." -#: sl/SL_Menu.py:2053 +#: sl/SL_Menu.py:2137 #, python-brace-format msgid "Project '{name}' has been reopened." msgstr "Project '{name}' has been reopened." -#: sl/SL_Menu.py:2079 +#: sl/SL_Menu.py:2163 msgid "" "This action cannot be undone. All associated tasks and time entries will be " "deleted." @@ -2082,202 +2101,202 @@ msgstr "" "This action cannot be undone. All associated tasks and time entries will be " "deleted." -#: sl/SL_Menu.py:2084 +#: sl/SL_Menu.py:2168 #, python-brace-format msgid "Project '{name}' has been deleted." msgstr "Project '{name}' has been deleted." -#: sl/SL_Menu.py:2104 +#: sl/SL_Menu.py:2188 #, python-brace-format msgid "Inactive Projects (> {weeks} weeks):" msgstr "Inactive Projects (> {weeks} weeks):" -#: sl/SL_Menu.py:2109 +#: sl/SL_Menu.py:2193 #, python-brace-format msgid "No projects found inactive for more than {weeks} weeks." msgstr "No projects found inactive for more than {weeks} weeks." -#: sl/SL_Menu.py:2118 sl/SL_Menu.py:2141 +#: sl/SL_Menu.py:2202 sl/SL_Menu.py:2225 msgid "Demote Project" msgstr "Demote Project" -#: sl/SL_Menu.py:2130 +#: sl/SL_Menu.py:2214 msgid "Select Project to Demote" msgstr "Select Project to Demote" -#: sl/SL_Menu.py:2136 +#: sl/SL_Menu.py:2220 msgid "No other projects available to demote into." msgstr "No other projects available to demote into." -#: sl/SL_Menu.py:2139 +#: sl/SL_Menu.py:2223 #, python-brace-format msgid "This will convert '{src}' into a task of '{dst}'." msgstr "This will convert '{src}' into a task of '{dst}'." -#: sl/SL_Menu.py:2164 +#: sl/SL_Menu.py:2248 msgid "Projects with only closed or no tasks:" msgstr "Projects with only closed or no tasks:" -#: sl/SL_Menu.py:2168 +#: sl/SL_Menu.py:2252 msgid "No completed projects found." msgstr "No completed projects found." -#: sl/SL_Menu.py:2177 sl/SL_Menu.py:2311 sl/SL_Menu.py:2607 +#: sl/SL_Menu.py:2261 sl/SL_Menu.py:2395 sl/SL_Menu.py:2691 msgid "Step 1: Select Project" msgstr "Step 1: Select Project" -#: sl/SL_Menu.py:2181 sl/SL_Menu.py:2499 +#: sl/SL_Menu.py:2265 sl/SL_Menu.py:2583 msgid "No open projects found. Please add one first." msgstr "No open projects found. Please add one first." -#: sl/SL_Menu.py:2186 sl/SL_Menu.py:2318 sl/SL_Menu.py:2547 +#: sl/SL_Menu.py:2270 sl/SL_Menu.py:2402 sl/SL_Menu.py:2631 msgid "Project" msgstr "Project" -#: sl/SL_Menu.py:2188 sl/SL_Menu.py:2319 sl/SL_Menu.py:2343 sl/SL_Menu.py:2619 +#: sl/SL_Menu.py:2272 sl/SL_Menu.py:2403 sl/SL_Menu.py:2427 sl/SL_Menu.py:2703 msgid "Next" msgstr "Next" -#: sl/SL_Menu.py:2203 sl/SL_Menu.py:2633 +#: sl/SL_Menu.py:2287 sl/SL_Menu.py:2717 msgid "No project selected. Please start again." msgstr "No project selected. Please start again." -#: sl/SL_Menu.py:2208 +#: sl/SL_Menu.py:2292 msgid "To Project:" msgstr "To Project:" -#: sl/SL_Menu.py:2229 +#: sl/SL_Menu.py:2313 msgid "Name of the new task" msgstr "Name of the new task" -#: sl/SL_Menu.py:2235 +#: sl/SL_Menu.py:2319 msgid "Due date" msgstr "Due date" -#: sl/SL_Menu.py:2241 sl/SL_Menu.py:2413 +#: sl/SL_Menu.py:2325 sl/SL_Menu.py:2497 msgid "Recurring" msgstr "Recurring" -#: sl/SL_Menu.py:2257 sl/SL_Menu.py:2428 +#: sl/SL_Menu.py:2341 sl/SL_Menu.py:2512 msgid "daily" msgstr "daily" -#: sl/SL_Menu.py:2257 sl/SL_Menu.py:2428 +#: sl/SL_Menu.py:2341 sl/SL_Menu.py:2512 msgid "monthly" msgstr "monthly" -#: sl/SL_Menu.py:2257 sl/SL_Menu.py:2428 +#: sl/SL_Menu.py:2341 sl/SL_Menu.py:2512 msgid "on all business days" msgstr "on all business days" -#: sl/SL_Menu.py:2257 sl/SL_Menu.py:2428 +#: sl/SL_Menu.py:2341 sl/SL_Menu.py:2512 msgid "userdefined" msgstr "userdefined" -#: sl/SL_Menu.py:2257 sl/SL_Menu.py:2428 +#: sl/SL_Menu.py:2341 sl/SL_Menu.py:2512 msgid "weekly" msgstr "weekly" -#: sl/SL_Menu.py:2261 sl/SL_Menu.py:2437 +#: sl/SL_Menu.py:2345 sl/SL_Menu.py:2521 msgid "Frequency" msgstr "Frequency" -#: sl/SL_Menu.py:2265 sl/SL_Menu.py:2440 +#: sl/SL_Menu.py:2349 sl/SL_Menu.py:2524 msgid "Days" msgstr "Days" -#: sl/SL_Menu.py:2269 sl/SL_Menu.py:2442 +#: sl/SL_Menu.py:2353 sl/SL_Menu.py:2526 msgid "Edit" msgstr "Edit" -#: sl/SL_Menu.py:2269 sl/SL_Menu.py:2442 +#: sl/SL_Menu.py:2353 sl/SL_Menu.py:2526 msgid "Preview" msgstr "Preview" -#: sl/SL_Menu.py:2274 sl/SL_Menu.py:2447 +#: sl/SL_Menu.py:2358 sl/SL_Menu.py:2531 msgid "No notes provided." msgstr "No notes provided." -#: sl/SL_Menu.py:2279 sl/SL_Menu.py:2452 +#: sl/SL_Menu.py:2363 sl/SL_Menu.py:2536 msgid "A due date is required for recurring tasks." msgstr "A due date is required for recurring tasks." -#: sl/SL_Menu.py:2287 +#: sl/SL_Menu.py:2371 msgid "Please enter a name." msgstr "Please enter a name." -#: sl/SL_Menu.py:2299 +#: sl/SL_Menu.py:2383 #, python-brace-format msgid "Task '{sub_name}' added to '{main_name}'." msgstr "Task '{sub_name}' added to '{main_name}'." -#: sl/SL_Menu.py:2331 sl/SL_Menu.py:2638 +#: sl/SL_Menu.py:2415 sl/SL_Menu.py:2722 msgid "Step 2: Select Task from" msgstr "Step 2: Select Task from" -#: sl/SL_Menu.py:2334 +#: sl/SL_Menu.py:2418 msgid "No open tasks found." msgstr "No open tasks found." -#: sl/SL_Menu.py:2362 +#: sl/SL_Menu.py:2446 msgid "Task not found." msgstr "Task not found." -#: sl/SL_Menu.py:2456 +#: sl/SL_Menu.py:2540 msgid "Save Changes" msgstr "Save Changes" -#: sl/SL_Menu.py:2481 +#: sl/SL_Menu.py:2565 msgid "Error: Could not update task." msgstr "Error: Could not update task." -#: sl/SL_Menu.py:2494 +#: sl/SL_Menu.py:2578 msgid "Start Work on Task" msgstr "Start Work on Task" -#: sl/SL_Menu.py:2509 +#: sl/SL_Menu.py:2593 #, python-brace-format msgid "No open tasks to start work on in '{name}'." msgstr "No open tasks to start work on in '{name}'." -#: sl/SL_Menu.py:2520 +#: sl/SL_Menu.py:2604 msgid "Start Work" msgstr "Start Work" -#: sl/SL_Menu.py:2548 +#: sl/SL_Menu.py:2632 msgid "Task" msgstr "Task" -#: sl/SL_Menu.py:2549 +#: sl/SL_Menu.py:2633 msgid "Started at" msgstr "Started at" -#: sl/SL_Menu.py:2550 tt/TimeTracker.py:1446 +#: sl/SL_Menu.py:2634 tt/TimeTracker.py:1454 msgid "Duration" msgstr "Duration" -#: sl/SL_Menu.py:2564 sl/SL_Menu.py:2696 +#: sl/SL_Menu.py:2648 sl/SL_Menu.py:2780 msgid "Select Date" msgstr "Select Date" -#: sl/SL_Menu.py:2565 sl/SL_Menu.py:2589 sl/SL_Menu.py:2653 sl/SL_Menu.py:2679 -#: sl/SL_Menu.py:2697 +#: sl/SL_Menu.py:2649 sl/SL_Menu.py:2673 sl/SL_Menu.py:2737 sl/SL_Menu.py:2763 +#: sl/SL_Menu.py:2781 msgid "Generate Report" msgstr "Generate Report" -#: sl/SL_Menu.py:2585 +#: sl/SL_Menu.py:2669 msgid "Start Date" msgstr "Start Date" -#: sl/SL_Menu.py:2587 +#: sl/SL_Menu.py:2671 msgid "End Date" msgstr "End Date" -#: sl/SL_Menu.py:2712 +#: sl/SL_Menu.py:2796 msgid "Report Result" msgstr "Report Result" -#: sl/SL_Menu.py:2741 +#: sl/SL_Menu.py:2825 msgid "Export Report" msgstr "Export Report" @@ -2359,7 +2378,7 @@ msgstr "Destination main project '{name}' not found." msgid "Task '{task_name}' moved successfully." msgstr "Task '{task_name}' moved successfully." -#: tt/TimeTracker.py:892 tt/TimeTracker.py:927 tt/TimeTracker.py:1408 +#: tt/TimeTracker.py:892 tt/TimeTracker.py:927 tt/TimeTracker.py:1416 #, python-brace-format msgid "Task '{task_name}' not found in '{main_name}'." msgstr "Task '{task_name}' not found in '{main_name}'." @@ -2417,22 +2436,22 @@ msgstr "No Subject" msgid "Unknown Task" msgstr "Unknown Task" -#: tt/TimeTracker.py:1365 +#: tt/TimeTracker.py:1373 #, python-brace-format msgid "- {name}: {hours} hours" msgstr "- {name}: {hours} hours" -#: tt/TimeTracker.py:1373 +#: tt/TimeTracker.py:1381 #, python-brace-format msgid "## {name} ({hours} hours)\n" msgstr "## {name} ({hours} hours)\n" -#: tt/TimeTracker.py:1382 +#: tt/TimeTracker.py:1390 #, python-brace-format msgid "# Daily Time Report: {date}\n" msgstr "# Daily Time Report: {date}\n" -#: tt/TimeTracker.py:1383 +#: tt/TimeTracker.py:1391 #, python-brace-format msgid "" "\n" @@ -2441,104 +2460,104 @@ msgstr "" "\n" "**Total Daily Time: {hours} hours**" -#: tt/TimeTracker.py:1387 tt/TimeTracker.py:1700 +#: tt/TimeTracker.py:1395 tt/TimeTracker.py:1708 #, python-brace-format msgid "No time tracked for {date}." msgstr "No time tracked for {date}." -#: tt/TimeTracker.py:1404 tt/TimeTracker.py:1499 +#: tt/TimeTracker.py:1412 tt/TimeTracker.py:1507 #, python-brace-format msgid "Main project '{name}' not found." msgstr "Main project '{name}' not found." -#: tt/TimeTracker.py:1412 +#: tt/TimeTracker.py:1420 #, python-brace-format msgid "No time entries found for task '{task_name}'." msgstr "No time entries found for task '{task_name}'." -#: tt/TimeTracker.py:1445 tt/TimeTracker.py:1675 +#: tt/TimeTracker.py:1453 tt/TimeTracker.py:1683 msgid "now" msgstr "now" -#: tt/TimeTracker.py:1450 +#: tt/TimeTracker.py:1458 #, python-brace-format msgid "# Detailed Report for Task: {name}" msgstr "# Detailed Report for Task: {name}" -#: tt/TimeTracker.py:1451 +#: tt/TimeTracker.py:1459 #, python-brace-format msgid "Part of Main Project: {name}" msgstr "Part of Main Project: {name}" -#: tt/TimeTracker.py:1454 +#: tt/TimeTracker.py:1462 msgid "Active (currently running)" msgstr "Active (currently running)" -#: tt/TimeTracker.py:1454 tt/TimeTracker.py:1551 +#: tt/TimeTracker.py:1462 tt/TimeTracker.py:1559 msgid "Inactive" msgstr "Inactive" -#: tt/TimeTracker.py:1455 tt/TimeTracker.py:1552 +#: tt/TimeTracker.py:1463 tt/TimeTracker.py:1560 msgid "Status" msgstr "Status" -#: tt/TimeTracker.py:1457 tt/TimeTracker.py:1554 +#: tt/TimeTracker.py:1465 tt/TimeTracker.py:1562 msgid "First entry" msgstr "First entry" -#: tt/TimeTracker.py:1459 tt/TimeTracker.py:1556 +#: tt/TimeTracker.py:1467 tt/TimeTracker.py:1564 msgid "Last activity" msgstr "Last activity" -#: tt/TimeTracker.py:1461 tt/TimeTracker.py:1558 +#: tt/TimeTracker.py:1469 tt/TimeTracker.py:1566 msgid "Total recorded time" msgstr "Total recorded time" -#: tt/TimeTracker.py:1462 tt/TimeTracker.py:1560 +#: tt/TimeTracker.py:1470 tt/TimeTracker.py:1568 msgid "Total work sessions" msgstr "Total work sessions" -#: tt/TimeTracker.py:1466 tt/TimeTracker.py:1564 +#: tt/TimeTracker.py:1474 tt/TimeTracker.py:1572 msgid "Average session duration" msgstr "Average session duration" -#: tt/TimeTracker.py:1469 tt/TimeTracker.py:1567 +#: tt/TimeTracker.py:1477 tt/TimeTracker.py:1575 msgid "Weekday Distribution" msgstr "Weekday Distribution" -#: tt/TimeTracker.py:1479 +#: tt/TimeTracker.py:1487 msgid "Daily Breakdown" msgstr "Daily Breakdown" -#: tt/TimeTracker.py:1548 +#: tt/TimeTracker.py:1556 #, python-brace-format msgid "# Detailed Report for Main Project: {name}" msgstr "# Detailed Report for Main Project: {name}" -#: tt/TimeTracker.py:1551 +#: tt/TimeTracker.py:1559 #, python-brace-format msgid "Active (working on '{task_name}')" msgstr "Active (working on '{task_name}')" -#: tt/TimeTracker.py:1559 +#: tt/TimeTracker.py:1567 msgid "Number of tasks" msgstr "Number of tasks" -#: tt/TimeTracker.py:1578 +#: tt/TimeTracker.py:1586 msgid "Task Breakdown" msgstr "Task Breakdown" -#: tt/TimeTracker.py:1587 +#: tt/TimeTracker.py:1595 #, python-brace-format msgid "{num_sessions} sessions" msgstr "{num_sessions} sessions" -#: tt/TimeTracker.py:1640 +#: tt/TimeTracker.py:1648 #, python-brace-format msgid "# Time Report: {start_date} to {end_date}\n" msgstr "# Time Report: {start_date} to {end_date}\n" -#: tt/TimeTracker.py:1641 +#: tt/TimeTracker.py:1649 #, python-brace-format msgid "" "\n" @@ -2547,12 +2566,12 @@ msgstr "" "\n" "**Total Time in Period: {total_time}**" -#: tt/TimeTracker.py:1645 +#: tt/TimeTracker.py:1653 #, python-brace-format msgid "No time tracked between {start_date} and {end_date}." msgstr "No time tracked between {start_date} and {end_date}." -#: tt/TimeTracker.py:1661 +#: tt/TimeTracker.py:1669 #, python-brace-format msgid "# Detailed Daily Report: {date}" msgstr "# Detailed Daily Report: {date}" @@ -2565,11 +2584,6 @@ msgstr "" "Warning: Update check skipped. 'github_repo' not found in config.json or " "file is invalid." -#: update.py:49 -#, python-brace-format -msgid "A new version ({version}) is available." -msgstr "A new version ({version}) is available." - #: update.py:55 msgid "Error: Download URL for the new version not found." msgstr "Error: Download URL for the new version not found." @@ -2597,49 +2611,53 @@ msgstr "Download complete. The update will be installed on the next start." msgid "Error downloading the update: {error}" msgstr "Error downloading the update: {error}" -#: update.py:108 +#: update.py:98 +msgid "Restarting application to apply the update..." +msgstr "Restarting application to apply the update..." + +#: update.py:122 msgid "Creating backup of current version before update..." msgstr "Creating backup of current version before update..." -#: update.py:118 +#: update.py:132 #, python-brace-format msgid "Backup created successfully as {filename}." msgstr "Backup created successfully as {filename}." -#: update.py:120 +#: update.py:134 #, python-brace-format msgid "Warning: Could not create backup. Error: {error}" msgstr "Warning: Could not create backup. Error: {error}" -#: update.py:122 +#: update.py:136 msgid "Installing update..." msgstr "Installing update..." -#: update.py:142 +#: update.py:156 #, python-brace-format msgid "Skipping protected file: {filename}. It will not be overwritten." msgstr "Skipping protected file: {filename}. It will not be overwritten." -#: update.py:151 +#: update.py:165 msgid "Update installed successfully." msgstr "Update installed successfully." -#: update.py:153 +#: update.py:167 #, python-brace-format msgid "Error during update installation: {error}" msgstr "Error during update installation: {error}" -#: update.py:168 +#: update.py:182 #, python-brace-format msgid "Error: No previous version backup '{filename}' found." msgstr "Error: No previous version backup '{filename}' found." -#: update.py:171 +#: update.py:185 #, python-brace-format msgid "Restoring previous version from '{filename}'..." msgstr "Restoring previous version from '{filename}'..." -#: update.py:192 +#: update.py:206 #, python-brace-format msgid "" "Skipping user data file: {filename}. It will not be overwritten during " @@ -2648,36 +2666,39 @@ msgstr "" "Skipping user data file: {filename}. It will not be overwritten during " "restore." -#: update.py:199 +#: update.py:213 msgid "Previous version restored successfully." msgstr "Previous version restored successfully." -#: update.py:201 +#: update.py:215 msgid "Restarting application to apply changes..." msgstr "Restarting application to apply changes..." -#: update.py:204 +#: update.py:218 #, python-brace-format msgid "Error during restoration: {error}" msgstr "Error during restoration: {error}" -#: update.py:205 +#: update.py:219 #, python-brace-format msgid "The backup file '{filename}' was not deleted." msgstr "The backup file '{filename}' was not deleted." -#: update.py:212 +#: update.py:226 msgid "Error: Could not import TimeTracker to get the current version." msgstr "Error: Could not import TimeTracker to get the current version." -#: update.py:215 +#: update.py:229 msgid "Checking for updates..." msgstr "Checking for updates..." -#: update.py:222 +#: update.py:236 msgid "No updates available." msgstr "No updates available." +#~ msgid "Back to Main Menu" +#~ msgstr "Back to Main Menu" + #~ msgid "" #~ "\n" #~ "Error: Failed to install dependencies. Please install them manually " diff --git a/locale/es/LC_MESSAGES/timetracker.mo b/locale/es/LC_MESSAGES/timetracker.mo index e6d7e1145006bb69b13a0a59db60e437578139b0..7dae6b96d45c42d66a68a78652e7c23f37a2feef 100644 GIT binary patch delta 12101 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 delta 11921 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 WTY6Ml!}NfRCF$M)8M_X&^87z$pa8l6 diff --git a/locale/es/LC_MESSAGES/timetracker.po b/locale/es/LC_MESSAGES/timetracker.po index 09aaac1..a4997b2 100644 --- a/locale/es/LC_MESSAGES/timetracker.po +++ b/locale/es/LC_MESSAGES/timetracker.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: TimeControl\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-05 09:08+0200\n" +"POT-Creation-Date: 2026-08-05 18:15+0200\n" "PO-Revision-Date: 2026-01-01 14:40+0200\n" "Last-Translator: Frank Faulstich\n" "Language-Team: Spanish\n" @@ -119,8 +119,8 @@ msgstr "" "\n" "--- Listar Proyectos Principales ---" -#: TimeTrackerCLI.py:76 TimeTrackerCLI.py:313 sl/SL_Menu.py:1880 -#: sl/SL_Menu.py:1944 +#: TimeTrackerCLI.py:76 TimeTrackerCLI.py:313 sl/SL_Menu.py:1964 +#: sl/SL_Menu.py:2028 msgid "closed" msgstr "cerrado" @@ -162,7 +162,7 @@ msgstr "Introduzca el nuevo nombre para '{name}': " msgid "Main project '{old_name}' successfully renamed to '{new_name}'." msgstr "Proyecto principal '{old_name}' renombrado a '{new_name}' con éxito." -#: TimeTrackerCLI.py:101 sl/SL_Menu.py:1917 +#: TimeTrackerCLI.py:101 sl/SL_Menu.py:2001 #, python-brace-format msgid "Error: Could not rename. The new name '{new_name}' might already exist." msgstr "" @@ -461,22 +461,22 @@ msgstr "No se encontraron proyectos principales. No se pueden enumerar tareas." msgid "Select the main project whose tasks you want to list:" msgstr "Seleccione el proyecto principal cuyas tareas desea enumerar:" -#: TimeTrackerCLI.py:305 sl/SL_Menu.py:1941 +#: TimeTrackerCLI.py:305 sl/SL_Menu.py:2025 #, python-brace-format msgid "Tasks for '{name}':" msgstr "Tareas para '{name}':" -#: TimeTrackerCLI.py:308 sl/SL_Menu.py:745 sl/SL_Menu.py:895 +#: TimeTrackerCLI.py:308 sl/SL_Menu.py:785 sl/SL_Menu.py:977 msgid "Due" msgstr "Vencimiento" -#: TimeTrackerCLI.py:309 sl/SL_Menu.py:596 sl/SL_Menu.py:616 sl/SL_Menu.py:682 -#: sl/SL_Menu.py:768 sl/SL_Menu.py:1077 sl/SL_Menu.py:2238 sl/SL_Menu.py:2409 +#: TimeTrackerCLI.py:309 sl/SL_Menu.py:636 sl/SL_Menu.py:656 sl/SL_Menu.py:722 +#: sl/SL_Menu.py:808 sl/SL_Menu.py:1161 sl/SL_Menu.py:2322 sl/SL_Menu.py:2493 msgid "Today" msgstr "hoy" -#: TimeTrackerCLI.py:317 TimeTrackerCLI.py:861 sl/SL_Menu.py:1950 -#: sl/SL_Menu.py:2642 +#: TimeTrackerCLI.py:317 TimeTrackerCLI.py:861 sl/SL_Menu.py:2034 +#: sl/SL_Menu.py:2726 #, python-brace-format msgid "No tasks found for '{name}'." msgstr "No se encontraron tareas para '{name}'." @@ -515,7 +515,7 @@ msgstr "Seleccione una tarea de '{name}' para cambiarle el nombre:" msgid "Enter the number of the task: " msgstr "Ingrese el número de la tarea:" -#: TimeTrackerCLI.py:352 sl/SL_Menu.py:1993 +#: TimeTrackerCLI.py:352 sl/SL_Menu.py:2077 #, python-brace-format msgid "Task '{old_name}' renamed to '{new_name}'." msgstr "Tarea '{old_name}' renombrada a '{new_name}'." @@ -552,7 +552,7 @@ msgid "Task '{task_name}' in '{main_name}' has been closed." msgstr "La tarea '{task_name}' en '{main_name}' se ha cerrado." #: TimeTrackerCLI.py:389 TimeTrackerCLI.py:424 TimeTrackerCLI.py:460 -#: sl/SL_Menu.py:1579 sl/SL_Menu.py:1624 sl/SL_Menu.py:1670 +#: sl/SL_Menu.py:1663 sl/SL_Menu.py:1708 sl/SL_Menu.py:1754 msgid "Error: Main project or task not found." msgstr "Error: Proyecto principal o tarea no encontrada." @@ -689,7 +689,7 @@ msgstr "" msgid " Task: {name}" msgstr "Tarea: {name}" -#: TimeTrackerCLI.py:531 sl/SL_Menu.py:1752 +#: TimeTrackerCLI.py:531 sl/SL_Menu.py:1836 #, python-brace-format msgid "No tasks found inactive for more than {weeks} weeks." msgstr "No se encontraron tareas inactivas durante más de {weeks} semanas." @@ -702,7 +702,7 @@ msgstr "" "\n" "--- Listar todas las tareas cerradas ---" -#: TimeTrackerCLI.py:543 sl/SL_Menu.py:1777 sl/SL_Menu.py:1800 +#: TimeTrackerCLI.py:543 sl/SL_Menu.py:1861 sl/SL_Menu.py:1884 msgid "No closed tasks found." msgstr "No se encontraron tareas cerradas." @@ -761,9 +761,9 @@ msgstr "" "\n" "--- Editar tarea ---" -#: TimeTrackerCLI.py:596 sl/SL_Menu.py:1547 sl/SL_Menu.py:1592 -#: sl/SL_Menu.py:1637 sl/SL_Menu.py:1683 sl/SL_Menu.py:1832 sl/SL_Menu.py:1963 -#: sl/SL_Menu.py:2122 sl/SL_Menu.py:2315 +#: TimeTrackerCLI.py:596 sl/SL_Menu.py:1631 sl/SL_Menu.py:1676 +#: sl/SL_Menu.py:1721 sl/SL_Menu.py:1767 sl/SL_Menu.py:1916 sl/SL_Menu.py:2047 +#: sl/SL_Menu.py:2206 sl/SL_Menu.py:2399 msgid "No open projects found." msgstr "No se encontraron proyectos abiertos." @@ -814,7 +814,7 @@ msgstr "" "¿Se completó esta tarea? (actual:{current}, y/n, presione Entrar para " "mantener):" -#: TimeTrackerCLI.py:639 sl/SL_Menu.py:2475 +#: TimeTrackerCLI.py:639 sl/SL_Menu.py:2559 msgid "Task updated successfully." msgstr "Tarea actualizada exitosamente." @@ -914,7 +914,7 @@ msgstr "Dejar vacío para cancelar." msgid "New Path: " msgstr "Nueva Ruta: " -#: TimeTrackerCLI.py:738 sl/SL_Menu.py:1334 +#: TimeTrackerCLI.py:738 sl/SL_Menu.py:1418 #, python-brace-format msgid "Error: The directory '{dir}' does not exist." msgstr "Error: El directorio '{dir}' no existe." @@ -927,11 +927,11 @@ msgstr "Ubicación de almacenamiento actualizada." msgid "Do you want to move the existing data to the new location? (y/n): " msgstr "¿Desea mover los datos existentes a la nueva ubicación? (s/n): " -#: TimeTrackerCLI.py:760 sl/SL_Menu.py:1344 +#: TimeTrackerCLI.py:760 sl/SL_Menu.py:1428 msgid "Data moved successfully." msgstr "Datos movidos con éxito." -#: TimeTrackerCLI.py:762 sl/SL_Menu.py:1346 +#: TimeTrackerCLI.py:762 sl/SL_Menu.py:1430 #, python-brace-format msgid "Error moving data: {error}" msgstr "Error al mover datos: {error}" @@ -1042,7 +1042,7 @@ msgstr "Introduzca la fecha de inicio (AAAA-MM-DD): " msgid "Enter the end date (YYYY-MM-DD): " msgstr "Introduzca la fecha de fin (AAAA-MM-DD): " -#: TimeTrackerCLI.py:837 sl/SL_Menu.py:2593 +#: TimeTrackerCLI.py:837 sl/SL_Menu.py:2677 msgid "Error: The start date cannot be after the end date." msgstr "Error: La fecha de inicio no puede ser posterior a la fecha de fin." @@ -1054,8 +1054,8 @@ msgstr "" "\n" "--- Informe de tarea detallado ---" -#: TimeTrackerCLI.py:847 TimeTrackerCLI.py:880 sl/SL_Menu.py:1883 -#: sl/SL_Menu.py:1930 sl/SL_Menu.py:2070 sl/SL_Menu.py:2611 sl/SL_Menu.py:2670 +#: TimeTrackerCLI.py:847 TimeTrackerCLI.py:880 sl/SL_Menu.py:1967 +#: sl/SL_Menu.py:2014 sl/SL_Menu.py:2154 sl/SL_Menu.py:2695 sl/SL_Menu.py:2754 msgid "No projects found." msgstr "No se encontraron proyectos." @@ -1201,12 +1201,12 @@ msgstr "" msgid "Select a task from '{name}':" msgstr "Seleccione una tarea de '{name}':" -#: TimeTrackerCLI.py:987 sl/SL_Menu.py:2526 +#: TimeTrackerCLI.py:987 sl/SL_Menu.py:2610 #, python-brace-format msgid "Work started on '{task_name}' in project '{main_name}'." msgstr "Trabajo iniciado en '{task_name}' en el proyecto '{main_name}'." -#: TimeTrackerCLI.py:989 sl/SL_Menu.py:2530 +#: TimeTrackerCLI.py:989 sl/SL_Menu.py:2614 msgid "Error starting work." msgstr "Error al iniciar el trabajo." @@ -1242,7 +1242,7 @@ msgstr " Iniciado a las: {date}" msgid " Duration: {duration}" msgstr " Duración: {duration}" -#: TimeTrackerCLI.py:1012 sl/SL_Menu.py:559 sl/SL_Menu.py:2552 +#: TimeTrackerCLI.py:1012 sl/SL_Menu.py:870 sl/SL_Menu.py:2636 msgid "No active work session." msgstr "No hay sesión de trabajo activa." @@ -1254,11 +1254,11 @@ msgstr "" "\n" "--- Detener Trabajo ---" -#: TimeTrackerCLI.py:1018 sl/SL_Menu.py:504 +#: TimeTrackerCLI.py:1018 sl/SL_Menu.py:594 msgid "Work session stopped successfully." msgstr "Sesión de trabajo detenida con éxito." -#: TimeTrackerCLI.py:1020 sl/SL_Menu.py:506 +#: TimeTrackerCLI.py:1020 sl/SL_Menu.py:596 msgid "No active work session to stop." msgstr "No hay ninguna sesión de trabajo activa para detener." @@ -1274,391 +1274,405 @@ msgstr "" msgid "Exiting application. Goodbye!" msgstr "Saliendo de la aplicación. ¡Adiós!" -#: sl/SL_Menu.py:399 +#: sl/SL_Menu.py:278 sl/SL_Menu.py:989 sl/SL_Menu.py:2327 sl/SL_Menu.py:2499 +msgid "Priority" +msgstr "Prioridad" + +#: sl/SL_Menu.py:450 +#, python-brace-format +msgid "Version {version}" +msgstr "Versión {version}" + +#: sl/SL_Menu.py:455 update.py:49 +#, python-brace-format +msgid "A new version ({version}) is available." +msgstr "Una nueva versión ({version}) está disponible." + +#: sl/SL_Menu.py:457 +msgid "Restart and install the update" +msgstr "Reiniciar e instalar la actualización" + +#: sl/SL_Menu.py:458 +msgid "Downloading and installing update..." +msgstr "Descargando e instalando la actualización..." + +#: sl/SL_Menu.py:489 msgid "New" msgstr "Nuevo" -#: sl/SL_Menu.py:400 +#: sl/SL_Menu.py:490 msgid "New Project" msgstr "Nuevo proyecto" -#: sl/SL_Menu.py:403 +#: sl/SL_Menu.py:493 msgid "New Task" msgstr "Nueva tarea" -#: sl/SL_Menu.py:408 +#: sl/SL_Menu.py:498 msgid "Project & Task Management" msgstr "Gestión de proyectos y tareas" -#: sl/SL_Menu.py:409 sl/SL_Menu.py:1117 +#: sl/SL_Menu.py:499 sl/SL_Menu.py:1201 msgid "Main Project Management" msgstr "Gestión de Proyectos Principales" -#: sl/SL_Menu.py:410 sl/SL_Menu.py:1133 sl/SL_Menu.py:1528 +#: sl/SL_Menu.py:500 sl/SL_Menu.py:1217 sl/SL_Menu.py:1612 msgid "Add Project" msgstr "Añadir Proyecto" -#: sl/SL_Menu.py:413 sl/SL_Menu.py:1136 sl/SL_Menu.py:1876 +#: sl/SL_Menu.py:503 sl/SL_Menu.py:1220 sl/SL_Menu.py:1960 msgid "List Projects" msgstr "Listar Proyectos" -#: sl/SL_Menu.py:416 sl/SL_Menu.py:1139 sl/SL_Menu.py:1891 +#: sl/SL_Menu.py:506 sl/SL_Menu.py:1223 sl/SL_Menu.py:1975 msgid "Rename Project" msgstr "Renombrar Proyecto" -#: sl/SL_Menu.py:419 sl/SL_Menu.py:1142 sl/SL_Menu.py:2006 sl/SL_Menu.py:2019 +#: sl/SL_Menu.py:509 sl/SL_Menu.py:1226 sl/SL_Menu.py:2090 sl/SL_Menu.py:2103 msgid "Close Project" msgstr "Cerrar Proyecto" -#: sl/SL_Menu.py:422 sl/SL_Menu.py:1145 sl/SL_Menu.py:2036 sl/SL_Menu.py:2049 +#: sl/SL_Menu.py:512 sl/SL_Menu.py:1229 sl/SL_Menu.py:2120 sl/SL_Menu.py:2133 msgid "Re-open Project" msgstr "Reabrir Proyecto" -#: sl/SL_Menu.py:425 sl/SL_Menu.py:1148 sl/SL_Menu.py:2066 sl/SL_Menu.py:2080 +#: sl/SL_Menu.py:515 sl/SL_Menu.py:1232 sl/SL_Menu.py:2150 sl/SL_Menu.py:2164 msgid "Delete Project" msgstr "Eliminar Proyecto" -#: sl/SL_Menu.py:428 sl/SL_Menu.py:1151 sl/SL_Menu.py:2097 +#: sl/SL_Menu.py:518 sl/SL_Menu.py:1235 sl/SL_Menu.py:2181 msgid "List Inactive Projects" msgstr "Listar Proyectos Inactivos" -#: sl/SL_Menu.py:431 sl/SL_Menu.py:1154 +#: sl/SL_Menu.py:521 sl/SL_Menu.py:1238 msgid "Demote Project to Task" msgstr "Degradar Proyecto a Tarea" -#: sl/SL_Menu.py:434 sl/SL_Menu.py:1157 sl/SL_Menu.py:2159 +#: sl/SL_Menu.py:524 sl/SL_Menu.py:1241 sl/SL_Menu.py:2243 msgid "List Completed Projects" msgstr "Listar Proyectos Completados" -#: sl/SL_Menu.py:438 sl/SL_Menu.py:1119 sl/SL_Menu.py:1170 +#: sl/SL_Menu.py:528 sl/SL_Menu.py:1203 sl/SL_Menu.py:1254 msgid "Task Management" msgstr "Gestión de Tareas" -#: sl/SL_Menu.py:439 sl/SL_Menu.py:1172 sl/SL_Menu.py:2177 sl/SL_Menu.py:2208 -#: sl/SL_Menu.py:2283 +#: sl/SL_Menu.py:529 sl/SL_Menu.py:1256 sl/SL_Menu.py:2261 sl/SL_Menu.py:2292 +#: sl/SL_Menu.py:2367 msgid "Add Task" msgstr "Añadir Tarea" -#: sl/SL_Menu.py:442 sl/SL_Menu.py:1175 sl/SL_Menu.py:1926 +#: sl/SL_Menu.py:532 sl/SL_Menu.py:1259 sl/SL_Menu.py:2010 msgid "List Tasks" msgstr "Listar Tareas" -#: sl/SL_Menu.py:445 sl/SL_Menu.py:1178 sl/SL_Menu.py:1959 +#: sl/SL_Menu.py:535 sl/SL_Menu.py:1262 sl/SL_Menu.py:2043 msgid "Rename Task" msgstr "Renombrar Tarea" -#: sl/SL_Menu.py:448 sl/SL_Menu.py:1181 sl/SL_Menu.py:1543 sl/SL_Menu.py:1569 -#: sl/SL_Menu.py:1748 +#: sl/SL_Menu.py:538 sl/SL_Menu.py:1265 sl/SL_Menu.py:1627 sl/SL_Menu.py:1653 +#: sl/SL_Menu.py:1832 msgid "Close Task" msgstr "Cerrar Tarea" -#: sl/SL_Menu.py:451 sl/SL_Menu.py:1184 sl/SL_Menu.py:1588 sl/SL_Menu.py:1614 +#: sl/SL_Menu.py:541 sl/SL_Menu.py:1268 sl/SL_Menu.py:1672 sl/SL_Menu.py:1698 msgid "Re-open Task" msgstr "Reabrir Tarea" -#: sl/SL_Menu.py:454 sl/SL_Menu.py:1187 sl/SL_Menu.py:1633 sl/SL_Menu.py:1660 +#: sl/SL_Menu.py:544 sl/SL_Menu.py:1271 sl/SL_Menu.py:1717 sl/SL_Menu.py:1744 msgid "Delete Task" msgstr "Eliminar Tarea" -#: sl/SL_Menu.py:457 sl/SL_Menu.py:1190 sl/SL_Menu.py:1679 sl/SL_Menu.py:1715 +#: sl/SL_Menu.py:547 sl/SL_Menu.py:1274 sl/SL_Menu.py:1763 sl/SL_Menu.py:1799 msgid "Move Task" msgstr "Mover Tarea" -#: sl/SL_Menu.py:460 sl/SL_Menu.py:1193 sl/SL_Menu.py:1734 +#: sl/SL_Menu.py:550 sl/SL_Menu.py:1277 sl/SL_Menu.py:1818 msgid "List Inactive Tasks" msgstr "Listar Tareas Inactivas" -#: sl/SL_Menu.py:463 sl/SL_Menu.py:1196 sl/SL_Menu.py:1761 +#: sl/SL_Menu.py:553 sl/SL_Menu.py:1280 sl/SL_Menu.py:1845 msgid "List All Closed Tasks" msgstr "Listar Todas las Tareas Cerradas" -#: sl/SL_Menu.py:466 sl/SL_Menu.py:675 sl/SL_Menu.py:761 sl/SL_Menu.py:929 -#: sl/SL_Menu.py:1199 sl/SL_Menu.py:2311 sl/SL_Menu.py:2331 sl/SL_Menu.py:2366 +#: sl/SL_Menu.py:556 sl/SL_Menu.py:715 sl/SL_Menu.py:801 sl/SL_Menu.py:1011 +#: sl/SL_Menu.py:1283 sl/SL_Menu.py:2395 sl/SL_Menu.py:2415 sl/SL_Menu.py:2450 msgid "Edit Task" msgstr "Editar tarea" -#: sl/SL_Menu.py:469 sl/SL_Menu.py:1202 sl/SL_Menu.py:1786 +#: sl/SL_Menu.py:559 sl/SL_Menu.py:1286 sl/SL_Menu.py:1870 msgid "Delete All Closed Tasks" msgstr "Eliminar Todas las Tareas Cerradas" -#: sl/SL_Menu.py:472 sl/SL_Menu.py:1205 sl/SL_Menu.py:1828 +#: sl/SL_Menu.py:562 sl/SL_Menu.py:1289 sl/SL_Menu.py:1912 msgid "Promote Task to Project" msgstr "Promover Tarea a Proyecto" -#: sl/SL_Menu.py:477 +#: sl/SL_Menu.py:567 msgid "Today View" msgstr "Vista de hoy" -#: sl/SL_Menu.py:482 sl/SL_Menu.py:591 +#: sl/SL_Menu.py:572 sl/SL_Menu.py:631 msgid "Task Planning" msgstr "Planificación de tareas" -#: sl/SL_Menu.py:487 sl/SL_Menu.py:962 +#: sl/SL_Menu.py:577 sl/SL_Menu.py:1046 msgid "E-Mail Task Assignment" msgstr "Asignación de tareas por correo" -#: sl/SL_Menu.py:492 sl/SL_Menu.py:671 sl/SL_Menu.py:757 sl/SL_Menu.py:925 +#: sl/SL_Menu.py:582 sl/SL_Menu.py:711 sl/SL_Menu.py:797 sl/SL_Menu.py:1007 msgid "Start work on task" msgstr "Iniciar trabajo en tarea" -#: sl/SL_Menu.py:497 +#: sl/SL_Menu.py:587 msgid "Show current work" msgstr "Mostrar trabajo actual" -#: sl/SL_Menu.py:502 +#: sl/SL_Menu.py:592 msgid "Stop current work" msgstr "Detener trabajo actual" -#: sl/SL_Menu.py:510 sl/SL_Menu.py:1218 +#: sl/SL_Menu.py:600 sl/SL_Menu.py:1302 msgid "Reporting" msgstr "Informes" -#: sl/SL_Menu.py:511 sl/SL_Menu.py:1221 +#: sl/SL_Menu.py:601 sl/SL_Menu.py:1305 msgid "Daily Report (Today)" msgstr "Informe Diario (Hoy)" -#: sl/SL_Menu.py:516 sl/SL_Menu.py:1227 sl/SL_Menu.py:2561 +#: sl/SL_Menu.py:606 sl/SL_Menu.py:1311 sl/SL_Menu.py:2645 msgid "Daily Report (Specific Day)" msgstr "Informe Diario (Día Específico)" -#: sl/SL_Menu.py:519 sl/SL_Menu.py:1230 sl/SL_Menu.py:2580 +#: sl/SL_Menu.py:609 sl/SL_Menu.py:1314 sl/SL_Menu.py:2664 msgid "Date Range Report" msgstr "Informe por Rango de Fechas" -#: sl/SL_Menu.py:522 sl/SL_Menu.py:1233 sl/SL_Menu.py:2607 sl/SL_Menu.py:2638 +#: sl/SL_Menu.py:612 sl/SL_Menu.py:1317 sl/SL_Menu.py:2691 sl/SL_Menu.py:2722 msgid "Detailed Task Report" msgstr "Informe Detallado de Tarea" -#: sl/SL_Menu.py:525 sl/SL_Menu.py:1236 sl/SL_Menu.py:2666 +#: sl/SL_Menu.py:615 sl/SL_Menu.py:1320 sl/SL_Menu.py:2750 msgid "Detailed Project Report" msgstr "Informe Detallado de Proyecto" -#: sl/SL_Menu.py:528 sl/SL_Menu.py:1239 sl/SL_Menu.py:2693 +#: sl/SL_Menu.py:618 sl/SL_Menu.py:1323 sl/SL_Menu.py:2777 msgid "Detailed Daily Report" msgstr "Informe Diario Detallado" -#: sl/SL_Menu.py:533 sl/SL_Menu.py:1256 +#: sl/SL_Menu.py:623 sl/SL_Menu.py:1340 msgid "Settings" msgstr "Configuración" -#: sl/SL_Menu.py:557 sl/SL_Menu.py:2539 -msgid "Current Active Work" -msgstr "Trabajo Activo Actual" - -#: sl/SL_Menu.py:562 sl/SL_Menu.py:695 sl/SL_Menu.py:781 sl/SL_Menu.py:936 -#: sl/SL_Menu.py:2411 -msgid "Done" -msgstr "Hecho" - -#: sl/SL_Menu.py:576 -msgid "Edit current task" -msgstr "Editar tarea actual" - -#: sl/SL_Menu.py:584 -msgid "Exit" -msgstr "Salir" - -#: sl/SL_Menu.py:597 sl/SL_Menu.py:617 +#: sl/SL_Menu.py:637 sl/SL_Menu.py:657 msgid "Tomorrow" msgstr "Mañana" -#: sl/SL_Menu.py:598 sl/SL_Menu.py:618 +#: sl/SL_Menu.py:638 sl/SL_Menu.py:658 msgid "Weekly overview" msgstr "Resumen semanal" -#: sl/SL_Menu.py:599 sl/SL_Menu.py:619 +#: sl/SL_Menu.py:639 sl/SL_Menu.py:659 msgid "Overdue tasks" msgstr "Tareas vencidas" -#: sl/SL_Menu.py:600 sl/SL_Menu.py:620 +#: sl/SL_Menu.py:640 sl/SL_Menu.py:660 msgid "Unplanned tasks" msgstr "Tareas no planificadas" -#: sl/SL_Menu.py:601 +#: sl/SL_Menu.py:641 msgid "All" msgstr "Todo" -#: sl/SL_Menu.py:608 +#: sl/SL_Menu.py:648 msgid "Filter" msgstr "Filtro" -#: sl/SL_Menu.py:627 +#: sl/SL_Menu.py:667 msgid "Tasks" msgstr "Tareas" -#: sl/SL_Menu.py:634 tt/TimeTracker.py:1471 tt/TimeTracker.py:1569 +#: sl/SL_Menu.py:674 tt/TimeTracker.py:1479 tt/TimeTracker.py:1577 msgid "Friday" msgstr "Viernes" -#: sl/SL_Menu.py:634 tt/TimeTracker.py:1471 tt/TimeTracker.py:1569 +#: sl/SL_Menu.py:674 tt/TimeTracker.py:1479 tt/TimeTracker.py:1577 msgid "Monday" msgstr "Lunes" -#: sl/SL_Menu.py:634 tt/TimeTracker.py:1471 tt/TimeTracker.py:1569 +#: sl/SL_Menu.py:674 tt/TimeTracker.py:1479 tt/TimeTracker.py:1577 msgid "Saturday" msgstr "Sábado" -#: sl/SL_Menu.py:634 tt/TimeTracker.py:1471 tt/TimeTracker.py:1569 +#: sl/SL_Menu.py:674 tt/TimeTracker.py:1479 tt/TimeTracker.py:1577 msgid "Sunday" msgstr "Domingo" -#: sl/SL_Menu.py:634 tt/TimeTracker.py:1471 tt/TimeTracker.py:1569 +#: sl/SL_Menu.py:674 tt/TimeTracker.py:1479 tt/TimeTracker.py:1577 msgid "Thursday" msgstr "Jueves" -#: sl/SL_Menu.py:634 tt/TimeTracker.py:1471 tt/TimeTracker.py:1569 +#: sl/SL_Menu.py:674 tt/TimeTracker.py:1479 tt/TimeTracker.py:1577 msgid "Tuesday" msgstr "Martes" -#: sl/SL_Menu.py:634 tt/TimeTracker.py:1471 tt/TimeTracker.py:1569 +#: sl/SL_Menu.py:674 tt/TimeTracker.py:1479 tt/TimeTracker.py:1577 msgid "Wednesday" msgstr "Miércoles" -#: sl/SL_Menu.py:796 +#: sl/SL_Menu.py:735 sl/SL_Menu.py:821 sl/SL_Menu.py:873 sl/SL_Menu.py:1018 +#: sl/SL_Menu.py:2495 +msgid "Done" +msgstr "Hecho" + +#: sl/SL_Menu.py:836 msgid "No tasks found." msgstr "No Tareas encontradas." -#: sl/SL_Menu.py:798 sl/SL_Menu.py:955 sl/SL_Menu.py:1106 sl/SL_Menu.py:1163 -#: sl/SL_Menu.py:1211 sl/SL_Menu.py:1515 sl/SL_Menu.py:1548 sl/SL_Menu.py:1559 -#: sl/SL_Menu.py:1593 sl/SL_Menu.py:1604 sl/SL_Menu.py:1638 sl/SL_Menu.py:1649 -#: sl/SL_Menu.py:1684 sl/SL_Menu.py:1695 sl/SL_Menu.py:1703 sl/SL_Menu.py:1754 -#: sl/SL_Menu.py:1779 sl/SL_Menu.py:1801 sl/SL_Menu.py:1833 sl/SL_Menu.py:1844 -#: sl/SL_Menu.py:1884 sl/SL_Menu.py:1896 sl/SL_Menu.py:1931 sl/SL_Menu.py:1952 -#: sl/SL_Menu.py:1964 sl/SL_Menu.py:1975 sl/SL_Menu.py:2011 sl/SL_Menu.py:2041 -#: sl/SL_Menu.py:2071 sl/SL_Menu.py:2111 sl/SL_Menu.py:2123 sl/SL_Menu.py:2170 -#: sl/SL_Menu.py:2182 sl/SL_Menu.py:2316 sl/SL_Menu.py:2335 sl/SL_Menu.py:2348 -#: sl/SL_Menu.py:2363 sl/SL_Menu.py:2500 sl/SL_Menu.py:2510 sl/SL_Menu.py:2554 -#: sl/SL_Menu.py:2573 sl/SL_Menu.py:2600 sl/SL_Menu.py:2612 sl/SL_Menu.py:2624 -#: sl/SL_Menu.py:2643 sl/SL_Menu.py:2659 sl/SL_Menu.py:2671 sl/SL_Menu.py:2686 -#: sl/SL_Menu.py:2705 sl/SL_Menu.py:2746 sl/SL_Menu.py:2761 +#: sl/SL_Menu.py:838 sl/SL_Menu.py:1190 sl/SL_Menu.py:1208 sl/SL_Menu.py:1247 +#: sl/SL_Menu.py:1295 sl/SL_Menu.py:1329 sl/SL_Menu.py:1599 sl/SL_Menu.py:1632 +#: sl/SL_Menu.py:1643 sl/SL_Menu.py:1677 sl/SL_Menu.py:1688 sl/SL_Menu.py:1722 +#: sl/SL_Menu.py:1733 sl/SL_Menu.py:1768 sl/SL_Menu.py:1779 sl/SL_Menu.py:1787 +#: sl/SL_Menu.py:1838 sl/SL_Menu.py:1863 sl/SL_Menu.py:1885 sl/SL_Menu.py:1917 +#: sl/SL_Menu.py:1928 sl/SL_Menu.py:1968 sl/SL_Menu.py:1980 sl/SL_Menu.py:2015 +#: sl/SL_Menu.py:2036 sl/SL_Menu.py:2048 sl/SL_Menu.py:2059 sl/SL_Menu.py:2095 +#: sl/SL_Menu.py:2125 sl/SL_Menu.py:2155 sl/SL_Menu.py:2195 sl/SL_Menu.py:2207 +#: sl/SL_Menu.py:2254 sl/SL_Menu.py:2266 sl/SL_Menu.py:2400 sl/SL_Menu.py:2419 +#: sl/SL_Menu.py:2432 sl/SL_Menu.py:2447 sl/SL_Menu.py:2584 sl/SL_Menu.py:2594 +#: sl/SL_Menu.py:2638 sl/SL_Menu.py:2657 sl/SL_Menu.py:2684 sl/SL_Menu.py:2696 +#: sl/SL_Menu.py:2708 sl/SL_Menu.py:2727 sl/SL_Menu.py:2743 sl/SL_Menu.py:2755 +#: sl/SL_Menu.py:2770 sl/SL_Menu.py:2789 sl/SL_Menu.py:2830 sl/SL_Menu.py:2845 msgid "Back" msgstr "Atrás" -#: sl/SL_Menu.py:805 +#: sl/SL_Menu.py:849 msgid "Today's Tasks" msgstr "Tareas de hoy" -#: sl/SL_Menu.py:826 +#: sl/SL_Menu.py:868 sl/SL_Menu.py:2623 +msgid "Current Active Work" +msgstr "Trabajo Activo Actual" + +#: sl/SL_Menu.py:887 +msgid "Edit current task" +msgstr "Editar tarea actual" + +#: sl/SL_Menu.py:908 msgid "Show only open tasks" msgstr "Mostrar solo tareas abiertas" -#: sl/SL_Menu.py:838 +#: sl/SL_Menu.py:920 msgid "Sort by priority" msgstr "Ordenar por prioridad" -#: sl/SL_Menu.py:907 sl/SL_Menu.py:2243 sl/SL_Menu.py:2415 -msgid "Priority" -msgstr "Prioridad" - -#: sl/SL_Menu.py:910 sl/SL_Menu.py:2243 sl/SL_Menu.py:2415 +#: sl/SL_Menu.py:992 sl/SL_Menu.py:2327 sl/SL_Menu.py:2499 msgid "0 (lowest) to 9 (highest)" msgstr "0 (la más baja) a 9 (la más alta)" -#: sl/SL_Menu.py:951 +#: sl/SL_Menu.py:1033 msgid "No open tasks for today." msgstr "No hay tareas abiertas para hoy." -#: sl/SL_Menu.py:953 +#: sl/SL_Menu.py:1035 msgid "No tasks for today." msgstr "No hay tareas para hoy." -#: sl/SL_Menu.py:968 +#: sl/SL_Menu.py:1039 +msgid "Exit" +msgstr "Salir" + +#: sl/SL_Menu.py:1052 msgid "Fetching emails..." msgstr "Recuperando correos electrónicos..." -#: sl/SL_Menu.py:971 +#: sl/SL_Menu.py:1055 #, python-brace-format msgid "Error fetching emails: {error}" msgstr "Error al recuperar correos: {error}" -#: sl/SL_Menu.py:974 +#: sl/SL_Menu.py:1058 #, python-brace-format msgid "{count} new tasks created from emails." msgstr "{count} nuevas tareas creadas desde correos." -#: sl/SL_Menu.py:976 +#: sl/SL_Menu.py:1060 msgid "No new emails found." msgstr "No se encontraron correos nuevos." -#: sl/SL_Menu.py:1001 +#: sl/SL_Menu.py:1085 #, python-brace-format msgid "{remaining} of {total} emails still to process" msgstr "{remaining} de {total} correos electrónicos por procesar" -#: sl/SL_Menu.py:1005 +#: sl/SL_Menu.py:1089 msgid "No unassigned email tasks available." msgstr "No hay tareas de correo sin asignar disponibles." -#: sl/SL_Menu.py:1017 +#: sl/SL_Menu.py:1101 msgid "Assign Project" msgstr "Asignar proyecto" -#: sl/SL_Menu.py:1028 +#: sl/SL_Menu.py:1112 msgid "Are you sure you want to delete this task?" msgstr "¿Está seguro de que desea eliminar esta tarea?" -#: sl/SL_Menu.py:1031 +#: sl/SL_Menu.py:1115 msgid "Yes, delete" msgstr "Sí, eliminar" -#: sl/SL_Menu.py:1036 +#: sl/SL_Menu.py:1120 msgid "No, cancel" msgstr "No, cancelar" -#: sl/SL_Menu.py:1043 +#: sl/SL_Menu.py:1127 msgid "Delete" msgstr "Eliminar" -#: sl/SL_Menu.py:1047 +#: sl/SL_Menu.py:1131 msgid "Edit Details" msgstr "Editar detalles" -#: sl/SL_Menu.py:1055 sl/SL_Menu.py:2395 +#: sl/SL_Menu.py:1139 sl/SL_Menu.py:2479 msgid "Task Name" msgstr "Nombre de la tarea" -#: sl/SL_Menu.py:1064 sl/SL_Menu.py:2399 +#: sl/SL_Menu.py:1148 sl/SL_Menu.py:2483 msgid "Due Date" msgstr "Fecha de vencimiento" -#: sl/SL_Menu.py:1072 sl/SL_Menu.py:2403 +#: sl/SL_Menu.py:1156 sl/SL_Menu.py:2487 msgid "Clear" msgstr "Limpiar" -#: sl/SL_Menu.py:1079 sl/SL_Menu.py:2271 sl/SL_Menu.py:2444 +#: sl/SL_Menu.py:1163 sl/SL_Menu.py:2355 sl/SL_Menu.py:2528 msgid "Notes (Markdown)" msgstr "Notas (Markdown)" -#: sl/SL_Menu.py:1098 +#: sl/SL_Menu.py:1182 msgid "Task details updated successfully." msgstr "Detalles de la tarea actualizados con éxito." -#: sl/SL_Menu.py:1104 +#: sl/SL_Menu.py:1188 msgid "Error updating task details." msgstr "Error al actualizar los detalles de la tarea." -#: sl/SL_Menu.py:1115 sl/SL_Menu.py:1131 +#: sl/SL_Menu.py:1199 sl/SL_Menu.py:1215 msgid "Project Management" msgstr "Gestión de Proyectos" -#: sl/SL_Menu.py:1124 sl/SL_Menu.py:1245 -msgid "Back to Main Menu" -msgstr "Volver al Menú Principal" - -#: sl/SL_Menu.py:1259 +#: sl/SL_Menu.py:1343 msgid "Change Language" msgstr "Cambiar idioma" -#: sl/SL_Menu.py:1277 +#: sl/SL_Menu.py:1361 msgid "Select Language" msgstr "Seleccionar idioma" -#: sl/SL_Menu.py:1278 sl/SL_Menu.py:1318 sl/SL_Menu.py:1359 sl/SL_Menu.py:1372 -#: sl/SL_Menu.py:1392 sl/SL_Menu.py:1426 sl/SL_Menu.py:1449 sl/SL_Menu.py:1504 +#: sl/SL_Menu.py:1362 sl/SL_Menu.py:1402 sl/SL_Menu.py:1443 sl/SL_Menu.py:1456 +#: sl/SL_Menu.py:1476 sl/SL_Menu.py:1510 sl/SL_Menu.py:1533 sl/SL_Menu.py:1588 msgid "Save" msgstr "Guardar" -#: sl/SL_Menu.py:1284 +#: sl/SL_Menu.py:1368 msgid "" "Language changed. Please restart the application for the changes to take " "effect." @@ -1666,23 +1680,23 @@ msgstr "" "Idioma cambiado. Por favor, reinicie la aplicación para que los cambios " "surtan efecto." -#: sl/SL_Menu.py:1287 +#: sl/SL_Menu.py:1371 msgid "Restore Previous Version" msgstr "Restaurar versión anterior" -#: sl/SL_Menu.py:1290 +#: sl/SL_Menu.py:1374 msgid "The 'update' module is not available. This feature is disabled." msgstr "" "El módulo 'update' no está disponible. Esta función está deshabilitada." -#: sl/SL_Menu.py:1292 +#: sl/SL_Menu.py:1376 #, python-brace-format msgid "No previous version backup '{filename}' found." msgstr "" "No se encontró ninguna copia de seguridad de la versión anterior " "'{filename}'." -#: sl/SL_Menu.py:1294 +#: sl/SL_Menu.py:1378 msgid "" "This will restore the application to the previously backed-up version. The " "application will then restart. You may need to manually refresh your browser " @@ -1692,35 +1706,35 @@ msgstr "" "aplicación se reiniciará. Es posible que deba actualizar manualmente su " "navegador si no se vuelve a conectar automáticamente." -#: sl/SL_Menu.py:1295 +#: sl/SL_Menu.py:1379 msgid "Restore and Restart" msgstr "Restaurar y reiniciar" -#: sl/SL_Menu.py:1296 +#: sl/SL_Menu.py:1380 msgid "Restoring and restarting..." msgstr "Restaurando y reiniciando..." -#: sl/SL_Menu.py:1299 +#: sl/SL_Menu.py:1383 msgid "Restore complete. Please restart the application." msgstr "Restauración completa. Reinicie la aplicación." -#: sl/SL_Menu.py:1301 +#: sl/SL_Menu.py:1385 msgid "Change Data Storage Location" msgstr "Cambiar ubicación de almacenamiento de datos" -#: sl/SL_Menu.py:1303 +#: sl/SL_Menu.py:1387 msgid "Current data file" msgstr "Archivo de datos actual" -#: sl/SL_Menu.py:1306 +#: sl/SL_Menu.py:1390 msgid "New Path for data file" msgstr "Nueva ruta para el archivo de datos" -#: sl/SL_Menu.py:1312 +#: sl/SL_Menu.py:1396 msgid "Move existing data to the new location" msgstr "Mover datos existentes a la nueva ubicación" -#: sl/SL_Menu.py:1315 +#: sl/SL_Menu.py:1399 msgid "" "If unchecked, the old data file will remain, and a new empty one might be " "created at the new location on restart." @@ -1728,11 +1742,11 @@ msgstr "" "Si no se marca, el archivo de datos antiguo permanecerá y se podría crear " "uno nuevo vacío en la nueva ubicación al reiniciar." -#: sl/SL_Menu.py:1322 +#: sl/SL_Menu.py:1406 msgid "Please enter a new path." msgstr "Por favor ingrese una nueva ruta." -#: sl/SL_Menu.py:1330 +#: sl/SL_Menu.py:1414 msgid "" "Error: For security, the data file must be located within the application " "directory." @@ -1740,7 +1754,7 @@ msgstr "" "Error: Por seguridad, el archivo de datos debe estar ubicado dentro del " "directorio de la aplicación." -#: sl/SL_Menu.py:1339 +#: sl/SL_Menu.py:1423 msgid "" "Storage location updated. Please restart the application for the changes to " "take effect." @@ -1748,80 +1762,80 @@ msgstr "" "Ubicación de almacenamiento actualizada. Por favor, reinicie la aplicación " "para que los cambios surtan efecto." -#: sl/SL_Menu.py:1353 +#: sl/SL_Menu.py:1437 msgid "Report Format" msgstr "Formato de informe" -#: sl/SL_Menu.py:1358 +#: sl/SL_Menu.py:1442 msgid "Select Format" msgstr "Seleccionar formato" -#: sl/SL_Menu.py:1363 +#: sl/SL_Menu.py:1447 msgid "Report format updated." msgstr "Formato de informe actualizado." -#: sl/SL_Menu.py:1366 +#: sl/SL_Menu.py:1450 msgid "Streamlit Port Settings" msgstr "Configuración del puerto Streamlit" -#: sl/SL_Menu.py:1368 +#: sl/SL_Menu.py:1452 msgid "Current Streamlit Port" msgstr "Puerto actual de Streamlit" -#: sl/SL_Menu.py:1371 +#: sl/SL_Menu.py:1455 msgid "New Port" msgstr "Nuevo puerto" -#: sl/SL_Menu.py:1376 +#: sl/SL_Menu.py:1460 #, python-brace-format msgid "Port updated to {port}. Please restart Streamlit." msgstr "Puerto actualizado a {port}. Por favor, reinicie Streamlit." -#: sl/SL_Menu.py:1379 +#: sl/SL_Menu.py:1463 msgid "Email Settings" msgstr "Configuración de correo" -#: sl/SL_Menu.py:1385 +#: sl/SL_Menu.py:1469 msgid "Enable email import" msgstr "Activar importación de correo" -#: sl/SL_Menu.py:1386 +#: sl/SL_Menu.py:1470 msgid "IMAP Server" msgstr "Servidor IMAP" -#: sl/SL_Menu.py:1387 +#: sl/SL_Menu.py:1471 msgid "Port" msgstr "Puerto" -#: sl/SL_Menu.py:1388 +#: sl/SL_Menu.py:1472 msgid "Username" msgstr "Usuario" -#: sl/SL_Menu.py:1389 +#: sl/SL_Menu.py:1473 msgid "Password" msgstr "Contraseña" -#: sl/SL_Menu.py:1390 +#: sl/SL_Menu.py:1474 msgid "Use SSL" msgstr "Usar SSL" -#: sl/SL_Menu.py:1403 +#: sl/SL_Menu.py:1487 msgid "Email settings saved." msgstr "Configuración de correo guardada." -#: sl/SL_Menu.py:1406 +#: sl/SL_Menu.py:1490 msgid "Change CSS Style" msgstr "Cambiar estilo CSS" -#: sl/SL_Menu.py:1408 +#: sl/SL_Menu.py:1492 msgid "Current CSS file" msgstr "Archivo CSS actual" -#: sl/SL_Menu.py:1425 +#: sl/SL_Menu.py:1509 msgid "Select CSS File" msgstr "Seleccionar archivo CSS" -#: sl/SL_Menu.py:1431 +#: sl/SL_Menu.py:1515 msgid "" "CSS style updated. Please restart the application for the changes to take " "effect." @@ -1829,23 +1843,23 @@ msgstr "" "Estilo CSS actualizado. Por favor, reinicie la aplicación para que los " "cambios surtan efecto." -#: sl/SL_Menu.py:1434 +#: sl/SL_Menu.py:1518 msgid "Change View Mode" msgstr "Cambiar modo de vista" -#: sl/SL_Menu.py:1438 +#: sl/SL_Menu.py:1522 msgid "App Window (Webview)" msgstr "Ventana de aplicación (vista web)" -#: sl/SL_Menu.py:1438 +#: sl/SL_Menu.py:1522 msgid "System Browser" msgstr "Navegador del sistema" -#: sl/SL_Menu.py:1448 +#: sl/SL_Menu.py:1532 msgid "Select View Mode" msgstr "Seleccionar modo de visualización" -#: sl/SL_Menu.py:1455 +#: sl/SL_Menu.py:1539 msgid "" "View mode updated. Please restart the application for the changes to take " "effect." @@ -1853,155 +1867,161 @@ msgstr "" "Modo de visualización actualizado. Reinicie la aplicación para que los " "cambios surtan efecto." -#: sl/SL_Menu.py:1458 +#: sl/SL_Menu.py:1542 msgid "MCP Server Settings" msgstr "Configuración del servidor MCP" -#: sl/SL_Menu.py:1460 +#: sl/SL_Menu.py:1544 msgid "HTTP (Streamable HTTP)" msgstr "HTTP (Streamable HTTP)" -#: sl/SL_Menu.py:1461 +#: sl/SL_Menu.py:1545 msgid "stdio (recommended for Claude Desktop)" msgstr "stdio (recomendado para Claude Desktop)" -#: sl/SL_Menu.py:1475 +#: sl/SL_Menu.py:1559 msgid "Transport" msgstr "Transporte" -#: sl/SL_Menu.py:1486 +#: sl/SL_Menu.py:1570 msgid "Enable MCP server" msgstr "Activar servidor MCP" -#: sl/SL_Menu.py:1489 +#: sl/SL_Menu.py:1573 msgid "" "Not used with stdio - the MCP client starts and stops the server itself." -msgstr "No se usa con stdio: el cliente MCP inicia y detiene el servidor por sí mismo." +msgstr "" +"No se usa con stdio: el cliente MCP inicia y detiene el servidor por sí " +"mismo." -#: sl/SL_Menu.py:1492 +#: sl/SL_Menu.py:1576 msgid "Port (HTTP only)" msgstr "Puerto (solo HTTP)" -#: sl/SL_Menu.py:1499 +#: sl/SL_Menu.py:1583 msgid "" "With stdio, the app does not start the MCP server itself - the MCP client " "(e.g. Claude Desktop) launches it directly, and the port is ignored." -msgstr "Con stdio, la aplicación no inicia el servidor MCP por sí misma: el cliente MCP (p. ej. Claude Desktop) lo inicia directamente y el puerto se ignora." +msgstr "" +"Con stdio, la aplicación no inicia el servidor MCP por sí misma: el cliente " +"MCP (p. ej. Claude Desktop) lo inicia directamente y el puerto se ignora." -#: sl/SL_Menu.py:1510 +#: sl/SL_Menu.py:1594 msgid "" "MCP server settings saved. Please restart the application for the changes to " "take effect." -msgstr "Configuración del servidor MCP guardada. Por favor, reinicie la aplicación para que los cambios surtan efecto." +msgstr "" +"Configuración del servidor MCP guardada. Por favor, reinicie la aplicación " +"para que los cambios surtan efecto." -#: sl/SL_Menu.py:1524 +#: sl/SL_Menu.py:1608 msgid "Add New Project" msgstr "Agregar nuevo proyecto" -#: sl/SL_Menu.py:1527 +#: sl/SL_Menu.py:1611 msgid "Name of the project" msgstr "Nombre del proyecto" -#: sl/SL_Menu.py:1531 +#: sl/SL_Menu.py:1615 #, python-brace-format msgid "Project '{name}' added." msgstr "Proyecto '{name}' agregado." -#: sl/SL_Menu.py:1535 sl/SL_Menu.py:1581 sl/SL_Menu.py:1626 sl/SL_Menu.py:1672 -#: sl/SL_Menu.py:1727 sl/SL_Menu.py:1821 sl/SL_Menu.py:1869 sl/SL_Menu.py:1919 -#: sl/SL_Menu.py:1999 sl/SL_Menu.py:2029 sl/SL_Menu.py:2059 sl/SL_Menu.py:2090 -#: sl/SL_Menu.py:2152 sl/SL_Menu.py:2192 sl/SL_Menu.py:2304 sl/SL_Menu.py:2323 -#: sl/SL_Menu.py:2484 sl/SL_Menu.py:2532 +#: sl/SL_Menu.py:1619 sl/SL_Menu.py:1665 sl/SL_Menu.py:1710 sl/SL_Menu.py:1756 +#: sl/SL_Menu.py:1811 sl/SL_Menu.py:1905 sl/SL_Menu.py:1953 sl/SL_Menu.py:2003 +#: sl/SL_Menu.py:2083 sl/SL_Menu.py:2113 sl/SL_Menu.py:2143 sl/SL_Menu.py:2174 +#: sl/SL_Menu.py:2236 sl/SL_Menu.py:2276 sl/SL_Menu.py:2388 sl/SL_Menu.py:2407 +#: sl/SL_Menu.py:2568 sl/SL_Menu.py:2616 msgid "Cancel" msgstr "Cancelar" -#: sl/SL_Menu.py:1553 sl/SL_Menu.py:1598 sl/SL_Menu.py:1643 sl/SL_Menu.py:1838 -#: sl/SL_Menu.py:1901 sl/SL_Menu.py:1936 sl/SL_Menu.py:1969 sl/SL_Menu.py:2018 -#: sl/SL_Menu.py:2048 sl/SL_Menu.py:2078 sl/SL_Menu.py:2505 sl/SL_Menu.py:2617 -#: sl/SL_Menu.py:2678 +#: sl/SL_Menu.py:1637 sl/SL_Menu.py:1682 sl/SL_Menu.py:1727 sl/SL_Menu.py:1922 +#: sl/SL_Menu.py:1985 sl/SL_Menu.py:2020 sl/SL_Menu.py:2053 sl/SL_Menu.py:2102 +#: sl/SL_Menu.py:2132 sl/SL_Menu.py:2162 sl/SL_Menu.py:2589 sl/SL_Menu.py:2701 +#: sl/SL_Menu.py:2762 msgid "Select Project" msgstr "Seleccionar Proyecto" -#: sl/SL_Menu.py:1558 +#: sl/SL_Menu.py:1642 #, python-brace-format msgid "No open tasks to close in '{name}'." msgstr "No hay tareas abiertas para cerrar en '{name}'." -#: sl/SL_Menu.py:1565 sl/SL_Menu.py:1610 sl/SL_Menu.py:1655 sl/SL_Menu.py:1709 -#: sl/SL_Menu.py:1850 sl/SL_Menu.py:1979 sl/SL_Menu.py:2338 sl/SL_Menu.py:2516 -#: sl/SL_Menu.py:2648 +#: sl/SL_Menu.py:1649 sl/SL_Menu.py:1694 sl/SL_Menu.py:1739 sl/SL_Menu.py:1793 +#: sl/SL_Menu.py:1934 sl/SL_Menu.py:2063 sl/SL_Menu.py:2422 sl/SL_Menu.py:2600 +#: sl/SL_Menu.py:2732 msgid "Select Task" msgstr "Seleccionar Tarea" -#: sl/SL_Menu.py:1575 +#: sl/SL_Menu.py:1659 #, python-brace-format msgid "Task '{sub_name}' in '{main_name}' has been closed." msgstr "La tarea '{sub_name}' en '{main_name}' se ha cerrado." -#: sl/SL_Menu.py:1603 +#: sl/SL_Menu.py:1687 #, python-brace-format msgid "No closed tasks to reopen in '{name}'." msgstr "No hay tareas cerradas para reabrir en '{name}'." -#: sl/SL_Menu.py:1620 +#: sl/SL_Menu.py:1704 #, python-brace-format msgid "Task '{sub_name}' in '{main_name}' has been reopened." msgstr "La tarea '{sub_name}' en '{main_name}' se ha reabierto." -#: sl/SL_Menu.py:1648 +#: sl/SL_Menu.py:1732 #, python-brace-format msgid "No open tasks to delete in '{name}'." msgstr "No hay tareas abiertas para eliminar en '{name}'." -#: sl/SL_Menu.py:1659 +#: sl/SL_Menu.py:1743 msgid "This action cannot be undone." msgstr "Esta acción no se puede deshacer." -#: sl/SL_Menu.py:1666 +#: sl/SL_Menu.py:1750 #, python-brace-format msgid "Task '{sub_name}' deleted from '{main_name}'." msgstr "Tarea '{sub_name}' eliminada de '{main_name}'." -#: sl/SL_Menu.py:1689 +#: sl/SL_Menu.py:1773 msgid "Select Source Project" msgstr "Seleccionar proyecto fuente" -#: sl/SL_Menu.py:1694 +#: sl/SL_Menu.py:1778 #, python-brace-format msgid "No tasks found in '{name}'." msgstr "No se encontraron tareas en '{name}'." -#: sl/SL_Menu.py:1702 +#: sl/SL_Menu.py:1786 msgid "No other projects available to move to." msgstr "No hay otros proyectos disponibles para mudarse." -#: sl/SL_Menu.py:1713 sl/SL_Menu.py:2138 +#: sl/SL_Menu.py:1797 sl/SL_Menu.py:2222 msgid "Select Target Project" msgstr "Seleccionar proyecto de destino" -#: sl/SL_Menu.py:1721 +#: sl/SL_Menu.py:1805 #, python-brace-format msgid "Task '{sub}' moved from '{src}' to '{dst}'." msgstr "La tarea '{sub}' se movió de '{src}' a '{dst}'." -#: sl/SL_Menu.py:1725 +#: sl/SL_Menu.py:1809 msgid "Error: Could not move task." msgstr "Error: No se pudo mover la tarea." -#: sl/SL_Menu.py:1736 sl/SL_Menu.py:2099 +#: sl/SL_Menu.py:1820 sl/SL_Menu.py:2183 msgid "Weeks of inactivity" msgstr "Semanas de inactividad" -#: sl/SL_Menu.py:1741 +#: sl/SL_Menu.py:1825 #, python-brace-format msgid "Inactive Tasks (> {weeks} weeks):" msgstr "Tareas inactivas (> {weeks} semanas):" -#: sl/SL_Menu.py:1746 sl/SL_Menu.py:2107 +#: sl/SL_Menu.py:1830 sl/SL_Menu.py:2191 msgid "Last Activity" msgstr "Última actividad" -#: sl/SL_Menu.py:1805 +#: sl/SL_Menu.py:1889 #, python-brace-format msgid "" "Are you sure you want to delete {count} closed tasks? This action cannot be " @@ -2010,25 +2030,25 @@ msgstr "" "¿Está seguro de que desea eliminar{count}tareas cerradas? Esta acción no se " "puede deshacer." -#: sl/SL_Menu.py:1807 +#: sl/SL_Menu.py:1891 msgid "Show projects to delete" msgstr "Mostrar proyectos a eliminar" -#: sl/SL_Menu.py:1811 +#: sl/SL_Menu.py:1895 msgid "Delete All" msgstr "Eliminar todo" -#: sl/SL_Menu.py:1817 +#: sl/SL_Menu.py:1901 #, python-brace-format msgid "Successfully deleted {count} tasks." msgstr "Tareas {count} eliminadas correctamente." -#: sl/SL_Menu.py:1843 +#: sl/SL_Menu.py:1927 #, python-brace-format msgid "No open tasks to promote in '{name}'." msgstr "No hay tareas abiertas para promocionar en '{name}'." -#: sl/SL_Menu.py:1854 +#: sl/SL_Menu.py:1938 msgid "" "This will create a new Project with the task's name and move all time " "entries to a 'General' task within it." @@ -2036,69 +2056,69 @@ msgstr "" "Esto creará un nuevo Proyecto con el nombre de la tarea y moverá todas las " "entradas de tiempo a una tarea 'General' dentro de él." -#: sl/SL_Menu.py:1856 +#: sl/SL_Menu.py:1940 msgid "Promote to Project" msgstr "Promocionar a Proyecto" -#: sl/SL_Menu.py:1895 +#: sl/SL_Menu.py:1979 msgid "No open projects to rename." msgstr "No hay proyectos abiertos para cambiar el nombre." -#: sl/SL_Menu.py:1904 sl/SL_Menu.py:1984 +#: sl/SL_Menu.py:1988 sl/SL_Menu.py:2068 msgid "New Name" msgstr "Nuevo Nombre" -#: sl/SL_Menu.py:1905 sl/SL_Menu.py:1985 +#: sl/SL_Menu.py:1989 sl/SL_Menu.py:2069 msgid "Rename" msgstr "Renombrar" -#: sl/SL_Menu.py:1909 sl/SL_Menu.py:1989 +#: sl/SL_Menu.py:1993 sl/SL_Menu.py:2073 msgid "Please enter a new name." msgstr "Por favor, introduzca un nuevo nombre." -#: sl/SL_Menu.py:1911 sl/SL_Menu.py:1991 +#: sl/SL_Menu.py:1995 sl/SL_Menu.py:2075 msgid "New name is the same as the old name." msgstr "El nuevo nombre es el mismo que el antiguo." -#: sl/SL_Menu.py:1913 +#: sl/SL_Menu.py:1997 #, python-brace-format msgid "Project '{old_name}' successfully renamed to '{new_name}'." msgstr "El proyecto '{old_name}' se renombra exitosamente a '{new_name}'." -#: sl/SL_Menu.py:1974 +#: sl/SL_Menu.py:2058 #, python-brace-format msgid "No open tasks to rename in '{name}'." msgstr "No hay tareas abiertas para cambiar el nombre en '{name}'." -#: sl/SL_Menu.py:1997 +#: sl/SL_Menu.py:2081 msgid "Error: Could not rename. The new name might already exist." msgstr "" "Error: No se pudo cambiar el nombre. Es posible que el nuevo nombre ya " "exista." -#: sl/SL_Menu.py:2010 +#: sl/SL_Menu.py:2094 msgid "No open projects to close." msgstr "No hay proyectos abiertos para cerrar." -#: sl/SL_Menu.py:2023 +#: sl/SL_Menu.py:2107 #, python-brace-format msgid "Project '{name}' has been closed." msgstr "El proyecto '{name}' ha sido cerrado." -#: sl/SL_Menu.py:2027 sl/SL_Menu.py:2057 sl/SL_Menu.py:2088 +#: sl/SL_Menu.py:2111 sl/SL_Menu.py:2141 sl/SL_Menu.py:2172 msgid "Error: Project not found." msgstr "Error: Proyecto no encontrado." -#: sl/SL_Menu.py:2040 +#: sl/SL_Menu.py:2124 msgid "No closed projects to reopen." msgstr "No hay proyectos cerrados para reabrir." -#: sl/SL_Menu.py:2053 +#: sl/SL_Menu.py:2137 #, python-brace-format msgid "Project '{name}' has been reopened." msgstr "El proyecto '{name}' ha sido reabierto." -#: sl/SL_Menu.py:2079 +#: sl/SL_Menu.py:2163 msgid "" "This action cannot be undone. All associated tasks and time entries will be " "deleted." @@ -2106,202 +2126,202 @@ msgstr "" "Esta acción no se puede deshacer. Se eliminarán todas las tareas asociadas y " "entradas de tiempo." -#: sl/SL_Menu.py:2084 +#: sl/SL_Menu.py:2168 #, python-brace-format msgid "Project '{name}' has been deleted." msgstr "El proyecto '{name}' ha sido eliminado." -#: sl/SL_Menu.py:2104 +#: sl/SL_Menu.py:2188 #, python-brace-format msgid "Inactive Projects (> {weeks} weeks):" msgstr "Proyectos inactivos (> {weeks} semanas):" -#: sl/SL_Menu.py:2109 +#: sl/SL_Menu.py:2193 #, python-brace-format msgid "No projects found inactive for more than {weeks} weeks." msgstr "No se encontraron proyectos inactivos durante más de {weeks} semanas." -#: sl/SL_Menu.py:2118 sl/SL_Menu.py:2141 +#: sl/SL_Menu.py:2202 sl/SL_Menu.py:2225 msgid "Demote Project" msgstr "Degradar proyecto" -#: sl/SL_Menu.py:2130 +#: sl/SL_Menu.py:2214 msgid "Select Project to Demote" msgstr "Seleccionar proyecto para degradar" -#: sl/SL_Menu.py:2136 +#: sl/SL_Menu.py:2220 msgid "No other projects available to demote into." msgstr "No hay otros proyectos disponibles para degradar." -#: sl/SL_Menu.py:2139 +#: sl/SL_Menu.py:2223 #, python-brace-format msgid "This will convert '{src}' into a task of '{dst}'." msgstr "Esto convertirá '{src}' en una tarea de '{dst}'." -#: sl/SL_Menu.py:2164 +#: sl/SL_Menu.py:2248 msgid "Projects with only closed or no tasks:" msgstr "Proyectos con solo tareas cerradas o sin tareas:" -#: sl/SL_Menu.py:2168 +#: sl/SL_Menu.py:2252 msgid "No completed projects found." msgstr "No se encontraron proyectos completados." -#: sl/SL_Menu.py:2177 sl/SL_Menu.py:2311 sl/SL_Menu.py:2607 +#: sl/SL_Menu.py:2261 sl/SL_Menu.py:2395 sl/SL_Menu.py:2691 msgid "Step 1: Select Project" msgstr "Paso 1: Seleccionar proyecto" -#: sl/SL_Menu.py:2181 sl/SL_Menu.py:2499 +#: sl/SL_Menu.py:2265 sl/SL_Menu.py:2583 msgid "No open projects found. Please add one first." msgstr "No se encontraron proyectos abiertos. Por favor agregue uno primero." -#: sl/SL_Menu.py:2186 sl/SL_Menu.py:2318 sl/SL_Menu.py:2547 +#: sl/SL_Menu.py:2270 sl/SL_Menu.py:2402 sl/SL_Menu.py:2631 msgid "Project" msgstr "Proyecto" -#: sl/SL_Menu.py:2188 sl/SL_Menu.py:2319 sl/SL_Menu.py:2343 sl/SL_Menu.py:2619 +#: sl/SL_Menu.py:2272 sl/SL_Menu.py:2403 sl/SL_Menu.py:2427 sl/SL_Menu.py:2703 msgid "Next" msgstr "Siguiente" -#: sl/SL_Menu.py:2203 sl/SL_Menu.py:2633 +#: sl/SL_Menu.py:2287 sl/SL_Menu.py:2717 msgid "No project selected. Please start again." msgstr "Ningún proyecto seleccionado. Por favor, empieza de nuevo." -#: sl/SL_Menu.py:2208 +#: sl/SL_Menu.py:2292 msgid "To Project:" msgstr "Al proyecto:" -#: sl/SL_Menu.py:2229 +#: sl/SL_Menu.py:2313 msgid "Name of the new task" msgstr "Nombre de la nueva tarea" -#: sl/SL_Menu.py:2235 +#: sl/SL_Menu.py:2319 msgid "Due date" msgstr "Fecha de vencimiento" -#: sl/SL_Menu.py:2241 sl/SL_Menu.py:2413 +#: sl/SL_Menu.py:2325 sl/SL_Menu.py:2497 msgid "Recurring" msgstr "Recurrente" -#: sl/SL_Menu.py:2257 sl/SL_Menu.py:2428 +#: sl/SL_Menu.py:2341 sl/SL_Menu.py:2512 msgid "daily" msgstr "diario" -#: sl/SL_Menu.py:2257 sl/SL_Menu.py:2428 +#: sl/SL_Menu.py:2341 sl/SL_Menu.py:2512 msgid "monthly" msgstr "mensual" -#: sl/SL_Menu.py:2257 sl/SL_Menu.py:2428 +#: sl/SL_Menu.py:2341 sl/SL_Menu.py:2512 msgid "on all business days" msgstr "todos los días hábiles" -#: sl/SL_Menu.py:2257 sl/SL_Menu.py:2428 +#: sl/SL_Menu.py:2341 sl/SL_Menu.py:2512 msgid "userdefined" msgstr "definido por el usuario" -#: sl/SL_Menu.py:2257 sl/SL_Menu.py:2428 +#: sl/SL_Menu.py:2341 sl/SL_Menu.py:2512 msgid "weekly" msgstr "semanal" -#: sl/SL_Menu.py:2261 sl/SL_Menu.py:2437 +#: sl/SL_Menu.py:2345 sl/SL_Menu.py:2521 msgid "Frequency" msgstr "Frecuencia" -#: sl/SL_Menu.py:2265 sl/SL_Menu.py:2440 +#: sl/SL_Menu.py:2349 sl/SL_Menu.py:2524 msgid "Days" msgstr "Días" -#: sl/SL_Menu.py:2269 sl/SL_Menu.py:2442 +#: sl/SL_Menu.py:2353 sl/SL_Menu.py:2526 msgid "Edit" msgstr "Editar" -#: sl/SL_Menu.py:2269 sl/SL_Menu.py:2442 +#: sl/SL_Menu.py:2353 sl/SL_Menu.py:2526 msgid "Preview" msgstr "Vista previa" -#: sl/SL_Menu.py:2274 sl/SL_Menu.py:2447 +#: sl/SL_Menu.py:2358 sl/SL_Menu.py:2531 msgid "No notes provided." msgstr "No se proporcionaron notas." -#: sl/SL_Menu.py:2279 sl/SL_Menu.py:2452 +#: sl/SL_Menu.py:2363 sl/SL_Menu.py:2536 msgid "A due date is required for recurring tasks." msgstr "Se requiere una fecha de vencimiento para las tareas recurrentes." -#: sl/SL_Menu.py:2287 +#: sl/SL_Menu.py:2371 msgid "Please enter a name." msgstr "Por favor ingrese un nombre." -#: sl/SL_Menu.py:2299 +#: sl/SL_Menu.py:2383 #, python-brace-format msgid "Task '{sub_name}' added to '{main_name}'." msgstr "Tarea '{sub_name}' agregada a '{main_name}'." -#: sl/SL_Menu.py:2331 sl/SL_Menu.py:2638 +#: sl/SL_Menu.py:2415 sl/SL_Menu.py:2722 msgid "Step 2: Select Task from" msgstr "Paso 2: Seleccione Tarea de" -#: sl/SL_Menu.py:2334 +#: sl/SL_Menu.py:2418 msgid "No open tasks found." msgstr "No se encontraron tareas abiertas." -#: sl/SL_Menu.py:2362 +#: sl/SL_Menu.py:2446 msgid "Task not found." msgstr "Tarea no encontrada." -#: sl/SL_Menu.py:2456 +#: sl/SL_Menu.py:2540 msgid "Save Changes" msgstr "Guardar cambios" -#: sl/SL_Menu.py:2481 +#: sl/SL_Menu.py:2565 msgid "Error: Could not update task." msgstr "Error: No se pudo actualizar la tarea." -#: sl/SL_Menu.py:2494 +#: sl/SL_Menu.py:2578 msgid "Start Work on Task" msgstr "Comenzar a trabajar en la tarea" -#: sl/SL_Menu.py:2509 +#: sl/SL_Menu.py:2593 #, python-brace-format msgid "No open tasks to start work on in '{name}'." msgstr "No hay tareas abiertas para comenzar a trabajar en '{name}'." -#: sl/SL_Menu.py:2520 +#: sl/SL_Menu.py:2604 msgid "Start Work" msgstr "Iniciar trabajo" -#: sl/SL_Menu.py:2548 +#: sl/SL_Menu.py:2632 msgid "Task" msgstr "Tarea" -#: sl/SL_Menu.py:2549 +#: sl/SL_Menu.py:2633 msgid "Started at" msgstr "Comenzó en" -#: sl/SL_Menu.py:2550 tt/TimeTracker.py:1446 +#: sl/SL_Menu.py:2634 tt/TimeTracker.py:1454 msgid "Duration" msgstr "Duración" -#: sl/SL_Menu.py:2564 sl/SL_Menu.py:2696 +#: sl/SL_Menu.py:2648 sl/SL_Menu.py:2780 msgid "Select Date" msgstr "Seleccionar fecha" -#: sl/SL_Menu.py:2565 sl/SL_Menu.py:2589 sl/SL_Menu.py:2653 sl/SL_Menu.py:2679 -#: sl/SL_Menu.py:2697 +#: sl/SL_Menu.py:2649 sl/SL_Menu.py:2673 sl/SL_Menu.py:2737 sl/SL_Menu.py:2763 +#: sl/SL_Menu.py:2781 msgid "Generate Report" msgstr "Generar Informe" -#: sl/SL_Menu.py:2585 +#: sl/SL_Menu.py:2669 msgid "Start Date" msgstr "Fecha de inicio" -#: sl/SL_Menu.py:2587 +#: sl/SL_Menu.py:2671 msgid "End Date" msgstr "Fecha de finalización" -#: sl/SL_Menu.py:2712 +#: sl/SL_Menu.py:2796 msgid "Report Result" msgstr "Resultado del Informe" -#: sl/SL_Menu.py:2741 +#: sl/SL_Menu.py:2825 msgid "Export Report" msgstr "Exportar informe" @@ -2384,7 +2404,7 @@ msgstr "Proyecto principal de destino '{name}' no encontrado." msgid "Task '{task_name}' moved successfully." msgstr "Tarea '{task_name}' movida con éxito." -#: tt/TimeTracker.py:892 tt/TimeTracker.py:927 tt/TimeTracker.py:1408 +#: tt/TimeTracker.py:892 tt/TimeTracker.py:927 tt/TimeTracker.py:1416 #, python-brace-format msgid "Task '{task_name}' not found in '{main_name}'." msgstr "Tarea '{task_name}' no encontrada en '{main_name}'." @@ -2442,22 +2462,22 @@ msgstr "Sin asunto" msgid "Unknown Task" msgstr "Tarea desconocida" -#: tt/TimeTracker.py:1365 +#: tt/TimeTracker.py:1373 #, python-brace-format msgid "- {name}: {hours} hours" msgstr "- {name}: {hours} horas" -#: tt/TimeTracker.py:1373 +#: tt/TimeTracker.py:1381 #, python-brace-format msgid "## {name} ({hours} hours)\n" msgstr "## {name} ({hours} horas)\n" -#: tt/TimeTracker.py:1382 +#: tt/TimeTracker.py:1390 #, python-brace-format msgid "# Daily Time Report: {date}\n" msgstr "# Informe de Tiempo Diario: {date}\n" -#: tt/TimeTracker.py:1383 +#: tt/TimeTracker.py:1391 #, python-brace-format msgid "" "\n" @@ -2466,104 +2486,104 @@ msgstr "" "\n" "**Tiempo diario total:{hours}horas**" -#: tt/TimeTracker.py:1387 tt/TimeTracker.py:1700 +#: tt/TimeTracker.py:1395 tt/TimeTracker.py:1708 #, python-brace-format msgid "No time tracked for {date}." msgstr "No hay tiempo registrado para {date}." -#: tt/TimeTracker.py:1404 tt/TimeTracker.py:1499 +#: tt/TimeTracker.py:1412 tt/TimeTracker.py:1507 #, python-brace-format msgid "Main project '{name}' not found." msgstr "Proyecto principal '{name}' no encontrado." -#: tt/TimeTracker.py:1412 +#: tt/TimeTracker.py:1420 #, python-brace-format msgid "No time entries found for task '{task_name}'." msgstr "No se encontraron entradas de tiempo para la tarea '{task_name}'." -#: tt/TimeTracker.py:1445 tt/TimeTracker.py:1675 +#: tt/TimeTracker.py:1453 tt/TimeTracker.py:1683 msgid "now" msgstr "ahora" -#: tt/TimeTracker.py:1450 +#: tt/TimeTracker.py:1458 #, python-brace-format msgid "# Detailed Report for Task: {name}" msgstr "# Informe detallado de la tarea: {name}" -#: tt/TimeTracker.py:1451 +#: tt/TimeTracker.py:1459 #, python-brace-format msgid "Part of Main Project: {name}" msgstr "Parte del Proyecto Principal: {name}" -#: tt/TimeTracker.py:1454 +#: tt/TimeTracker.py:1462 msgid "Active (currently running)" msgstr "Activo (actualmente en ejecución)" -#: tt/TimeTracker.py:1454 tt/TimeTracker.py:1551 +#: tt/TimeTracker.py:1462 tt/TimeTracker.py:1559 msgid "Inactive" msgstr "Inactivo" -#: tt/TimeTracker.py:1455 tt/TimeTracker.py:1552 +#: tt/TimeTracker.py:1463 tt/TimeTracker.py:1560 msgid "Status" msgstr "Estado" -#: tt/TimeTracker.py:1457 tt/TimeTracker.py:1554 +#: tt/TimeTracker.py:1465 tt/TimeTracker.py:1562 msgid "First entry" msgstr "Primera entrada" -#: tt/TimeTracker.py:1459 tt/TimeTracker.py:1556 +#: tt/TimeTracker.py:1467 tt/TimeTracker.py:1564 msgid "Last activity" msgstr "Última actividad" -#: tt/TimeTracker.py:1461 tt/TimeTracker.py:1558 +#: tt/TimeTracker.py:1469 tt/TimeTracker.py:1566 msgid "Total recorded time" msgstr "Tiempo total registrado" -#: tt/TimeTracker.py:1462 tt/TimeTracker.py:1560 +#: tt/TimeTracker.py:1470 tt/TimeTracker.py:1568 msgid "Total work sessions" msgstr "Total de sesiones de trabajo" -#: tt/TimeTracker.py:1466 tt/TimeTracker.py:1564 +#: tt/TimeTracker.py:1474 tt/TimeTracker.py:1572 msgid "Average session duration" msgstr "Duración media de la sesión" -#: tt/TimeTracker.py:1469 tt/TimeTracker.py:1567 +#: tt/TimeTracker.py:1477 tt/TimeTracker.py:1575 msgid "Weekday Distribution" msgstr "Distribución por día de la semana" -#: tt/TimeTracker.py:1479 +#: tt/TimeTracker.py:1487 msgid "Daily Breakdown" msgstr "Desglose diario" -#: tt/TimeTracker.py:1548 +#: tt/TimeTracker.py:1556 #, python-brace-format msgid "# Detailed Report for Main Project: {name}" msgstr "# Informe Detallado del Proyecto Principal: {name}" -#: tt/TimeTracker.py:1551 +#: tt/TimeTracker.py:1559 #, python-brace-format msgid "Active (working on '{task_name}')" msgstr "Activo (trabajando en '{task_name}')" -#: tt/TimeTracker.py:1559 +#: tt/TimeTracker.py:1567 msgid "Number of tasks" msgstr "Número de tareas" -#: tt/TimeTracker.py:1578 +#: tt/TimeTracker.py:1586 msgid "Task Breakdown" msgstr "Desglose de tareas" -#: tt/TimeTracker.py:1587 +#: tt/TimeTracker.py:1595 #, python-brace-format msgid "{num_sessions} sessions" msgstr "{num_sessions} sesiones" -#: tt/TimeTracker.py:1640 +#: tt/TimeTracker.py:1648 #, python-brace-format msgid "# Time Report: {start_date} to {end_date}\n" msgstr "# Informe de Tiempo: {start_date} a {end_date}\n" -#: tt/TimeTracker.py:1641 +#: tt/TimeTracker.py:1649 #, python-brace-format msgid "" "\n" @@ -2572,12 +2592,12 @@ msgstr "" "\n" "**Tiempo Total en el Periodo: {total_time}**" -#: tt/TimeTracker.py:1645 +#: tt/TimeTracker.py:1653 #, python-brace-format msgid "No time tracked between {start_date} and {end_date}." msgstr "No hay tiempo registrado entre {start_date} y {end_date}." -#: tt/TimeTracker.py:1661 +#: tt/TimeTracker.py:1669 #, python-brace-format msgid "# Detailed Daily Report: {date}" msgstr "# Informe Diario Detallado: {date}" @@ -2590,11 +2610,6 @@ msgstr "" "Advertencia: Comprobación de actualizaciones omitida. 'github_repo' no " "encontrado en config.json o el archivo es inválido." -#: update.py:49 -#, python-brace-format -msgid "A new version ({version}) is available." -msgstr "Una nueva versión ({version}) está disponible." - #: update.py:55 msgid "Error: Download URL for the new version not found." msgstr "Error: No se encontró la URL de descarga para la nueva versión." @@ -2622,52 +2637,56 @@ msgstr "Descarga completa. La actualización se instalará en el próximo inicio msgid "Error downloading the update: {error}" msgstr "Error al descargar la actualización: {error}" -#: update.py:108 +#: update.py:98 +msgid "Restarting application to apply the update..." +msgstr "Reiniciando la aplicación para aplicar la actualización..." + +#: update.py:122 msgid "Creating backup of current version before update..." msgstr "" "Creando copia de seguridad de la versión actual antes de la actualización..." -#: update.py:118 +#: update.py:132 #, python-brace-format msgid "Backup created successfully as {filename}." msgstr "Copia de seguridad creada con éxito como {filename}." -#: update.py:120 +#: update.py:134 #, python-brace-format msgid "Warning: Could not create backup. Error: {error}" msgstr "Advertencia: No se pudo crear la copia de seguridad. Error: {error}" -#: update.py:122 +#: update.py:136 msgid "Installing update..." msgstr "Instalando actualización..." -#: update.py:142 +#: update.py:156 #, python-brace-format msgid "Skipping protected file: {filename}. It will not be overwritten." msgstr "Omitiendo archivo protegido: {filename}. No será sobrescrito." -#: update.py:151 +#: update.py:165 msgid "Update installed successfully." msgstr "Actualización instalada con éxito." -#: update.py:153 +#: update.py:167 #, python-brace-format msgid "Error during update installation: {error}" msgstr "Error durante la instalación de la actualización: {error}" -#: update.py:168 +#: update.py:182 #, python-brace-format msgid "Error: No previous version backup '{filename}' found." msgstr "" "Error: No se encontró la copia de seguridad de la versión anterior " "'{filename}'." -#: update.py:171 +#: update.py:185 #, python-brace-format msgid "Restoring previous version from '{filename}'..." msgstr "Restaurando la versión anterior desde '{filename}'..." -#: update.py:192 +#: update.py:206 #, python-brace-format msgid "" "Skipping user data file: {filename}. It will not be overwritten during " @@ -2676,36 +2695,39 @@ msgstr "" "Omitiendo archivo de datos de usuario: {filename}. No será sobrescrito " "durante la restauración." -#: update.py:199 +#: update.py:213 msgid "Previous version restored successfully." msgstr "Versión anterior restaurada con éxito." -#: update.py:201 +#: update.py:215 msgid "Restarting application to apply changes..." msgstr "Reiniciando la aplicación para aplicar los cambios..." -#: update.py:204 +#: update.py:218 #, python-brace-format msgid "Error during restoration: {error}" msgstr "Error durante la restauración: {error}" -#: update.py:205 +#: update.py:219 #, python-brace-format msgid "The backup file '{filename}' was not deleted." msgstr "El archivo de copia de seguridad '{filename}' no fue eliminado." -#: update.py:212 +#: update.py:226 msgid "Error: Could not import TimeTracker to get the current version." msgstr "Error: No se pudo importar TimeTracker para obtener la versión actual." -#: update.py:215 +#: update.py:229 msgid "Checking for updates..." msgstr "Buscando actualizaciones..." -#: update.py:222 +#: update.py:236 msgid "No updates available." msgstr "No hay actualizaciones disponibles." +#~ msgid "Back to Main Menu" +#~ msgstr "Volver al Menú Principal" + #~ msgid "" #~ "\n" #~ "Error: Failed to install dependencies. Please install them manually " diff --git a/locale/fr/LC_MESSAGES/timetracker.mo b/locale/fr/LC_MESSAGES/timetracker.mo index ea465e3004355d430a352366fad6bae20aec1e67..fc7d4c579e5dfcb51aab2d5ee830c2a1f9dfcd35 100644 GIT binary patch delta 12113 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 delta 11921 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 {weeks} weeks):" msgstr "Tâches inactives (> {weeks} semaines) :" -#: sl/SL_Menu.py:1746 sl/SL_Menu.py:2107 +#: sl/SL_Menu.py:1830 sl/SL_Menu.py:2191 msgid "Last Activity" msgstr "Dernière activité" -#: sl/SL_Menu.py:1805 +#: sl/SL_Menu.py:1889 #, python-brace-format msgid "" "Are you sure you want to delete {count} closed tasks? This action cannot be " @@ -2018,25 +2038,25 @@ msgstr "" "Êtes-vous sûr de vouloir supprimer{count}tâches fermées ? Cette action ne " "peut pas être annulée." -#: sl/SL_Menu.py:1807 +#: sl/SL_Menu.py:1891 msgid "Show projects to delete" msgstr "Afficher les projets à supprimer" -#: sl/SL_Menu.py:1811 +#: sl/SL_Menu.py:1895 msgid "Delete All" msgstr "Supprimer tout" -#: sl/SL_Menu.py:1817 +#: sl/SL_Menu.py:1901 #, python-brace-format msgid "Successfully deleted {count} tasks." msgstr "Tâches {count} supprimées avec succès." -#: sl/SL_Menu.py:1843 +#: sl/SL_Menu.py:1927 #, python-brace-format msgid "No open tasks to promote in '{name}'." msgstr "Aucune tâche ouverte à promouvoir dans '{name}'." -#: sl/SL_Menu.py:1854 +#: sl/SL_Menu.py:1938 msgid "" "This will create a new Project with the task's name and move all time " "entries to a 'General' task within it." @@ -2044,67 +2064,67 @@ msgstr "" "Cela créera un nouveau projet avec le nom de la tâche et déplacera toutes " "les entrées de temps vers une tâche « Générale » à l'intérieur de celui-ci." -#: sl/SL_Menu.py:1856 +#: sl/SL_Menu.py:1940 msgid "Promote to Project" msgstr "Promouvoir vers le projet" -#: sl/SL_Menu.py:1895 +#: sl/SL_Menu.py:1979 msgid "No open projects to rename." msgstr "Aucun projet ouvert à renommer." -#: sl/SL_Menu.py:1904 sl/SL_Menu.py:1984 +#: sl/SL_Menu.py:1988 sl/SL_Menu.py:2068 msgid "New Name" msgstr "Nouveau nom" -#: sl/SL_Menu.py:1905 sl/SL_Menu.py:1985 +#: sl/SL_Menu.py:1989 sl/SL_Menu.py:2069 msgid "Rename" msgstr "Renommer" -#: sl/SL_Menu.py:1909 sl/SL_Menu.py:1989 +#: sl/SL_Menu.py:1993 sl/SL_Menu.py:2073 msgid "Please enter a new name." msgstr "Veuillez saisir un nouveau nom." -#: sl/SL_Menu.py:1911 sl/SL_Menu.py:1991 +#: sl/SL_Menu.py:1995 sl/SL_Menu.py:2075 msgid "New name is the same as the old name." msgstr "Le nouveau nom est le même que l'ancien nom." -#: sl/SL_Menu.py:1913 +#: sl/SL_Menu.py:1997 #, python-brace-format msgid "Project '{old_name}' successfully renamed to '{new_name}'." msgstr "Le projet '{old_name}' a été renommé en '{new_name}' avec succès." -#: sl/SL_Menu.py:1974 +#: sl/SL_Menu.py:2058 #, python-brace-format msgid "No open tasks to rename in '{name}'." msgstr "Aucune tâche ouverte à renommer dans '{name}'." -#: sl/SL_Menu.py:1997 +#: sl/SL_Menu.py:2081 msgid "Error: Could not rename. The new name might already exist." msgstr "Erreur : impossible de renommer. Le nouveau nom existe peut-être déjà." -#: sl/SL_Menu.py:2010 +#: sl/SL_Menu.py:2094 msgid "No open projects to close." msgstr "Aucun projet ouvert à fermer." -#: sl/SL_Menu.py:2023 +#: sl/SL_Menu.py:2107 #, python-brace-format msgid "Project '{name}' has been closed." msgstr "Le projet '{name}' a été clôturé." -#: sl/SL_Menu.py:2027 sl/SL_Menu.py:2057 sl/SL_Menu.py:2088 +#: sl/SL_Menu.py:2111 sl/SL_Menu.py:2141 sl/SL_Menu.py:2172 msgid "Error: Project not found." msgstr "Erreur : projet introuvable." -#: sl/SL_Menu.py:2040 +#: sl/SL_Menu.py:2124 msgid "No closed projects to reopen." msgstr "Aucun projet fermé à rouvrir." -#: sl/SL_Menu.py:2053 +#: sl/SL_Menu.py:2137 #, python-brace-format msgid "Project '{name}' has been reopened." msgstr "Le projet '{name}' a été rouvert." -#: sl/SL_Menu.py:2079 +#: sl/SL_Menu.py:2163 msgid "" "This action cannot be undone. All associated tasks and time entries will be " "deleted." @@ -2112,203 +2132,203 @@ msgstr "" "Cette action ne peut pas être annulée. Toutes les tâches et entrées de temps " "associées seront supprimées." -#: sl/SL_Menu.py:2084 +#: sl/SL_Menu.py:2168 #, python-brace-format msgid "Project '{name}' has been deleted." msgstr "Le projet '{name}' a été supprimé." -#: sl/SL_Menu.py:2104 +#: sl/SL_Menu.py:2188 #, python-brace-format msgid "Inactive Projects (> {weeks} weeks):" msgstr "Projets inactifs (> {weeks} semaines) :" -#: sl/SL_Menu.py:2109 +#: sl/SL_Menu.py:2193 #, python-brace-format msgid "No projects found inactive for more than {weeks} weeks." msgstr "Aucun projet trouvé inactif pendant plus de {weeks} semaines." -#: sl/SL_Menu.py:2118 sl/SL_Menu.py:2141 +#: sl/SL_Menu.py:2202 sl/SL_Menu.py:2225 msgid "Demote Project" msgstr "Rétrograder le projet" -#: sl/SL_Menu.py:2130 +#: sl/SL_Menu.py:2214 msgid "Select Project to Demote" msgstr "Sélectionner le projet à rétrograder" -#: sl/SL_Menu.py:2136 +#: sl/SL_Menu.py:2220 msgid "No other projects available to demote into." msgstr "Aucun autre projet disponible pour rétrograder." -#: sl/SL_Menu.py:2139 +#: sl/SL_Menu.py:2223 #, python-brace-format msgid "This will convert '{src}' into a task of '{dst}'." msgstr "Cela convertira '{src}' en une tâche de '{dst}'." -#: sl/SL_Menu.py:2164 +#: sl/SL_Menu.py:2248 msgid "Projects with only closed or no tasks:" msgstr "Projets avec uniquement des tâches fermées ou aucune tâche :" -#: sl/SL_Menu.py:2168 +#: sl/SL_Menu.py:2252 msgid "No completed projects found." msgstr "Aucun projet terminé trouvé." -#: sl/SL_Menu.py:2177 sl/SL_Menu.py:2311 sl/SL_Menu.py:2607 +#: sl/SL_Menu.py:2261 sl/SL_Menu.py:2395 sl/SL_Menu.py:2691 msgid "Step 1: Select Project" msgstr "Étape 1 : Sélectionner le projet" -#: sl/SL_Menu.py:2181 sl/SL_Menu.py:2499 +#: sl/SL_Menu.py:2265 sl/SL_Menu.py:2583 msgid "No open projects found. Please add one first." msgstr "Aucun projet ouvert trouvé. Veuillez d'abord en ajouter un." -#: sl/SL_Menu.py:2186 sl/SL_Menu.py:2318 sl/SL_Menu.py:2547 +#: sl/SL_Menu.py:2270 sl/SL_Menu.py:2402 sl/SL_Menu.py:2631 msgid "Project" msgstr "Projet" -#: sl/SL_Menu.py:2188 sl/SL_Menu.py:2319 sl/SL_Menu.py:2343 sl/SL_Menu.py:2619 +#: sl/SL_Menu.py:2272 sl/SL_Menu.py:2403 sl/SL_Menu.py:2427 sl/SL_Menu.py:2703 msgid "Next" msgstr "Suivant" -#: sl/SL_Menu.py:2203 sl/SL_Menu.py:2633 +#: sl/SL_Menu.py:2287 sl/SL_Menu.py:2717 msgid "No project selected. Please start again." msgstr "Aucun projet sélectionné. S'il vous plaît, recommencez." -#: sl/SL_Menu.py:2208 +#: sl/SL_Menu.py:2292 msgid "To Project:" msgstr "Au projet :" -#: sl/SL_Menu.py:2229 +#: sl/SL_Menu.py:2313 msgid "Name of the new task" msgstr "Nom de la nouvelle tâche" -#: sl/SL_Menu.py:2235 +#: sl/SL_Menu.py:2319 msgid "Due date" msgstr "Date d'échéance" -#: sl/SL_Menu.py:2241 sl/SL_Menu.py:2413 +#: sl/SL_Menu.py:2325 sl/SL_Menu.py:2497 msgid "Recurring" msgstr "Récurrent" -#: sl/SL_Menu.py:2257 sl/SL_Menu.py:2428 +#: sl/SL_Menu.py:2341 sl/SL_Menu.py:2512 msgid "daily" msgstr "quotidien" -#: sl/SL_Menu.py:2257 sl/SL_Menu.py:2428 +#: sl/SL_Menu.py:2341 sl/SL_Menu.py:2512 msgid "monthly" msgstr "mensuel" -#: sl/SL_Menu.py:2257 sl/SL_Menu.py:2428 +#: sl/SL_Menu.py:2341 sl/SL_Menu.py:2512 msgid "on all business days" msgstr "tous les jours ouvrables" -#: sl/SL_Menu.py:2257 sl/SL_Menu.py:2428 +#: sl/SL_Menu.py:2341 sl/SL_Menu.py:2512 msgid "userdefined" msgstr "# Rapport de temps journalier : {date}" -#: sl/SL_Menu.py:2257 sl/SL_Menu.py:2428 +#: sl/SL_Menu.py:2341 sl/SL_Menu.py:2512 msgid "weekly" msgstr "hebdomadaire" -#: sl/SL_Menu.py:2261 sl/SL_Menu.py:2437 +#: sl/SL_Menu.py:2345 sl/SL_Menu.py:2521 msgid "Frequency" msgstr "Fréquence" -#: sl/SL_Menu.py:2265 sl/SL_Menu.py:2440 +#: sl/SL_Menu.py:2349 sl/SL_Menu.py:2524 msgid "Days" msgstr "Aucun temps suivi pour le {date}." -#: sl/SL_Menu.py:2269 sl/SL_Menu.py:2442 +#: sl/SL_Menu.py:2353 sl/SL_Menu.py:2526 msgid "Edit" msgstr "Modifier" -#: sl/SL_Menu.py:2269 sl/SL_Menu.py:2442 +#: sl/SL_Menu.py:2353 sl/SL_Menu.py:2526 msgid "Preview" msgstr "Aperçu" -#: sl/SL_Menu.py:2274 sl/SL_Menu.py:2447 +#: sl/SL_Menu.py:2358 sl/SL_Menu.py:2531 msgid "No notes provided." msgstr "Aucune note fournie." -#: sl/SL_Menu.py:2279 sl/SL_Menu.py:2452 +#: sl/SL_Menu.py:2363 sl/SL_Menu.py:2536 msgid "A due date is required for recurring tasks." msgstr "Une date d'échéance est requise pour les tâches récurrentes." -#: sl/SL_Menu.py:2287 +#: sl/SL_Menu.py:2371 msgid "Please enter a name." msgstr "Veuillez entrer un nom." -#: sl/SL_Menu.py:2299 +#: sl/SL_Menu.py:2383 #, python-brace-format msgid "Task '{sub_name}' added to '{main_name}'." msgstr "Tâche '{sub_name}' ajoutée à '{main_name}'." -#: sl/SL_Menu.py:2331 sl/SL_Menu.py:2638 +#: sl/SL_Menu.py:2415 sl/SL_Menu.py:2722 msgid "Step 2: Select Task from" msgstr "Étape 2 : Sélectionner la tâche de" -#: sl/SL_Menu.py:2334 +#: sl/SL_Menu.py:2418 msgid "No open tasks found." msgstr "Aucune tâche ouverte trouvée." -#: sl/SL_Menu.py:2362 +#: sl/SL_Menu.py:2446 msgid "Task not found." msgstr "Tâche non trouvée." -#: sl/SL_Menu.py:2456 +#: sl/SL_Menu.py:2540 msgid "Save Changes" msgstr "Enregistrer les modifications" -#: sl/SL_Menu.py:2481 +#: sl/SL_Menu.py:2565 msgid "Error: Could not update task." msgstr "Erreur : Impossible de mettre à jour la tâche." -#: sl/SL_Menu.py:2494 +#: sl/SL_Menu.py:2578 msgid "Start Work on Task" msgstr "Démarrer le travail sur la tâche" -#: sl/SL_Menu.py:2509 +#: sl/SL_Menu.py:2593 #, python-brace-format msgid "No open tasks to start work on in '{name}'." msgstr "" "Aucune tâche ouverte sur laquelle commencer à travailler dans '{name}'." -#: sl/SL_Menu.py:2520 +#: sl/SL_Menu.py:2604 msgid "Start Work" msgstr "Démarrer le travail" -#: sl/SL_Menu.py:2548 +#: sl/SL_Menu.py:2632 msgid "Task" msgstr "Tâche" -#: sl/SL_Menu.py:2549 +#: sl/SL_Menu.py:2633 msgid "Started at" msgstr "Démarré à" -#: sl/SL_Menu.py:2550 tt/TimeTracker.py:1446 +#: sl/SL_Menu.py:2634 tt/TimeTracker.py:1454 msgid "Duration" msgstr "Durée" -#: sl/SL_Menu.py:2564 sl/SL_Menu.py:2696 +#: sl/SL_Menu.py:2648 sl/SL_Menu.py:2780 msgid "Select Date" msgstr "Sélectionner la date" -#: sl/SL_Menu.py:2565 sl/SL_Menu.py:2589 sl/SL_Menu.py:2653 sl/SL_Menu.py:2679 -#: sl/SL_Menu.py:2697 +#: sl/SL_Menu.py:2649 sl/SL_Menu.py:2673 sl/SL_Menu.py:2737 sl/SL_Menu.py:2763 +#: sl/SL_Menu.py:2781 msgid "Generate Report" msgstr "Générer le rapport" -#: sl/SL_Menu.py:2585 +#: sl/SL_Menu.py:2669 msgid "Start Date" msgstr "Date de début" -#: sl/SL_Menu.py:2587 +#: sl/SL_Menu.py:2671 msgid "End Date" msgstr "Date de fin" -#: sl/SL_Menu.py:2712 +#: sl/SL_Menu.py:2796 msgid "Report Result" msgstr "Résultat du rapport" -#: sl/SL_Menu.py:2741 +#: sl/SL_Menu.py:2825 msgid "Export Report" msgstr "Rapport d'exportation" @@ -2393,7 +2413,7 @@ msgstr "Projet principal de destination «{name}» introuvable." msgid "Task '{task_name}' moved successfully." msgstr "La tâche '{task_name}' a été déplacée avec succès." -#: tt/TimeTracker.py:892 tt/TimeTracker.py:927 tt/TimeTracker.py:1408 +#: tt/TimeTracker.py:892 tt/TimeTracker.py:927 tt/TimeTracker.py:1416 #, python-brace-format msgid "Task '{task_name}' not found in '{main_name}'." msgstr "La tâche '{task_name}' n'a pas été trouvée dans '{main_name}'." @@ -2451,22 +2471,22 @@ msgstr "Aucun sujet" msgid "Unknown Task" msgstr "Tâche inconnue" -#: tt/TimeTracker.py:1365 +#: tt/TimeTracker.py:1373 #, python-brace-format msgid "- {name}: {hours} hours" msgstr "- {name}: {hours} heures" -#: tt/TimeTracker.py:1373 +#: tt/TimeTracker.py:1381 #, python-brace-format msgid "## {name} ({hours} hours)\n" msgstr "## {name} ({hours} heures)\n" -#: tt/TimeTracker.py:1382 +#: tt/TimeTracker.py:1390 #, python-brace-format msgid "# Daily Time Report: {date}\n" msgstr "# Rapport de temps journalier : {date}\n" -#: tt/TimeTracker.py:1383 +#: tt/TimeTracker.py:1391 #, python-brace-format msgid "" "\n" @@ -2475,104 +2495,104 @@ msgstr "" "\n" "**Durée quotidienne totale :{hours}heures**" -#: tt/TimeTracker.py:1387 tt/TimeTracker.py:1700 +#: tt/TimeTracker.py:1395 tt/TimeTracker.py:1708 #, python-brace-format msgid "No time tracked for {date}." msgstr "Aucun temps suivi pour le {date}." -#: tt/TimeTracker.py:1404 tt/TimeTracker.py:1499 +#: tt/TimeTracker.py:1412 tt/TimeTracker.py:1507 #, python-brace-format msgid "Main project '{name}' not found." msgstr "Projet principal «{name}» introuvable." -#: tt/TimeTracker.py:1412 +#: tt/TimeTracker.py:1420 #, python-brace-format msgid "No time entries found for task '{task_name}'." msgstr "Aucune entrée de temps trouvée pour la tâche '{task_name}'." -#: tt/TimeTracker.py:1445 tt/TimeTracker.py:1675 +#: tt/TimeTracker.py:1453 tt/TimeTracker.py:1683 msgid "now" msgstr "maintenant" -#: tt/TimeTracker.py:1450 +#: tt/TimeTracker.py:1458 #, python-brace-format msgid "# Detailed Report for Task: {name}" msgstr "# Rapport détaillé pour la tâche : {name}" -#: tt/TimeTracker.py:1451 +#: tt/TimeTracker.py:1459 #, python-brace-format msgid "Part of Main Project: {name}" msgstr "Fait partie du projet principal : {name}" -#: tt/TimeTracker.py:1454 +#: tt/TimeTracker.py:1462 msgid "Active (currently running)" msgstr "Actif (en cours)" -#: tt/TimeTracker.py:1454 tt/TimeTracker.py:1551 +#: tt/TimeTracker.py:1462 tt/TimeTracker.py:1559 msgid "Inactive" msgstr "Inactif" -#: tt/TimeTracker.py:1455 tt/TimeTracker.py:1552 +#: tt/TimeTracker.py:1463 tt/TimeTracker.py:1560 msgid "Status" msgstr "Statut" -#: tt/TimeTracker.py:1457 tt/TimeTracker.py:1554 +#: tt/TimeTracker.py:1465 tt/TimeTracker.py:1562 msgid "First entry" msgstr "Première entrée" -#: tt/TimeTracker.py:1459 tt/TimeTracker.py:1556 +#: tt/TimeTracker.py:1467 tt/TimeTracker.py:1564 msgid "Last activity" msgstr "Dernière activité" -#: tt/TimeTracker.py:1461 tt/TimeTracker.py:1558 +#: tt/TimeTracker.py:1469 tt/TimeTracker.py:1566 msgid "Total recorded time" msgstr "Temps total enregistré" -#: tt/TimeTracker.py:1462 tt/TimeTracker.py:1560 +#: tt/TimeTracker.py:1470 tt/TimeTracker.py:1568 msgid "Total work sessions" msgstr "Nombre total de sessions de travail" -#: tt/TimeTracker.py:1466 tt/TimeTracker.py:1564 +#: tt/TimeTracker.py:1474 tt/TimeTracker.py:1572 msgid "Average session duration" msgstr "Durée moyenne des sessions" -#: tt/TimeTracker.py:1469 tt/TimeTracker.py:1567 +#: tt/TimeTracker.py:1477 tt/TimeTracker.py:1575 msgid "Weekday Distribution" msgstr "Répartition par jour de la semaine" -#: tt/TimeTracker.py:1479 +#: tt/TimeTracker.py:1487 msgid "Daily Breakdown" msgstr "Répartition journalière" -#: tt/TimeTracker.py:1548 +#: tt/TimeTracker.py:1556 #, python-brace-format msgid "# Detailed Report for Main Project: {name}" msgstr "# Rapport détaillé pour le projet principal : {name}" -#: tt/TimeTracker.py:1551 +#: tt/TimeTracker.py:1559 #, python-brace-format msgid "Active (working on '{task_name}')" msgstr "Actif (travail sur '{task_name}')" -#: tt/TimeTracker.py:1559 +#: tt/TimeTracker.py:1567 msgid "Number of tasks" msgstr "Nombre de tâches" -#: tt/TimeTracker.py:1578 +#: tt/TimeTracker.py:1586 msgid "Task Breakdown" msgstr "Répartition par tâche" -#: tt/TimeTracker.py:1587 +#: tt/TimeTracker.py:1595 #, python-brace-format msgid "{num_sessions} sessions" msgstr "{num_sessions} sessions" -#: tt/TimeTracker.py:1640 +#: tt/TimeTracker.py:1648 #, python-brace-format msgid "# Time Report: {start_date} to {end_date}\n" msgstr "# Rapport de temps : du {start_date} au {end_date}\n" -#: tt/TimeTracker.py:1641 +#: tt/TimeTracker.py:1649 #, python-brace-format msgid "" "\n" @@ -2581,12 +2601,12 @@ msgstr "" "\n" "**Temps total sur la période : {total_time}**" -#: tt/TimeTracker.py:1645 +#: tt/TimeTracker.py:1653 #, python-brace-format msgid "No time tracked between {start_date} and {end_date}." msgstr "Aucun temps suivi entre le {start_date} et le {end_date}." -#: tt/TimeTracker.py:1661 +#: tt/TimeTracker.py:1669 #, python-brace-format msgid "# Detailed Daily Report: {date}" msgstr "# Rapport journalier détaillé : {date}" @@ -2599,11 +2619,6 @@ msgstr "" "Avertissement : Vérification de mise à jour ignorée. 'github_repo' non " "trouvé dans config.json ou fichier invalide." -#: update.py:49 -#, python-brace-format -msgid "A new version ({version}) is available." -msgstr "Une nouvelle version ({version}) est disponible." - #: update.py:55 msgid "Error: Download URL for the new version not found." msgstr "Erreur : URL de téléchargement pour la nouvelle version non trouvée." @@ -2635,51 +2650,55 @@ msgstr "" msgid "Error downloading the update: {error}" msgstr "Erreur lors du téléchargement de la mise à jour : {error}" -#: update.py:108 +#: update.py:98 +msgid "Restarting application to apply the update..." +msgstr "Redémarrage de l'application pour appliquer la mise à jour..." + +#: update.py:122 msgid "Creating backup of current version before update..." msgstr "" "Création d'une sauvegarde de la version actuelle avant la mise à jour..." -#: update.py:118 +#: update.py:132 #, python-brace-format msgid "Backup created successfully as {filename}." msgstr "Sauvegarde créée avec succès sous le nom {filename}." -#: update.py:120 +#: update.py:134 #, python-brace-format msgid "Warning: Could not create backup. Error: {error}" msgstr "Avertissement : Impossible de créer la sauvegarde. Erreur : {error}" -#: update.py:122 +#: update.py:136 msgid "Installing update..." msgstr "Installation de la mise à jour..." -#: update.py:142 +#: update.py:156 #, python-brace-format msgid "Skipping protected file: {filename}. It will not be overwritten." msgstr "Fichier protégé ignoré : {filename}. Il ne sera pas écrasé." -#: update.py:151 +#: update.py:165 msgid "Update installed successfully." msgstr "Mise à jour installée avec succès." -#: update.py:153 +#: update.py:167 #, python-brace-format msgid "Error during update installation: {error}" msgstr "Erreur lors de l'installation de la mise à jour : {error}" -#: update.py:168 +#: update.py:182 #, python-brace-format msgid "Error: No previous version backup '{filename}' found." msgstr "" "Erreur : Aucune sauvegarde de la version précédente '{filename}' trouvée." -#: update.py:171 +#: update.py:185 #, python-brace-format msgid "Restoring previous version from '{filename}'..." msgstr "Restauration de la version précédente depuis '{filename}'..." -#: update.py:192 +#: update.py:206 #, python-brace-format msgid "" "Skipping user data file: {filename}. It will not be overwritten during " @@ -2688,37 +2707,40 @@ msgstr "" "Ignorer le fichier de données utilisateur : {filename}. Il ne sera pas " "écrasé lors de la restauration." -#: update.py:199 +#: update.py:213 msgid "Previous version restored successfully." msgstr "Version précédente restaurée avec succès." -#: update.py:201 +#: update.py:215 msgid "Restarting application to apply changes..." msgstr "Redémarrage de l'application pour appliquer les modifications..." -#: update.py:204 +#: update.py:218 #, python-brace-format msgid "Error during restoration: {error}" msgstr "Erreur lors de la restauration : {error}" -#: update.py:205 +#: update.py:219 #, python-brace-format msgid "The backup file '{filename}' was not deleted." msgstr "Le fichier de sauvegarde '{filename}' n'a pas été supprimé." -#: update.py:212 +#: update.py:226 msgid "Error: Could not import TimeTracker to get the current version." msgstr "" "Erreur : Impossible d'importer TimeTracker pour obtenir la version actuelle." -#: update.py:215 +#: update.py:229 msgid "Checking for updates..." msgstr "Vérification des mises à jour..." -#: update.py:222 +#: update.py:236 msgid "No updates available." msgstr "Aucune mise à jour disponible." +#~ msgid "Back to Main Menu" +#~ msgstr "Retour au menu principal" + #~ msgid "" #~ "\n" #~ "Error: Failed to install dependencies. Please install them manually " diff --git a/locale/timetracker.pot b/locale/timetracker.pot index ab80b97..b2c7ab3 100644 --- a/locale/timetracker.pot +++ b/locale/timetracker.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-05 09:08+0200\n" +"POT-Creation-Date: 2026-08-05 18:15+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -112,8 +112,8 @@ msgid "" "--- List Main Projects ---" msgstr "" -#: TimeTrackerCLI.py:76 TimeTrackerCLI.py:313 sl/SL_Menu.py:1880 -#: sl/SL_Menu.py:1944 +#: TimeTrackerCLI.py:76 TimeTrackerCLI.py:313 sl/SL_Menu.py:1964 +#: sl/SL_Menu.py:2028 msgid "closed" msgstr "" @@ -153,7 +153,7 @@ msgstr "" msgid "Main project '{old_name}' successfully renamed to '{new_name}'." msgstr "" -#: TimeTrackerCLI.py:101 sl/SL_Menu.py:1917 +#: TimeTrackerCLI.py:101 sl/SL_Menu.py:2001 #, python-brace-format msgid "Error: Could not rename. The new name '{new_name}' might already exist." msgstr "" @@ -422,22 +422,22 @@ msgstr "" msgid "Select the main project whose tasks you want to list:" msgstr "" -#: TimeTrackerCLI.py:305 sl/SL_Menu.py:1941 +#: TimeTrackerCLI.py:305 sl/SL_Menu.py:2025 #, python-brace-format msgid "Tasks for '{name}':" msgstr "" -#: TimeTrackerCLI.py:308 sl/SL_Menu.py:745 sl/SL_Menu.py:895 +#: TimeTrackerCLI.py:308 sl/SL_Menu.py:785 sl/SL_Menu.py:977 msgid "Due" msgstr "" -#: TimeTrackerCLI.py:309 sl/SL_Menu.py:596 sl/SL_Menu.py:616 sl/SL_Menu.py:682 -#: sl/SL_Menu.py:768 sl/SL_Menu.py:1077 sl/SL_Menu.py:2238 sl/SL_Menu.py:2409 +#: TimeTrackerCLI.py:309 sl/SL_Menu.py:636 sl/SL_Menu.py:656 sl/SL_Menu.py:722 +#: sl/SL_Menu.py:808 sl/SL_Menu.py:1161 sl/SL_Menu.py:2322 sl/SL_Menu.py:2493 msgid "Today" msgstr "" -#: TimeTrackerCLI.py:317 TimeTrackerCLI.py:861 sl/SL_Menu.py:1950 -#: sl/SL_Menu.py:2642 +#: TimeTrackerCLI.py:317 TimeTrackerCLI.py:861 sl/SL_Menu.py:2034 +#: sl/SL_Menu.py:2726 #, python-brace-format msgid "No tasks found for '{name}'." msgstr "" @@ -474,7 +474,7 @@ msgstr "" msgid "Enter the number of the task: " msgstr "" -#: TimeTrackerCLI.py:352 sl/SL_Menu.py:1993 +#: TimeTrackerCLI.py:352 sl/SL_Menu.py:2077 #, python-brace-format msgid "Task '{old_name}' renamed to '{new_name}'." msgstr "" @@ -507,7 +507,7 @@ msgid "Task '{task_name}' in '{main_name}' has been closed." msgstr "" #: TimeTrackerCLI.py:389 TimeTrackerCLI.py:424 TimeTrackerCLI.py:460 -#: sl/SL_Menu.py:1579 sl/SL_Menu.py:1624 sl/SL_Menu.py:1670 +#: sl/SL_Menu.py:1663 sl/SL_Menu.py:1708 sl/SL_Menu.py:1754 msgid "Error: Main project or task not found." msgstr "" @@ -627,7 +627,7 @@ msgstr "" msgid " Task: {name}" msgstr "" -#: TimeTrackerCLI.py:531 sl/SL_Menu.py:1752 +#: TimeTrackerCLI.py:531 sl/SL_Menu.py:1836 #, python-brace-format msgid "No tasks found inactive for more than {weeks} weeks." msgstr "" @@ -638,7 +638,7 @@ msgid "" "--- List All Closed Tasks ---" msgstr "" -#: TimeTrackerCLI.py:543 sl/SL_Menu.py:1777 sl/SL_Menu.py:1800 +#: TimeTrackerCLI.py:543 sl/SL_Menu.py:1861 sl/SL_Menu.py:1884 msgid "No closed tasks found." msgstr "" @@ -689,9 +689,9 @@ msgid "" "--- Edit Task ---" msgstr "" -#: TimeTrackerCLI.py:596 sl/SL_Menu.py:1547 sl/SL_Menu.py:1592 -#: sl/SL_Menu.py:1637 sl/SL_Menu.py:1683 sl/SL_Menu.py:1832 sl/SL_Menu.py:1963 -#: sl/SL_Menu.py:2122 sl/SL_Menu.py:2315 +#: TimeTrackerCLI.py:596 sl/SL_Menu.py:1631 sl/SL_Menu.py:1676 +#: sl/SL_Menu.py:1721 sl/SL_Menu.py:1767 sl/SL_Menu.py:1916 sl/SL_Menu.py:2047 +#: sl/SL_Menu.py:2206 sl/SL_Menu.py:2399 msgid "No open projects found." msgstr "" @@ -737,7 +737,7 @@ msgstr "" msgid "Is this task done? (current: {current}, y/n, press Enter to keep): " msgstr "" -#: TimeTrackerCLI.py:639 sl/SL_Menu.py:2475 +#: TimeTrackerCLI.py:639 sl/SL_Menu.py:2559 msgid "Task updated successfully." msgstr "" @@ -829,7 +829,7 @@ msgstr "" msgid "New Path: " msgstr "" -#: TimeTrackerCLI.py:738 sl/SL_Menu.py:1334 +#: TimeTrackerCLI.py:738 sl/SL_Menu.py:1418 #, python-brace-format msgid "Error: The directory '{dir}' does not exist." msgstr "" @@ -842,11 +842,11 @@ msgstr "" msgid "Do you want to move the existing data to the new location? (y/n): " msgstr "" -#: TimeTrackerCLI.py:760 sl/SL_Menu.py:1344 +#: TimeTrackerCLI.py:760 sl/SL_Menu.py:1428 msgid "Data moved successfully." msgstr "" -#: TimeTrackerCLI.py:762 sl/SL_Menu.py:1346 +#: TimeTrackerCLI.py:762 sl/SL_Menu.py:1430 #, python-brace-format msgid "Error moving data: {error}" msgstr "" @@ -945,7 +945,7 @@ msgstr "" msgid "Enter the end date (YYYY-MM-DD): " msgstr "" -#: TimeTrackerCLI.py:837 sl/SL_Menu.py:2593 +#: TimeTrackerCLI.py:837 sl/SL_Menu.py:2677 msgid "Error: The start date cannot be after the end date." msgstr "" @@ -955,8 +955,8 @@ msgid "" "--- Detailed Task Report ---" msgstr "" -#: TimeTrackerCLI.py:847 TimeTrackerCLI.py:880 sl/SL_Menu.py:1883 -#: sl/SL_Menu.py:1930 sl/SL_Menu.py:2070 sl/SL_Menu.py:2611 sl/SL_Menu.py:2670 +#: TimeTrackerCLI.py:847 TimeTrackerCLI.py:880 sl/SL_Menu.py:1967 +#: sl/SL_Menu.py:2014 sl/SL_Menu.py:2154 sl/SL_Menu.py:2695 sl/SL_Menu.py:2754 msgid "No projects found." msgstr "" @@ -1085,12 +1085,12 @@ msgstr "" msgid "Select a task from '{name}':" msgstr "" -#: TimeTrackerCLI.py:987 sl/SL_Menu.py:2526 +#: TimeTrackerCLI.py:987 sl/SL_Menu.py:2610 #, python-brace-format msgid "Work started on '{task_name}' in project '{main_name}'." msgstr "" -#: TimeTrackerCLI.py:989 sl/SL_Menu.py:2530 +#: TimeTrackerCLI.py:989 sl/SL_Menu.py:2614 msgid "Error starting work." msgstr "" @@ -1124,7 +1124,7 @@ msgstr "" msgid " Duration: {duration}" msgstr "" -#: TimeTrackerCLI.py:1012 sl/SL_Menu.py:559 sl/SL_Menu.py:2552 +#: TimeTrackerCLI.py:1012 sl/SL_Menu.py:870 sl/SL_Menu.py:2636 msgid "No active work session." msgstr "" @@ -1134,11 +1134,11 @@ msgid "" "--- Stop Work ---" msgstr "" -#: TimeTrackerCLI.py:1018 sl/SL_Menu.py:504 +#: TimeTrackerCLI.py:1018 sl/SL_Menu.py:594 msgid "Work session stopped successfully." msgstr "" -#: TimeTrackerCLI.py:1020 sl/SL_Menu.py:506 +#: TimeTrackerCLI.py:1020 sl/SL_Menu.py:596 msgid "No active work session to stop." msgstr "" @@ -1152,1008 +1152,1022 @@ msgstr "" msgid "Exiting application. Goodbye!" msgstr "" -#: sl/SL_Menu.py:399 +#: sl/SL_Menu.py:278 sl/SL_Menu.py:989 sl/SL_Menu.py:2327 sl/SL_Menu.py:2499 +msgid "Priority" +msgstr "" + +#: sl/SL_Menu.py:450 +#, python-brace-format +msgid "Version {version}" +msgstr "" + +#: sl/SL_Menu.py:455 update.py:49 +#, python-brace-format +msgid "A new version ({version}) is available." +msgstr "" + +#: sl/SL_Menu.py:457 +msgid "Restart and install the update" +msgstr "" + +#: sl/SL_Menu.py:458 +msgid "Downloading and installing update..." +msgstr "" + +#: sl/SL_Menu.py:489 msgid "New" msgstr "" -#: sl/SL_Menu.py:400 +#: sl/SL_Menu.py:490 msgid "New Project" msgstr "" -#: sl/SL_Menu.py:403 +#: sl/SL_Menu.py:493 msgid "New Task" msgstr "" -#: sl/SL_Menu.py:408 +#: sl/SL_Menu.py:498 msgid "Project & Task Management" msgstr "" -#: sl/SL_Menu.py:409 sl/SL_Menu.py:1117 +#: sl/SL_Menu.py:499 sl/SL_Menu.py:1201 msgid "Main Project Management" msgstr "" -#: sl/SL_Menu.py:410 sl/SL_Menu.py:1133 sl/SL_Menu.py:1528 +#: sl/SL_Menu.py:500 sl/SL_Menu.py:1217 sl/SL_Menu.py:1612 msgid "Add Project" msgstr "" -#: sl/SL_Menu.py:413 sl/SL_Menu.py:1136 sl/SL_Menu.py:1876 +#: sl/SL_Menu.py:503 sl/SL_Menu.py:1220 sl/SL_Menu.py:1960 msgid "List Projects" msgstr "" -#: sl/SL_Menu.py:416 sl/SL_Menu.py:1139 sl/SL_Menu.py:1891 +#: sl/SL_Menu.py:506 sl/SL_Menu.py:1223 sl/SL_Menu.py:1975 msgid "Rename Project" msgstr "" -#: sl/SL_Menu.py:419 sl/SL_Menu.py:1142 sl/SL_Menu.py:2006 sl/SL_Menu.py:2019 +#: sl/SL_Menu.py:509 sl/SL_Menu.py:1226 sl/SL_Menu.py:2090 sl/SL_Menu.py:2103 msgid "Close Project" msgstr "" -#: sl/SL_Menu.py:422 sl/SL_Menu.py:1145 sl/SL_Menu.py:2036 sl/SL_Menu.py:2049 +#: sl/SL_Menu.py:512 sl/SL_Menu.py:1229 sl/SL_Menu.py:2120 sl/SL_Menu.py:2133 msgid "Re-open Project" msgstr "" -#: sl/SL_Menu.py:425 sl/SL_Menu.py:1148 sl/SL_Menu.py:2066 sl/SL_Menu.py:2080 +#: sl/SL_Menu.py:515 sl/SL_Menu.py:1232 sl/SL_Menu.py:2150 sl/SL_Menu.py:2164 msgid "Delete Project" msgstr "" -#: sl/SL_Menu.py:428 sl/SL_Menu.py:1151 sl/SL_Menu.py:2097 +#: sl/SL_Menu.py:518 sl/SL_Menu.py:1235 sl/SL_Menu.py:2181 msgid "List Inactive Projects" msgstr "" -#: sl/SL_Menu.py:431 sl/SL_Menu.py:1154 +#: sl/SL_Menu.py:521 sl/SL_Menu.py:1238 msgid "Demote Project to Task" msgstr "" -#: sl/SL_Menu.py:434 sl/SL_Menu.py:1157 sl/SL_Menu.py:2159 +#: sl/SL_Menu.py:524 sl/SL_Menu.py:1241 sl/SL_Menu.py:2243 msgid "List Completed Projects" msgstr "" -#: sl/SL_Menu.py:438 sl/SL_Menu.py:1119 sl/SL_Menu.py:1170 +#: sl/SL_Menu.py:528 sl/SL_Menu.py:1203 sl/SL_Menu.py:1254 msgid "Task Management" msgstr "" -#: sl/SL_Menu.py:439 sl/SL_Menu.py:1172 sl/SL_Menu.py:2177 sl/SL_Menu.py:2208 -#: sl/SL_Menu.py:2283 +#: sl/SL_Menu.py:529 sl/SL_Menu.py:1256 sl/SL_Menu.py:2261 sl/SL_Menu.py:2292 +#: sl/SL_Menu.py:2367 msgid "Add Task" msgstr "" -#: sl/SL_Menu.py:442 sl/SL_Menu.py:1175 sl/SL_Menu.py:1926 +#: sl/SL_Menu.py:532 sl/SL_Menu.py:1259 sl/SL_Menu.py:2010 msgid "List Tasks" msgstr "" -#: sl/SL_Menu.py:445 sl/SL_Menu.py:1178 sl/SL_Menu.py:1959 +#: sl/SL_Menu.py:535 sl/SL_Menu.py:1262 sl/SL_Menu.py:2043 msgid "Rename Task" msgstr "" -#: sl/SL_Menu.py:448 sl/SL_Menu.py:1181 sl/SL_Menu.py:1543 sl/SL_Menu.py:1569 -#: sl/SL_Menu.py:1748 +#: sl/SL_Menu.py:538 sl/SL_Menu.py:1265 sl/SL_Menu.py:1627 sl/SL_Menu.py:1653 +#: sl/SL_Menu.py:1832 msgid "Close Task" msgstr "" -#: sl/SL_Menu.py:451 sl/SL_Menu.py:1184 sl/SL_Menu.py:1588 sl/SL_Menu.py:1614 +#: sl/SL_Menu.py:541 sl/SL_Menu.py:1268 sl/SL_Menu.py:1672 sl/SL_Menu.py:1698 msgid "Re-open Task" msgstr "" -#: sl/SL_Menu.py:454 sl/SL_Menu.py:1187 sl/SL_Menu.py:1633 sl/SL_Menu.py:1660 +#: sl/SL_Menu.py:544 sl/SL_Menu.py:1271 sl/SL_Menu.py:1717 sl/SL_Menu.py:1744 msgid "Delete Task" msgstr "" -#: sl/SL_Menu.py:457 sl/SL_Menu.py:1190 sl/SL_Menu.py:1679 sl/SL_Menu.py:1715 +#: sl/SL_Menu.py:547 sl/SL_Menu.py:1274 sl/SL_Menu.py:1763 sl/SL_Menu.py:1799 msgid "Move Task" msgstr "" -#: sl/SL_Menu.py:460 sl/SL_Menu.py:1193 sl/SL_Menu.py:1734 +#: sl/SL_Menu.py:550 sl/SL_Menu.py:1277 sl/SL_Menu.py:1818 msgid "List Inactive Tasks" msgstr "" -#: sl/SL_Menu.py:463 sl/SL_Menu.py:1196 sl/SL_Menu.py:1761 +#: sl/SL_Menu.py:553 sl/SL_Menu.py:1280 sl/SL_Menu.py:1845 msgid "List All Closed Tasks" msgstr "" -#: sl/SL_Menu.py:466 sl/SL_Menu.py:675 sl/SL_Menu.py:761 sl/SL_Menu.py:929 -#: sl/SL_Menu.py:1199 sl/SL_Menu.py:2311 sl/SL_Menu.py:2331 sl/SL_Menu.py:2366 +#: sl/SL_Menu.py:556 sl/SL_Menu.py:715 sl/SL_Menu.py:801 sl/SL_Menu.py:1011 +#: sl/SL_Menu.py:1283 sl/SL_Menu.py:2395 sl/SL_Menu.py:2415 sl/SL_Menu.py:2450 msgid "Edit Task" msgstr "" -#: sl/SL_Menu.py:469 sl/SL_Menu.py:1202 sl/SL_Menu.py:1786 +#: sl/SL_Menu.py:559 sl/SL_Menu.py:1286 sl/SL_Menu.py:1870 msgid "Delete All Closed Tasks" msgstr "" -#: sl/SL_Menu.py:472 sl/SL_Menu.py:1205 sl/SL_Menu.py:1828 +#: sl/SL_Menu.py:562 sl/SL_Menu.py:1289 sl/SL_Menu.py:1912 msgid "Promote Task to Project" msgstr "" -#: sl/SL_Menu.py:477 +#: sl/SL_Menu.py:567 msgid "Today View" msgstr "" -#: sl/SL_Menu.py:482 sl/SL_Menu.py:591 +#: sl/SL_Menu.py:572 sl/SL_Menu.py:631 msgid "Task Planning" msgstr "" -#: sl/SL_Menu.py:487 sl/SL_Menu.py:962 +#: sl/SL_Menu.py:577 sl/SL_Menu.py:1046 msgid "E-Mail Task Assignment" msgstr "" -#: sl/SL_Menu.py:492 sl/SL_Menu.py:671 sl/SL_Menu.py:757 sl/SL_Menu.py:925 +#: sl/SL_Menu.py:582 sl/SL_Menu.py:711 sl/SL_Menu.py:797 sl/SL_Menu.py:1007 msgid "Start work on task" msgstr "" -#: sl/SL_Menu.py:497 +#: sl/SL_Menu.py:587 msgid "Show current work" msgstr "" -#: sl/SL_Menu.py:502 +#: sl/SL_Menu.py:592 msgid "Stop current work" msgstr "" -#: sl/SL_Menu.py:510 sl/SL_Menu.py:1218 +#: sl/SL_Menu.py:600 sl/SL_Menu.py:1302 msgid "Reporting" msgstr "" -#: sl/SL_Menu.py:511 sl/SL_Menu.py:1221 +#: sl/SL_Menu.py:601 sl/SL_Menu.py:1305 msgid "Daily Report (Today)" msgstr "" -#: sl/SL_Menu.py:516 sl/SL_Menu.py:1227 sl/SL_Menu.py:2561 +#: sl/SL_Menu.py:606 sl/SL_Menu.py:1311 sl/SL_Menu.py:2645 msgid "Daily Report (Specific Day)" msgstr "" -#: sl/SL_Menu.py:519 sl/SL_Menu.py:1230 sl/SL_Menu.py:2580 +#: sl/SL_Menu.py:609 sl/SL_Menu.py:1314 sl/SL_Menu.py:2664 msgid "Date Range Report" msgstr "" -#: sl/SL_Menu.py:522 sl/SL_Menu.py:1233 sl/SL_Menu.py:2607 sl/SL_Menu.py:2638 +#: sl/SL_Menu.py:612 sl/SL_Menu.py:1317 sl/SL_Menu.py:2691 sl/SL_Menu.py:2722 msgid "Detailed Task Report" msgstr "" -#: sl/SL_Menu.py:525 sl/SL_Menu.py:1236 sl/SL_Menu.py:2666 +#: sl/SL_Menu.py:615 sl/SL_Menu.py:1320 sl/SL_Menu.py:2750 msgid "Detailed Project Report" msgstr "" -#: sl/SL_Menu.py:528 sl/SL_Menu.py:1239 sl/SL_Menu.py:2693 +#: sl/SL_Menu.py:618 sl/SL_Menu.py:1323 sl/SL_Menu.py:2777 msgid "Detailed Daily Report" msgstr "" -#: sl/SL_Menu.py:533 sl/SL_Menu.py:1256 +#: sl/SL_Menu.py:623 sl/SL_Menu.py:1340 msgid "Settings" msgstr "" -#: sl/SL_Menu.py:557 sl/SL_Menu.py:2539 -msgid "Current Active Work" -msgstr "" - -#: sl/SL_Menu.py:562 sl/SL_Menu.py:695 sl/SL_Menu.py:781 sl/SL_Menu.py:936 -#: sl/SL_Menu.py:2411 -msgid "Done" -msgstr "" - -#: sl/SL_Menu.py:576 -msgid "Edit current task" -msgstr "" - -#: sl/SL_Menu.py:584 -msgid "Exit" -msgstr "" - -#: sl/SL_Menu.py:597 sl/SL_Menu.py:617 +#: sl/SL_Menu.py:637 sl/SL_Menu.py:657 msgid "Tomorrow" msgstr "" -#: sl/SL_Menu.py:598 sl/SL_Menu.py:618 +#: sl/SL_Menu.py:638 sl/SL_Menu.py:658 msgid "Weekly overview" msgstr "" -#: sl/SL_Menu.py:599 sl/SL_Menu.py:619 +#: sl/SL_Menu.py:639 sl/SL_Menu.py:659 msgid "Overdue tasks" msgstr "" -#: sl/SL_Menu.py:600 sl/SL_Menu.py:620 +#: sl/SL_Menu.py:640 sl/SL_Menu.py:660 msgid "Unplanned tasks" msgstr "" -#: sl/SL_Menu.py:601 +#: sl/SL_Menu.py:641 msgid "All" msgstr "" -#: sl/SL_Menu.py:608 +#: sl/SL_Menu.py:648 msgid "Filter" msgstr "" -#: sl/SL_Menu.py:627 +#: sl/SL_Menu.py:667 msgid "Tasks" msgstr "" -#: sl/SL_Menu.py:634 tt/TimeTracker.py:1471 tt/TimeTracker.py:1569 +#: sl/SL_Menu.py:674 tt/TimeTracker.py:1479 tt/TimeTracker.py:1577 msgid "Friday" msgstr "" -#: sl/SL_Menu.py:634 tt/TimeTracker.py:1471 tt/TimeTracker.py:1569 +#: sl/SL_Menu.py:674 tt/TimeTracker.py:1479 tt/TimeTracker.py:1577 msgid "Monday" msgstr "" -#: sl/SL_Menu.py:634 tt/TimeTracker.py:1471 tt/TimeTracker.py:1569 +#: sl/SL_Menu.py:674 tt/TimeTracker.py:1479 tt/TimeTracker.py:1577 msgid "Saturday" msgstr "" -#: sl/SL_Menu.py:634 tt/TimeTracker.py:1471 tt/TimeTracker.py:1569 +#: sl/SL_Menu.py:674 tt/TimeTracker.py:1479 tt/TimeTracker.py:1577 msgid "Sunday" msgstr "" -#: sl/SL_Menu.py:634 tt/TimeTracker.py:1471 tt/TimeTracker.py:1569 +#: sl/SL_Menu.py:674 tt/TimeTracker.py:1479 tt/TimeTracker.py:1577 msgid "Thursday" msgstr "" -#: sl/SL_Menu.py:634 tt/TimeTracker.py:1471 tt/TimeTracker.py:1569 +#: sl/SL_Menu.py:674 tt/TimeTracker.py:1479 tt/TimeTracker.py:1577 msgid "Tuesday" msgstr "" -#: sl/SL_Menu.py:634 tt/TimeTracker.py:1471 tt/TimeTracker.py:1569 +#: sl/SL_Menu.py:674 tt/TimeTracker.py:1479 tt/TimeTracker.py:1577 msgid "Wednesday" msgstr "" -#: sl/SL_Menu.py:796 +#: sl/SL_Menu.py:735 sl/SL_Menu.py:821 sl/SL_Menu.py:873 sl/SL_Menu.py:1018 +#: sl/SL_Menu.py:2495 +msgid "Done" +msgstr "" + +#: sl/SL_Menu.py:836 msgid "No tasks found." msgstr "" -#: sl/SL_Menu.py:798 sl/SL_Menu.py:955 sl/SL_Menu.py:1106 sl/SL_Menu.py:1163 -#: sl/SL_Menu.py:1211 sl/SL_Menu.py:1515 sl/SL_Menu.py:1548 sl/SL_Menu.py:1559 -#: sl/SL_Menu.py:1593 sl/SL_Menu.py:1604 sl/SL_Menu.py:1638 sl/SL_Menu.py:1649 -#: sl/SL_Menu.py:1684 sl/SL_Menu.py:1695 sl/SL_Menu.py:1703 sl/SL_Menu.py:1754 -#: sl/SL_Menu.py:1779 sl/SL_Menu.py:1801 sl/SL_Menu.py:1833 sl/SL_Menu.py:1844 -#: sl/SL_Menu.py:1884 sl/SL_Menu.py:1896 sl/SL_Menu.py:1931 sl/SL_Menu.py:1952 -#: sl/SL_Menu.py:1964 sl/SL_Menu.py:1975 sl/SL_Menu.py:2011 sl/SL_Menu.py:2041 -#: sl/SL_Menu.py:2071 sl/SL_Menu.py:2111 sl/SL_Menu.py:2123 sl/SL_Menu.py:2170 -#: sl/SL_Menu.py:2182 sl/SL_Menu.py:2316 sl/SL_Menu.py:2335 sl/SL_Menu.py:2348 -#: sl/SL_Menu.py:2363 sl/SL_Menu.py:2500 sl/SL_Menu.py:2510 sl/SL_Menu.py:2554 -#: sl/SL_Menu.py:2573 sl/SL_Menu.py:2600 sl/SL_Menu.py:2612 sl/SL_Menu.py:2624 -#: sl/SL_Menu.py:2643 sl/SL_Menu.py:2659 sl/SL_Menu.py:2671 sl/SL_Menu.py:2686 -#: sl/SL_Menu.py:2705 sl/SL_Menu.py:2746 sl/SL_Menu.py:2761 +#: sl/SL_Menu.py:838 sl/SL_Menu.py:1190 sl/SL_Menu.py:1208 sl/SL_Menu.py:1247 +#: sl/SL_Menu.py:1295 sl/SL_Menu.py:1329 sl/SL_Menu.py:1599 sl/SL_Menu.py:1632 +#: sl/SL_Menu.py:1643 sl/SL_Menu.py:1677 sl/SL_Menu.py:1688 sl/SL_Menu.py:1722 +#: sl/SL_Menu.py:1733 sl/SL_Menu.py:1768 sl/SL_Menu.py:1779 sl/SL_Menu.py:1787 +#: sl/SL_Menu.py:1838 sl/SL_Menu.py:1863 sl/SL_Menu.py:1885 sl/SL_Menu.py:1917 +#: sl/SL_Menu.py:1928 sl/SL_Menu.py:1968 sl/SL_Menu.py:1980 sl/SL_Menu.py:2015 +#: sl/SL_Menu.py:2036 sl/SL_Menu.py:2048 sl/SL_Menu.py:2059 sl/SL_Menu.py:2095 +#: sl/SL_Menu.py:2125 sl/SL_Menu.py:2155 sl/SL_Menu.py:2195 sl/SL_Menu.py:2207 +#: sl/SL_Menu.py:2254 sl/SL_Menu.py:2266 sl/SL_Menu.py:2400 sl/SL_Menu.py:2419 +#: sl/SL_Menu.py:2432 sl/SL_Menu.py:2447 sl/SL_Menu.py:2584 sl/SL_Menu.py:2594 +#: sl/SL_Menu.py:2638 sl/SL_Menu.py:2657 sl/SL_Menu.py:2684 sl/SL_Menu.py:2696 +#: sl/SL_Menu.py:2708 sl/SL_Menu.py:2727 sl/SL_Menu.py:2743 sl/SL_Menu.py:2755 +#: sl/SL_Menu.py:2770 sl/SL_Menu.py:2789 sl/SL_Menu.py:2830 sl/SL_Menu.py:2845 msgid "Back" msgstr "" -#: sl/SL_Menu.py:805 +#: sl/SL_Menu.py:849 msgid "Today's Tasks" msgstr "" -#: sl/SL_Menu.py:826 -msgid "Show only open tasks" +#: sl/SL_Menu.py:868 sl/SL_Menu.py:2623 +msgid "Current Active Work" msgstr "" -#: sl/SL_Menu.py:838 -msgid "Sort by priority" +#: sl/SL_Menu.py:887 +msgid "Edit current task" msgstr "" -#: sl/SL_Menu.py:907 sl/SL_Menu.py:2243 sl/SL_Menu.py:2415 -msgid "Priority" +#: sl/SL_Menu.py:908 +msgid "Show only open tasks" +msgstr "" + +#: sl/SL_Menu.py:920 +msgid "Sort by priority" msgstr "" -#: sl/SL_Menu.py:910 sl/SL_Menu.py:2243 sl/SL_Menu.py:2415 +#: sl/SL_Menu.py:992 sl/SL_Menu.py:2327 sl/SL_Menu.py:2499 msgid "0 (lowest) to 9 (highest)" msgstr "" -#: sl/SL_Menu.py:951 +#: sl/SL_Menu.py:1033 msgid "No open tasks for today." msgstr "" -#: sl/SL_Menu.py:953 +#: sl/SL_Menu.py:1035 msgid "No tasks for today." msgstr "" -#: sl/SL_Menu.py:968 +#: sl/SL_Menu.py:1039 +msgid "Exit" +msgstr "" + +#: sl/SL_Menu.py:1052 msgid "Fetching emails..." msgstr "" -#: sl/SL_Menu.py:971 +#: sl/SL_Menu.py:1055 #, python-brace-format msgid "Error fetching emails: {error}" msgstr "" -#: sl/SL_Menu.py:974 +#: sl/SL_Menu.py:1058 #, python-brace-format msgid "{count} new tasks created from emails." msgstr "" -#: sl/SL_Menu.py:976 +#: sl/SL_Menu.py:1060 msgid "No new emails found." msgstr "" -#: sl/SL_Menu.py:1001 +#: sl/SL_Menu.py:1085 #, python-brace-format msgid "{remaining} of {total} emails still to process" msgstr "" -#: sl/SL_Menu.py:1005 +#: sl/SL_Menu.py:1089 msgid "No unassigned email tasks available." msgstr "" -#: sl/SL_Menu.py:1017 +#: sl/SL_Menu.py:1101 msgid "Assign Project" msgstr "" -#: sl/SL_Menu.py:1028 +#: sl/SL_Menu.py:1112 msgid "Are you sure you want to delete this task?" msgstr "" -#: sl/SL_Menu.py:1031 +#: sl/SL_Menu.py:1115 msgid "Yes, delete" msgstr "" -#: sl/SL_Menu.py:1036 +#: sl/SL_Menu.py:1120 msgid "No, cancel" msgstr "" -#: sl/SL_Menu.py:1043 +#: sl/SL_Menu.py:1127 msgid "Delete" msgstr "" -#: sl/SL_Menu.py:1047 +#: sl/SL_Menu.py:1131 msgid "Edit Details" msgstr "" -#: sl/SL_Menu.py:1055 sl/SL_Menu.py:2395 +#: sl/SL_Menu.py:1139 sl/SL_Menu.py:2479 msgid "Task Name" msgstr "" -#: sl/SL_Menu.py:1064 sl/SL_Menu.py:2399 +#: sl/SL_Menu.py:1148 sl/SL_Menu.py:2483 msgid "Due Date" msgstr "" -#: sl/SL_Menu.py:1072 sl/SL_Menu.py:2403 +#: sl/SL_Menu.py:1156 sl/SL_Menu.py:2487 msgid "Clear" msgstr "" -#: sl/SL_Menu.py:1079 sl/SL_Menu.py:2271 sl/SL_Menu.py:2444 +#: sl/SL_Menu.py:1163 sl/SL_Menu.py:2355 sl/SL_Menu.py:2528 msgid "Notes (Markdown)" msgstr "" -#: sl/SL_Menu.py:1098 +#: sl/SL_Menu.py:1182 msgid "Task details updated successfully." msgstr "" -#: sl/SL_Menu.py:1104 +#: sl/SL_Menu.py:1188 msgid "Error updating task details." msgstr "" -#: sl/SL_Menu.py:1115 sl/SL_Menu.py:1131 +#: sl/SL_Menu.py:1199 sl/SL_Menu.py:1215 msgid "Project Management" msgstr "" -#: sl/SL_Menu.py:1124 sl/SL_Menu.py:1245 -msgid "Back to Main Menu" -msgstr "" - -#: sl/SL_Menu.py:1259 +#: sl/SL_Menu.py:1343 msgid "Change Language" msgstr "" -#: sl/SL_Menu.py:1277 +#: sl/SL_Menu.py:1361 msgid "Select Language" msgstr "" -#: sl/SL_Menu.py:1278 sl/SL_Menu.py:1318 sl/SL_Menu.py:1359 sl/SL_Menu.py:1372 -#: sl/SL_Menu.py:1392 sl/SL_Menu.py:1426 sl/SL_Menu.py:1449 sl/SL_Menu.py:1504 +#: sl/SL_Menu.py:1362 sl/SL_Menu.py:1402 sl/SL_Menu.py:1443 sl/SL_Menu.py:1456 +#: sl/SL_Menu.py:1476 sl/SL_Menu.py:1510 sl/SL_Menu.py:1533 sl/SL_Menu.py:1588 msgid "Save" msgstr "" -#: sl/SL_Menu.py:1284 +#: sl/SL_Menu.py:1368 msgid "" "Language changed. Please restart the application for the changes to take " "effect." msgstr "" -#: sl/SL_Menu.py:1287 +#: sl/SL_Menu.py:1371 msgid "Restore Previous Version" msgstr "" -#: sl/SL_Menu.py:1290 +#: sl/SL_Menu.py:1374 msgid "The 'update' module is not available. This feature is disabled." msgstr "" -#: sl/SL_Menu.py:1292 +#: sl/SL_Menu.py:1376 #, python-brace-format msgid "No previous version backup '{filename}' found." msgstr "" -#: sl/SL_Menu.py:1294 +#: sl/SL_Menu.py:1378 msgid "" "This will restore the application to the previously backed-up version. The " "application will then restart. You may need to manually refresh your browser " "if it does not reconnect automatically." msgstr "" -#: sl/SL_Menu.py:1295 +#: sl/SL_Menu.py:1379 msgid "Restore and Restart" msgstr "" -#: sl/SL_Menu.py:1296 +#: sl/SL_Menu.py:1380 msgid "Restoring and restarting..." msgstr "" -#: sl/SL_Menu.py:1299 +#: sl/SL_Menu.py:1383 msgid "Restore complete. Please restart the application." msgstr "" -#: sl/SL_Menu.py:1301 +#: sl/SL_Menu.py:1385 msgid "Change Data Storage Location" msgstr "" -#: sl/SL_Menu.py:1303 +#: sl/SL_Menu.py:1387 msgid "Current data file" msgstr "" -#: sl/SL_Menu.py:1306 +#: sl/SL_Menu.py:1390 msgid "New Path for data file" msgstr "" -#: sl/SL_Menu.py:1312 +#: sl/SL_Menu.py:1396 msgid "Move existing data to the new location" msgstr "" -#: sl/SL_Menu.py:1315 +#: sl/SL_Menu.py:1399 msgid "" "If unchecked, the old data file will remain, and a new empty one might be " "created at the new location on restart." msgstr "" -#: sl/SL_Menu.py:1322 +#: sl/SL_Menu.py:1406 msgid "Please enter a new path." msgstr "" -#: sl/SL_Menu.py:1330 +#: sl/SL_Menu.py:1414 msgid "" "Error: For security, the data file must be located within the application " "directory." msgstr "" -#: sl/SL_Menu.py:1339 +#: sl/SL_Menu.py:1423 msgid "" "Storage location updated. Please restart the application for the changes to " "take effect." msgstr "" -#: sl/SL_Menu.py:1353 +#: sl/SL_Menu.py:1437 msgid "Report Format" msgstr "" -#: sl/SL_Menu.py:1358 +#: sl/SL_Menu.py:1442 msgid "Select Format" msgstr "" -#: sl/SL_Menu.py:1363 +#: sl/SL_Menu.py:1447 msgid "Report format updated." msgstr "" -#: sl/SL_Menu.py:1366 +#: sl/SL_Menu.py:1450 msgid "Streamlit Port Settings" msgstr "" -#: sl/SL_Menu.py:1368 +#: sl/SL_Menu.py:1452 msgid "Current Streamlit Port" msgstr "" -#: sl/SL_Menu.py:1371 +#: sl/SL_Menu.py:1455 msgid "New Port" msgstr "" -#: sl/SL_Menu.py:1376 +#: sl/SL_Menu.py:1460 #, python-brace-format msgid "Port updated to {port}. Please restart Streamlit." msgstr "" -#: sl/SL_Menu.py:1379 +#: sl/SL_Menu.py:1463 msgid "Email Settings" msgstr "" -#: sl/SL_Menu.py:1385 +#: sl/SL_Menu.py:1469 msgid "Enable email import" msgstr "" -#: sl/SL_Menu.py:1386 +#: sl/SL_Menu.py:1470 msgid "IMAP Server" msgstr "" -#: sl/SL_Menu.py:1387 +#: sl/SL_Menu.py:1471 msgid "Port" msgstr "" -#: sl/SL_Menu.py:1388 +#: sl/SL_Menu.py:1472 msgid "Username" msgstr "" -#: sl/SL_Menu.py:1389 +#: sl/SL_Menu.py:1473 msgid "Password" msgstr "" -#: sl/SL_Menu.py:1390 +#: sl/SL_Menu.py:1474 msgid "Use SSL" msgstr "" -#: sl/SL_Menu.py:1403 +#: sl/SL_Menu.py:1487 msgid "Email settings saved." msgstr "" -#: sl/SL_Menu.py:1406 +#: sl/SL_Menu.py:1490 msgid "Change CSS Style" msgstr "" -#: sl/SL_Menu.py:1408 +#: sl/SL_Menu.py:1492 msgid "Current CSS file" msgstr "" -#: sl/SL_Menu.py:1425 +#: sl/SL_Menu.py:1509 msgid "Select CSS File" msgstr "" -#: sl/SL_Menu.py:1431 +#: sl/SL_Menu.py:1515 msgid "" "CSS style updated. Please restart the application for the changes to take " "effect." msgstr "" -#: sl/SL_Menu.py:1434 +#: sl/SL_Menu.py:1518 msgid "Change View Mode" msgstr "" -#: sl/SL_Menu.py:1438 +#: sl/SL_Menu.py:1522 msgid "App Window (Webview)" msgstr "" -#: sl/SL_Menu.py:1438 +#: sl/SL_Menu.py:1522 msgid "System Browser" msgstr "" -#: sl/SL_Menu.py:1448 +#: sl/SL_Menu.py:1532 msgid "Select View Mode" msgstr "" -#: sl/SL_Menu.py:1455 +#: sl/SL_Menu.py:1539 msgid "" "View mode updated. Please restart the application for the changes to take " "effect." msgstr "" -#: sl/SL_Menu.py:1458 +#: sl/SL_Menu.py:1542 msgid "MCP Server Settings" msgstr "" -#: sl/SL_Menu.py:1460 +#: sl/SL_Menu.py:1544 msgid "HTTP (Streamable HTTP)" msgstr "" -#: sl/SL_Menu.py:1461 +#: sl/SL_Menu.py:1545 msgid "stdio (recommended for Claude Desktop)" msgstr "" -#: sl/SL_Menu.py:1475 +#: sl/SL_Menu.py:1559 msgid "Transport" msgstr "" -#: sl/SL_Menu.py:1486 +#: sl/SL_Menu.py:1570 msgid "Enable MCP server" msgstr "" -#: sl/SL_Menu.py:1489 +#: sl/SL_Menu.py:1573 msgid "" "Not used with stdio - the MCP client starts and stops the server itself." msgstr "" -#: sl/SL_Menu.py:1492 +#: sl/SL_Menu.py:1576 msgid "Port (HTTP only)" msgstr "" -#: sl/SL_Menu.py:1499 +#: sl/SL_Menu.py:1583 msgid "" "With stdio, the app does not start the MCP server itself - the MCP client " "(e.g. Claude Desktop) launches it directly, and the port is ignored." msgstr "" -#: sl/SL_Menu.py:1510 +#: sl/SL_Menu.py:1594 msgid "" "MCP server settings saved. Please restart the application for the changes to " "take effect." msgstr "" -#: sl/SL_Menu.py:1524 +#: sl/SL_Menu.py:1608 msgid "Add New Project" msgstr "" -#: sl/SL_Menu.py:1527 +#: sl/SL_Menu.py:1611 msgid "Name of the project" msgstr "" -#: sl/SL_Menu.py:1531 +#: sl/SL_Menu.py:1615 #, python-brace-format msgid "Project '{name}' added." msgstr "" -#: sl/SL_Menu.py:1535 sl/SL_Menu.py:1581 sl/SL_Menu.py:1626 sl/SL_Menu.py:1672 -#: sl/SL_Menu.py:1727 sl/SL_Menu.py:1821 sl/SL_Menu.py:1869 sl/SL_Menu.py:1919 -#: sl/SL_Menu.py:1999 sl/SL_Menu.py:2029 sl/SL_Menu.py:2059 sl/SL_Menu.py:2090 -#: sl/SL_Menu.py:2152 sl/SL_Menu.py:2192 sl/SL_Menu.py:2304 sl/SL_Menu.py:2323 -#: sl/SL_Menu.py:2484 sl/SL_Menu.py:2532 +#: sl/SL_Menu.py:1619 sl/SL_Menu.py:1665 sl/SL_Menu.py:1710 sl/SL_Menu.py:1756 +#: sl/SL_Menu.py:1811 sl/SL_Menu.py:1905 sl/SL_Menu.py:1953 sl/SL_Menu.py:2003 +#: sl/SL_Menu.py:2083 sl/SL_Menu.py:2113 sl/SL_Menu.py:2143 sl/SL_Menu.py:2174 +#: sl/SL_Menu.py:2236 sl/SL_Menu.py:2276 sl/SL_Menu.py:2388 sl/SL_Menu.py:2407 +#: sl/SL_Menu.py:2568 sl/SL_Menu.py:2616 msgid "Cancel" msgstr "" -#: sl/SL_Menu.py:1553 sl/SL_Menu.py:1598 sl/SL_Menu.py:1643 sl/SL_Menu.py:1838 -#: sl/SL_Menu.py:1901 sl/SL_Menu.py:1936 sl/SL_Menu.py:1969 sl/SL_Menu.py:2018 -#: sl/SL_Menu.py:2048 sl/SL_Menu.py:2078 sl/SL_Menu.py:2505 sl/SL_Menu.py:2617 -#: sl/SL_Menu.py:2678 +#: sl/SL_Menu.py:1637 sl/SL_Menu.py:1682 sl/SL_Menu.py:1727 sl/SL_Menu.py:1922 +#: sl/SL_Menu.py:1985 sl/SL_Menu.py:2020 sl/SL_Menu.py:2053 sl/SL_Menu.py:2102 +#: sl/SL_Menu.py:2132 sl/SL_Menu.py:2162 sl/SL_Menu.py:2589 sl/SL_Menu.py:2701 +#: sl/SL_Menu.py:2762 msgid "Select Project" msgstr "" -#: sl/SL_Menu.py:1558 +#: sl/SL_Menu.py:1642 #, python-brace-format msgid "No open tasks to close in '{name}'." msgstr "" -#: sl/SL_Menu.py:1565 sl/SL_Menu.py:1610 sl/SL_Menu.py:1655 sl/SL_Menu.py:1709 -#: sl/SL_Menu.py:1850 sl/SL_Menu.py:1979 sl/SL_Menu.py:2338 sl/SL_Menu.py:2516 -#: sl/SL_Menu.py:2648 +#: sl/SL_Menu.py:1649 sl/SL_Menu.py:1694 sl/SL_Menu.py:1739 sl/SL_Menu.py:1793 +#: sl/SL_Menu.py:1934 sl/SL_Menu.py:2063 sl/SL_Menu.py:2422 sl/SL_Menu.py:2600 +#: sl/SL_Menu.py:2732 msgid "Select Task" msgstr "" -#: sl/SL_Menu.py:1575 +#: sl/SL_Menu.py:1659 #, python-brace-format msgid "Task '{sub_name}' in '{main_name}' has been closed." msgstr "" -#: sl/SL_Menu.py:1603 +#: sl/SL_Menu.py:1687 #, python-brace-format msgid "No closed tasks to reopen in '{name}'." msgstr "" -#: sl/SL_Menu.py:1620 +#: sl/SL_Menu.py:1704 #, python-brace-format msgid "Task '{sub_name}' in '{main_name}' has been reopened." msgstr "" -#: sl/SL_Menu.py:1648 +#: sl/SL_Menu.py:1732 #, python-brace-format msgid "No open tasks to delete in '{name}'." msgstr "" -#: sl/SL_Menu.py:1659 +#: sl/SL_Menu.py:1743 msgid "This action cannot be undone." msgstr "" -#: sl/SL_Menu.py:1666 +#: sl/SL_Menu.py:1750 #, python-brace-format msgid "Task '{sub_name}' deleted from '{main_name}'." msgstr "" -#: sl/SL_Menu.py:1689 +#: sl/SL_Menu.py:1773 msgid "Select Source Project" msgstr "" -#: sl/SL_Menu.py:1694 +#: sl/SL_Menu.py:1778 #, python-brace-format msgid "No tasks found in '{name}'." msgstr "" -#: sl/SL_Menu.py:1702 +#: sl/SL_Menu.py:1786 msgid "No other projects available to move to." msgstr "" -#: sl/SL_Menu.py:1713 sl/SL_Menu.py:2138 +#: sl/SL_Menu.py:1797 sl/SL_Menu.py:2222 msgid "Select Target Project" msgstr "" -#: sl/SL_Menu.py:1721 +#: sl/SL_Menu.py:1805 #, python-brace-format msgid "Task '{sub}' moved from '{src}' to '{dst}'." msgstr "" -#: sl/SL_Menu.py:1725 +#: sl/SL_Menu.py:1809 msgid "Error: Could not move task." msgstr "" -#: sl/SL_Menu.py:1736 sl/SL_Menu.py:2099 +#: sl/SL_Menu.py:1820 sl/SL_Menu.py:2183 msgid "Weeks of inactivity" msgstr "" -#: sl/SL_Menu.py:1741 +#: sl/SL_Menu.py:1825 #, python-brace-format msgid "Inactive Tasks (> {weeks} weeks):" msgstr "" -#: sl/SL_Menu.py:1746 sl/SL_Menu.py:2107 +#: sl/SL_Menu.py:1830 sl/SL_Menu.py:2191 msgid "Last Activity" msgstr "" -#: sl/SL_Menu.py:1805 +#: sl/SL_Menu.py:1889 #, python-brace-format msgid "" "Are you sure you want to delete {count} closed tasks? This action cannot be " "undone." msgstr "" -#: sl/SL_Menu.py:1807 +#: sl/SL_Menu.py:1891 msgid "Show projects to delete" msgstr "" -#: sl/SL_Menu.py:1811 +#: sl/SL_Menu.py:1895 msgid "Delete All" msgstr "" -#: sl/SL_Menu.py:1817 +#: sl/SL_Menu.py:1901 #, python-brace-format msgid "Successfully deleted {count} tasks." msgstr "" -#: sl/SL_Menu.py:1843 +#: sl/SL_Menu.py:1927 #, python-brace-format msgid "No open tasks to promote in '{name}'." msgstr "" -#: sl/SL_Menu.py:1854 +#: sl/SL_Menu.py:1938 msgid "" "This will create a new Project with the task's name and move all time " "entries to a 'General' task within it." msgstr "" -#: sl/SL_Menu.py:1856 +#: sl/SL_Menu.py:1940 msgid "Promote to Project" msgstr "" -#: sl/SL_Menu.py:1895 +#: sl/SL_Menu.py:1979 msgid "No open projects to rename." msgstr "" -#: sl/SL_Menu.py:1904 sl/SL_Menu.py:1984 +#: sl/SL_Menu.py:1988 sl/SL_Menu.py:2068 msgid "New Name" msgstr "" -#: sl/SL_Menu.py:1905 sl/SL_Menu.py:1985 +#: sl/SL_Menu.py:1989 sl/SL_Menu.py:2069 msgid "Rename" msgstr "" -#: sl/SL_Menu.py:1909 sl/SL_Menu.py:1989 +#: sl/SL_Menu.py:1993 sl/SL_Menu.py:2073 msgid "Please enter a new name." msgstr "" -#: sl/SL_Menu.py:1911 sl/SL_Menu.py:1991 +#: sl/SL_Menu.py:1995 sl/SL_Menu.py:2075 msgid "New name is the same as the old name." msgstr "" -#: sl/SL_Menu.py:1913 +#: sl/SL_Menu.py:1997 #, python-brace-format msgid "Project '{old_name}' successfully renamed to '{new_name}'." msgstr "" -#: sl/SL_Menu.py:1974 +#: sl/SL_Menu.py:2058 #, python-brace-format msgid "No open tasks to rename in '{name}'." msgstr "" -#: sl/SL_Menu.py:1997 +#: sl/SL_Menu.py:2081 msgid "Error: Could not rename. The new name might already exist." msgstr "" -#: sl/SL_Menu.py:2010 +#: sl/SL_Menu.py:2094 msgid "No open projects to close." msgstr "" -#: sl/SL_Menu.py:2023 +#: sl/SL_Menu.py:2107 #, python-brace-format msgid "Project '{name}' has been closed." msgstr "" -#: sl/SL_Menu.py:2027 sl/SL_Menu.py:2057 sl/SL_Menu.py:2088 +#: sl/SL_Menu.py:2111 sl/SL_Menu.py:2141 sl/SL_Menu.py:2172 msgid "Error: Project not found." msgstr "" -#: sl/SL_Menu.py:2040 +#: sl/SL_Menu.py:2124 msgid "No closed projects to reopen." msgstr "" -#: sl/SL_Menu.py:2053 +#: sl/SL_Menu.py:2137 #, python-brace-format msgid "Project '{name}' has been reopened." msgstr "" -#: sl/SL_Menu.py:2079 +#: sl/SL_Menu.py:2163 msgid "" "This action cannot be undone. All associated tasks and time entries will be " "deleted." msgstr "" -#: sl/SL_Menu.py:2084 +#: sl/SL_Menu.py:2168 #, python-brace-format msgid "Project '{name}' has been deleted." msgstr "" -#: sl/SL_Menu.py:2104 +#: sl/SL_Menu.py:2188 #, python-brace-format msgid "Inactive Projects (> {weeks} weeks):" msgstr "" -#: sl/SL_Menu.py:2109 +#: sl/SL_Menu.py:2193 #, python-brace-format msgid "No projects found inactive for more than {weeks} weeks." msgstr "" -#: sl/SL_Menu.py:2118 sl/SL_Menu.py:2141 +#: sl/SL_Menu.py:2202 sl/SL_Menu.py:2225 msgid "Demote Project" msgstr "" -#: sl/SL_Menu.py:2130 +#: sl/SL_Menu.py:2214 msgid "Select Project to Demote" msgstr "" -#: sl/SL_Menu.py:2136 +#: sl/SL_Menu.py:2220 msgid "No other projects available to demote into." msgstr "" -#: sl/SL_Menu.py:2139 +#: sl/SL_Menu.py:2223 #, python-brace-format msgid "This will convert '{src}' into a task of '{dst}'." msgstr "" -#: sl/SL_Menu.py:2164 +#: sl/SL_Menu.py:2248 msgid "Projects with only closed or no tasks:" msgstr "" -#: sl/SL_Menu.py:2168 +#: sl/SL_Menu.py:2252 msgid "No completed projects found." msgstr "" -#: sl/SL_Menu.py:2177 sl/SL_Menu.py:2311 sl/SL_Menu.py:2607 +#: sl/SL_Menu.py:2261 sl/SL_Menu.py:2395 sl/SL_Menu.py:2691 msgid "Step 1: Select Project" msgstr "" -#: sl/SL_Menu.py:2181 sl/SL_Menu.py:2499 +#: sl/SL_Menu.py:2265 sl/SL_Menu.py:2583 msgid "No open projects found. Please add one first." msgstr "" -#: sl/SL_Menu.py:2186 sl/SL_Menu.py:2318 sl/SL_Menu.py:2547 +#: sl/SL_Menu.py:2270 sl/SL_Menu.py:2402 sl/SL_Menu.py:2631 msgid "Project" msgstr "" -#: sl/SL_Menu.py:2188 sl/SL_Menu.py:2319 sl/SL_Menu.py:2343 sl/SL_Menu.py:2619 +#: sl/SL_Menu.py:2272 sl/SL_Menu.py:2403 sl/SL_Menu.py:2427 sl/SL_Menu.py:2703 msgid "Next" msgstr "" -#: sl/SL_Menu.py:2203 sl/SL_Menu.py:2633 +#: sl/SL_Menu.py:2287 sl/SL_Menu.py:2717 msgid "No project selected. Please start again." msgstr "" -#: sl/SL_Menu.py:2208 +#: sl/SL_Menu.py:2292 msgid "To Project:" msgstr "" -#: sl/SL_Menu.py:2229 +#: sl/SL_Menu.py:2313 msgid "Name of the new task" msgstr "" -#: sl/SL_Menu.py:2235 +#: sl/SL_Menu.py:2319 msgid "Due date" msgstr "" -#: sl/SL_Menu.py:2241 sl/SL_Menu.py:2413 +#: sl/SL_Menu.py:2325 sl/SL_Menu.py:2497 msgid "Recurring" msgstr "" -#: sl/SL_Menu.py:2257 sl/SL_Menu.py:2428 +#: sl/SL_Menu.py:2341 sl/SL_Menu.py:2512 msgid "daily" msgstr "" -#: sl/SL_Menu.py:2257 sl/SL_Menu.py:2428 +#: sl/SL_Menu.py:2341 sl/SL_Menu.py:2512 msgid "monthly" msgstr "" -#: sl/SL_Menu.py:2257 sl/SL_Menu.py:2428 +#: sl/SL_Menu.py:2341 sl/SL_Menu.py:2512 msgid "on all business days" msgstr "" -#: sl/SL_Menu.py:2257 sl/SL_Menu.py:2428 +#: sl/SL_Menu.py:2341 sl/SL_Menu.py:2512 msgid "userdefined" msgstr "" -#: sl/SL_Menu.py:2257 sl/SL_Menu.py:2428 +#: sl/SL_Menu.py:2341 sl/SL_Menu.py:2512 msgid "weekly" msgstr "" -#: sl/SL_Menu.py:2261 sl/SL_Menu.py:2437 +#: sl/SL_Menu.py:2345 sl/SL_Menu.py:2521 msgid "Frequency" msgstr "" -#: sl/SL_Menu.py:2265 sl/SL_Menu.py:2440 +#: sl/SL_Menu.py:2349 sl/SL_Menu.py:2524 msgid "Days" msgstr "" -#: sl/SL_Menu.py:2269 sl/SL_Menu.py:2442 +#: sl/SL_Menu.py:2353 sl/SL_Menu.py:2526 msgid "Edit" msgstr "" -#: sl/SL_Menu.py:2269 sl/SL_Menu.py:2442 +#: sl/SL_Menu.py:2353 sl/SL_Menu.py:2526 msgid "Preview" msgstr "" -#: sl/SL_Menu.py:2274 sl/SL_Menu.py:2447 +#: sl/SL_Menu.py:2358 sl/SL_Menu.py:2531 msgid "No notes provided." msgstr "" -#: sl/SL_Menu.py:2279 sl/SL_Menu.py:2452 +#: sl/SL_Menu.py:2363 sl/SL_Menu.py:2536 msgid "A due date is required for recurring tasks." msgstr "" -#: sl/SL_Menu.py:2287 +#: sl/SL_Menu.py:2371 msgid "Please enter a name." msgstr "" -#: sl/SL_Menu.py:2299 +#: sl/SL_Menu.py:2383 #, python-brace-format msgid "Task '{sub_name}' added to '{main_name}'." msgstr "" -#: sl/SL_Menu.py:2331 sl/SL_Menu.py:2638 +#: sl/SL_Menu.py:2415 sl/SL_Menu.py:2722 msgid "Step 2: Select Task from" msgstr "" -#: sl/SL_Menu.py:2334 +#: sl/SL_Menu.py:2418 msgid "No open tasks found." msgstr "" -#: sl/SL_Menu.py:2362 +#: sl/SL_Menu.py:2446 msgid "Task not found." msgstr "" -#: sl/SL_Menu.py:2456 +#: sl/SL_Menu.py:2540 msgid "Save Changes" msgstr "" -#: sl/SL_Menu.py:2481 +#: sl/SL_Menu.py:2565 msgid "Error: Could not update task." msgstr "" -#: sl/SL_Menu.py:2494 +#: sl/SL_Menu.py:2578 msgid "Start Work on Task" msgstr "" -#: sl/SL_Menu.py:2509 +#: sl/SL_Menu.py:2593 #, python-brace-format msgid "No open tasks to start work on in '{name}'." msgstr "" -#: sl/SL_Menu.py:2520 +#: sl/SL_Menu.py:2604 msgid "Start Work" msgstr "" -#: sl/SL_Menu.py:2548 +#: sl/SL_Menu.py:2632 msgid "Task" msgstr "" -#: sl/SL_Menu.py:2549 +#: sl/SL_Menu.py:2633 msgid "Started at" msgstr "" -#: sl/SL_Menu.py:2550 tt/TimeTracker.py:1446 +#: sl/SL_Menu.py:2634 tt/TimeTracker.py:1454 msgid "Duration" msgstr "" -#: sl/SL_Menu.py:2564 sl/SL_Menu.py:2696 +#: sl/SL_Menu.py:2648 sl/SL_Menu.py:2780 msgid "Select Date" msgstr "" -#: sl/SL_Menu.py:2565 sl/SL_Menu.py:2589 sl/SL_Menu.py:2653 sl/SL_Menu.py:2679 -#: sl/SL_Menu.py:2697 +#: sl/SL_Menu.py:2649 sl/SL_Menu.py:2673 sl/SL_Menu.py:2737 sl/SL_Menu.py:2763 +#: sl/SL_Menu.py:2781 msgid "Generate Report" msgstr "" -#: sl/SL_Menu.py:2585 +#: sl/SL_Menu.py:2669 msgid "Start Date" msgstr "" -#: sl/SL_Menu.py:2587 +#: sl/SL_Menu.py:2671 msgid "End Date" msgstr "" -#: sl/SL_Menu.py:2712 +#: sl/SL_Menu.py:2796 msgid "Report Result" msgstr "" -#: sl/SL_Menu.py:2741 +#: sl/SL_Menu.py:2825 msgid "Export Report" msgstr "" @@ -2229,7 +2243,7 @@ msgstr "" msgid "Task '{task_name}' moved successfully." msgstr "" -#: tt/TimeTracker.py:892 tt/TimeTracker.py:927 tt/TimeTracker.py:1408 +#: tt/TimeTracker.py:892 tt/TimeTracker.py:927 tt/TimeTracker.py:1416 #, python-brace-format msgid "Task '{task_name}' not found in '{main_name}'." msgstr "" @@ -2285,138 +2299,138 @@ msgstr "" msgid "Unknown Task" msgstr "" -#: tt/TimeTracker.py:1365 +#: tt/TimeTracker.py:1373 #, python-brace-format msgid "- {name}: {hours} hours" msgstr "" -#: tt/TimeTracker.py:1373 +#: tt/TimeTracker.py:1381 #, python-brace-format msgid "## {name} ({hours} hours)\n" msgstr "" -#: tt/TimeTracker.py:1382 +#: tt/TimeTracker.py:1390 #, python-brace-format msgid "# Daily Time Report: {date}\n" msgstr "" -#: tt/TimeTracker.py:1383 +#: tt/TimeTracker.py:1391 #, python-brace-format msgid "" "\n" "**Total Daily Time: {hours} hours**" msgstr "" -#: tt/TimeTracker.py:1387 tt/TimeTracker.py:1700 +#: tt/TimeTracker.py:1395 tt/TimeTracker.py:1708 #, python-brace-format msgid "No time tracked for {date}." msgstr "" -#: tt/TimeTracker.py:1404 tt/TimeTracker.py:1499 +#: tt/TimeTracker.py:1412 tt/TimeTracker.py:1507 #, python-brace-format msgid "Main project '{name}' not found." msgstr "" -#: tt/TimeTracker.py:1412 +#: tt/TimeTracker.py:1420 #, python-brace-format msgid "No time entries found for task '{task_name}'." msgstr "" -#: tt/TimeTracker.py:1445 tt/TimeTracker.py:1675 +#: tt/TimeTracker.py:1453 tt/TimeTracker.py:1683 msgid "now" msgstr "" -#: tt/TimeTracker.py:1450 +#: tt/TimeTracker.py:1458 #, python-brace-format msgid "# Detailed Report for Task: {name}" msgstr "" -#: tt/TimeTracker.py:1451 +#: tt/TimeTracker.py:1459 #, python-brace-format msgid "Part of Main Project: {name}" msgstr "" -#: tt/TimeTracker.py:1454 +#: tt/TimeTracker.py:1462 msgid "Active (currently running)" msgstr "" -#: tt/TimeTracker.py:1454 tt/TimeTracker.py:1551 +#: tt/TimeTracker.py:1462 tt/TimeTracker.py:1559 msgid "Inactive" msgstr "" -#: tt/TimeTracker.py:1455 tt/TimeTracker.py:1552 +#: tt/TimeTracker.py:1463 tt/TimeTracker.py:1560 msgid "Status" msgstr "" -#: tt/TimeTracker.py:1457 tt/TimeTracker.py:1554 +#: tt/TimeTracker.py:1465 tt/TimeTracker.py:1562 msgid "First entry" msgstr "" -#: tt/TimeTracker.py:1459 tt/TimeTracker.py:1556 +#: tt/TimeTracker.py:1467 tt/TimeTracker.py:1564 msgid "Last activity" msgstr "" -#: tt/TimeTracker.py:1461 tt/TimeTracker.py:1558 +#: tt/TimeTracker.py:1469 tt/TimeTracker.py:1566 msgid "Total recorded time" msgstr "" -#: tt/TimeTracker.py:1462 tt/TimeTracker.py:1560 +#: tt/TimeTracker.py:1470 tt/TimeTracker.py:1568 msgid "Total work sessions" msgstr "" -#: tt/TimeTracker.py:1466 tt/TimeTracker.py:1564 +#: tt/TimeTracker.py:1474 tt/TimeTracker.py:1572 msgid "Average session duration" msgstr "" -#: tt/TimeTracker.py:1469 tt/TimeTracker.py:1567 +#: tt/TimeTracker.py:1477 tt/TimeTracker.py:1575 msgid "Weekday Distribution" msgstr "" -#: tt/TimeTracker.py:1479 +#: tt/TimeTracker.py:1487 msgid "Daily Breakdown" msgstr "" -#: tt/TimeTracker.py:1548 +#: tt/TimeTracker.py:1556 #, python-brace-format msgid "# Detailed Report for Main Project: {name}" msgstr "" -#: tt/TimeTracker.py:1551 +#: tt/TimeTracker.py:1559 #, python-brace-format msgid "Active (working on '{task_name}')" msgstr "" -#: tt/TimeTracker.py:1559 +#: tt/TimeTracker.py:1567 msgid "Number of tasks" msgstr "" -#: tt/TimeTracker.py:1578 +#: tt/TimeTracker.py:1586 msgid "Task Breakdown" msgstr "" -#: tt/TimeTracker.py:1587 +#: tt/TimeTracker.py:1595 #, python-brace-format msgid "{num_sessions} sessions" msgstr "" -#: tt/TimeTracker.py:1640 +#: tt/TimeTracker.py:1648 #, python-brace-format msgid "# Time Report: {start_date} to {end_date}\n" msgstr "" -#: tt/TimeTracker.py:1641 +#: tt/TimeTracker.py:1649 #, python-brace-format msgid "" "\n" "**Total Time in Period: {total_time}**" msgstr "" -#: tt/TimeTracker.py:1645 +#: tt/TimeTracker.py:1653 #, python-brace-format msgid "No time tracked between {start_date} and {end_date}." msgstr "" -#: tt/TimeTracker.py:1661 +#: tt/TimeTracker.py:1669 #, python-brace-format msgid "# Detailed Daily Report: {date}" msgstr "" @@ -2427,11 +2441,6 @@ msgid "" "file is invalid." msgstr "" -#: update.py:49 -#, python-brace-format -msgid "A new version ({version}) is available." -msgstr "" - #: update.py:55 msgid "Error: Download URL for the new version not found." msgstr "" @@ -2459,81 +2468,85 @@ msgstr "" msgid "Error downloading the update: {error}" msgstr "" -#: update.py:108 +#: update.py:98 +msgid "Restarting application to apply the update..." +msgstr "" + +#: update.py:122 msgid "Creating backup of current version before update..." msgstr "" -#: update.py:118 +#: update.py:132 #, python-brace-format msgid "Backup created successfully as {filename}." msgstr "" -#: update.py:120 +#: update.py:134 #, python-brace-format msgid "Warning: Could not create backup. Error: {error}" msgstr "" -#: update.py:122 +#: update.py:136 msgid "Installing update..." msgstr "" -#: update.py:142 +#: update.py:156 #, python-brace-format msgid "Skipping protected file: {filename}. It will not be overwritten." msgstr "" -#: update.py:151 +#: update.py:165 msgid "Update installed successfully." msgstr "" -#: update.py:153 +#: update.py:167 #, python-brace-format msgid "Error during update installation: {error}" msgstr "" -#: update.py:168 +#: update.py:182 #, python-brace-format msgid "Error: No previous version backup '{filename}' found." msgstr "" -#: update.py:171 +#: update.py:185 #, python-brace-format msgid "Restoring previous version from '{filename}'..." msgstr "" -#: update.py:192 +#: update.py:206 #, python-brace-format msgid "" "Skipping user data file: {filename}. It will not be overwritten during " "restore." msgstr "" -#: update.py:199 +#: update.py:213 msgid "Previous version restored successfully." msgstr "" -#: update.py:201 +#: update.py:215 msgid "Restarting application to apply changes..." msgstr "" -#: update.py:204 +#: update.py:218 #, python-brace-format msgid "Error during restoration: {error}" msgstr "" -#: update.py:205 +#: update.py:219 #, python-brace-format msgid "The backup file '{filename}' was not deleted." msgstr "" -#: update.py:212 +#: update.py:226 msgid "Error: Could not import TimeTracker to get the current version." msgstr "" -#: update.py:215 +#: update.py:229 msgid "Checking for updates..." msgstr "" -#: update.py:222 +#: update.py:236 msgid "No updates available." msgstr "" diff --git a/sl/SL_Menu.py b/sl/SL_Menu.py index c459277..e74b9a5 100644 --- a/sl/SL_Menu.py +++ b/sl/SL_Menu.py @@ -15,7 +15,7 @@ from i18n import _ try: - from update import restore_previous_version + from update import restore_previous_version, check_for_updates, apply_update UPDATE_MODULE_AVAILABLE = True except (ImportError, ModuleNotFoundError): UPDATE_MODULE_AVAILABLE = False @@ -303,6 +303,16 @@ def render_icon_button_css(): st.session_state.tracker = TimeTracker() st.session_state.tracker.initialize_dependencies() st.session_state.tracker.set_today_flag_for_due_tasks() # Set 'today' flag for tasks due today + + # One check per session, not per rerun (Streamlit reruns this whole + # script on every click) - a frozen build has no loose source files for + # the update mechanism to overwrite (see update.py/TimeTrackerSL_GUI.py), + # so there's nothing to offer there. + st.session_state.update_check = {'available': False} + if UPDATE_MODULE_AVAILABLE and not getattr(sys, 'frozen', False): + is_available, new_version, url = check_for_updates(st.session_state.tracker.get_version()) + if is_available: + st.session_state.update_check = {'available': True, 'version': new_version, 'url': url} else: # Reload from disk on every rerun (i.e. on every click/navigation), so # changes made by another process sharing the same data file - the SOAP @@ -430,11 +440,23 @@ def _auto_refresh_on_external_changes(): def render_header(title, subtitle=None): """ - Renders the standard header for a view, including title, optional subtitle, and feedback messages. + Renders the standard header for a view: the app version (always, at the + very top, above the title), the view's title, an optional subtitle + below it, and any pending feedback message. :param title: The main title of the view. :param subtitle: An optional subtitle. """ + st.caption(_("Version {version}").format(version=st.session_state.tracker.get_version())) + update_check = st.session_state.get('update_check', {}) + if update_check.get('available'): + col_update_msg, col_update_btn = st.columns([10, 1]) + with col_update_msg: + st.info(_("A new version ({version}) is available.").format(version=update_check['version'])) + with col_update_btn: + if st.button("⟳", help=_("Restart and install the update"), key="update_restart_btn"): + with st.spinner(_("Downloading and installing update...")): + apply_update(update_check['url']) st.title(title) if subtitle: st.caption(subtitle) diff --git a/update.py b/update.py index 4c52508..29c99ff 100644 --- a/update.py +++ b/update.py @@ -84,6 +84,20 @@ def download_update(url): os.remove(UPDATE_ZIP_FILE) # Clean up partial download return False +def apply_update(url): + """ + Downloads (if not already downloaded) and installs the given update, + then restarts the application in-place to run the new version. + + :param url: The download URL for the update, as returned by check_for_updates(). + """ + if not os.path.exists(UPDATE_ZIP_FILE): + if not download_update(url): + return + install_update() + print(_("Restarting application to apply the update...")) + os.execv(sys.executable, ['python'] + sys.argv) + def install_update(): """ Installs the downloaded update by extracting the zip file and overwriting old files.