Ported the plug-in to PyQt6 for eric7. eric7

Fri, 04 Jun 2021 16:40:54 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Fri, 04 Jun 2021 16:40:54 +0200
branch
eric7
changeset 98
693e42176007
parent 97
44ec4168b442
child 99
8cde9458ec52

Ported the plug-in to PyQt6 for eric7.

.hgignore file | annotate | diff | comparison | revisions
ChangeLog file | annotate | diff | comparison | revisions
PluginTimeTracker.e4p file | annotate | diff | comparison | revisions
PluginTimeTracker.epj file | annotate | diff | comparison | revisions
PluginTimeTracker.py file | annotate | diff | comparison | revisions
PluginTimeTracker.zip file | annotate | diff | comparison | revisions
TimeTracker/ConfigurationPage/TimeTrackerPage.py file | annotate | diff | comparison | revisions
TimeTracker/Documentation/source/Plugin_Time_Tracker.PluginTimeTracker.html file | annotate | diff | comparison | revisions
TimeTracker/Documentation/source/Plugin_Time_Tracker.TimeTracker.ConfigurationPage.TimeTrackerPage.html file | annotate | diff | comparison | revisions
TimeTracker/Documentation/source/Plugin_Time_Tracker.TimeTracker.TimeTrackEntry.html file | annotate | diff | comparison | revisions
TimeTracker/Documentation/source/Plugin_Time_Tracker.TimeTracker.TimeTracker.html file | annotate | diff | comparison | revisions
TimeTracker/Documentation/source/Plugin_Time_Tracker.TimeTracker.TimeTrackerEntryDialog.html file | annotate | diff | comparison | revisions
TimeTracker/Documentation/source/Plugin_Time_Tracker.TimeTracker.TimeTrackerWidget.html file | annotate | diff | comparison | revisions
TimeTracker/TimeTrackEntry.py file | annotate | diff | comparison | revisions
TimeTracker/TimeTracker.py file | annotate | diff | comparison | revisions
TimeTracker/TimeTrackerEntryDialog.py file | annotate | diff | comparison | revisions
TimeTracker/TimeTrackerWidget.py file | annotate | diff | comparison | revisions
TimeTracker/i18n/timetracker_de.qm file | annotate | diff | comparison | revisions
TimeTracker/i18n/timetracker_de.ts file | annotate | diff | comparison | revisions
TimeTracker/i18n/timetracker_en.ts file | annotate | diff | comparison | revisions
TimeTracker/i18n/timetracker_es.ts file | annotate | diff | comparison | revisions
TimeTracker/i18n/timetracker_pt.qm file | annotate | diff | comparison | revisions
TimeTracker/i18n/timetracker_pt.ts file | annotate | diff | comparison | revisions
TimeTracker/i18n/timetracker_ru.ts file | annotate | diff | comparison | revisions
--- a/.hgignore	Thu Jun 03 18:02:18 2021 +0200
+++ b/.hgignore	Fri Jun 04 16:40:54 2021 +0200
@@ -1,11 +1,6 @@
+glob:.eric7project
 glob:.eric6project
-glob:_eric6project
-glob:.eric5project
-glob:_eric5project
-glob:.eric4project
-glob:_eric4project
 glob:.ropeproject
-glob:_ropeproject
 glob:.directory
 glob:**.pyc
 glob:**.pyo
--- a/ChangeLog	Thu Jun 03 18:02:18 2021 +0200
+++ b/ChangeLog	Fri Jun 04 16:40:54 2021 +0200
@@ -1,5 +1,10 @@
 ChangeLog
 ---------
+Version 1.0.0:
+- first release of the eric7 variant
+
+************************************************************
+
 Version 4.0.0:
 - removed support for outdated eric6 versions
 - implemented some code simplifications
--- a/PluginTimeTracker.e4p	Thu Jun 03 18:02:18 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,518 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE Project SYSTEM "Project-5.1.dtd">
-<!-- eric project file for project PluginTimeTracker -->
-<!-- Copyright (C) 2020 Detlev Offenbach, detlev@die-offenbachs.de -->
-<Project version="5.1">
-  <Language>en</Language>
-  <Hash>9af6dcaf8f823f072f714e662c15d44dfdecceab</Hash>
-  <ProgLanguage mixed="0">Python3</ProgLanguage>
-  <ProjectType>E6Plugin</ProjectType>
-  <Description>Plugin implementing a simple time tracker to keep track of the time used for a project. The time can be subdivided into tasks.</Description>
-  <Version>2.x</Version>
-  <Author>Detlev Offenbach</Author>
-  <Email>detlev@die-offenbachs.de</Email>
-  <TranslationPattern>TimeTracker/i18n/timetracker_%language%.ts</TranslationPattern>
-  <Eol index="1"/>
-  <Sources>
-    <Source>PluginTimeTracker.py</Source>
-    <Source>TimeTracker/ConfigurationPage/TimeTrackerPage.py</Source>
-    <Source>TimeTracker/ConfigurationPage/__init__.py</Source>
-    <Source>TimeTracker/TimeTrackEntry.py</Source>
-    <Source>TimeTracker/TimeTracker.py</Source>
-    <Source>TimeTracker/TimeTrackerEntryDialog.py</Source>
-    <Source>TimeTracker/TimeTrackerWidget.py</Source>
-    <Source>TimeTracker/__init__.py</Source>
-    <Source>__init__.py</Source>
-  </Sources>
-  <Forms>
-    <Form>TimeTracker/ConfigurationPage/TimeTrackerPage.ui</Form>
-    <Form>TimeTracker/TimeTrackerEntryDialog.ui</Form>
-    <Form>TimeTracker/TimeTrackerWidget.ui</Form>
-  </Forms>
-  <Translations>
-    <Translation>TimeTracker/i18n/timetracker_de.qm</Translation>
-    <Translation>TimeTracker/i18n/timetracker_de.ts</Translation>
-    <Translation>TimeTracker/i18n/timetracker_en.qm</Translation>
-    <Translation>TimeTracker/i18n/timetracker_en.ts</Translation>
-    <Translation>TimeTracker/i18n/timetracker_es.qm</Translation>
-    <Translation>TimeTracker/i18n/timetracker_es.ts</Translation>
-    <Translation>TimeTracker/i18n/timetracker_pt.qm</Translation>
-    <Translation>TimeTracker/i18n/timetracker_pt.ts</Translation>
-    <Translation>TimeTracker/i18n/timetracker_ru.qm</Translation>
-    <Translation>TimeTracker/i18n/timetracker_ru.ts</Translation>
-  </Translations>
-  <Others>
-    <Other>.hgignore</Other>
-    <Other>ChangeLog</Other>
-    <Other>PKGLIST</Other>
-    <Other>PluginTimeTracker.e4p</Other>
-    <Other>PluginTimeTracker.zip</Other>
-    <Other>TimeTracker/Documentation/LICENSE.GPL3</Other>
-    <Other>TimeTracker/Documentation/source</Other>
-    <Other>TimeTracker/icons/clock-dark.svg</Other>
-    <Other>TimeTracker/icons/clock-light.svg</Other>
-  </Others>
-  <MainScript>PluginTimeTracker.py</MainScript>
-  <Vcs>
-    <VcsType>Mercurial</VcsType>
-    <VcsOptions>
-      <dict>
-        <key>
-          <string>add</string>
-        </key>
-        <value>
-          <list>
-            <string></string>
-          </list>
-        </value>
-        <key>
-          <string>checkout</string>
-        </key>
-        <value>
-          <list>
-            <string></string>
-          </list>
-        </value>
-        <key>
-          <string>commit</string>
-        </key>
-        <value>
-          <list>
-            <string></string>
-          </list>
-        </value>
-        <key>
-          <string>diff</string>
-        </key>
-        <value>
-          <list>
-            <string></string>
-          </list>
-        </value>
-        <key>
-          <string>export</string>
-        </key>
-        <value>
-          <list>
-            <string></string>
-          </list>
-        </value>
-        <key>
-          <string>global</string>
-        </key>
-        <value>
-          <list>
-            <string></string>
-          </list>
-        </value>
-        <key>
-          <string>history</string>
-        </key>
-        <value>
-          <list>
-            <string></string>
-          </list>
-        </value>
-        <key>
-          <string>log</string>
-        </key>
-        <value>
-          <list>
-            <string></string>
-          </list>
-        </value>
-        <key>
-          <string>remove</string>
-        </key>
-        <value>
-          <list>
-            <string></string>
-          </list>
-        </value>
-        <key>
-          <string>status</string>
-        </key>
-        <value>
-          <list>
-            <string></string>
-          </list>
-        </value>
-        <key>
-          <string>tag</string>
-        </key>
-        <value>
-          <list>
-            <string></string>
-          </list>
-        </value>
-        <key>
-          <string>update</string>
-        </key>
-        <value>
-          <list>
-            <string></string>
-          </list>
-        </value>
-      </dict>
-    </VcsOptions>
-  </Vcs>
-  <FiletypeAssociations>
-    <FiletypeAssociation pattern="*.idl" type="INTERFACES"/>
-    <FiletypeAssociation pattern="*.py" type="SOURCES"/>
-    <FiletypeAssociation pattern="*.py3" type="SOURCES"/>
-    <FiletypeAssociation pattern="*.pyw" type="SOURCES"/>
-    <FiletypeAssociation pattern="*.pyw3" type="SOURCES"/>
-    <FiletypeAssociation pattern="*.qm" type="TRANSLATIONS"/>
-    <FiletypeAssociation pattern="*.qrc" type="RESOURCES"/>
-    <FiletypeAssociation pattern="*.ts" type="TRANSLATIONS"/>
-    <FiletypeAssociation pattern="*.ui" type="FORMS"/>
-    <FiletypeAssociation pattern="*.ui.h" type="FORMS"/>
-    <FiletypeAssociation pattern="Ui_*.py" type="__IGNORE__"/>
-  </FiletypeAssociations>
-  <Documentation>
-    <DocumentationParams>
-      <dict>
-        <key>
-          <string>ERIC4DOC</string>
-        </key>
-        <value>
-          <dict>
-            <key>
-              <string>cssFile</string>
-            </key>
-            <value>
-              <string>%PYTHON%/eric6/CSSs/default.css</string>
-            </value>
-            <key>
-              <string>ignoreDirectories</string>
-            </key>
-            <value>
-              <list>
-                <string>.eric5project</string>
-                <string>.hg</string>
-                <string>.ropeproject</string>
-                <string>.eric6project</string>
-              </list>
-            </value>
-            <key>
-              <string>ignoreFilePatterns</string>
-            </key>
-            <value>
-              <list>
-                <string>Ui_*.py</string>
-              </list>
-            </value>
-            <key>
-              <string>outputDirectory</string>
-            </key>
-            <value>
-              <string>TimeTracker/Documentation/source</string>
-            </value>
-            <key>
-              <string>qtHelpEnabled</string>
-            </key>
-            <value>
-              <bool>False</bool>
-            </value>
-            <key>
-              <string>useRecursion</string>
-            </key>
-            <value>
-              <bool>True</bool>
-            </value>
-          </dict>
-        </value>
-      </dict>
-    </DocumentationParams>
-  </Documentation>
-  <Checkers>
-    <CheckersParams>
-      <dict>
-        <key>
-          <string>Pep8Checker</string>
-        </key>
-        <value>
-          <dict>
-            <key>
-              <string>AnnotationsChecker</string>
-            </key>
-            <value>
-              <dict>
-                <key>
-                  <string>MaximumComplexity</string>
-                </key>
-                <value>
-                  <int>3</int>
-                </value>
-                <key>
-                  <string>MinimumCoverage</string>
-                </key>
-                <value>
-                  <int>75</int>
-                </value>
-              </dict>
-            </value>
-            <key>
-              <string>BlankLines</string>
-            </key>
-            <value>
-              <tuple>
-                <int>2</int>
-                <int>1</int>
-              </tuple>
-            </value>
-            <key>
-              <string>BuiltinsChecker</string>
-            </key>
-            <value>
-              <dict>
-                <key>
-                  <string>bytes</string>
-                </key>
-                <value>
-                  <list>
-                    <string>unicode</string>
-                  </list>
-                </value>
-                <key>
-                  <string>chr</string>
-                </key>
-                <value>
-                  <list>
-                    <string>unichr</string>
-                  </list>
-                </value>
-                <key>
-                  <string>str</string>
-                </key>
-                <value>
-                  <list>
-                    <string>unicode</string>
-                  </list>
-                </value>
-              </dict>
-            </value>
-            <key>
-              <string>CommentedCodeChecker</string>
-            </key>
-            <value>
-              <dict>
-                <key>
-                  <string>Aggressive</string>
-                </key>
-                <value>
-                  <bool>False</bool>
-                </value>
-              </dict>
-            </value>
-            <key>
-              <string>CopyrightAuthor</string>
-            </key>
-            <value>
-              <string></string>
-            </value>
-            <key>
-              <string>CopyrightMinFileSize</string>
-            </key>
-            <value>
-              <int>0</int>
-            </value>
-            <key>
-              <string>DocstringType</string>
-            </key>
-            <value>
-              <string>eric</string>
-            </value>
-            <key>
-              <string>EnabledCheckerCategories</string>
-            </key>
-            <value>
-              <string>C, D, E, M, N, S, W</string>
-            </value>
-            <key>
-              <string>ExcludeFiles</string>
-            </key>
-            <value>
-              <string>*/Ui_*.py, */*_rc.py,</string>
-            </value>
-            <key>
-              <string>ExcludeMessages</string>
-            </key>
-            <value>
-              <string>C101,E265,E266,E305,E402,M201,M811,N802,N803,N807,N808,N821,W293,W504</string>
-            </value>
-            <key>
-              <string>FixCodes</string>
-            </key>
-            <value>
-              <string></string>
-            </value>
-            <key>
-              <string>FixIssues</string>
-            </key>
-            <value>
-              <bool>False</bool>
-            </value>
-            <key>
-              <string>FutureChecker</string>
-            </key>
-            <value>
-              <string></string>
-            </value>
-            <key>
-              <string>HangClosing</string>
-            </key>
-            <value>
-              <bool>False</bool>
-            </value>
-            <key>
-              <string>IncludeMessages</string>
-            </key>
-            <value>
-              <string></string>
-            </value>
-            <key>
-              <string>LineComplexity</string>
-            </key>
-            <value>
-              <int>20</int>
-            </value>
-            <key>
-              <string>LineComplexityScore</string>
-            </key>
-            <value>
-              <int>10</int>
-            </value>
-            <key>
-              <string>MaxCodeComplexity</string>
-            </key>
-            <value>
-              <int>10</int>
-            </value>
-            <key>
-              <string>MaxDocLineLength</string>
-            </key>
-            <value>
-              <int>79</int>
-            </value>
-            <key>
-              <string>MaxLineLength</string>
-            </key>
-            <value>
-              <int>79</int>
-            </value>
-            <key>
-              <string>NoFixCodes</string>
-            </key>
-            <value>
-              <string>E501</string>
-            </value>
-            <key>
-              <string>RepeatMessages</string>
-            </key>
-            <value>
-              <bool>True</bool>
-            </value>
-            <key>
-              <string>SecurityChecker</string>
-            </key>
-            <value>
-              <dict>
-                <key>
-                  <string>CheckTypedException</string>
-                </key>
-                <value>
-                  <bool>False</bool>
-                </value>
-                <key>
-                  <string>HardcodedTmpDirectories</string>
-                </key>
-                <value>
-                  <list>
-                    <string>/tmp</string>
-                    <string>/var/tmp</string>
-                    <string>/dev/shm</string>
-                    <string>~/tmp</string>
-                  </list>
-                </value>
-                <key>
-                  <string>InsecureHashes</string>
-                </key>
-                <value>
-                  <list>
-                    <string>md4</string>
-                    <string>md5</string>
-                    <string>sha</string>
-                    <string>sha1</string>
-                  </list>
-                </value>
-                <key>
-                  <string>InsecureSslProtocolVersions</string>
-                </key>
-                <value>
-                  <list>
-                    <string>PROTOCOL_SSLv2</string>
-                    <string>SSLv2_METHOD</string>
-                    <string>SSLv23_METHOD</string>
-                    <string>PROTOCOL_SSLv3</string>
-                    <string>PROTOCOL_TLSv1</string>
-                    <string>SSLv3_METHOD</string>
-                    <string>TLSv1_METHOD</string>
-                  </list>
-                </value>
-                <key>
-                  <string>WeakKeySizeDsaHigh</string>
-                </key>
-                <value>
-                  <string>1024</string>
-                </value>
-                <key>
-                  <string>WeakKeySizeDsaMedium</string>
-                </key>
-                <value>
-                  <string>2048</string>
-                </value>
-                <key>
-                  <string>WeakKeySizeEcHigh</string>
-                </key>
-                <value>
-                  <string>160</string>
-                </value>
-                <key>
-                  <string>WeakKeySizeEcMedium</string>
-                </key>
-                <value>
-                  <string>224</string>
-                </value>
-                <key>
-                  <string>WeakKeySizeRsaHigh</string>
-                </key>
-                <value>
-                  <string>1024</string>
-                </value>
-                <key>
-                  <string>WeakKeySizeRsaMedium</string>
-                </key>
-                <value>
-                  <string>2048</string>
-                </value>
-              </dict>
-            </value>
-            <key>
-              <string>ShowIgnored</string>
-            </key>
-            <value>
-              <bool>False</bool>
-            </value>
-            <key>
-              <string>ValidEncodings</string>
-            </key>
-            <value>
-              <string>latin-1, utf-8</string>
-            </value>
-          </dict>
-        </value>
-      </dict>
-    </CheckersParams>
-  </Checkers>
-</Project>
--- a/PluginTimeTracker.epj	Thu Jun 03 18:02:18 2021 +0200
+++ b/PluginTimeTracker.epj	Fri Jun 04 16:40:54 2021 +0200
@@ -113,12 +113,12 @@
     "DOCSTRING": "",
     "DOCUMENTATIONPARMS": {
       "ERIC4DOC": {
-        "cssFile": "%PYTHON%/eric6/CSSs/default.css",
+        "cssFile": "%PYTHON%/eric7/CSSs/default.css",
         "ignoreDirectories": [
-          ".eric5project",
           ".hg",
           ".ropeproject",
-          ".eric6project"
+          ".eric6project",
+          ".eric7project"
         ],
         "ignoreFilePatterns": [
           "Ui_*.py"
@@ -131,17 +131,25 @@
     "EMAIL": "detlev@die-offenbachs.de",
     "EOL": 1,
     "FILETYPES": {
+      "*.epj": "OTHERS",
       "*.idl": "INTERFACES",
+      "*.md": "OTHERS",
+      "*.proto": "PROTOCOLS",
       "*.py": "SOURCES",
       "*.py3": "SOURCES",
       "*.pyw": "SOURCES",
       "*.pyw3": "SOURCES",
       "*.qm": "TRANSLATIONS",
-      "*.qrc": "RESOURCES",
+      "*.rst": "OTHERS",
       "*.ts": "TRANSLATIONS",
+      "*.txt": "OTHERS",
       "*.ui": "FORMS",
-      "*.ui.h": "FORMS",
-      "Ui_*.py": "__IGNORE__"
+      "GNUmakefile": "OTHERS",
+      "Makefile": "OTHERS",
+      "README": "OTHERS",
+      "README.*": "OTHERS",
+      "Ui_*.py": "__IGNORE__",
+      "makefile": "OTHERS"
     },
     "FORMS": [
       "TimeTracker/ConfigurationPage/TimeTrackerPage.ui",
@@ -170,7 +178,6 @@
       ".hgignore",
       "ChangeLog",
       "PKGLIST",
-      "PluginTimeTracker.e4p",
       "PluginTimeTracker.zip",
       "TimeTracker/Documentation/LICENSE.GPL3",
       "TimeTracker/Documentation/source",
@@ -181,7 +188,7 @@
     "OTHERTOOLSPARMS": {},
     "PACKAGERSPARMS": {},
     "PROGLANGUAGE": "Python3",
-    "PROJECTTYPE": "E6Plugin",
+    "PROJECTTYPE": "E7Plugin",
     "PROJECTTYPESPECIFICDATA": {},
     "PROTOCOLS": [],
     "RCCPARAMS": {
@@ -265,6 +272,6 @@
       ]
     },
     "VCSOTHERDATA": {},
-    "VERSION": "2.x"
+    "VERSION": ""
   }
 }
\ No newline at end of file
--- a/PluginTimeTracker.py	Thu Jun 03 18:02:18 2021 +0200
+++ b/PluginTimeTracker.py	Fri Jun 04 16:40:54 2021 +0200
@@ -9,9 +9,9 @@
 
 import os
 
-from PyQt5.QtCore import QObject, QTranslator, QCoreApplication
+from PyQt6.QtCore import QObject, QTranslator, QCoreApplication
 
-from E5Gui.E5Application import e5App
+from EricWidgets.EricApplication import ericApp
 
 import Preferences
 
@@ -22,7 +22,7 @@
 author = "Detlev Offenbach <detlev@die-offenbachs.de>"
 autoactivate = True
 deactivateable = True
-version = "4.0.0"
+version = "1.0.0"
 className = "TimeTrackerPlugin"
 packageName = "TimeTracker"
 shortDescription = "Time Tracker to keep track of the project time."
@@ -45,7 +45,9 @@
     Module function to create the Time Tracker configuration page.
     
     @param configDlg reference to the configuration dialog
+    @type ConfigurationWidget
     @return reference to the configuration page
+    @rtype TimeTrackerPage
     """
     global timeTrackerPluginObject
     from TimeTracker.ConfigurationPage.TimeTrackerPage import TimeTrackerPage
@@ -57,15 +59,9 @@
     Module function returning data as required by the configuration dialog.
     
     @return dictionary containing the relevant data
+    @rtype dict
     """
-    try:
-        usesDarkPalette = e5App().usesDarkPalette()
-    except AttributeError:
-        # backward compatibility for eric6 < 20.04
-        from PyQt5.QtGui import QPalette
-        palette = e5App().palette()
-        lightness = palette.color(QPalette.Window).lightness()
-        usesDarkPalette = lightness <= 128
+    usesDarkPalette = ericApp().usesDarkPalette()
     iconSuffix = "dark" if usesDarkPalette else "light"
     
     return {
@@ -95,7 +91,8 @@
         """
         Constructor
         
-        @param ui reference to the user interface object (UI.UserInterface)
+        @param ui reference to the user interface object
+        @type UserInterface
         """
         QObject.__init__(self, ui)
         self.__ui = ui
@@ -116,13 +113,14 @@
         """
         self.__object = None
         
-        self.__e5project = e5App().getObject("Project")
+        self.__ericProject = ericApp().getObject("Project")
     
     def activate(self):
         """
         Public method to activate this plugin.
         
-        @return tuple of None and activation status (boolean)
+        @return tuple of None and activation status
+        @rtype bool
         """
         global error
         error = ""     # clear previous error
@@ -130,26 +128,22 @@
         global timeTrackerPluginObject
         timeTrackerPluginObject = self
         
-        try:
-            usesDarkPalette = e5App().usesDarkPalette()
-        except AttributeError:
-            # backward compatibility for eric6 < 20.04
-            from PyQt5.QtGui import QPalette
-            palette = e5App().palette()
-            lightness = palette.color(QPalette.Window).lightness()
-            usesDarkPalette = lightness <= 128
+        usesDarkPalette = ericApp().usesDarkPalette()
         iconSuffix = "dark" if usesDarkPalette else "light"
         
         self.__object = TimeTracker(self, iconSuffix, self.__ui)
         self.__object.activate()
-        e5App().registerPluginObject("TimeTracker", self.__object)
+        ericApp().registerPluginObject("TimeTracker", self.__object)
         
-        if self.__e5project.isOpen():
+        if self.__ericProject.isOpen():
             self.__object.projectOpened()
         
-        self.__e5project.newProject.connect(self.__object.projectOpened)
-        self.__e5project.projectOpened.connect(self.__object.projectOpened)
-        self.__e5project.projectClosed.connect(self.__object.projectClosed)
+        self.__ericProject.newProject.connect(
+            self.__object.projectOpened)
+        self.__ericProject.projectOpened.connect(
+            self.__object.projectOpened)
+        self.__ericProject.projectClosed.connect(
+            self.__object.projectClosed)
         
         return None, True
     
@@ -157,12 +151,15 @@
         """
         Public method to deactivate this plugin.
         """
-        e5App().unregisterPluginObject("TimeTracker")
+        ericApp().unregisterPluginObject("TimeTracker")
         self.__object.deactivate()
         
-        self.__e5project.newProject.disconnect(self.__object.projectOpened)
-        self.__e5project.projectOpened.disconnect(self.__object.projectOpened)
-        self.__e5project.projectClosed.disconnect(self.__object.projectClosed)
+        self.__ericProject.newProject.disconnect(
+            self.__object.projectOpened)
+        self.__ericProject.projectOpened.disconnect(
+            self.__object.projectOpened)
+        self.__ericProject.projectClosed.disconnect(
+            self.__object.projectClosed)
         
         self.__object.projectClosed()
         
@@ -182,7 +179,7 @@
                 loaded = translator.load(translation, locale_dir)
                 if loaded:
                     self.__translator = translator
-                    e5App().installTranslator(self.__translator)
+                    ericApp().installTranslator(self.__translator)
                 else:
                     print("Warning: translation file '{0}' could not be"
                           " loaded.".format(translation))
@@ -192,8 +189,10 @@
         """
         Public method to retrieve the various settings.
         
-        @param key the key of the value to get
-        @return the requested setting
+        @param key key of the value to get
+        @type str
+        @return value of the requested setting
+        @rtype Any
         """
         if key in ["MinimumDuration"]:
             return int(Preferences.Prefs.settings.value(
@@ -210,8 +209,10 @@
         """
         Public method to store the various settings.
         
-        @param key the key of the setting to be set (string)
-        @param value the value to be set
+        @param key key of the setting to be set
+        @type str
+        @param value value to be set
+        @type Any
         """
         Preferences.Prefs.settings.setValue(
             self.PreferencesKey + "/" + key, value)
Binary file PluginTimeTracker.zip has changed
--- a/TimeTracker/ConfigurationPage/TimeTrackerPage.py	Thu Jun 03 18:02:18 2021 +0200
+++ b/TimeTracker/ConfigurationPage/TimeTrackerPage.py	Fri Jun 04 16:40:54 2021 +0200
@@ -22,6 +22,7 @@
         Constructor
         
         @param plugin reference to the plugin object
+        @type TimeTrackerPlugin
         """
         super().__init__()
         self.setupUi(self)
@@ -39,7 +40,7 @@
     
     def save(self):
         """
-        Public slot to save the Pyramid configuration.
+        Public slot to save the Time Tracker configuration.
         """
         self.__plugin.setPreferences(
             "MinimumDuration", self.durationSpinBox.value())
--- a/TimeTracker/Documentation/source/Plugin_Time_Tracker.PluginTimeTracker.html	Thu Jun 03 18:02:18 2021 +0200
+++ b/TimeTracker/Documentation/source/Plugin_Time_Tracker.PluginTimeTracker.html	Fri Jun 04 16:40:54 2021 +0200
@@ -124,9 +124,9 @@
 </p>
 <dl>
 
-<dt><i>ui</i></dt>
+<dt><i>ui</i> (UserInterface)</dt>
 <dd>
-reference to the user interface object (UI.UserInterface)
+reference to the user interface object
 </dd>
 </dl>
 <a NAME="TimeTrackerPlugin.__initialize" ID="TimeTrackerPlugin.__initialize"></a>
@@ -153,7 +153,13 @@
 <dl>
 <dt>Return:</dt>
 <dd>
-tuple of None and activation status (boolean)
+tuple of None and activation status
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
 </dd>
 </dl>
 <a NAME="TimeTrackerPlugin.deactivate" ID="TimeTrackerPlugin.deactivate"></a>
@@ -172,15 +178,21 @@
 </p>
 <dl>
 
-<dt><i>key</i></dt>
+<dt><i>key</i> (str)</dt>
 <dd>
-the key of the value to get
+key of the value to get
 </dd>
 </dl>
 <dl>
 <dt>Return:</dt>
 <dd>
-the requested setting
+value of the requested setting
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+Any
 </dd>
 </dl>
 <a NAME="TimeTrackerPlugin.setPreferences" ID="TimeTrackerPlugin.setPreferences"></a>
@@ -192,13 +204,13 @@
 </p>
 <dl>
 
-<dt><i>key</i></dt>
+<dt><i>key</i> (str)</dt>
 <dd>
-the key of the setting to be set (string)
+key of the setting to be set
 </dd>
-<dt><i>value</i></dt>
+<dt><i>value</i> (Any)</dt>
 <dd>
-the value to be set
+value to be set
 </dd>
 </dl>
 <div align="right"><a href="#top">Up</a></div>
@@ -213,7 +225,7 @@
 </p>
 <dl>
 
-<dt><i>configDlg</i></dt>
+<dt><i>configDlg</i> (ConfigurationWidget)</dt>
 <dd>
 reference to the configuration dialog
 </dd>
@@ -224,6 +236,12 @@
 reference to the configuration page
 </dd>
 </dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+TimeTrackerPage
+</dd>
+</dl>
 <div align="right"><a href="#top">Up</a></div>
 <hr />
 <hr />
@@ -240,6 +258,12 @@
 dictionary containing the relevant data
 </dd>
 </dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+dict
+</dd>
+</dl>
 <div align="right"><a href="#top">Up</a></div>
 <hr />
 <hr />
--- a/TimeTracker/Documentation/source/Plugin_Time_Tracker.TimeTracker.ConfigurationPage.TimeTrackerPage.html	Thu Jun 03 18:02:18 2021 +0200
+++ b/TimeTracker/Documentation/source/Plugin_Time_Tracker.TimeTracker.ConfigurationPage.TimeTrackerPage.html	Fri Jun 04 16:40:54 2021 +0200
@@ -74,7 +74,7 @@
 </tr>
 <tr>
 <td><a href="#TimeTrackerPage.save">save</a></td>
-<td>Public slot to save the Pyramid configuration.</td>
+<td>Public slot to save the Time Tracker configuration.</td>
 </tr>
 </table>
 <h3>Static Methods</h3>
@@ -92,7 +92,7 @@
 </p>
 <dl>
 
-<dt><i>plugin</i></dt>
+<dt><i>plugin</i> (TimeTrackerPlugin)</dt>
 <dd>
 reference to the plugin object
 </dd>
@@ -102,7 +102,7 @@
 <b>save</b>(<i></i>)
 
 <p>
-        Public slot to save the Pyramid configuration.
+        Public slot to save the Time Tracker configuration.
 </p>
 <div align="right"><a href="#top">Up</a></div>
 <hr />
--- a/TimeTracker/Documentation/source/Plugin_Time_Tracker.TimeTracker.TimeTrackEntry.html	Thu Jun 03 18:02:18 2021 +0200
+++ b/TimeTracker/Documentation/source/Plugin_Time_Tracker.TimeTracker.TimeTrackEntry.html	Fri Jun 04 16:40:54 2021 +0200
@@ -93,8 +93,8 @@
 <td>Public method to continue the entry.</td>
 </tr>
 <tr>
-<td><a href="#TimeTrackEntry.fromString">fromString</a></td>
-<td>Public method to populate the entry from the given string.</td>
+<td><a href="#TimeTrackEntry.fromDict">fromDict</a></td>
+<td>Public method to populate the time track entry from a dictionary.</td>
 </tr>
 <tr>
 <td><a href="#TimeTrackEntry.getComment">getComment</a></td>
@@ -161,8 +161,8 @@
 <td>Public method to stop this entry.</td>
 </tr>
 <tr>
-<td><a href="#TimeTrackEntry.toString">toString</a></td>
-<td>Public method to get a string representation of the entry.</td>
+<td><a href="#TimeTrackEntry.toDict">toDict</a></td>
+<td>Public method to convert the time track entry into a dictionary.</td>
 </tr>
 </table>
 <h3>Static Methods</h3>
@@ -180,9 +180,9 @@
 </p>
 <dl>
 
-<dt><i>plugin</i></dt>
+<dt><i>plugin</i> (TimeTrackerPlugin)</dt>
 <dd>
-reference to the plugin object (TimeTrackerPlugin)
+reference to the plugin object
 </dd>
 </dl>
 <a NAME="TimeTrackEntry.__calculateDuration" ID="TimeTrackEntry.__calculateDuration"></a>
@@ -194,19 +194,25 @@
 </p>
 <dl>
 
-<dt><i>start</i></dt>
+<dt><i>start</i> (QDateTime)</dt>
 <dd>
-start date and time (QDateTime)
+start date and time
 </dd>
-<dt><i>stop</i></dt>
+<dt><i>stop</i> (QDateTime)</dt>
 <dd>
-end date and time (QDateTime)
+end date and time
 </dd>
 </dl>
 <dl>
 <dt>Return:</dt>
 <dd>
-duration in minutes (int)
+duration in minutes
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+int
 </dd>
 </dl>
 <a NAME="TimeTrackEntry.__currentDateTime" ID="TimeTrackEntry.__currentDateTime"></a>
@@ -219,7 +225,13 @@
 <dl>
 <dt>Return:</dt>
 <dd>
-current date and time (QDateTime)
+current date and time
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+QDateTime
 </dd>
 </dl>
 <a NAME="TimeTrackEntry.__lt__" ID="TimeTrackEntry.__lt__"></a>
@@ -231,15 +243,21 @@
 </p>
 <dl>
 
-<dt><i>other</i></dt>
+<dt><i>other</i> (TimeTrackEntry)</dt>
 <dd>
-reference to the other object (TimeTrackEntry)
+reference to the other object
 </dd>
 </dl>
 <dl>
 <dt>Return:</dt>
 <dd>
-flag indicating that self is less than other (boolean)
+flag indicating that self is less than other
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
 </dd>
 </dl>
 <a NAME="TimeTrackEntry.addDuration" ID="TimeTrackEntry.addDuration"></a>
@@ -251,10 +269,10 @@
 </p>
 <dl>
 
-<dt><i>duration</i></dt>
+<dt><i>duration</i> (int)</dt>
 <dd>
-duration to be added in minutes (integer). Negative
-            values are ignored.
+duration to be added in minutes. Negative values are
+            ignored.
 </dd>
 </dl>
 <a NAME="TimeTrackEntry.continue_" ID="TimeTrackEntry.continue_"></a>
@@ -264,24 +282,30 @@
 <p>
         Public method to continue the entry.
 </p>
-<a NAME="TimeTrackEntry.fromString" ID="TimeTrackEntry.fromString"></a>
-<h4>TimeTrackEntry.fromString</h4>
-<b>fromString</b>(<i>line</i>)
+<a NAME="TimeTrackEntry.fromDict" ID="TimeTrackEntry.fromDict"></a>
+<h4>TimeTrackEntry.fromDict</h4>
+<b>fromDict</b>(<i>data</i>)
 
 <p>
-        Public method to populate the entry from the given string.
+        Public method to populate the time track entry from a dictionary.
 </p>
 <dl>
 
-<dt><i>line</i></dt>
+<dt><i>data</i> (dict)</dt>
 <dd>
-stringified entry data as generated by toString() (string)
+dictionary containing the time track entry data
 </dd>
 </dl>
 <dl>
 <dt>Return:</dt>
 <dd>
-ID of the tracker entry; -1 indicates an error (integer)
+ID of the tracker entry; -1 indicates an error
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+int
 </dd>
 </dl>
 <a NAME="TimeTrackEntry.getComment" ID="TimeTrackEntry.getComment"></a>
@@ -294,7 +318,13 @@
 <dl>
 <dt>Return:</dt>
 <dd>
-comment (string)
+comment
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+str
 </dd>
 </dl>
 <a NAME="TimeTrackEntry.getDuration" ID="TimeTrackEntry.getDuration"></a>
@@ -307,7 +337,13 @@
 <dl>
 <dt>Return:</dt>
 <dd>
-duration (integer)
+duration
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+int
 </dd>
 </dl>
 <a NAME="TimeTrackEntry.getEntryData" ID="TimeTrackEntry.getEntryData"></a>
@@ -320,9 +356,17 @@
 <dl>
 <dt>Return:</dt>
 <dd>
-entry data as a tuple of start date (string), start time
-            (string), duration (integer), task (string), comment (string)
-            and flag indicating a paused state (boolean)
+entry data as a dictionary with keys 'id', 'paused',
+            'start_date', 'start_time', 'duration', 'task' and 'comment'
+            containing the entry ID, a flag indicating a paused
+            state, the start date as a string, the start time as a string,
+            the duration, the task and a comment
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+dict
 </dd>
 </dl>
 <a NAME="TimeTrackEntry.getID" ID="TimeTrackEntry.getID"></a>
@@ -335,7 +379,13 @@
 <dl>
 <dt>Return:</dt>
 <dd>
-ID of the entry (integer)
+ID of the entry
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+int
 </dd>
 </dl>
 <a NAME="TimeTrackEntry.getStartDateTime" ID="TimeTrackEntry.getStartDateTime"></a>
@@ -348,7 +398,13 @@
 <dl>
 <dt>Return:</dt>
 <dd>
-start date and time (QDateTime)
+start date and time
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+QDateTime
 </dd>
 </dl>
 <a NAME="TimeTrackEntry.getTask" ID="TimeTrackEntry.getTask"></a>
@@ -361,7 +417,13 @@
 <dl>
 <dt>Return:</dt>
 <dd>
-task description (string)
+task description
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+str
 </dd>
 </dl>
 <a NAME="TimeTrackEntry.isPaused" ID="TimeTrackEntry.isPaused"></a>
@@ -374,7 +436,13 @@
 <dl>
 <dt>Return:</dt>
 <dd>
-flag indicating a paused state (boolean)
+flag indicating a paused state
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
 </dd>
 </dl>
 <a NAME="TimeTrackEntry.isValid" ID="TimeTrackEntry.isValid"></a>
@@ -387,7 +455,13 @@
 <dl>
 <dt>Return:</dt>
 <dd>
-validity of the entry (boolean)
+validity of the entry
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
 </dd>
 </dl>
 <a NAME="TimeTrackEntry.pause" ID="TimeTrackEntry.pause"></a>
@@ -406,9 +480,9 @@
 </p>
 <dl>
 
-<dt><i>comment</i></dt>
+<dt><i>comment</i> (str)</dt>
 <dd>
-comment to set (string)
+comment to set
 </dd>
 </dl>
 <a NAME="TimeTrackEntry.setDuration" ID="TimeTrackEntry.setDuration"></a>
@@ -420,9 +494,9 @@
 </p>
 <dl>
 
-<dt><i>duration</i></dt>
+<dt><i>duration</i> (int)</dt>
 <dd>
-duration in minutes (integer)
+duration in minutes
 </dd>
 </dl>
 <a NAME="TimeTrackEntry.setID" ID="TimeTrackEntry.setID"></a>
@@ -434,9 +508,9 @@
 </p>
 <dl>
 
-<dt><i>eid</i></dt>
+<dt><i>eid</i> (int)</dt>
 <dd>
-ID for the entry (integer)
+ID for the entry
 </dd>
 </dl>
 <a NAME="TimeTrackEntry.setStartDateTime" ID="TimeTrackEntry.setStartDateTime"></a>
@@ -448,9 +522,9 @@
 </p>
 <dl>
 
-<dt><i>startDateTime</i></dt>
+<dt><i>startDateTime</i> (QDateTime)</dt>
 <dd>
-start date and time (QDateTime)
+start date and time
 </dd>
 </dl>
 <a NAME="TimeTrackEntry.setTask" ID="TimeTrackEntry.setTask"></a>
@@ -462,9 +536,9 @@
 </p>
 <dl>
 
-<dt><i>description</i></dt>
+<dt><i>description</i> (str)</dt>
 <dd>
-task description (string)
+task description
 </dd>
 </dl>
 <a NAME="TimeTrackEntry.start" ID="TimeTrackEntry.start"></a>
@@ -481,17 +555,23 @@
 <p>
         Public method to stop this entry.
 </p>
-<a NAME="TimeTrackEntry.toString" ID="TimeTrackEntry.toString"></a>
-<h4>TimeTrackEntry.toString</h4>
-<b>toString</b>(<i></i>)
+<a NAME="TimeTrackEntry.toDict" ID="TimeTrackEntry.toDict"></a>
+<h4>TimeTrackEntry.toDict</h4>
+<b>toDict</b>(<i></i>)
 
 <p>
-        Public method to get a string representation of the entry.
+        Public method to convert the time track entry into a dictionary.
 </p>
 <dl>
 <dt>Return:</dt>
 <dd>
-string representation of the entry (string)
+dictionary containing the time track entry data
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+dict
 </dd>
 </dl>
 <div align="right"><a href="#top">Up</a></div>
--- a/TimeTracker/Documentation/source/Plugin_Time_Tracker.TimeTracker.TimeTracker.html	Thu Jun 03 18:02:18 2021 +0200
+++ b/TimeTracker/Documentation/source/Plugin_Time_Tracker.TimeTracker.TimeTracker.html	Fri Jun 04 16:40:54 2021 +0200
@@ -74,7 +74,7 @@
 </tr>
 <tr>
 <td><a href="#TimeTracker.__activateWidget">__activateWidget</a></td>
-<td>Private slot to handle the activation of the project browser.</td>
+<td>Private slot to handle the activation of the time tracker widget.</td>
 </tr>
 <tr>
 <td><a href="#TimeTracker.__initialize">__initialize</a></td>
@@ -190,7 +190,7 @@
 <b>__activateWidget</b>(<i></i>)
 
 <p>
-        Private slot to handle the activation of the project browser.
+        Private slot to handle the activation of the time tracker widget.
 </p>
 <a NAME="TimeTracker.__initialize" ID="TimeTracker.__initialize"></a>
 <h4>TimeTracker.__initialize</h4>
@@ -222,21 +222,21 @@
 </p>
 <dl>
 
-<dt><i>startDateTime</i></dt>
+<dt><i>startDateTime</i> (QDateTime)</dt>
 <dd>
-start date and time (QDateTime)
+start date and time
 </dd>
-<dt><i>duration</i></dt>
+<dt><i>duration</i> (int)</dt>
 <dd>
-duration in minutes (integer)
+duration in minutes
 </dd>
-<dt><i>task</i></dt>
+<dt><i>task</i> (str)</dt>
 <dd>
-task description (string)
+task description
 </dd>
-<dt><i>comment</i></dt>
+<dt><i>comment</i> (str)</dt>
 <dd>
-comment (string)
+comment
 </dd>
 </dl>
 <a NAME="TimeTracker.continueTrackerEntry" ID="TimeTracker.continueTrackerEntry"></a>
@@ -262,9 +262,9 @@
 </p>
 <dl>
 
-<dt><i>eid</i></dt>
+<dt><i>eid</i> (int)</dt>
 <dd>
-ID of the tracker entry (integer)
+ID of the tracker entry
 </dd>
 </dl>
 <a NAME="TimeTracker.entryChanged" ID="TimeTracker.entryChanged"></a>
@@ -284,7 +284,13 @@
 <dl>
 <dt>Return:</dt>
 <dd>
-reference to the current entry (TimeTrackEntry)
+reference to the current entry
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+TimeTrackEntry
 </dd>
 </dl>
 <a NAME="TimeTracker.getEntry" ID="TimeTracker.getEntry"></a>
@@ -296,15 +302,21 @@
 </p>
 <dl>
 
-<dt><i>eid</i></dt>
+<dt><i>eid</i> (int)</dt>
 <dd>
-ID of the tracker entry (integer)
+ID of the tracker entry
 </dd>
 </dl>
 <dl>
 <dt>Return:</dt>
 <dd>
-entry for the given ID (TimeTrackEntry) or None
+entry for the given ID or None
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+TimeTrackEntry
 </dd>
 </dl>
 <a NAME="TimeTracker.getPreferences" ID="TimeTracker.getPreferences"></a>
@@ -316,15 +328,21 @@
 </p>
 <dl>
 
-<dt><i>key</i></dt>
+<dt><i>key</i> (str)</dt>
 <dd>
-the key of the value to get
+key of the value to get
 </dd>
 </dl>
 <dl>
 <dt>Return:</dt>
 <dd>
-the requested setting
+value of the requested setting
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+Any
 </dd>
 </dl>
 <a NAME="TimeTracker.importTrackerEntries" ID="TimeTracker.importTrackerEntries"></a>
@@ -393,14 +411,13 @@
 </p>
 <dl>
 
-<dt><i>filePath=</i></dt>
+<dt><i>filePath</i> (str)</dt>
 <dd>
 path and name of the file to write the entries to
-            (string)
 </dd>
-<dt><i>ids=</i></dt>
+<dt><i>ids</i> (list of int)</dt>
 <dd>
-list of entry IDs to be written (list of integer)
+list of entry IDs to be written
 </dd>
 </dl>
 <a NAME="TimeTracker.startTrackerEntry" ID="TimeTracker.startTrackerEntry"></a>
@@ -421,7 +438,13 @@
 <dt>Return:</dt>
 <dd>
 tuple of the ID assigned to the stopped tracker entry and
-            the duration (integer, integer)
+            the duration
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+tuple of (int, int)
 </dd>
 </dl>
 <div align="right"><a href="#top">Up</a></div>
--- a/TimeTracker/Documentation/source/Plugin_Time_Tracker.TimeTracker.TimeTrackerEntryDialog.html	Thu Jun 03 18:02:18 2021 +0200
+++ b/TimeTracker/Documentation/source/Plugin_Time_Tracker.TimeTracker.TimeTrackerEntryDialog.html	Fri Jun 04 16:40:54 2021 +0200
@@ -104,27 +104,27 @@
 </p>
 <dl>
 
-<dt><i>tracker</i></dt>
+<dt><i>tracker</i> (TimeTracker)</dt>
 <dd>
-reference to the time tracker (TimeTracker)
+reference to the time tracker
 </dd>
-<dt><i>entry</i></dt>
+<dt><i>entry</i> (TimeTrackEntry)</dt>
 <dd>
-reference to the time tracker entry (TimeTrackEntry)
+reference to the time tracker entry
 </dd>
-<dt><i>taskItems</i></dt>
+<dt><i>taskItems</i> (list of str)</dt>
 <dd>
 list of task item entries for the
-            task combo box (list of strings)
+            task combo box
 </dd>
-<dt><i>commentItems</i></dt>
+<dt><i>commentItems</i> (list of str)</dt>
 <dd>
 list of comment item entries for the
-            comment combo box (list of strings)
+            comment combo box
 </dd>
-<dt><i>parent</i></dt>
+<dt><i>parent</i> (QWidget)</dt>
 <dd>
-reference to the parent widget (QWidget)
+reference to the parent widget
 </dd>
 </dl>
 <a NAME="TimeTrackerEntryDialog.__checkOk" ID="TimeTrackerEntryDialog.__checkOk"></a>
@@ -145,7 +145,13 @@
 <dt>Return:</dt>
 <dd>
 tuple with start date and time, duration, task description
-            and comment (QDateTime, integer, string, string)
+            and comment
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+tuple of (QDateTime, int, str, str)
 </dd>
 </dl>
 <a NAME="TimeTrackerEntryDialog.on_durationSpinBox_valueChanged" ID="TimeTrackerEntryDialog.on_durationSpinBox_valueChanged"></a>
@@ -157,9 +163,9 @@
 </p>
 <dl>
 
-<dt><i>value</i></dt>
+<dt><i>value</i> (int)</dt>
 <dd>
-value of the duration spin box (integer)
+value of the duration spin box
 </dd>
 </dl>
 <a NAME="TimeTrackerEntryDialog.on_startDateTimeEdit_dateTimeChanged" ID="TimeTrackerEntryDialog.on_startDateTimeEdit_dateTimeChanged"></a>
@@ -171,9 +177,9 @@
 </p>
 <dl>
 
-<dt><i>date</i></dt>
+<dt><i>date</i> (QDateTime)</dt>
 <dd>
-start date and time (QDateTime)
+start date and time
 </dd>
 </dl>
 <div align="right"><a href="#top">Up</a></div>
--- a/TimeTracker/Documentation/source/Plugin_Time_Tracker.TimeTracker.TimeTrackerWidget.html	Thu Jun 03 18:02:18 2021 +0200
+++ b/TimeTracker/Documentation/source/Plugin_Time_Tracker.TimeTracker.TimeTrackerWidget.html	Fri Jun 04 16:40:54 2021 +0200
@@ -164,13 +164,13 @@
 </p>
 <dl>
 
-<dt><i>tracker</i></dt>
+<dt><i>tracker</i> (TimeTracker)</dt>
 <dd>
-reference to the time tracker (TimeTracker)
+reference to the time tracker
 </dd>
-<dt><i>parent</i></dt>
+<dt><i>parent</i> (QWidget)</dt>
 <dd>
-reference to the parent widget (QWidget)
+reference to the parent widget
 </dd>
 </dl>
 <a NAME="TimeTrackerWidget.__addEntry" ID="TimeTrackerWidget.__addEntry"></a>
@@ -203,9 +203,9 @@
 </p>
 <dl>
 
-<dt><i>ids=</i></dt>
+<dt><i>ids</i> (list of int)</dt>
 <dd>
-list of IDs to export or all if empty (list of integer)
+list of IDs to export or all if empty
 </dd>
 </dl>
 <a NAME="TimeTrackerWidget.__exportSelectedEntries" ID="TimeTrackerWidget.__exportSelectedEntries"></a>
@@ -231,14 +231,13 @@
 </p>
 <dl>
 
-<dt><i>entry</i></dt>
+<dt><i>entry</i> (TimeTrackEntry)</dt>
 <dd>
-reference to the tracker entry (TimeTrackEntry)
+reference to the tracker entry
 </dd>
-<dt><i>index</i></dt>
+<dt><i>index</i> (int)</dt>
 <dd>
 index the entry is to be inserted; -1 for at the end
-            (integer)
 </dd>
 </dl>
 <a NAME="TimeTrackerWidget.__mergeDuplicates" ID="TimeTrackerWidget.__mergeDuplicates"></a>
@@ -285,9 +284,9 @@
 </p>
 <dl>
 
-<dt><i>txt</i></dt>
+<dt><i>txt</i> (str)</dt>
 <dd>
-new comment (string)
+new comment
 </dd>
 </dl>
 <a NAME="TimeTrackerWidget.on_entriesList_customContextMenuRequested" ID="TimeTrackerWidget.on_entriesList_customContextMenuRequested"></a>
@@ -299,9 +298,9 @@
 </p>
 <dl>
 
-<dt><i>pos</i></dt>
+<dt><i>pos</i> (QPoint)</dt>
 <dd>
-position the menu should be shown at (QPoint)
+position the menu should be shown at
 </dd>
 </dl>
 <a NAME="TimeTrackerWidget.on_newButton_clicked" ID="TimeTrackerWidget.on_newButton_clicked"></a>
@@ -320,10 +319,9 @@
 </p>
 <dl>
 
-<dt><i>checked</i></dt>
+<dt><i>checked</i> (bool)</dt>
 <dd>
 flag indicating the checked status of the button
-            (boolean)
 </dd>
 </dl>
 <a NAME="TimeTrackerWidget.on_taskCombo_editTextChanged" ID="TimeTrackerWidget.on_taskCombo_editTextChanged"></a>
@@ -336,9 +334,9 @@
 </p>
 <dl>
 
-<dt><i>txt</i></dt>
+<dt><i>txt</i> (str)</dt>
 <dd>
-new task description (string)
+new task description
 </dd>
 </dl>
 <a NAME="TimeTrackerWidget.setCurrentEntry" ID="TimeTrackerWidget.setCurrentEntry"></a>
@@ -350,9 +348,9 @@
 </p>
 <dl>
 
-<dt><i>entry</i></dt>
+<dt><i>entry</i> (TimeTrackEntry)</dt>
 <dd>
-current entry (TimeTrackEntry)
+current entry
 </dd>
 </dl>
 <a NAME="TimeTrackerWidget.showTrackerEntries" ID="TimeTrackerWidget.showTrackerEntries"></a>
@@ -364,9 +362,9 @@
 </p>
 <dl>
 
-<dt><i>entries</i></dt>
+<dt><i>entries</i> (list of TimeTrackEntry)</dt>
 <dd>
-list of tracker entries (list of TimeTrackEntry)
+list of tracker entries
 </dd>
 </dl>
 <div align="right"><a href="#top">Up</a></div>
--- a/TimeTracker/TimeTrackEntry.py	Thu Jun 03 18:02:18 2021 +0200
+++ b/TimeTracker/TimeTrackEntry.py	Fri Jun 04 16:40:54 2021 +0200
@@ -7,7 +7,7 @@
 Module implementing the time track entry class.
 """
 
-from PyQt5.QtCore import Qt, QDateTime, QTime
+from PyQt6.QtCore import Qt, QDateTime, QTime
 
 
 class TimeTrackEntry:
@@ -21,7 +21,8 @@
         """
         Constructor
         
-        @param plugin reference to the plugin object (TimeTrackerPlugin)
+        @param plugin reference to the plugin object
+        @type TimeTrackerPlugin
         """
         self.__plugin = plugin
         
@@ -40,71 +41,118 @@
         """
         Special method implementing the less than function.
         
-        @param other reference to the other object (TimeTrackEntry)
-        @return flag indicating that self is less than other (boolean)
+        @param other reference to the other object
+        @type TimeTrackEntry
+        @return flag indicating that self is less than other
+        @rtype bool
         """
         return self.__startDateTime < other.getStartDateTime()
     
-    def toString(self):
+    def toDict(self):
         """
-        Public method to get a string representation of the entry.
+        Public method to convert the time track entry into a dictionary.
         
-        @return string representation of the entry (string)
+        @return dictionary containing the time track entry data
+        @rtype dict
         """
         if self.__valid:
-            dataLine = TimeTrackEntry.Separator.join([
-                str(self.__id),
-                self.__startDateTime.toString(Qt.ISODate),
-                str(self.__duration),
-                self.__task,
-                self.__comment,
-            ])
-            return "{0}{1}".format(TimeTrackEntry.LineMarker, dataLine)
+            return {
+                "id": self.__id,
+                "start": self.__startDateTime.toString(Qt.DateFormat.ISODate),
+                "duration": self.__duration,
+                "task": self.__task,
+                "comment": self.__comment,
+            }
         else:
-            return ""
+            return {}
     
-    def fromString(self, line):
+    def fromDict(self, data):
         """
-        Public method to populate the entry from the given string.
+        Public method to populate the time track entry from a dictionary.
         
-        @param line stringified entry data as generated by toString() (string)
-        @return ID of the tracker entry; -1 indicates an error (integer)
+        @param data dictionary containing the time track entry data
+        @type dict
+        @return ID of the tracker entry; -1 indicates an error
+        @rtype int
         """
-        if not line.startswith(TimeTrackEntry.LineMarker):
+        if len(data) != self.__entryMembersCount:
             return -1
         
-        line = line.replace(TimeTrackEntry.LineMarker, "")
-        dataList = line.split(TimeTrackEntry.Separator)
-        if len(dataList) != self.__entryMembersCount:
-            return -1
+        self.__id = data["id"]
         
-        try:
-            self.__id = int(dataList[0])
-        except ValueError:
-            return -1
-        
-        dt = QDateTime.fromString(dataList[1], Qt.ISODate)
+        dt = QDateTime.fromString(data["start"], Qt.DateFormat.ISODate)
         if not dt.isValid():
             return -1
         self.__startDateTime = dt
         
-        try:
-            dt = int(dataList[2])
-        except ValueError:
-            return -1
-        self.__duration = dt
-        
-        self.__task = dataList[3]
-        self.__comment = dataList[4]
+        self.__duration = data["duration"]
+        self.__task = data["task"]
+        self.__comment = data["comment"]
         
         self.__valid = True
         return self.__id
-    
+        
+##    def toString(self):
+##        """
+##        Public method to get a string representation of the entry.
+##        
+##        @return string representation of the entry (string)
+##        """
+##        if self.__valid:
+##            dataLine = TimeTrackEntry.Separator.join([
+##                str(self.__id),
+##                self.__startDateTime.toString(Qt.DateFormat.ISODate),
+##                str(self.__duration),
+##                self.__task,
+##                self.__comment,
+##            ])
+##            return "{0}{1}".format(TimeTrackEntry.LineMarker, dataLine)
+##        else:
+##            return ""
+##    
+##    def fromString(self, line):
+##        """
+##        Public method to populate the entry from the given string.
+##        
+##        @param line stringified entry data as generated by toString() (string)
+##        @return ID of the tracker entry; -1 indicates an error (integer)
+##        """
+##        if not line.startswith(TimeTrackEntry.LineMarker):
+##            return -1
+##        
+##        line = line.replace(TimeTrackEntry.LineMarker, "")
+##        dataList = line.split(TimeTrackEntry.Separator)
+##        if len(dataList) != self.__entryMembersCount:
+##            return -1
+##        
+##        try:
+##            self.__id = int(dataList[0])
+##        except ValueError:
+##            return -1
+##        
+##        dt = QDateTime.fromString(dataList[1], Qt.DateFormat.ISODate)
+##        if not dt.isValid():
+##            return -1
+##        self.__startDateTime = dt
+##        
+##        try:
+##            dt = int(dataList[2])
+##        except ValueError:
+##            return -1
+##        self.__duration = dt
+##        
+##        self.__task = dataList[3]
+##        self.__comment = dataList[4]
+##        
+##        self.__valid = True
+##        return self.__id
+##    
     def isValid(self):
         """
         Public method to check the validity of the entry.
         
-        @return validity of the entry (boolean)
+        @return validity of the entry
+        @rtype bool
         """
         return self.__valid
     
@@ -152,7 +200,8 @@
         """
         Public method to check for a paused state.
         
-        @return flag indicating a paused state (boolean)
+        @return flag indicating a paused state
+        @rtype bool
         """
         return self.__paused
     
@@ -160,7 +209,8 @@
         """
         Private method to get the current date and time without milliseconds.
         
-        @return current date and time (QDateTime)
+        @return current date and time
+        @rtype QDateTime
         """
         dt = QDateTime.currentDateTime()
         t = dt.time()
@@ -172,9 +222,12 @@
         """
         Private method to calculate the duration in minutes.
         
-        @param start start date and time (QDateTime)
-        @param stop end date and time (QDateTime)
-        @return duration in minutes (int)
+        @param start start date and time
+        @type QDateTime
+        @param stop end date and time
+        @type QDateTime
+        @return duration in minutes
+        @rtype int
         """
         secs = start.secsTo(stop)
         minutes = secs // 60
@@ -188,7 +241,8 @@
         """
         Public method to get the ID of the entry.
         
-        @return ID of the entry (integer)
+        @return ID of the entry
+        @rtype int
         """
         return self.__id
     
@@ -196,7 +250,8 @@
         """
         Public method to assign an ID to the entry.
         
-        @param eid ID for the entry (integer)
+        @param eid ID for the entry
+        @type int
         """
         self.__id = eid
     
@@ -204,7 +259,8 @@
         """
         Public method to get the start date and time.
         
-        @return start date and time (QDateTime)
+        @return start date and time
+        @rtype QDateTime
         """
         return self.__startDateTime
     
@@ -212,7 +268,8 @@
         """
         Public method to set the start date and time.
         
-        @param startDateTime start date and time (QDateTime)
+        @param startDateTime start date and time
+        @type QDateTime
         """
         if startDateTime.isValid():
             self.__startDateTime = startDateTime
@@ -226,7 +283,8 @@
         """
         Public slot to get the duration.
         
-        @return duration (integer)
+        @return duration
+        @rtype int
         """
         return self.__duration
     
@@ -234,7 +292,8 @@
         """
         Public method to set the duration.
         
-        @param duration duration in minutes (integer)
+        @param duration duration in minutes
+        @type int
         """
         if duration >= self.__plugin.getPreferences("MinimumDuration"):
             self.__duration = duration
@@ -248,8 +307,9 @@
         """
         Public method to add a duration.
         
-        @param duration duration to be added in minutes (integer). Negative
-            values are ignored.
+        @param duration duration to be added in minutes. Negative values are
+            ignored.
+        @type int
         """
         if duration > 0:
             self.__duration += duration
@@ -258,7 +318,8 @@
         """
         Public method to get the task description.
         
-        @return task description (string)
+        @return task description
+        @rtype str
         """
         return self.__task
     
@@ -266,7 +327,8 @@
         """
         Public method to set the task description.
         
-        @param description task description (string)
+        @param description task description
+        @type str
         """
         self.__task = (
             description.replace("\r\n", " ").replace("\n", " ")
@@ -277,7 +339,8 @@
         """
         Public method to get the comment.
         
-        @return comment (string)
+        @return comment
+        @rtype str
         """
         return self.__comment
     
@@ -285,7 +348,8 @@
         """
         Public method to set a comment.
         
-        @param comment comment to set (string)
+        @param comment comment to set
+        @type str
         """
         self.__comment = (
             comment.replace("\r\n", " ").replace("\n", " ").replace("\r", " ")
@@ -295,16 +359,19 @@
         """
         Public method to get the entry data.
         
-        @return entry data as a tuple of start date (string), start time
-            (string), duration (integer), task (string), comment (string)
-            and flag indicating a paused state (boolean)
+        @return entry data as a dictionary with keys 'id', 'paused',
+            'start_date', 'start_time', 'duration', 'task' and 'comment'
+            containing the entry ID, a flag indicating a paused
+            state, the start date as a string, the start time as a string,
+            the duration, the task and a comment
+        @rtype dict
         """
-        return (
-            self.__id,
-            self.__startDateTime.toString("yyyy-MM-dd"),
-            self.__startDateTime.toString("hh:mm"),
-            self.__duration,
-            self.__task,
-            self.__comment,
-            self.__paused,
-        )
+        return {
+            "id": self.__id,
+            "paused": self.__paused,
+            "start_date": self.__startDateTime.toString("yyyy-MM-dd"),
+            "start_time": self.__startDateTime.toString("hh:mm:ss"),
+            "duration": self.__duration,
+            "task": self.__task,
+            "comment": self.__comment,
+        }
--- a/TimeTracker/TimeTracker.py	Thu Jun 03 18:02:18 2021 +0200
+++ b/TimeTracker/TimeTracker.py	Fri Jun 04 16:40:54 2021 +0200
@@ -7,14 +7,15 @@
 Module implementing the time tracker object.
 """
 
+import json
 import os
 
-from PyQt5.QtCore import Qt, QObject
-from PyQt5.QtGui import QKeySequence
+from PyQt6.QtCore import Qt, QObject
+from PyQt6.QtGui import QKeySequence
 
-from E5Gui.E5Application import e5App
-from E5Gui import E5MessageBox
-from E5Gui.E5Action import E5Action
+from EricWidgets.EricApplication import ericApp
+from EricWidgets import EricMessageBox
+from EricGui.EricAction import EricAction
 
 import UI.PixmapCache
 
@@ -23,7 +24,7 @@
     """
     Class implementing the time tracker object.
     """
-    FileName = "TimeTracker.txt"
+    FileName = "TimeTracker.ttj"
     
     def __init__(self, plugin, iconSuffix, parent=None):
         """
@@ -42,7 +43,7 @@
         self.__iconSuffix = iconSuffix
         self.__ui = parent
         
-        self.__e5project = e5App().getObject("Project")
+        self.__ericProject = ericApp().getObject("Project")
     
     def __initialize(self):
         """
@@ -73,7 +74,7 @@
             ),
             self.tr("Time Tracker"))
         
-        self.__activateAct = E5Action(
+        self.__activateAct = EricAction(
             self.tr('Time Tracker'),
             self.tr('T&ime Tracker'),
             QKeySequence(self.tr("Alt+Shift+I")),
@@ -88,7 +89,7 @@
         ))
         self.__activateAct.triggered.connect(self.__activateWidget)
         
-        self.__ui.addE5Actions([self.__activateAct], 'ui')
+        self.__ui.addEricActions([self.__activateAct], 'ui')
         menu = self.__ui.getMenu("subwindow")
         menu.addAction(self.__activateAct)
         
@@ -100,7 +101,7 @@
         """
         menu = self.__ui.getMenu("subwindow")
         menu.removeAction(self.__activateAct)
-        self.__ui.removeE5Actions([self.__activateAct], 'ui')
+        self.__ui.removeEricActions([self.__activateAct], 'ui')
         self.__ui.removeSideWidget(self.__widget)
     
     def projectOpened(self):
@@ -111,9 +112,9 @@
             self.projectClosed()
         
         self.__projectOpen = True
-        self.__projectPath = self.__e5project.getProjectPath()
+        self.__projectPath = self.__ericProject.getProjectPath()
         self.__trackerFilePath = os.path.join(
-            self.__e5project.getProjectManagementDir(),
+            self.__ericProject.getProjectManagementDir(),
             TimeTracker.FileName)
         
         self.__readTrackerEntries()
@@ -138,10 +139,11 @@
         """
         if os.path.exists(self.__trackerFilePath):
             try:
-                with open(self.__trackerFilePath, "r", encoding="utf-8") as f:
-                    data = f.read()
-            except OSError as err:
-                E5MessageBox.critical(
+                with open(self.__trackerFilePath, "r") as f:
+                    jsonString = f.read()
+                entriesDataList = json.loads(jsonString)
+            except (OSError, json.JSONDecodeError) as err:
+                EricMessageBox.critical(
                     self.__ui,
                     self.tr("Read Time Tracker File"),
                     self.tr("""<p>The time tracker file <b>{0}</b> could"""
@@ -152,16 +154,16 @@
             from .TimeTrackEntry import TimeTrackEntry
             
             invalidCount = 0
-            for line in data.splitlines():
-                entry = TimeTrackEntry(self.__plugin)
-                eid = entry.fromString(line.strip())
+            for data in entriesDataList:
+                entry  = TimeTrackEntry(self.__plugin)
+                eid = entry.fromDict(data)
                 if eid > -1:
                     self.__entries[eid] = entry
                 else:
                     invalidCount += 1
             
             if invalidCount:
-                E5MessageBox.information(
+                EricMessageBox.information(
                     self.__ui,
                     self.tr("Read Time Tracker File"),
                     self.tr("""<p>The time tracker file <b>{0}</b>"""
@@ -173,24 +175,25 @@
         """
         Public slot to save the tracker entries to a file.
         
-        @keyparam filePath path and name of the file to write the entries to
-            (string)
-        @keyparam ids list of entry IDs to be written (list of integer)
+        @param filePath path and name of the file to write the entries to
+        @type str
+        @param ids list of entry IDs to be written
+        @type list of int
         """
         if not filePath:
             filePath = self.__trackerFilePath
-        entriesList = (
-            [self.__entries[eid] for eid in ids if eid in self.__entries]
+        entriesDataList = (
+            [self.__entries[eid].toDict()
+             for eid in ids if eid in self.__entries]
             if ids else
-            self.__entries.values()
+            [e.toDict() for e in self.__entries.values()]
         )
         try:
-            with open(filePath, "w", encoding="utf-8") as f:
-                for entry in entriesList:
-                    if entry.isValid():
-                        f.write(entry.toString() + "\n")
-        except OSError as err:
-            E5MessageBox.critical(
+            jsonString = json.dumps(entriesDataList, indent=2)
+            with open(filePath, "w") as f:
+                f.write(jsonString)
+        except (TypeError, OSError) as err:
+            EricMessageBox.critical(
                 self.__ui,
                 self.tr("Save Time Tracker File"),
                 self.tr("""<p>The time tracker file <b>{0}</b> could"""
@@ -205,9 +208,10 @@
         """
         try:
             with open(fname, "r", encoding="utf-8") as f:
-                data = f.read()
-        except OSError as err:
-            E5MessageBox.critical(
+                jsonString = f.read()
+            entriesDataList = json.loads(jsonString)
+        except (OSError, json.JSONDecodeError) as err:
+            EricMessageBox.critical(
                 self.__ui,
                 self.tr("Import Time Tracker File"),
                 self.tr("""<p>The time tracker file <b>{0}</b> could"""
@@ -220,9 +224,10 @@
         invalidCount = 0
         duplicateCount = 0
         entries = []
-        for line in data.splitlines():
+        
+        for data in entriesDataList:
             entry = TimeTrackEntry(self.__plugin)
-            eid = entry.fromString(line.strip())
+            eid = entry.fromDict(data)
             if eid > -1:
                 entries.append(entry)
             else:
@@ -270,7 +275,7 @@
             msg += " " + self.tr(
                 """ %n entries have been ignored.</p>""",
                 "", invalidCount + duplicateCount)
-            E5MessageBox.information(
+            EricMessageBox.information(
                 self.__ui,
                 self.tr("Import Time Tracker File"),
                 msg)
@@ -284,10 +289,14 @@
         """
         Public method to add a new tracker entry based on the given data.
         
-        @param startDateTime start date and time (QDateTime)
-        @param duration duration in minutes (integer)
-        @param task task description (string)
-        @param comment comment (string)
+        @param startDateTime start date and time
+        @type QDateTime
+        @param duration duration in minutes
+        @type int
+        @param task task description
+        @type str
+        @param comment comment
+        @type str
         """
         if not self.__plugin.getPreferences("AllowDuplicates"):
             startDateTimes = [
@@ -315,8 +324,8 @@
         self.__entries[nextID] = entry
         
         self.__widget.clear()
-        self.__widget.showTrackerEntries(sorted(self.__entries.values(),
-                                                reverse=True))
+        self.__widget.showTrackerEntries(
+            sorted(self.__entries.values(), reverse=True))
         self.__widget.setCurrentEntry(self.__currentEntry)
     
     def pauseTrackerEntry(self):
@@ -336,17 +345,19 @@
         Public method to stop the current tracker entry.
         
         @return tuple of the ID assigned to the stopped tracker entry and
-            the duration (integer, integer)
+            the duration
+        @rtype tuple of (int, int)
         """
         duration = 0
         nextID = -1
         if self.__currentEntry is not None:
             self.__currentEntry.stop()
             if self.__currentEntry.isValid():
-                if len(self.__entries.keys()):
-                    nextID = max(self.__entries.keys()) + 1
-                else:
-                    nextID = 0
+                nextID = (
+                    max(self.__entries.keys()) + 1
+                    if len(self.__entries.keys()) else
+                    0
+                )
                 self.__currentEntry.setID(nextID)
                 self.__entries[nextID] = self.__currentEntry
                 if self.__plugin.getPreferences("AutoSave"):
@@ -370,7 +381,8 @@
         """
         Public method to get a reference to the current tracker entry.
         
-        @return reference to the current entry (TimeTrackEntry)
+        @return reference to the current entry
+        @rtype TimeTrackEntry
         """
         return self.__currentEntry
     
@@ -378,8 +390,10 @@
         """
         Public method to get a tracker entry given its ID.
         
-        @param eid ID of the tracker entry (integer)
-        @return entry for the given ID (TimeTrackEntry) or None
+        @param eid ID of the tracker entry
+        @type int
+        @return entry for the given ID or None
+        @rtype TimeTrackEntry
         """
         if eid in self.__entries:
             return self.__entries[eid]
@@ -390,7 +404,8 @@
         """
         Public method to delete a tracker entry given its ID.
         
-        @param eid ID of the tracker entry (integer)
+        @param eid ID of the tracker entry
+        @type int
         """
         if eid in self.__entries:
             del self.__entries[eid]
@@ -420,8 +435,8 @@
             self.saveTrackerEntries()
         
         self.__widget.clear()
-        self.__widget.showTrackerEntries(sorted(self.__entries.values(),
-                                                reverse=True))
+        self.__widget.showTrackerEntries(
+            sorted(self.__entries.values(), reverse=True))
         self.__widget.setCurrentEntry(self.__currentEntry)
     
     def mergeDuplicateTrackerEntries(self):
@@ -448,8 +463,8 @@
             self.saveTrackerEntries()
         
         self.__widget.clear()
-        self.__widget.showTrackerEntries(sorted(self.__entries.values(),
-                                                reverse=True))
+        self.__widget.showTrackerEntries(
+            sorted(self.__entries.values(), reverse=True))
         self.__widget.setCurrentEntry(self.__currentEntry)
     
     def entryChanged(self):
@@ -463,14 +478,16 @@
         """
         Public method to retrieve the various settings.
         
-        @param key the key of the value to get
-        @return the requested setting
+        @param key key of the value to get
+        @type str
+        @return value of the requested setting
+        @rtype Any
         """
         return self.__plugin.getPreferences(key)
     
     def __activateWidget(self):
         """
-        Private slot to handle the activation of the project browser.
+        Private slot to handle the activation of the time tracker widget.
         """
         uiLayoutType = self.__ui.getLayoutType()
         
@@ -482,4 +499,4 @@
             self.__ui.bottomSidebar.setCurrentWidget(self.__widget)
         else:
             self.__widget.show()
-        self.__widget.setFocus(Qt.ActiveWindowFocusReason)
+        self.__widget.setFocus(Qt.FocusReason.ActiveWindowFocusReason)
--- a/TimeTracker/TimeTrackerEntryDialog.py	Thu Jun 03 18:02:18 2021 +0200
+++ b/TimeTracker/TimeTrackerEntryDialog.py	Fri Jun 04 16:40:54 2021 +0200
@@ -7,8 +7,8 @@
 Module implementing the time tracker edit dialog.
 """
 
-from PyQt5.QtCore import pyqtSlot, QDateTime, QDate
-from PyQt5.QtWidgets import QDialog, QDialogButtonBox
+from PyQt6.QtCore import pyqtSlot, QDateTime, QDate
+from PyQt6.QtWidgets import QDialog, QDialogButtonBox
 
 from .Ui_TimeTrackerEntryDialog import Ui_TimeTrackerEntryDialog
 
@@ -21,18 +21,24 @@
         """
         Constructor
         
-        @param tracker reference to the time tracker (TimeTracker)
-        @param entry reference to the time tracker entry (TimeTrackEntry)
+        @param tracker reference to the time tracker
+        @type TimeTracker
+        @param entry reference to the time tracker entry
+        @type TimeTrackEntry
         @param taskItems list of task item entries for the
-            task combo box (list of strings)
+            task combo box
+        @type list of str
         @param commentItems list of comment item entries for the
-            comment combo box (list of strings)
-        @param parent reference to the parent widget (QWidget)
+            comment combo box
+        @type list of str
+        @param parent reference to the parent widget
+        @type QWidget
         """
         super().__init__(parent)
         self.setupUi(self)
         
-        self.buttonBox.button(QDialogButtonBox.Ok).setEnabled(False)
+        self.buttonBox.button(
+            QDialogButtonBox.StandardButton.Ok).setEnabled(False)
         
         self.taskCombo.addItems(taskItems)
         self.commentCombo.addItems(commentItems)
@@ -51,6 +57,8 @@
         else:
             self.startDateTimeEdit.setDateTime(entry.getStartDateTime())
             self.durationSpinBox.setValue(entry.getDuration())
+            self.durationSpinBox.setMaximum(
+                entry.getStartDateTime().secsTo(self.__endDateTime) // 60)
             self.taskCombo.setEditText(entry.getTask())
             self.commentCombo.setEditText(entry.getComment())
         
@@ -62,7 +70,7 @@
         Private slot to set the enabled state of the OK button.
         """
         dt = self.startDateTimeEdit.dateTime()
-        self.buttonBox.button(QDialogButtonBox.Ok).setEnabled(
+        self.buttonBox.button(QDialogButtonBox.StandardButton.Ok).setEnabled(
             dt.addSecs(self.durationSpinBox.value() * 60) <=
             self.__endDateTime)
     
@@ -71,7 +79,8 @@
         """
         Private slot handling a change of the start date and time.
         
-        @param date start date and time (QDateTime)
+        @param date start date and time
+        @type QDateTime
         """
         self.__checkOk()
     
@@ -80,7 +89,8 @@
         """
         Private slot handling a change of the duration.
         
-        @param value value of the duration spin box (integer)
+        @param value value of the duration spin box
+        @type int
         """
         self.__checkOk()
     
@@ -89,7 +99,8 @@
         Public method to get the data.
         
         @return tuple with start date and time, duration, task description
-            and comment (QDateTime, integer, string, string)
+            and comment
+        @rtype tuple of (QDateTime, int, str, str)
         """
         return (
             self.startDateTimeEdit.dateTime(),
--- a/TimeTracker/TimeTrackerWidget.py	Thu Jun 03 18:02:18 2021 +0200
+++ b/TimeTracker/TimeTrackerWidget.py	Fri Jun 04 16:40:54 2021 +0200
@@ -9,11 +9,11 @@
 
 import os
 
-from PyQt5.QtCore import pyqtSlot, QPoint, Qt, QDate, QTime, QFileInfo
-from PyQt5.QtGui import QCursor
-from PyQt5.QtWidgets import QWidget, QMenu, QTreeWidgetItem, QDialog
+from PyQt6.QtCore import pyqtSlot, QPoint, Qt, QDate, QTime, QFileInfo
+from PyQt6.QtGui import QCursor
+from PyQt6.QtWidgets import QWidget, QMenu, QTreeWidgetItem, QDialog
 
-from E5Gui import E5MessageBox, E5FileDialog
+from EricWidgets import EricMessageBox, EricFileDialog
 
 from .Ui_TimeTrackerWidget import Ui_TimeTrackerWidget
 
@@ -33,8 +33,10 @@
         """
         Constructor
         
-        @param tracker reference to the time tracker (TimeTracker)
-        @param parent reference to the parent widget (QWidget)
+        @param tracker reference to the time tracker
+        @type TimeTracker
+        @param parent reference to the parent widget
+        @type QWidget
         """
         super().__init__(parent)
         self.setupUi(self)
@@ -47,7 +49,8 @@
         Private slot handling changes of the task description of the current
         entry.
         
-        @param txt new task description (string)
+        @param txt new task description
+        @type str
         """
         itm = self.entriesList.topLevelItem(0)
         if itm:
@@ -63,7 +66,8 @@
         """
         Private slot handling changes of the comment of the current entry.
         
-        @param txt new comment (string)
+        @param txt new comment
+        @type str
         """
         itm = self.entriesList.topLevelItem(0)
         if itm:
@@ -80,7 +84,7 @@
         Private slot to pause the current timing.
         
         @param checked flag indicating the checked status of the button
-            (boolean)
+        @type bool
         """
         if checked:
             self.__tracker.pauseTrackerEntry()
@@ -108,7 +112,7 @@
             itm = self.entriesList.topLevelItem(0)
             itm.setText(self.DurationColumn,
                         self.tr("{0} min").format(duration))
-            itm.setData(0, Qt.UserRole, eid)
+            itm.setData(0, Qt.ItemDataRole.UserRole, eid)
         else:
             itm = self.entriesList.takeTopLevelItem(0)
             del itm
@@ -122,20 +126,23 @@
         """
         Private slot to create the context menu and show it.
         
-        @param pos position the menu should be shown at (QPoint)
+        @param pos position the menu should be shown at
+        @type QPoint
         """
         menu = QMenu()
         
         act = menu.addAction(self.tr("Edit"), self.__editEntry)
         act.setEnabled(
             len(self.entriesList.selectedItems()) == 1 and
-            self.entriesList.selectedItems()[0].data(0, Qt.UserRole) > -1
+            self.entriesList.selectedItems()[0].data(
+                0, Qt.ItemDataRole.UserRole) > -1
         )
         menu.addAction(self.tr("Add"), self.__addEntry)
         act = menu.addAction(self.tr("Delete"), self.__deleteSelectedEntries)
         act.setEnabled(
             (len(self.entriesList.selectedItems()) == 1 and
-             self.entriesList.selectedItems()[0].data(0, Qt.UserRole) > -1) or
+             self.entriesList.selectedItems()[0].data(
+                0, Qt.ItemDataRole.UserRole) > -1) or
             len(self.entriesList.selectedItems()) > 1
         )
         menu.addSeparator()
@@ -144,7 +151,7 @@
         menu.addAction(self.tr("Import"), self.__importEntries)
         act = menu.addAction(self.tr("Export Selected"),
                              self.__exportSelectedEntries)
-        act.setEnabled(len(self.entriesList.selectedItems()) != 0)
+        act.setEnabled(len(self.entriesList.selectedItems()) > 0)
         menu.addAction(self.tr("Export All"), self.__exportEntries)
         menu.addSeparator()
         menu.addAction(self.tr("Remove duplicates"), self.__removeDuplicates)
@@ -157,14 +164,12 @@
         """
         from .TimeTrackerEntryDialog import TimeTrackerEntryDialog
         
-        tasks = []
-        for index in range(self.taskCombo.count()):
-            tasks.append(self.taskCombo.itemText(index))
-        comments = []
-        for index in range(self.commentCombo.count()):
-            comments.append(self.commentCombo.itemText(index))
+        tasks = [self.taskCombo.itemText(index)
+                 for index in range(self.taskCombo.count())]
+        comments = [self.commentCombo.itemText(index)
+                    for index in range(self.commentCombo.count())]
         dlg = TimeTrackerEntryDialog(self.__tracker, None, tasks, comments)
-        if dlg.exec() == QDialog.Accepted:
+        if dlg.exec() == QDialog.DialogCode.Accepted:
             self.__tracker.addTrackerEntry(*dlg.getData())
     
     def __editEntry(self):
@@ -172,22 +177,20 @@
         Private slot to edit the selected tracker entry.
         """
         itm = self.entriesList.selectedItems()[0]
-        eid = itm.data(0, Qt.UserRole)
+        eid = itm.data(0, Qt.ItemDataRole.UserRole)
         if eid > -1:
             # the current entry is edited via the elements of this widget
             entry = self.__tracker.getEntry(eid)
             if entry is not None:
                 from .TimeTrackerEntryDialog import TimeTrackerEntryDialog
                 
-                tasks = []
-                for index in range(self.taskCombo.count()):
-                    tasks.append(self.taskCombo.itemText(index))
-                comments = []
-                for index in range(self.commentCombo.count()):
-                    comments.append(self.commentCombo.itemText(index))
-                dlg = TimeTrackerEntryDialog(self.__tracker, entry, tasks,
-                                             comments)
-                if dlg.exec() == QDialog.Accepted:
+                tasks = [self.taskCombo.itemText(index)
+                         for index in range(self.taskCombo.count())]
+                comments = [self.commentCombo.itemText(index)
+                            for index in range(self.commentCombo.count())]
+                dlg = TimeTrackerEntryDialog(
+                    self.__tracker, entry, tasks, comments)
+                if dlg.exec() == QDialog.DialogCode.Accepted:
                     start, duration, task, comment = dlg.getData()
                     
                     entry.setStartDateTime(start)
@@ -196,27 +199,27 @@
                     entry.setComment(comment)
                     self.__tracker.entryChanged()
                     
-                    (date, time, duration, task,
-                     comment) = entry.getEntryData()[1:-1]
+                    data = entry.getEntryData()
                     itm.setText(0, self.tr("{0}, {1}", "date, time")
-                                .format(date, time))
-                    itm.setText(1, self.tr("{0} min").format(duration))
-                    itm.setText(2, task)
-                    itm.setText(3, comment)
+                                .format(data["start_date"],
+                                        data["start_time"]))
+                    itm.setText(1, self.tr("{0} min").format(data["duration"]))
+                    itm.setText(2, data["task"])
+                    itm.setText(3, data["comment"])
                     self.__resizeColumns()
     
     def __deleteSelectedEntries(self):
         """
         Private slot to delete the selected tracker entries.
         """
-        res = E5MessageBox.yesNo(
+        res = EricMessageBox.yesNo(
             self,
             self.tr("Delete Selected Entries"),
             self.tr("""Do you really want to delete the selected"""
                     """ entries?"""))
         if res:
             for item in self.entriesList.selectedItems():
-                eid = item.data(0, Qt.UserRole)
+                eid = item.data(0, Qt.ItemDataRole.UserRole)
                 if eid > -1:
                     # the current entry must not be deleted
                     self.entriesList.takeTopLevelItem(
@@ -238,17 +241,17 @@
             Preferences.getMultiProject("Workspace") or
             Utilities.getHomeDir()
         )
-        fname = E5FileDialog.getOpenFileName(
+        fname = EricFileDialog.getOpenFileName(
             None,
-            self.tr("Import Tracker Entries"),
+            self.tr("Import Time Tracker Entries"),
             path,
-            self.tr("Text Files (*.txt);;All Files (*)"))
+            self.tr("Time Tracker Files (*.ttj);;All Files (*)"))
         if fname:
             fname = Utilities.toNativeSeparators(fname)
             if not os.path.exists(fname):
-                E5MessageBox.critical(
+                EricMessageBox.critical(
                     self,
-                    self.tr("Import Tracker Entries"),
+                    self.tr("Import Time Tracker Entries"),
                     self.tr("<p>The file <b>{0}</b> does not exist.</p>")
                     .format(fname))
                 return
@@ -259,19 +262,20 @@
         """
         Private method to export all or selected entries.
         
-        @keyparam ids list of IDs to export or all if empty (list of integer)
+        @param ids list of IDs to export or all if empty
+        @type list of int
         """
         path = (
             Preferences.getMultiProject("Workspace") or
             Utilities.getHomeDir()
         )
-        fname, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
+        fname, selectedFilter = EricFileDialog.getSaveFileNameAndFilter(
             self,
-            self.tr("Export Tracker Entries"),
+            self.tr("Export Time Tracker Entries"),
             path,
-            self.tr("Text Files (*.txt);;All Files (*)"),
+            self.tr("Time Tracker Files (*.ttj);;All Files (*)"),
             None,
-            E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))
+            EricFileDialog.Options(EricFileDialog.DontConfirmOverwrite))
         if fname:
             ext = QFileInfo(fname).suffix()
             if not ext:
@@ -279,12 +283,12 @@
                 if ex:
                     fname += ex
             if QFileInfo(fname).exists():
-                res = E5MessageBox.yesNo(
+                res = EricMessageBox.yesNo(
                     self,
-                    self.tr("Export Tracker Entries"),
+                    self.tr("Export Time Tracker Entries"),
                     self.tr("<p>The file <b>{0}</b> already exists."
                             " Overwrite it?</p>").format(fname),
-                    icon=E5MessageBox.Warning)
+                    icon=EricMessageBox.Warning)
                 if not res:
                     return
                 fname = Utilities.toNativeSeparators(fname)
@@ -296,7 +300,7 @@
         """
         ids = []
         for itm in self.entriesList.selectedItems():
-            eid = itm.data(0, Qt.UserRole)
+            eid = itm.data(0, Qt.ItemDataRole.UserRole)
             if eid > -1:
                 ids.append(eid)
         
@@ -307,7 +311,7 @@
         """
         Private slot to remove duplicate entries.
         """
-        res = E5MessageBox.yesNo(
+        res = EricMessageBox.yesNo(
             self,
             self.tr("Remove Duplicate Tracker Entries"),
             self.tr("""Are you sure you want to remove duplicate"""
@@ -320,7 +324,7 @@
         """
         Private slot to merge duplicate entries.
         """
-        res = E5MessageBox.yesNo(
+        res = EricMessageBox.yesNo(
             self,
             self.tr("Merge Duplicate Tracker Entries"),
             self.tr("""Are you sure you want to merge duplicate"""
@@ -333,16 +337,21 @@
         """
         Private method to insert a tracker entry into the list.
         
-        @param entry reference to the tracker entry (TimeTrackEntry)
+        @param entry reference to the tracker entry
+        @type TimeTrackEntry
         @param index index the entry is to be inserted; -1 for at the end
-            (integer)
+        @type int
         """
-        eid, date, time, duration, task, comment, paused = entry.getEntryData()
+        data = entry.getEntryData()
         itm = QTreeWidgetItem(
-            [self.tr("{0}, {1}", "date, time").format(date, time),
-             self.tr("{0} min").format(duration), task, comment])
-        itm.setTextAlignment(1, Qt.AlignRight)
-        itm.setData(0, Qt.UserRole, eid)
+            [self.tr("{0}, {1}", "date, time").format(data["start_date"],
+                                                      data["start_time"]),
+             self.tr("{0} min").format(data["duration"]),
+             data["task"],
+             data["comment"]]
+        )
+        itm.setTextAlignment(1, Qt.AlignmentFlag.AlignRight)
+        itm.setData(0, Qt.ItemDataRole.UserRole, data["id"])
         if index == -1:
             self.entriesList.addTopLevelItem(itm)
         else:
@@ -359,7 +368,8 @@
         """
         Public method to show the tracker entries of the current project.
         
-        @param entries list of tracker entries (list of TimeTrackEntry)
+        @param entries list of tracker entries
+        @type list of TimeTrackEntry
         """
         self.taskCombo.addItem("")
         self.commentCombo.addItem("")
@@ -386,23 +396,24 @@
         """
         Public method to set the current entry.
         
-        @param entry current entry (TimeTrackEntry)
+        @param entry current entry
+        @type TimeTrackEntry
         """
         self.__insertEntry(entry, 0)
         self.__resizeColumns()
         
-        eid, date, time, duration, task, comment, paused = entry.getEntryData()
+        data = entry.getEntryData()
         self.startDateTimeEdit.setDateTime(entry.getStartDateTime())
-        self.durationSpinBox.setValue(duration)
-        self.taskCombo.setEditText(task)
-        self.commentCombo.setEditText(comment)
+        self.durationSpinBox.setValue(data["duration"])
+        self.taskCombo.setEditText(data["task"])
+        self.commentCombo.setEditText(data["comment"])
     
     def clear(self):
         """
         Public method to clear all the data.
         """
         self.entriesList.clear()
-        self.startDateTimeEdit.setDate(QDate(2000, 1, 1))
+        self.startDateTimeEdit.setDate(QDate(2020, 1, 1))
         self.startDateTimeEdit.setTime(QTime(0, 0, 0))
         self.durationSpinBox.setValue(0)
         self.taskCombo.clear()
Binary file TimeTracker/i18n/timetracker_de.qm has changed
--- a/TimeTracker/i18n/timetracker_de.ts	Thu Jun 03 18:02:18 2021 +0200
+++ b/TimeTracker/i18n/timetracker_de.ts	Fri Jun 04 16:40:54 2021 +0200
@@ -1,414 +1,427 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS><TS version="2.0" language="de_DE" sourcelanguage="en_US">
-<context>
+<!DOCTYPE TS>
+<TS version="2.1" language="de_DE" sourcelanguage="en_US">
+  <context>
     <name>TimeTracker</name>
     <message>
-        <location filename="../TimeTracker.py" line="76"/>
-        <source>Time Tracker</source>
-        <translation>Zeitnahme</translation>
+      <location filename="../TimeTracker.py" line="78" />
+      <location filename="../TimeTracker.py" line="75" />
+      <source>Time Tracker</source>
+      <translation>Zeitnahme</translation>
     </message>
     <message>
-        <location filename="../TimeTracker.py" line="165"/>
-        <source>Read Time Tracker File</source>
-        <translation>Zeitnahmedatei einlesen</translation>
-    </message>
-    <message>
-        <location filename="../TimeTracker.py" line="213"/>
-        <source>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
-        <translation>&lt;p&gt;Die Zeitnahmedatei &lt;b&gt;{0}&lt;/b&gt; konnte nicht gelesen werden.&lt;/p&gt;&lt;p&gt;Ursache: {1}&lt;/p&gt;</translation>
+      <location filename="../TimeTracker.py" line="79" />
+      <source>T&amp;ime Tracker</source>
+      <translation>Ze&amp;itnahme</translation>
     </message>
     <message>
-        <location filename="../TimeTracker.py" line="195"/>
-        <source>Save Time Tracker File</source>
-        <translation>Zeitnahmedatei speichern</translation>
+      <location filename="../TimeTracker.py" line="80" />
+      <source>Alt+Shift+I</source>
+      <translation>Alt+Shift+I</translation>
     </message>
     <message>
-        <location filename="../TimeTracker.py" line="195"/>
-        <source>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; could not be saved.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
-        <translation>&lt;p&gt;Die Zeitnahmedatei &lt;b&gt;{0}&lt;/b&gt; konnte nicht gespeichert werden.&lt;/p&gt;&lt;p&gt;Ursache: {1}&lt;/p&gt;</translation>
+      <location filename="../TimeTracker.py" line="83" />
+      <source>Switch the input focus to the Time Tracker window.</source>
+      <translation>Schalte den Eingabefokus auf das Zeitnahmefenster um.</translation>
     </message>
     <message>
-        <location filename="../TimeTracker.py" line="276"/>
-        <source>Import Time Tracker File</source>
-        <translation>Zeitnahmedatei importieren</translation>
+      <location filename="../TimeTracker.py" line="85" />
+      <source>&lt;b&gt;Activate Time Tracker&lt;/b&gt;&lt;p&gt;This switches the input focus to the Time Tracker window.&lt;/p&gt;</source>
+      <translation>&lt;b&gt;Zeitnahme aktivieren&lt;/b&gt;&lt;p&gt;Dies schaltet den Eingabefokus auf das Zeitnahmefenster um.&lt;/p&gt;</translation>
     </message>
-    <message numerus="yes">
-        <location filename="../TimeTracker.py" line="269"/>
-        <source>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; contained %n invalid entries.</source>
-        <translation>
-            <numerusform>&lt;p&gt;Die Zeitnahmedatei &lt;b&gt;{0}&lt;/b&gt; enthielt einen ungültigen Eintrag.</numerusform>
-            <numerusform>&lt;p&gt;Die Zeitnahmedatei &lt;b&gt;{0}&lt;/b&gt; enthielt %n ungültige Einträge.</numerusform>
-        </translation>
+    <message>
+      <location filename="../TimeTracker.py" line="168" />
+      <location filename="../TimeTracker.py" line="148" />
+      <source>Read Time Tracker File</source>
+      <translation>Zeitnahmedatei einlesen</translation>
+    </message>
+    <message>
+      <location filename="../TimeTracker.py" line="217" />
+      <location filename="../TimeTracker.py" line="149" />
+      <source>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
+      <translation>&lt;p&gt;Die Zeitnahmedatei &lt;b&gt;{0}&lt;/b&gt; konnte nicht gelesen werden.&lt;/p&gt;&lt;p&gt;Ursache: {1}&lt;/p&gt;</translation>
     </message>
     <message numerus="yes">
-        <location filename="../TimeTracker.py" line="264"/>
-        <source>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; contained %n duplicate entries.</source>
-        <translation>
-            <numerusform>&lt;p&gt;Die Zeitnahmedatei &lt;b&gt;{0}&lt;/b&gt; enthielt einen doppelten Eintrag.</numerusform>
-            <numerusform>&lt;p&gt;Die Zeitnahmedatei &lt;b&gt;{0}&lt;/b&gt; enthielt %n doppelte Einträge.</numerusform>
-        </translation>
+      <location filename="../TimeTracker.py" line="169" />
+      <source>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; contained %n invalid entries. These have been discarded.&lt;/p&gt;</source>
+      <translation>
+        <numerusform>&lt;p&gt;Die Zeitnahmedatei &lt;b&gt;{0}&lt;/b&gt; enthielt einen ungültigen Eintrag. Dieser wurde übersprungen.&lt;/p&gt;</numerusform>
+        <numerusform>&lt;p&gt;Die Zeitnahmedatei &lt;b&gt;{0}&lt;/b&gt; enthielt %n ungültige Einträge. Diese wurden übersprungen.&lt;/p&gt;</numerusform>
+      </translation>
     </message>
-    <message numerus="yes">
-        <location filename="../TimeTracker.py" line="165"/>
-        <source>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; contained %n invalid entries. These have been discarded.&lt;/p&gt;</source>
-        <translation>
-            <numerusform>&lt;p&gt;Die Zeitnahmedatei &lt;b&gt;{0}&lt;/b&gt; enthielt einen ungültigen Eintrag. Dieser wurde übersprungen.&lt;/p&gt;</numerusform>
-            <numerusform>&lt;p&gt;Die Zeitnahmedatei &lt;b&gt;{0}&lt;/b&gt; enthielt %n ungültige Einträge. Diese wurden übersprungen.&lt;/p&gt;</numerusform>
-        </translation>
+    <message>
+      <location filename="../TimeTracker.py" line="198" />
+      <source>Save Time Tracker File</source>
+      <translation>Zeitnahmedatei speichern</translation>
     </message>
-    <message numerus="yes">
-        <location filename="../TimeTracker.py" line="260"/>
-        <source> %n duplicate entries were detected.</source>
-        <translation>
-            <numerusform> Ein doppelter Eintrag wurde erkannt.</numerusform>
-            <numerusform> %n doppelte Einträge wurden erkannt.</numerusform>
-        </translation>
+    <message>
+      <location filename="../TimeTracker.py" line="199" />
+      <source>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; could not be saved.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
+      <translation>&lt;p&gt;Die Zeitnahmedatei &lt;b&gt;{0}&lt;/b&gt; konnte nicht gespeichert werden.&lt;/p&gt;&lt;p&gt;Ursache: {1}&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../TimeTracker.py" line="280" />
+      <location filename="../TimeTracker.py" line="216" />
+      <source>Import Time Tracker File</source>
+      <translation>Zeitnahmedatei importieren</translation>
     </message>
     <message numerus="yes">
-        <location filename="../TimeTracker.py" line="273"/>
-        <source> %n entries have been ignored.&lt;/p&gt;</source>
-        <translation>
-            <numerusform> Ein Eintrag wurde ubersprungen.&lt;/p&gt;</numerusform>
-            <numerusform> %n Einträge wurden übersprungen.&lt;/p&gt;</numerusform>
-        </translation>
+      <location filename="../TimeTracker.py" line="271" />
+      <location filename="../TimeTracker.py" line="258" />
+      <source>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; contained %n invalid entries.</source>
+      <translation>
+        <numerusform>&lt;p&gt;Die Zeitnahmedatei &lt;b&gt;{0}&lt;/b&gt; enthielt einen ungültigen Eintrag.</numerusform>
+        <numerusform>&lt;p&gt;Die Zeitnahmedatei &lt;b&gt;{0}&lt;/b&gt; enthielt %n ungültige Einträge.</numerusform>
+      </translation>
     </message>
-    <message>
-        <location filename="../TimeTracker.py" line="76"/>
-        <source>T&amp;ime Tracker</source>
-        <translation>Ze&amp;itnahme</translation>
+    <message numerus="yes">
+      <location filename="../TimeTracker.py" line="262" />
+      <source> %n duplicate entries were detected.</source>
+      <translation>
+        <numerusform> Ein doppelter Eintrag wurde erkannt.</numerusform>
+        <numerusform> %n doppelte Einträge wurden erkannt.</numerusform>
+      </translation>
     </message>
-    <message>
-        <location filename="../TimeTracker.py" line="76"/>
-        <source>Alt+Shift+I</source>
-        <translation>Alt+Shift+I</translation>
+    <message numerus="yes">
+      <location filename="../TimeTracker.py" line="266" />
+      <source>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; contained %n duplicate entries.</source>
+      <translation>
+        <numerusform>&lt;p&gt;Die Zeitnahmedatei &lt;b&gt;{0}&lt;/b&gt; enthielt einen doppelten Eintrag.</numerusform>
+        <numerusform>&lt;p&gt;Die Zeitnahmedatei &lt;b&gt;{0}&lt;/b&gt; enthielt %n doppelte Einträge.</numerusform>
+      </translation>
     </message>
-    <message>
-        <location filename="../TimeTracker.py" line="82"/>
-        <source>Switch the input focus to the Time Tracker window.</source>
-        <translation>Schalte den Eingabefokus auf das Zeitnahmefenster um.</translation>
+    <message numerus="yes">
+      <location filename="../TimeTracker.py" line="275" />
+      <source> %n entries have been ignored.&lt;/p&gt;</source>
+      <translation>
+        <numerusform> Ein Eintrag wurde ubersprungen.&lt;/p&gt;</numerusform>
+        <numerusform> %n Einträge wurden übersprungen.&lt;/p&gt;</numerusform>
+      </translation>
     </message>
-    <message>
-        <location filename="../TimeTracker.py" line="84"/>
-        <source>&lt;b&gt;Activate Time Tracker&lt;/b&gt;&lt;p&gt;This switches the input focus to the Time Tracker window.&lt;/p&gt;</source>
-        <translation>&lt;b&gt;Zeitnahme aktivieren&lt;/b&gt;&lt;p&gt;Dies schaltet den Eingabefokus auf das Zeitnahmefenster um.&lt;/p&gt;</translation>
-    </message>
-</context>
-<context>
+  </context>
+  <context>
     <name>TimeTrackerEntryDialog</name>
     <message>
-        <location filename="../TimeTrackerEntryDialog.ui" line="14"/>
-        <source>Edit Timer Entry</source>
-        <translation>Zeitnahmeeintrag editieren</translation>
+      <location filename="../TimeTrackerEntryDialog.ui" line="0" />
+      <source>Edit Timer Entry</source>
+      <translation>Zeitnahmeeintrag editieren</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerEntryDialog.ui" line="25"/>
-        <source>Start Date/Time:</source>
-        <translation>Startdatum/-zeit:</translation>
+      <location filename="../TimeTrackerEntryDialog.ui" line="0" />
+      <source>Start Date/Time:</source>
+      <translation>Startdatum/-zeit:</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerEntryDialog.ui" line="32"/>
-        <source>Edit the start date and time of the timer</source>
-        <translation>Editiere das Startdatum und die Startzeit des Zeitnehmers</translation>
+      <location filename="../TimeTrackerEntryDialog.ui" line="0" />
+      <source>Edit the start date and time of the timer</source>
+      <translation>Editiere das Startdatum und die Startzeit des Zeitnehmers</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerEntryDialog.ui" line="35"/>
-        <source>yyyy-MM-dd HH:mm:ss</source>
-        <translation>dd.MM.yyy HH:mm:ss</translation>
+      <location filename="../TimeTrackerEntryDialog.ui" line="0" />
+      <source>yyyy-MM-dd HH:mm:ss</source>
+      <translation>dd.MM.yyy HH:mm:ss</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerEntryDialog.ui" line="58"/>
-        <source>Duration:</source>
-        <translation>Dauer:</translation>
+      <location filename="../TimeTrackerEntryDialog.ui" line="0" />
+      <source>Duration:</source>
+      <translation>Dauer:</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerEntryDialog.ui" line="65"/>
-        <source>Edit the duration of the timer</source>
-        <translation>Editiere die Dauer des Zeitnehmers</translation>
+      <location filename="../TimeTrackerEntryDialog.ui" line="0" />
+      <source>Edit the duration of the timer</source>
+      <translation>Editiere die Dauer des Zeitnehmers</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerEntryDialog.ui" line="71"/>
-        <source> min</source>
-        <translation> min</translation>
+      <location filename="../TimeTrackerEntryDialog.ui" line="0" />
+      <source> min</source>
+      <translation> min</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerEntryDialog.ui" line="94"/>
-        <source>Task:</source>
-        <translation>Aufgabe:</translation>
+      <location filename="../TimeTrackerEntryDialog.ui" line="0" />
+      <source>Task:</source>
+      <translation>Aufgabe:</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerEntryDialog.ui" line="107"/>
-        <source>Enter the task description for the timer</source>
-        <translation>Gib die Aufgabenbeschreibung für den Zeitnehmer ein</translation>
+      <location filename="../TimeTrackerEntryDialog.ui" line="0" />
+      <source>Enter the task description for the timer</source>
+      <translation>Gib die Aufgabenbeschreibung für den Zeitnehmer ein</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerEntryDialog.ui" line="117"/>
-        <source>Comment:</source>
-        <translation>Kommentar:</translation>
+      <location filename="../TimeTrackerEntryDialog.ui" line="0" />
+      <source>Comment:</source>
+      <translation>Kommentar:</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerEntryDialog.ui" line="130"/>
-        <source>Enter a comment for the timer</source>
-        <translation>Gib einen Kommentar für den Zeitnehmer ein</translation>
+      <location filename="../TimeTrackerEntryDialog.ui" line="0" />
+      <source>Enter a comment for the timer</source>
+      <translation>Gib einen Kommentar für den Zeitnehmer ein</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerEntryDialog.py" line="49"/>
-        <source>Add Tracker Entry</source>
-        <translation>Zeitnahmeeintrag hinzufügen</translation>
+      <location filename="../TimeTrackerEntryDialog.py" line="55" />
+      <source>Add Tracker Entry</source>
+      <translation>Zeitnahmeeintrag hinzufügen</translation>
     </message>
-</context>
-<context>
+  </context>
+  <context>
     <name>TimeTrackerPage</name>
     <message>
-        <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="17"/>
-        <source>&lt;b&gt;Configure Time Tracker&lt;/b&gt;</source>
-        <translation>&lt;b&gt;Zeitnahme konfigurieren&lt;/b&gt;</translation>
+      <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="0" />
+      <source>&lt;b&gt;Configure Time Tracker&lt;/b&gt;</source>
+      <translation>&lt;b&gt;Zeitnahme konfigurieren&lt;/b&gt;</translation>
     </message>
     <message>
-        <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="39"/>
-        <source>Minimum Duration:</source>
-        <translation>Mindestdauer:</translation>
+      <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="0" />
+      <source>Minimum Duration:</source>
+      <translation>Mindestdauer:</translation>
     </message>
     <message>
-        <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="46"/>
-        <source>Enter the value of the minimum duration for a valid tracker entry</source>
-        <translation>Gib die Mindestdauer für einen gültigen Zeitnahmeeintrag ein</translation>
+      <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="0" />
+      <source>Enter the value of the minimum duration for a valid tracker entry</source>
+      <translation>Gib die Mindestdauer für einen gültigen Zeitnahmeeintrag ein</translation>
     </message>
     <message>
-        <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="49"/>
-        <source> min</source>
-        <translation> min</translation>
+      <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="0" />
+      <source> min</source>
+      <translation> min</translation>
     </message>
     <message>
-        <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="75"/>
-        <source>Select to save automatically whenever a tracker is stopped</source>
-        <translation>Auswählen, um bei jeder Änderung zu speichern</translation>
+      <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="0" />
+      <source>Select to save automatically whenever a tracker is stopped</source>
+      <translation>Auswählen, um bei jeder Änderung zu speichern</translation>
     </message>
     <message>
-        <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="78"/>
-        <source>Auto Save Enabled</source>
-        <translation>Automatische Speicherung aktiv</translation>
+      <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="0" />
+      <source>Auto Save Enabled</source>
+      <translation>Automatische Speicherung aktiv</translation>
     </message>
     <message>
-        <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="85"/>
-        <source>Select to allow multiple entries with the same start date and time</source>
-        <translation>Auswählen, um mehrere Einträge mit identischem Startzeitpunkt zuzulassen</translation>
+      <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="0" />
+      <source>Select to allow multiple entries with the same start date and time</source>
+      <translation>Auswählen, um mehrere Einträge mit identischem Startzeitpunkt zuzulassen</translation>
     </message>
     <message>
-        <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="88"/>
-        <source>Allow entries with identical start date and time</source>
-        <translation>Einträge mit identischem Startzeitpunkt zulassen</translation>
+      <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="0" />
+      <source>Allow entries with identical start date and time</source>
+      <translation>Einträge mit identischem Startzeitpunkt zulassen</translation>
     </message>
-</context>
-<context>
+  </context>
+  <context>
     <name>TimeTrackerPlugin</name>
     <message>
-        <location filename="../../PluginTimeTracker.py" line="75"/>
-        <source>Time Tracker</source>
-        <translation>Zeitnahme</translation>
+      <location filename="../../PluginTimeTracker.py" line="69" />
+      <source>Time Tracker</source>
+      <translation>Zeitnahme</translation>
     </message>
-</context>
-<context>
+  </context>
+  <context>
     <name>TimeTrackerWidget</name>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="22"/>
-        <source>Start Date/Time:</source>
-        <translation>Startzeitpunkt:</translation>
+      <location filename="../TimeTrackerWidget.py" line="349" />
+      <location filename="../TimeTrackerWidget.py" line="206" />
+      <location filename="../TimeTrackerWidget.py" line="114" />
+      <location filename="../TimeTrackerWidget.py" line="97" />
+      <source>{0} min</source>
+      <translation>{0} min</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="29"/>
-        <source>Duration:</source>
-        <translation>Dauer:</translation>
-    </message>
-    <message>
-        <location filename="../TimeTrackerWidget.ui" line="36"/>
-        <source>Task:</source>
-        <translation>Aufgabe:</translation>
+      <location filename="../TimeTrackerWidget.py" line="134" />
+      <source>Edit</source>
+      <translation>Editieren</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="43"/>
-        <source>Comment:</source>
-        <translation>Kommentar:</translation>
+      <location filename="../TimeTrackerWidget.py" line="140" />
+      <source>Add</source>
+      <translation>Hinzufügen</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="53"/>
-        <source>Shows the start date and time of the current timer</source>
-        <translation>Zeigt das Startdatum und die Startzeit des aktuellen Zeitnehmers an</translation>
+      <location filename="../TimeTrackerWidget.py" line="141" />
+      <source>Delete</source>
+      <translation>Löschen</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="59"/>
-        <source>yyyy-MM-dd HH:mm:ss</source>
-        <translation>dd.MM.yyyy HH:mm:ss</translation>
+      <location filename="../TimeTrackerWidget.py" line="149" />
+      <source>Save</source>
+      <translation>Speichern</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="72"/>
-        <source>Shows the duration of the current timer</source>
-        <translation>Zeigt die Dauer des aktuellen Zeitnehmers an</translation>
+      <location filename="../TimeTrackerWidget.py" line="151" />
+      <source>Import</source>
+      <translation>Importieren</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="81"/>
-        <source> min</source>
-        <translation> min</translation>
+      <location filename="../TimeTrackerWidget.py" line="152" />
+      <source>Export Selected</source>
+      <translation>Ausgewählte exportieren</translation>
+    </message>
+    <message>
+      <location filename="../TimeTrackerWidget.py" line="155" />
+      <source>Export All</source>
+      <translation>Alle exportieren</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="97"/>
-        <source>Enter the task description for the current timer</source>
-        <translation>Gib die Aufgabenbeschreibung für den aktuellen Zeitnehmer ein</translation>
+      <location filename="../TimeTrackerWidget.py" line="157" />
+      <source>Remove duplicates</source>
+      <translation>Doppelte löschen</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="113"/>
-        <source>Enter a comment for the current timer</source>
-        <translation>Gib einen Kommentar für den aktuellen Zeitnehmer ein</translation>
+      <location filename="../TimeTrackerWidget.py" line="158" />
+      <source>Merge duplicates</source>
+      <translation>Doppelte zusammenführen</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="140"/>
-        <source>Press to pause the current timer</source>
-        <translation>Drücken, um den aktuellen Zeitnehmer zu pausieren</translation>
+      <location filename="../TimeTrackerWidget.py" line="347" />
+      <location filename="../TimeTrackerWidget.py" line="203" />
+      <source>{0}, {1}</source>
+      <comment>date, time</comment>
+      <translation>{0}, {1}</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="143"/>
-        <source>Pause</source>
-        <translation>Pause</translation>
+      <location filename="../TimeTrackerWidget.py" line="217" />
+      <source>Delete Selected Entries</source>
+      <translation>Ausgewählte Einträge löschen</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="153"/>
-        <source>Press to end the current timer and start a new one</source>
-        <translation>Drücken, um den aktuellen Zeitnehmer zu stoppen und einen neuen zu starten</translation>
+      <location filename="../TimeTrackerWidget.py" line="218" />
+      <source>Do you really want to delete the selected entries?</source>
+      <translation>Sollen die ausgewählten Einträge wirklich gelöscht werden?</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="156"/>
-        <source>End Current Timer and Start a New Timer</source>
-        <translation>Aktuellen Zeitnehmer stoppen und neuen starten</translation>
+      <location filename="../TimeTrackerWidget.py" line="254" />
+      <location filename="../TimeTrackerWidget.py" line="246" />
+      <source>Import Time Tracker Entries</source>
+      <translation>Zeitnahmeinträge importieren</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="200"/>
-        <source>Start Date/Time</source>
-        <translation>Startzeitpunkt</translation>
+      <location filename="../TimeTrackerWidget.py" line="276" />
+      <location filename="../TimeTrackerWidget.py" line="248" />
+      <source>Time Tracker Files (*.ttj);;All Files (*)</source>
+      <translation>Zeitnahmedateien (*.ttj);;Alle Dateien (*)</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="205"/>
-        <source>Duration</source>
-        <translation>Dauer</translation>
+      <location filename="../TimeTrackerWidget.py" line="255" />
+      <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; does not exist.&lt;/p&gt;</source>
+      <translation>&lt;p&gt;Die Datei &lt;b&gt;{0}&lt;/b&gt; existiert nicht.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="210"/>
-        <source>Task</source>
-        <translation>Aufgabe</translation>
+      <location filename="../TimeTrackerWidget.py" line="288" />
+      <location filename="../TimeTrackerWidget.py" line="274" />
+      <source>Export Time Tracker Entries</source>
+      <translation>Zeitnahmeinträge exportieren</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="215"/>
-        <source>Comment</source>
-        <translation>Kommentar</translation>
-    </message>
-    <message>
-        <location filename="../TimeTrackerWidget.py" line="341"/>
-        <source>{0} min</source>
-        <translation>{0} min</translation>
+      <location filename="../TimeTrackerWidget.py" line="289" />
+      <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
+      <translation>&lt;p&gt;Die Datei &lt;b&gt;{0}&lt;/b&gt; existiert bereits. Überschreiben?&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="129"/>
-        <source>Edit</source>
-        <translation>Editieren</translation>
+      <location filename="../TimeTrackerWidget.py" line="316" />
+      <source>Remove Duplicate Tracker Entries</source>
+      <translation>Doppelte Zeitnahmeeinträge löschen</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="134"/>
-        <source>Add</source>
-        <translation>Hinzufügen</translation>
+      <location filename="../TimeTrackerWidget.py" line="317" />
+      <source>Are you sure you want to remove duplicate tracker entries? Only the one with the longest duration will be kept.</source>
+      <translation>Sollen doppelte Zeitnahmeeinträge wirklich gelöscht werden? Nur der Eintrag mit der längsten Dauer bleibt erhalten.</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="135"/>
-        <source>Delete</source>
-        <translation>Löschen</translation>
+      <location filename="../TimeTrackerWidget.py" line="329" />
+      <source>Merge Duplicate Tracker Entries</source>
+      <translation>Doppelte Zeitnahmeeinträge zusammenführen</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="142"/>
-        <source>Save</source>
-        <translation>Speichern</translation>
+      <location filename="../TimeTrackerWidget.py" line="330" />
+      <source>Are you sure you want to merge duplicate tracker entries? The durations of duplicate ones will be added.</source>
+      <translation>Sollen doppelte Zeitnahmeeinträge wirklich zusammengeführt werden? Die Zeitdauern der doppelten Einträge werden addiert.</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="144"/>
-        <source>Import</source>
-        <translation>Importieren</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Start Date/Time:</source>
+      <translation>Startzeitpunkt:</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="145"/>
-        <source>Export Selected</source>
-        <translation>Ausgewählte exportieren</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Duration:</source>
+      <translation>Dauer:</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="148"/>
-        <source>Export All</source>
-        <translation>Alle exportieren</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Task:</source>
+      <translation>Aufgabe:</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="150"/>
-        <source>Remove duplicates</source>
-        <translation>Doppelte löschen</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Comment:</source>
+      <translation>Kommentar:</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="151"/>
-        <source>Merge duplicates</source>
-        <translation>Doppelte zusammenführen</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Shows the start date and time of the current timer</source>
+      <translation>Zeigt das Startdatum und die Startzeit des aktuellen Zeitnehmers an</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="341"/>
-        <source>{0}, {1}</source>
-        <comment>date, time</comment>
-        <translation>{0}, {1}</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>yyyy-MM-dd HH:mm:ss</source>
+      <translation>dd.MM.yyyy HH:mm:ss</translation>
+    </message>
+    <message>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Shows the duration of the current timer</source>
+      <translation>Zeigt die Dauer des aktuellen Zeitnehmers an</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="212"/>
-        <source>Delete Selected Entries</source>
-        <translation>Ausgewählte Einträge löschen</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source> min</source>
+      <translation> min</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="212"/>
-        <source>Do you really want to delete the selected entries?</source>
-        <translation>Sollen die ausgewählten Einträge wirklich gelöscht werden?</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Enter the task description for the current timer</source>
+      <translation>Gib die Aufgabenbeschreibung für den aktuellen Zeitnehmer ein</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="249"/>
-        <source>Import Tracker Entries</source>
-        <translation>Zeitnahmeinträge importieren</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Enter a comment for the current timer</source>
+      <translation>Gib einen Kommentar für den aktuellen Zeitnehmer ein</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="268"/>
-        <source>Text Files (*.txt);;All Files (*)</source>
-        <translation>Text Dateien (*.txt);;Alle Dateien (*)</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Press to pause the current timer</source>
+      <translation>Drücken, um den aktuellen Zeitnehmer zu pausieren</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="249"/>
-        <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; does not exist.&lt;/p&gt;</source>
-        <translation>&lt;p&gt;Die Datei &lt;b&gt;{0}&lt;/b&gt; existiert nicht.&lt;/p&gt;</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Pause</source>
+      <translation>Pause</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="282"/>
-        <source>Export Tracker Entries</source>
-        <translation>Zeitnahmeinträge exportieren</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Press to end the current timer and start a new one</source>
+      <translation>Drücken, um den aktuellen Zeitnehmer zu stoppen und einen neuen zu starten</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="282"/>
-        <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
-        <translation>&lt;p&gt;Die Datei &lt;b&gt;{0}&lt;/b&gt; existiert bereits. Überschreiben?&lt;/p&gt;</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>End Current Timer and Start a New Timer</source>
+      <translation>Aktuellen Zeitnehmer stoppen und neuen starten</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="310"/>
-        <source>Remove Duplicate Tracker Entries</source>
-        <translation>Doppelte Zeitnahmeeinträge löschen</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Start Date/Time</source>
+      <translation>Startzeitpunkt</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="310"/>
-        <source>Are you sure you want to remove duplicate tracker entries? Only the one with the longest duration will be kept.</source>
-        <translation>Sollen doppelte Zeitnahmeeinträge wirklich gelöscht werden? Nur der Eintrag mit der längsten Dauer bleibt erhalten.</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Duration</source>
+      <translation>Dauer</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="323"/>
-        <source>Merge Duplicate Tracker Entries</source>
-        <translation>Doppelte Zeitnahmeeinträge zusammenführen</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Task</source>
+      <translation>Aufgabe</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="323"/>
-        <source>Are you sure you want to merge duplicate tracker entries? The durations of duplicate ones will be added.</source>
-        <translation>Sollen doppelte Zeitnahmeeinträge wirklich zusammengeführt werden? Die Zeitdauern der doppelten Einträge werden addiert.</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Comment</source>
+      <translation>Kommentar</translation>
     </message>
-</context>
+  </context>
 </TS>
--- a/TimeTracker/i18n/timetracker_en.ts	Thu Jun 03 18:02:18 2021 +0200
+++ b/TimeTracker/i18n/timetracker_en.ts	Fri Jun 04 16:40:54 2021 +0200
@@ -1,414 +1,427 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS><TS version="2.0" language="de_DE" sourcelanguage="">
-<context>
+<!DOCTYPE TS>
+<TS version="2.0" language="de_DE" sourcelanguage="">
+  <context>
     <name>TimeTracker</name>
     <message>
-        <location filename="../TimeTracker.py" line="76"/>
-        <source>Time Tracker</source>
-        <translation type="unfinished"></translation>
+      <location filename="../TimeTracker.py" line="78" />
+      <location filename="../TimeTracker.py" line="75" />
+      <source>Time Tracker</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../TimeTracker.py" line="165"/>
-        <source>Read Time Tracker File</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../TimeTracker.py" line="213"/>
-        <source>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
-        <translation type="unfinished"></translation>
+      <location filename="../TimeTracker.py" line="79" />
+      <source>T&amp;ime Tracker</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../TimeTracker.py" line="195"/>
-        <source>Save Time Tracker File</source>
-        <translation type="unfinished"></translation>
+      <location filename="../TimeTracker.py" line="80" />
+      <source>Alt+Shift+I</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../TimeTracker.py" line="195"/>
-        <source>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; could not be saved.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
-        <translation type="unfinished"></translation>
+      <location filename="../TimeTracker.py" line="83" />
+      <source>Switch the input focus to the Time Tracker window.</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../TimeTracker.py" line="276"/>
-        <source>Import Time Tracker File</source>
-        <translation type="unfinished"></translation>
+      <location filename="../TimeTracker.py" line="85" />
+      <source>&lt;b&gt;Activate Time Tracker&lt;/b&gt;&lt;p&gt;This switches the input focus to the Time Tracker window.&lt;/p&gt;</source>
+      <translation type="unfinished" />
     </message>
-    <message numerus="yes">
-        <location filename="../TimeTracker.py" line="269"/>
-        <source>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; contained %n invalid entries.</source>
-        <translation>
-            <numerusform>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; contained one invalid entry.</numerusform>
-            <numerusform>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; contained %n invalid entries.</numerusform>
-        </translation>
+    <message>
+      <location filename="../TimeTracker.py" line="168" />
+      <location filename="../TimeTracker.py" line="148" />
+      <source>Read Time Tracker File</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../TimeTracker.py" line="217" />
+      <location filename="../TimeTracker.py" line="149" />
+      <source>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
+      <translation type="unfinished" />
     </message>
     <message numerus="yes">
-        <location filename="../TimeTracker.py" line="264"/>
-        <source>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; contained %n duplicate entries.</source>
-        <translation>
-            <numerusform>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; contained one duplicate entry.</numerusform>
-            <numerusform>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; contained %n duplicate entries.</numerusform>
-        </translation>
+      <location filename="../TimeTracker.py" line="169" />
+      <source>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; contained %n invalid entries. These have been discarded.&lt;/p&gt;</source>
+      <translation>
+        <numerusform>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; contained one invalid entry. This has been discarded.&lt;/p&gt;</numerusform>
+        <numerusform>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; contained %n invalid entries. These have been discarded.&lt;/p&gt;</numerusform>
+      </translation>
     </message>
-    <message numerus="yes">
-        <location filename="../TimeTracker.py" line="165"/>
-        <source>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; contained %n invalid entries. These have been discarded.&lt;/p&gt;</source>
-        <translation>
-            <numerusform>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; contained one invalid entry. This has been discarded.&lt;/p&gt;</numerusform>
-            <numerusform>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; contained %n invalid entries. These have been discarded.&lt;/p&gt;</numerusform>
-        </translation>
+    <message>
+      <location filename="../TimeTracker.py" line="198" />
+      <source>Save Time Tracker File</source>
+      <translation type="unfinished" />
     </message>
-    <message numerus="yes">
-        <location filename="../TimeTracker.py" line="260"/>
-        <source> %n duplicate entries were detected.</source>
-        <translation>
-            <numerusform> One duplicate entry was detected.</numerusform>
-            <numerusform> %n duplicate entries were detected.</numerusform>
-        </translation>
+    <message>
+      <location filename="../TimeTracker.py" line="199" />
+      <source>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; could not be saved.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../TimeTracker.py" line="280" />
+      <location filename="../TimeTracker.py" line="216" />
+      <source>Import Time Tracker File</source>
+      <translation type="unfinished" />
     </message>
     <message numerus="yes">
-        <location filename="../TimeTracker.py" line="273"/>
-        <source> %n entries have been ignored.&lt;/p&gt;</source>
-        <translation>
-            <numerusform> One entry has been ignored.&lt;/p&gt;</numerusform>
-            <numerusform> %n entries have been ignored.&lt;/p&gt;</numerusform>
-        </translation>
+      <location filename="../TimeTracker.py" line="271" />
+      <location filename="../TimeTracker.py" line="258" />
+      <source>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; contained %n invalid entries.</source>
+      <translation>
+        <numerusform>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; contained one invalid entry.</numerusform>
+        <numerusform>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; contained %n invalid entries.</numerusform>
+      </translation>
     </message>
-    <message>
-        <location filename="../TimeTracker.py" line="76"/>
-        <source>T&amp;ime Tracker</source>
-        <translation type="unfinished"></translation>
+    <message numerus="yes">
+      <location filename="../TimeTracker.py" line="262" />
+      <source> %n duplicate entries were detected.</source>
+      <translation>
+        <numerusform> One duplicate entry was detected.</numerusform>
+        <numerusform> %n duplicate entries were detected.</numerusform>
+      </translation>
     </message>
-    <message>
-        <location filename="../TimeTracker.py" line="76"/>
-        <source>Alt+Shift+I</source>
-        <translation type="unfinished"></translation>
+    <message numerus="yes">
+      <location filename="../TimeTracker.py" line="266" />
+      <source>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; contained %n duplicate entries.</source>
+      <translation>
+        <numerusform>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; contained one duplicate entry.</numerusform>
+        <numerusform>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; contained %n duplicate entries.</numerusform>
+      </translation>
     </message>
-    <message>
-        <location filename="../TimeTracker.py" line="82"/>
-        <source>Switch the input focus to the Time Tracker window.</source>
-        <translation type="unfinished"></translation>
+    <message numerus="yes">
+      <location filename="../TimeTracker.py" line="275" />
+      <source> %n entries have been ignored.&lt;/p&gt;</source>
+      <translation>
+        <numerusform> One entry has been ignored.&lt;/p&gt;</numerusform>
+        <numerusform> %n entries have been ignored.&lt;/p&gt;</numerusform>
+      </translation>
     </message>
-    <message>
-        <location filename="../TimeTracker.py" line="84"/>
-        <source>&lt;b&gt;Activate Time Tracker&lt;/b&gt;&lt;p&gt;This switches the input focus to the Time Tracker window.&lt;/p&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
+  </context>
+  <context>
     <name>TimeTrackerEntryDialog</name>
     <message>
-        <location filename="../TimeTrackerEntryDialog.ui" line="14"/>
-        <source>Edit Timer Entry</source>
-        <translation type="unfinished"></translation>
+      <location filename="../TimeTrackerEntryDialog.ui" line="0" />
+      <source>Edit Timer Entry</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../TimeTrackerEntryDialog.ui" line="25"/>
-        <source>Start Date/Time:</source>
-        <translation type="unfinished"></translation>
+      <location filename="../TimeTrackerEntryDialog.ui" line="0" />
+      <source>Start Date/Time:</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../TimeTrackerEntryDialog.ui" line="32"/>
-        <source>Edit the start date and time of the timer</source>
-        <translation type="unfinished"></translation>
+      <location filename="../TimeTrackerEntryDialog.ui" line="0" />
+      <source>Edit the start date and time of the timer</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../TimeTrackerEntryDialog.ui" line="35"/>
-        <source>yyyy-MM-dd HH:mm:ss</source>
-        <translation type="unfinished"></translation>
+      <location filename="../TimeTrackerEntryDialog.ui" line="0" />
+      <source>yyyy-MM-dd HH:mm:ss</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../TimeTrackerEntryDialog.ui" line="58"/>
-        <source>Duration:</source>
-        <translation type="unfinished"></translation>
+      <location filename="../TimeTrackerEntryDialog.ui" line="0" />
+      <source>Duration:</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../TimeTrackerEntryDialog.ui" line="65"/>
-        <source>Edit the duration of the timer</source>
-        <translation type="unfinished"></translation>
+      <location filename="../TimeTrackerEntryDialog.ui" line="0" />
+      <source>Edit the duration of the timer</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../TimeTrackerEntryDialog.ui" line="71"/>
-        <source> min</source>
-        <translation type="unfinished"></translation>
+      <location filename="../TimeTrackerEntryDialog.ui" line="0" />
+      <source> min</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../TimeTrackerEntryDialog.ui" line="94"/>
-        <source>Task:</source>
-        <translation type="unfinished"></translation>
+      <location filename="../TimeTrackerEntryDialog.ui" line="0" />
+      <source>Task:</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../TimeTrackerEntryDialog.ui" line="107"/>
-        <source>Enter the task description for the timer</source>
-        <translation type="unfinished"></translation>
+      <location filename="../TimeTrackerEntryDialog.ui" line="0" />
+      <source>Enter the task description for the timer</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../TimeTrackerEntryDialog.ui" line="117"/>
-        <source>Comment:</source>
-        <translation type="unfinished"></translation>
+      <location filename="../TimeTrackerEntryDialog.ui" line="0" />
+      <source>Comment:</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../TimeTrackerEntryDialog.ui" line="130"/>
-        <source>Enter a comment for the timer</source>
-        <translation type="unfinished"></translation>
+      <location filename="../TimeTrackerEntryDialog.ui" line="0" />
+      <source>Enter a comment for the timer</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../TimeTrackerEntryDialog.py" line="49"/>
-        <source>Add Tracker Entry</source>
-        <translation type="unfinished"></translation>
+      <location filename="../TimeTrackerEntryDialog.py" line="55" />
+      <source>Add Tracker Entry</source>
+      <translation type="unfinished" />
     </message>
-</context>
-<context>
+  </context>
+  <context>
     <name>TimeTrackerPage</name>
     <message>
-        <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="17"/>
-        <source>&lt;b&gt;Configure Time Tracker&lt;/b&gt;</source>
-        <translation type="unfinished"></translation>
+      <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="0" />
+      <source>&lt;b&gt;Configure Time Tracker&lt;/b&gt;</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="39"/>
-        <source>Minimum Duration:</source>
-        <translation type="unfinished"></translation>
+      <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="0" />
+      <source>Minimum Duration:</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="46"/>
-        <source>Enter the value of the minimum duration for a valid tracker entry</source>
-        <translation type="unfinished"></translation>
+      <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="0" />
+      <source>Enter the value of the minimum duration for a valid tracker entry</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="49"/>
-        <source> min</source>
-        <translation type="unfinished"></translation>
+      <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="0" />
+      <source> min</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="75"/>
-        <source>Select to save automatically whenever a tracker is stopped</source>
-        <translation type="unfinished"></translation>
+      <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="0" />
+      <source>Select to save automatically whenever a tracker is stopped</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="78"/>
-        <source>Auto Save Enabled</source>
-        <translation type="unfinished"></translation>
+      <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="0" />
+      <source>Auto Save Enabled</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="85"/>
-        <source>Select to allow multiple entries with the same start date and time</source>
-        <translation type="unfinished"></translation>
+      <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="0" />
+      <source>Select to allow multiple entries with the same start date and time</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="88"/>
-        <source>Allow entries with identical start date and time</source>
-        <translation type="unfinished"></translation>
+      <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="0" />
+      <source>Allow entries with identical start date and time</source>
+      <translation type="unfinished" />
     </message>
-</context>
-<context>
+  </context>
+  <context>
     <name>TimeTrackerPlugin</name>
     <message>
-        <location filename="../../PluginTimeTracker.py" line="75"/>
-        <source>Time Tracker</source>
-        <translation type="unfinished"></translation>
+      <location filename="../../PluginTimeTracker.py" line="69" />
+      <source>Time Tracker</source>
+      <translation type="unfinished" />
     </message>
-</context>
-<context>
+  </context>
+  <context>
     <name>TimeTrackerWidget</name>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="22"/>
-        <source>Start Date/Time:</source>
-        <translation type="unfinished"></translation>
+      <location filename="../TimeTrackerWidget.py" line="349" />
+      <location filename="../TimeTrackerWidget.py" line="206" />
+      <location filename="../TimeTrackerWidget.py" line="114" />
+      <location filename="../TimeTrackerWidget.py" line="97" />
+      <source>{0} min</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="29"/>
-        <source>Duration:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../TimeTrackerWidget.ui" line="36"/>
-        <source>Task:</source>
-        <translation type="unfinished"></translation>
+      <location filename="../TimeTrackerWidget.py" line="134" />
+      <source>Edit</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="43"/>
-        <source>Comment:</source>
-        <translation type="unfinished"></translation>
+      <location filename="../TimeTrackerWidget.py" line="140" />
+      <source>Add</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="53"/>
-        <source>Shows the start date and time of the current timer</source>
-        <translation type="unfinished"></translation>
+      <location filename="../TimeTrackerWidget.py" line="141" />
+      <source>Delete</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="59"/>
-        <source>yyyy-MM-dd HH:mm:ss</source>
-        <translation type="unfinished"></translation>
+      <location filename="../TimeTrackerWidget.py" line="149" />
+      <source>Save</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="72"/>
-        <source>Shows the duration of the current timer</source>
-        <translation type="unfinished"></translation>
+      <location filename="../TimeTrackerWidget.py" line="151" />
+      <source>Import</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="81"/>
-        <source> min</source>
-        <translation type="unfinished"></translation>
+      <location filename="../TimeTrackerWidget.py" line="152" />
+      <source>Export Selected</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../TimeTrackerWidget.py" line="155" />
+      <source>Export All</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="97"/>
-        <source>Enter the task description for the current timer</source>
-        <translation type="unfinished"></translation>
+      <location filename="../TimeTrackerWidget.py" line="157" />
+      <source>Remove duplicates</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="113"/>
-        <source>Enter a comment for the current timer</source>
-        <translation type="unfinished"></translation>
+      <location filename="../TimeTrackerWidget.py" line="158" />
+      <source>Merge duplicates</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="140"/>
-        <source>Press to pause the current timer</source>
-        <translation type="unfinished"></translation>
+      <location filename="../TimeTrackerWidget.py" line="347" />
+      <location filename="../TimeTrackerWidget.py" line="203" />
+      <source>{0}, {1}</source>
+      <comment>date, time</comment>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="143"/>
-        <source>Pause</source>
-        <translation type="unfinished"></translation>
+      <location filename="../TimeTrackerWidget.py" line="217" />
+      <source>Delete Selected Entries</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="153"/>
-        <source>Press to end the current timer and start a new one</source>
-        <translation type="unfinished"></translation>
+      <location filename="../TimeTrackerWidget.py" line="218" />
+      <source>Do you really want to delete the selected entries?</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="156"/>
-        <source>End Current Timer and Start a New Timer</source>
-        <translation type="unfinished"></translation>
+      <location filename="../TimeTrackerWidget.py" line="254" />
+      <location filename="../TimeTrackerWidget.py" line="246" />
+      <source>Import Time Tracker Entries</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="200"/>
-        <source>Start Date/Time</source>
-        <translation type="unfinished"></translation>
+      <location filename="../TimeTrackerWidget.py" line="276" />
+      <location filename="../TimeTrackerWidget.py" line="248" />
+      <source>Time Tracker Files (*.ttj);;All Files (*)</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="205"/>
-        <source>Duration</source>
-        <translation type="unfinished"></translation>
+      <location filename="../TimeTrackerWidget.py" line="255" />
+      <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; does not exist.&lt;/p&gt;</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="210"/>
-        <source>Task</source>
-        <translation type="unfinished"></translation>
+      <location filename="../TimeTrackerWidget.py" line="288" />
+      <location filename="../TimeTrackerWidget.py" line="274" />
+      <source>Export Time Tracker Entries</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="215"/>
-        <source>Comment</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../TimeTrackerWidget.py" line="341"/>
-        <source>{0} min</source>
-        <translation type="unfinished"></translation>
+      <location filename="../TimeTrackerWidget.py" line="289" />
+      <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="129"/>
-        <source>Edit</source>
-        <translation type="unfinished"></translation>
+      <location filename="../TimeTrackerWidget.py" line="316" />
+      <source>Remove Duplicate Tracker Entries</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="134"/>
-        <source>Add</source>
-        <translation type="unfinished"></translation>
+      <location filename="../TimeTrackerWidget.py" line="317" />
+      <source>Are you sure you want to remove duplicate tracker entries? Only the one with the longest duration will be kept.</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="135"/>
-        <source>Delete</source>
-        <translation type="unfinished"></translation>
+      <location filename="../TimeTrackerWidget.py" line="329" />
+      <source>Merge Duplicate Tracker Entries</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="142"/>
-        <source>Save</source>
-        <translation type="unfinished"></translation>
+      <location filename="../TimeTrackerWidget.py" line="330" />
+      <source>Are you sure you want to merge duplicate tracker entries? The durations of duplicate ones will be added.</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="144"/>
-        <source>Import</source>
-        <translation type="unfinished"></translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Start Date/Time:</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="145"/>
-        <source>Export Selected</source>
-        <translation type="unfinished"></translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Duration:</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="148"/>
-        <source>Export All</source>
-        <translation type="unfinished"></translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Task:</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="150"/>
-        <source>Remove duplicates</source>
-        <translation type="unfinished"></translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Comment:</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="151"/>
-        <source>Merge duplicates</source>
-        <translation type="unfinished"></translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Shows the start date and time of the current timer</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="341"/>
-        <source>{0}, {1}</source>
-        <comment>date, time</comment>
-        <translation type="unfinished"></translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>yyyy-MM-dd HH:mm:ss</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Shows the duration of the current timer</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="212"/>
-        <source>Delete Selected Entries</source>
-        <translation type="unfinished"></translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source> min</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="212"/>
-        <source>Do you really want to delete the selected entries?</source>
-        <translation type="unfinished"></translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Enter the task description for the current timer</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="249"/>
-        <source>Import Tracker Entries</source>
-        <translation type="unfinished"></translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Enter a comment for the current timer</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="268"/>
-        <source>Text Files (*.txt);;All Files (*)</source>
-        <translation type="unfinished"></translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Press to pause the current timer</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="249"/>
-        <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; does not exist.&lt;/p&gt;</source>
-        <translation type="unfinished"></translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Pause</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="282"/>
-        <source>Export Tracker Entries</source>
-        <translation type="unfinished"></translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Press to end the current timer and start a new one</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="282"/>
-        <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
-        <translation type="unfinished"></translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>End Current Timer and Start a New Timer</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="310"/>
-        <source>Remove Duplicate Tracker Entries</source>
-        <translation type="unfinished"></translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Start Date/Time</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="310"/>
-        <source>Are you sure you want to remove duplicate tracker entries? Only the one with the longest duration will be kept.</source>
-        <translation type="unfinished"></translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Duration</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="323"/>
-        <source>Merge Duplicate Tracker Entries</source>
-        <translation type="unfinished"></translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Task</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="323"/>
-        <source>Are you sure you want to merge duplicate tracker entries? The durations of duplicate ones will be added.</source>
-        <translation type="unfinished"></translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Comment</source>
+      <translation type="unfinished" />
     </message>
-</context>
+  </context>
 </TS>
--- a/TimeTracker/i18n/timetracker_es.ts	Thu Jun 03 18:02:18 2021 +0200
+++ b/TimeTracker/i18n/timetracker_es.ts	Fri Jun 04 16:40:54 2021 +0200
@@ -1,414 +1,439 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS><TS version="2.0" language="es_ES" sourcelanguage="">
-<context>
+<!DOCTYPE TS>
+<TS version="2.0" language="es_ES" sourcelanguage="">
+  <context>
     <name>TimeTracker</name>
     <message>
-        <location filename="../TimeTracker.py" line="76"/>
-        <source>Time Tracker</source>
-        <translation>Time Tracker</translation>
+      <location filename="../TimeTracker.py" line="78" />
+      <location filename="../TimeTracker.py" line="75" />
+      <source>Time Tracker</source>
+      <translation>Time Tracker</translation>
     </message>
     <message>
-        <location filename="../TimeTracker.py" line="165"/>
-        <source>Read Time Tracker File</source>
-        <translation>Leer Archivo de Time Tracker</translation>
-    </message>
-    <message>
-        <location filename="../TimeTracker.py" line="213"/>
-        <source>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
-        <translation>&lt;p&gt;El archivo de time tracker &lt;b&gt;{0}&lt;/b&gt; no ha podido leerse.&lt;/p&gt;&lt;p&gt;Razón: {1}&lt;/p&gt;</translation>
+      <location filename="../TimeTracker.py" line="79" />
+      <source>T&amp;ime Tracker</source>
+      <translation>T&amp;ime Tracker</translation>
     </message>
     <message>
-        <location filename="../TimeTracker.py" line="195"/>
-        <source>Save Time Tracker File</source>
-        <translation>Guardar Archivo de Time Tracker</translation>
+      <location filename="../TimeTracker.py" line="80" />
+      <source>Alt+Shift+I</source>
+      <translation>Alt+Shift+I</translation>
     </message>
     <message>
-        <location filename="../TimeTracker.py" line="195"/>
-        <source>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; could not be saved.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
-        <translation>&lt;p&gt;El archivo de time tracker &lt;b&gt;{0}&lt;/b&gt; no ha podido guardarse.&lt;/p&gt;&lt;p&gt;Razón: {1}&lt;/p&gt;</translation>
+      <location filename="../TimeTracker.py" line="83" />
+      <source>Switch the input focus to the Time Tracker window.</source>
+      <translation>Cambiar el foco de input a la ventana de Time Tracker.</translation>
     </message>
     <message>
-        <location filename="../TimeTracker.py" line="276"/>
-        <source>Import Time Tracker File</source>
-        <translation>Importar Archivo de Time Tracker</translation>
+      <location filename="../TimeTracker.py" line="85" />
+      <source>&lt;b&gt;Activate Time Tracker&lt;/b&gt;&lt;p&gt;This switches the input focus to the Time Tracker window.&lt;/p&gt;</source>
+      <translation>&lt;b&gt;Activar Time Tracker&lt;/b&gt;&lt;p&gt;Cambia el foco de input a la ventana de Time Tracker.&lt;/p&gt;</translation>
     </message>
-    <message numerus="yes">
-        <location filename="../TimeTracker.py" line="269"/>
-        <source>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; contained %n invalid entries.</source>
-        <translation>
-            <numerusform>&lt;p&gt;El archivo de time tracker &lt;b&gt;{0}&lt;/b&gt; contiene %n entrada no válida.</numerusform>
-            <numerusform>&lt;p&gt;El archivo de time tracker &lt;b&gt;{0}&lt;/b&gt; contiene %n entradas no válidas.</numerusform>
-        </translation>
+    <message>
+      <location filename="../TimeTracker.py" line="168" />
+      <location filename="../TimeTracker.py" line="148" />
+      <source>Read Time Tracker File</source>
+      <translation>Leer Archivo de Time Tracker</translation>
+    </message>
+    <message>
+      <location filename="../TimeTracker.py" line="217" />
+      <location filename="../TimeTracker.py" line="149" />
+      <source>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
+      <translation>&lt;p&gt;El archivo de time tracker &lt;b&gt;{0}&lt;/b&gt; no ha podido leerse.&lt;/p&gt;&lt;p&gt;Razón: {1}&lt;/p&gt;</translation>
     </message>
     <message numerus="yes">
-        <location filename="../TimeTracker.py" line="264"/>
-        <source>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; contained %n duplicate entries.</source>
-        <translation>
-            <numerusform>&lt;p&gt;El archivo de time tracker &lt;b&gt;{0}&lt;/b&gt; contiene %n entrada duplicada.</numerusform>
-            <numerusform>&lt;p&gt;El archivo de time tracker &lt;b&gt;{0}&lt;/b&gt; contiene %n entradas duplicadas.</numerusform>
-        </translation>
+      <location filename="../TimeTracker.py" line="169" />
+      <source>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; contained %n invalid entries. These have been discarded.&lt;/p&gt;</source>
+      <translation>
+        <numerusform>&lt;p&gt;El archivo de time tracker &lt;b&gt;{0}&lt;/b&gt; contiene %n entrada no válida. Ésta se ha descartado.&lt;/p&gt;</numerusform>
+        <numerusform>&lt;p&gt;El archivo de time tracker &lt;b&gt;{0}&lt;/b&gt; contiene %n entradas no válidas. Éstas se han descartado.&lt;/p&gt;</numerusform>
+      </translation>
     </message>
-    <message numerus="yes">
-        <location filename="../TimeTracker.py" line="165"/>
-        <source>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; contained %n invalid entries. These have been discarded.&lt;/p&gt;</source>
-        <translation>
-            <numerusform>&lt;p&gt;El archivo de time tracker &lt;b&gt;{0}&lt;/b&gt; contiene %n entrada no válida. Ésta se ha descartado.&lt;/p&gt;</numerusform>
-            <numerusform>&lt;p&gt;El archivo de time tracker &lt;b&gt;{0}&lt;/b&gt; contiene %n entradas no válidas. Éstas se han descartado.&lt;/p&gt;</numerusform>
-        </translation>
+    <message>
+      <location filename="../TimeTracker.py" line="198" />
+      <source>Save Time Tracker File</source>
+      <translation>Guardar Archivo de Time Tracker</translation>
     </message>
-    <message numerus="yes">
-        <location filename="../TimeTracker.py" line="260"/>
-        <source> %n duplicate entries were detected.</source>
-        <translation>
-            <numerusform>Se han detectado %n entrada duplicada.</numerusform>
-            <numerusform>Se han detectado %n entradas duplicadas.</numerusform>
-        </translation>
+    <message>
+      <location filename="../TimeTracker.py" line="199" />
+      <source>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; could not be saved.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
+      <translation>&lt;p&gt;El archivo de time tracker &lt;b&gt;{0}&lt;/b&gt; no ha podido guardarse.&lt;/p&gt;&lt;p&gt;Razón: {1}&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../TimeTracker.py" line="280" />
+      <location filename="../TimeTracker.py" line="216" />
+      <source>Import Time Tracker File</source>
+      <translation>Importar Archivo de Time Tracker</translation>
     </message>
     <message numerus="yes">
-        <location filename="../TimeTracker.py" line="273"/>
-        <source> %n entries have been ignored.&lt;/p&gt;</source>
-        <translation>
-            <numerusform>Se han ignorado %n entrada.&lt;/p&gt;</numerusform>
-            <numerusform>Se han ignorado %n entradas.&lt;/p&gt;</numerusform>
-        </translation>
+      <location filename="../TimeTracker.py" line="271" />
+      <location filename="../TimeTracker.py" line="258" />
+      <source>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; contained %n invalid entries.</source>
+      <translation>
+        <numerusform>&lt;p&gt;El archivo de time tracker &lt;b&gt;{0}&lt;/b&gt; contiene %n entrada no válida.</numerusform>
+        <numerusform>&lt;p&gt;El archivo de time tracker &lt;b&gt;{0}&lt;/b&gt; contiene %n entradas no válidas.</numerusform>
+      </translation>
     </message>
-    <message>
-        <location filename="../TimeTracker.py" line="76"/>
-        <source>T&amp;ime Tracker</source>
-        <translation>T&amp;ime Tracker</translation>
+    <message numerus="yes">
+      <location filename="../TimeTracker.py" line="262" />
+      <source> %n duplicate entries were detected.</source>
+      <translation>
+        <numerusform>Se han detectado %n entrada duplicada.</numerusform>
+        <numerusform>Se han detectado %n entradas duplicadas.</numerusform>
+      </translation>
     </message>
-    <message>
-        <location filename="../TimeTracker.py" line="76"/>
-        <source>Alt+Shift+I</source>
-        <translation>Alt+Shift+I</translation>
+    <message numerus="yes">
+      <location filename="../TimeTracker.py" line="266" />
+      <source>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; contained %n duplicate entries.</source>
+      <translation>
+        <numerusform>&lt;p&gt;El archivo de time tracker &lt;b&gt;{0}&lt;/b&gt; contiene %n entrada duplicada.</numerusform>
+        <numerusform>&lt;p&gt;El archivo de time tracker &lt;b&gt;{0}&lt;/b&gt; contiene %n entradas duplicadas.</numerusform>
+      </translation>
     </message>
-    <message>
-        <location filename="../TimeTracker.py" line="82"/>
-        <source>Switch the input focus to the Time Tracker window.</source>
-        <translation>Cambiar el foco de input a la ventana de Time Tracker.</translation>
+    <message numerus="yes">
+      <location filename="../TimeTracker.py" line="275" />
+      <source> %n entries have been ignored.&lt;/p&gt;</source>
+      <translation>
+        <numerusform>Se han ignorado %n entrada.&lt;/p&gt;</numerusform>
+        <numerusform>Se han ignorado %n entradas.&lt;/p&gt;</numerusform>
+      </translation>
     </message>
-    <message>
-        <location filename="../TimeTracker.py" line="84"/>
-        <source>&lt;b&gt;Activate Time Tracker&lt;/b&gt;&lt;p&gt;This switches the input focus to the Time Tracker window.&lt;/p&gt;</source>
-        <translation>&lt;b&gt;Activar Time Tracker&lt;/b&gt;&lt;p&gt;Cambia el foco de input a la ventana de Time Tracker.&lt;/p&gt;</translation>
-    </message>
-</context>
-<context>
+  </context>
+  <context>
     <name>TimeTrackerEntryDialog</name>
     <message>
-        <location filename="../TimeTrackerEntryDialog.ui" line="14"/>
-        <source>Edit Timer Entry</source>
-        <translation>Editar Entrada Temporizador</translation>
+      <location filename="../TimeTrackerEntryDialog.ui" line="0" />
+      <source>Edit Timer Entry</source>
+      <translation>Editar Entrada Temporizador</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerEntryDialog.ui" line="25"/>
-        <source>Start Date/Time:</source>
-        <translation>Fecha/Hora Inicio:</translation>
+      <location filename="../TimeTrackerEntryDialog.ui" line="0" />
+      <source>Start Date/Time:</source>
+      <translation>Fecha/Hora Inicio:</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerEntryDialog.ui" line="32"/>
-        <source>Edit the start date and time of the timer</source>
-        <translation>Editar la fecha y tiempo de inicio del temporizador</translation>
+      <location filename="../TimeTrackerEntryDialog.ui" line="0" />
+      <source>Edit the start date and time of the timer</source>
+      <translation>Editar la fecha y tiempo de inicio del temporizador</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerEntryDialog.ui" line="35"/>
-        <source>yyyy-MM-dd HH:mm:ss</source>
-        <translation>yyyy-MM-dd HH:mm:ss</translation>
+      <location filename="../TimeTrackerEntryDialog.ui" line="0" />
+      <source>yyyy-MM-dd HH:mm:ss</source>
+      <translation>yyyy-MM-dd HH:mm:ss</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerEntryDialog.ui" line="58"/>
-        <source>Duration:</source>
-        <translation>Duración:</translation>
+      <location filename="../TimeTrackerEntryDialog.ui" line="0" />
+      <source>Duration:</source>
+      <translation>Duración:</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerEntryDialog.ui" line="65"/>
-        <source>Edit the duration of the timer</source>
-        <translation>Editar la duración del temporizador</translation>
+      <location filename="../TimeTrackerEntryDialog.ui" line="0" />
+      <source>Edit the duration of the timer</source>
+      <translation>Editar la duración del temporizador</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerEntryDialog.ui" line="71"/>
-        <source> min</source>
-        <translation> min</translation>
+      <location filename="../TimeTrackerEntryDialog.ui" line="0" />
+      <source> min</source>
+      <translation> min</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerEntryDialog.ui" line="94"/>
-        <source>Task:</source>
-        <translation>Tarea:</translation>
+      <location filename="../TimeTrackerEntryDialog.ui" line="0" />
+      <source>Task:</source>
+      <translation>Tarea:</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerEntryDialog.ui" line="107"/>
-        <source>Enter the task description for the timer</source>
-        <translation>Introducir la descripción de la tarea para el temporizador</translation>
+      <location filename="../TimeTrackerEntryDialog.ui" line="0" />
+      <source>Enter the task description for the timer</source>
+      <translation>Introducir la descripción de la tarea para el temporizador</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerEntryDialog.ui" line="117"/>
-        <source>Comment:</source>
-        <translation>Comentario:</translation>
+      <location filename="../TimeTrackerEntryDialog.ui" line="0" />
+      <source>Comment:</source>
+      <translation>Comentario:</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerEntryDialog.ui" line="130"/>
-        <source>Enter a comment for the timer</source>
-        <translation>Introducir un comentario para el temporizador</translation>
+      <location filename="../TimeTrackerEntryDialog.ui" line="0" />
+      <source>Enter a comment for the timer</source>
+      <translation>Introducir un comentario para el temporizador</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerEntryDialog.py" line="49"/>
-        <source>Add Tracker Entry</source>
-        <translation>Añadir Entrada al Tracker</translation>
+      <location filename="../TimeTrackerEntryDialog.py" line="55" />
+      <source>Add Tracker Entry</source>
+      <translation>Añadir Entrada al Tracker</translation>
     </message>
-</context>
-<context>
+  </context>
+  <context>
     <name>TimeTrackerPage</name>
     <message>
-        <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="17"/>
-        <source>&lt;b&gt;Configure Time Tracker&lt;/b&gt;</source>
-        <translation>&lt;b&gt;Configurar Time Tracker&lt;/b&gt;</translation>
+      <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="0" />
+      <source>&lt;b&gt;Configure Time Tracker&lt;/b&gt;</source>
+      <translation>&lt;b&gt;Configurar Time Tracker&lt;/b&gt;</translation>
     </message>
     <message>
-        <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="39"/>
-        <source>Minimum Duration:</source>
-        <translation>Duración Mínima:</translation>
+      <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="0" />
+      <source>Minimum Duration:</source>
+      <translation>Duración Mínima:</translation>
     </message>
     <message>
-        <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="46"/>
-        <source>Enter the value of the minimum duration for a valid tracker entry</source>
-        <translation>Introducir el valor de duración mínima para una entrada válida para el tracker</translation>
+      <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="0" />
+      <source>Enter the value of the minimum duration for a valid tracker entry</source>
+      <translation>Introducir el valor de duración mínima para una entrada válida para el tracker</translation>
     </message>
     <message>
-        <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="49"/>
-        <source> min</source>
-        <translation> min</translation>
+      <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="0" />
+      <source> min</source>
+      <translation> min</translation>
     </message>
     <message>
-        <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="75"/>
-        <source>Select to save automatically whenever a tracker is stopped</source>
-        <translation>Seleccionar para guardar automáticamente cuando un tracker es detenido</translation>
+      <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="0" />
+      <source>Select to save automatically whenever a tracker is stopped</source>
+      <translation>Seleccionar para guardar automáticamente cuando un tracker es detenido</translation>
     </message>
     <message>
-        <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="78"/>
-        <source>Auto Save Enabled</source>
-        <translation>Auto Guardar Habilitado</translation>
+      <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="0" />
+      <source>Auto Save Enabled</source>
+      <translation>Auto Guardar Habilitado</translation>
     </message>
     <message>
-        <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="85"/>
-        <source>Select to allow multiple entries with the same start date and time</source>
-        <translation>Seleccionar para permitir múltiples entradas con la misma hora y fecha de inicio</translation>
+      <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="0" />
+      <source>Select to allow multiple entries with the same start date and time</source>
+      <translation>Seleccionar para permitir múltiples entradas con la misma hora y fecha de inicio</translation>
     </message>
     <message>
-        <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="88"/>
-        <source>Allow entries with identical start date and time</source>
-        <translation>Permitir entradas con fecha y hora de inicio idénticos</translation>
+      <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="0" />
+      <source>Allow entries with identical start date and time</source>
+      <translation>Permitir entradas con fecha y hora de inicio idénticos</translation>
     </message>
-</context>
-<context>
+  </context>
+  <context>
     <name>TimeTrackerPlugin</name>
     <message>
-        <location filename="../../PluginTimeTracker.py" line="75"/>
-        <source>Time Tracker</source>
-        <translation>Time Tracker</translation>
+      <location filename="../../PluginTimeTracker.py" line="69" />
+      <source>Time Tracker</source>
+      <translation>Time Tracker</translation>
     </message>
-</context>
-<context>
+  </context>
+  <context>
     <name>TimeTrackerWidget</name>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="22"/>
-        <source>Start Date/Time:</source>
-        <translation>Fecha/Hora Inicio:</translation>
+      <location filename="../TimeTrackerWidget.py" line="349" />
+      <location filename="../TimeTrackerWidget.py" line="206" />
+      <location filename="../TimeTrackerWidget.py" line="114" />
+      <location filename="../TimeTrackerWidget.py" line="97" />
+      <source>{0} min</source>
+      <translation>{0} min</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="29"/>
-        <source>Duration:</source>
-        <translation>Duración:</translation>
-    </message>
-    <message>
-        <location filename="../TimeTrackerWidget.ui" line="36"/>
-        <source>Task:</source>
-        <translation>Tarea:</translation>
+      <location filename="../TimeTrackerWidget.py" line="134" />
+      <source>Edit</source>
+      <translation>Editar</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="43"/>
-        <source>Comment:</source>
-        <translation>Comentario:</translation>
+      <location filename="../TimeTrackerWidget.py" line="140" />
+      <source>Add</source>
+      <translation>Añadir</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="53"/>
-        <source>Shows the start date and time of the current timer</source>
-        <translation>Muestra la fecha y tiempo de inicio del temporizador actual</translation>
+      <location filename="../TimeTrackerWidget.py" line="141" />
+      <source>Delete</source>
+      <translation>Borrar</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="59"/>
-        <source>yyyy-MM-dd HH:mm:ss</source>
-        <translation>yyyy-MM-dd HH:mm:ss</translation>
+      <location filename="../TimeTrackerWidget.py" line="149" />
+      <source>Save</source>
+      <translation>Guardar</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="72"/>
-        <source>Shows the duration of the current timer</source>
-        <translation>Muestra la duración del temporizador actual</translation>
+      <location filename="../TimeTrackerWidget.py" line="151" />
+      <source>Import</source>
+      <translation>Importar</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="81"/>
-        <source> min</source>
-        <translation> min</translation>
+      <location filename="../TimeTrackerWidget.py" line="152" />
+      <source>Export Selected</source>
+      <translation>Exportar seleccionados</translation>
+    </message>
+    <message>
+      <location filename="../TimeTrackerWidget.py" line="155" />
+      <source>Export All</source>
+      <translation>Exportar Todos</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="97"/>
-        <source>Enter the task description for the current timer</source>
-        <translation>Introducir la descripción de la tarea para el temporizador actual</translation>
+      <location filename="../TimeTrackerWidget.py" line="157" />
+      <source>Remove duplicates</source>
+      <translation>Eliminar duplicados</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="113"/>
-        <source>Enter a comment for the current timer</source>
-        <translation>Introducir un comentario para el temporizador actual</translation>
+      <location filename="../TimeTrackerWidget.py" line="158" />
+      <source>Merge duplicates</source>
+      <translation>Combinar duplicados</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="140"/>
-        <source>Press to pause the current timer</source>
-        <translation>Pulsar para poner el temporizador actual en pausa</translation>
+      <location filename="../TimeTrackerWidget.py" line="347" />
+      <location filename="../TimeTrackerWidget.py" line="203" />
+      <source>{0}, {1}</source>
+      <comment>date, time</comment>
+      <translation>{0}, {1}</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="143"/>
-        <source>Pause</source>
-        <translation>Pausa</translation>
+      <location filename="../TimeTrackerWidget.py" line="217" />
+      <source>Delete Selected Entries</source>
+      <translation>Borrar Entradas Seleccionadas</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="153"/>
-        <source>Press to end the current timer and start a new one</source>
-        <translation>Pulsar para finalizar el temporizador actual e iniciar uno nuevo</translation>
+      <location filename="../TimeTrackerWidget.py" line="218" />
+      <source>Do you really want to delete the selected entries?</source>
+      <translation>¿Desea realmente eliminar las entradas seleccionadas?</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="156"/>
-        <source>End Current Timer and Start a New Timer</source>
-        <translation>Finalizar Temporizador Actual e Iniciar Uno Nuevo</translation>
+      <location filename="../TimeTrackerWidget.py" line="254" />
+      <location filename="../TimeTrackerWidget.py" line="246" />
+      <source>Import Time Tracker Entries</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="200"/>
-        <source>Start Date/Time</source>
-        <translation>Fecha/Hora Inicio</translation>
+      <location filename="../TimeTrackerWidget.py" line="276" />
+      <location filename="../TimeTrackerWidget.py" line="248" />
+      <source>Time Tracker Files (*.ttj);;All Files (*)</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="205"/>
-        <source>Duration</source>
-        <translation>Duración</translation>
+      <location filename="../TimeTrackerWidget.py" line="255" />
+      <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; does not exist.&lt;/p&gt;</source>
+      <translation>&lt;p&gt;El archivo &lt;b&gt;{0}&lt;/b&gt; no existe.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="210"/>
-        <source>Task</source>
-        <translation>Tarea</translation>
+      <location filename="../TimeTrackerWidget.py" line="288" />
+      <location filename="../TimeTrackerWidget.py" line="274" />
+      <source>Export Time Tracker Entries</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="215"/>
-        <source>Comment</source>
-        <translation>Comentario</translation>
+      <location filename="../TimeTrackerWidget.py" line="289" />
+      <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
+      <translation>&lt;p&gt;El archivo &lt;b&gt;{0}&lt;/b&gt; ya existe.¿Sobreescribirlo?&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="341"/>
-        <source>{0} min</source>
-        <translation>{0} min</translation>
+      <location filename="../TimeTrackerWidget.py" line="316" />
+      <source>Remove Duplicate Tracker Entries</source>
+      <translation>Eliminar Entradas de Tracker Duplicadas</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="129"/>
-        <source>Edit</source>
-        <translation>Editar</translation>
+      <location filename="../TimeTrackerWidget.py" line="317" />
+      <source>Are you sure you want to remove duplicate tracker entries? Only the one with the longest duration will be kept.</source>
+      <translation>¿Está seguro de que desea eliminar las entradas de tracker duplicadas? Solamente la de mayor duración será conservada.</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="134"/>
-        <source>Add</source>
-        <translation>Añadir</translation>
+      <location filename="../TimeTrackerWidget.py" line="329" />
+      <source>Merge Duplicate Tracker Entries</source>
+      <translation>Combinar Entradas de Tracker Duplicadas</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="135"/>
-        <source>Delete</source>
-        <translation>Borrar</translation>
+      <location filename="../TimeTrackerWidget.py" line="330" />
+      <source>Are you sure you want to merge duplicate tracker entries? The durations of duplicate ones will be added.</source>
+      <translation>¿Está seguro de que desea combinar las entradas de tracker duplicadas? Las duraciones de las duplicadas serán sumadas.</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="142"/>
-        <source>Save</source>
-        <translation>Guardar</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Start Date/Time:</source>
+      <translation>Fecha/Hora Inicio:</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="144"/>
-        <source>Import</source>
-        <translation>Importar</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Duration:</source>
+      <translation>Duración:</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="145"/>
-        <source>Export Selected</source>
-        <translation>Exportar seleccionados</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Task:</source>
+      <translation>Tarea:</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="148"/>
-        <source>Export All</source>
-        <translation>Exportar Todos</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Comment:</source>
+      <translation>Comentario:</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="150"/>
-        <source>Remove duplicates</source>
-        <translation>Eliminar duplicados</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Shows the start date and time of the current timer</source>
+      <translation>Muestra la fecha y tiempo de inicio del temporizador actual</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="151"/>
-        <source>Merge duplicates</source>
-        <translation>Combinar duplicados</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>yyyy-MM-dd HH:mm:ss</source>
+      <translation>yyyy-MM-dd HH:mm:ss</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="341"/>
-        <source>{0}, {1}</source>
-        <comment>date, time</comment>
-        <translation>{0}, {1}</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Shows the duration of the current timer</source>
+      <translation>Muestra la duración del temporizador actual</translation>
+    </message>
+    <message>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source> min</source>
+      <translation> min</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="212"/>
-        <source>Delete Selected Entries</source>
-        <translation>Borrar Entradas Seleccionadas</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Enter the task description for the current timer</source>
+      <translation>Introducir la descripción de la tarea para el temporizador actual</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="212"/>
-        <source>Do you really want to delete the selected entries?</source>
-        <translation>¿Desea realmente eliminar las entradas seleccionadas?</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Enter a comment for the current timer</source>
+      <translation>Introducir un comentario para el temporizador actual</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="249"/>
-        <source>Import Tracker Entries</source>
-        <translation>Importar Entradas de Tracker</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Press to pause the current timer</source>
+      <translation>Pulsar para poner el temporizador actual en pausa</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="268"/>
-        <source>Text Files (*.txt);;All Files (*)</source>
-        <translation>Archivos de Texto (*.txt);;Todos los Archivos (*)</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Pause</source>
+      <translation>Pausa</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="249"/>
-        <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; does not exist.&lt;/p&gt;</source>
-        <translation>&lt;p&gt;El archivo &lt;b&gt;{0}&lt;/b&gt; no existe.&lt;/p&gt;</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Press to end the current timer and start a new one</source>
+      <translation>Pulsar para finalizar el temporizador actual e iniciar uno nuevo</translation>
+    </message>
+    <message>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>End Current Timer and Start a New Timer</source>
+      <translation>Finalizar Temporizador Actual e Iniciar Uno Nuevo</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="282"/>
-        <source>Export Tracker Entries</source>
-        <translation>Exportar Entradas de Tracker</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Start Date/Time</source>
+      <translation>Fecha/Hora Inicio</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="282"/>
-        <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
-        <translation>&lt;p&gt;El archivo &lt;b&gt;{0}&lt;/b&gt; ya existe.¿Sobreescribirlo?&lt;/p&gt;</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Duration</source>
+      <translation>Duración</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="310"/>
-        <source>Remove Duplicate Tracker Entries</source>
-        <translation>Eliminar Entradas de Tracker Duplicadas</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Task</source>
+      <translation>Tarea</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="310"/>
-        <source>Are you sure you want to remove duplicate tracker entries? Only the one with the longest duration will be kept.</source>
-        <translation>¿Está seguro de que desea eliminar las entradas de tracker duplicadas? Solamente la de mayor duración será conservada.</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Comment</source>
+      <translation>Comentario</translation>
+    </message>
+    <message>
+      <source>Import Tracker Entries</source>
+      <translation type="vanished">Importar Entradas de Tracker</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="323"/>
-        <source>Merge Duplicate Tracker Entries</source>
-        <translation>Combinar Entradas de Tracker Duplicadas</translation>
+      <source>Text Files (*.txt);;All Files (*)</source>
+      <translation type="vanished">Archivos de Texto (*.txt);;Todos los Archivos (*)</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="323"/>
-        <source>Are you sure you want to merge duplicate tracker entries? The durations of duplicate ones will be added.</source>
-        <translation>¿Está seguro de que desea combinar las entradas de tracker duplicadas? Las duraciones de las duplicadas serán sumadas.</translation>
+      <source>Export Tracker Entries</source>
+      <translation type="vanished">Exportar Entradas de Tracker</translation>
     </message>
-</context>
+  </context>
 </TS>
Binary file TimeTracker/i18n/timetracker_pt.qm has changed
--- a/TimeTracker/i18n/timetracker_pt.ts	Thu Jun 03 18:02:18 2021 +0200
+++ b/TimeTracker/i18n/timetracker_pt.ts	Fri Jun 04 16:40:54 2021 +0200
@@ -1,414 +1,427 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS><TS version="2.0" language="pt" sourcelanguage="">
-<context>
+<!DOCTYPE TS>
+<TS version="2.1" language="pt">
+  <context>
     <name>TimeTracker</name>
     <message>
-        <location filename="../TimeTracker.py" line="76"/>
-        <source>Time Tracker</source>
-        <translation>Rastreador de Tempo</translation>
+      <location filename="../TimeTracker.py" line="78" />
+      <location filename="../TimeTracker.py" line="75" />
+      <source>Time Tracker</source>
+      <translation>Rastreador de Tempo</translation>
     </message>
     <message>
-        <location filename="../TimeTracker.py" line="165"/>
-        <source>Read Time Tracker File</source>
-        <translation>Ler Ficheiro do Rastreador de Tempo</translation>
-    </message>
-    <message>
-        <location filename="../TimeTracker.py" line="213"/>
-        <source>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
-        <translation>&lt;p&gt;O ficheiro do rastreador de tempo &lt;b&gt;{0}&lt;/b&gt; não se pôde ler.&lt;/p&gt;&lt;p&gt;Motivo: {1}&lt;/p&gt;</translation>
+      <location filename="../TimeTracker.py" line="79" />
+      <source>T&amp;ime Tracker</source>
+      <translation>Rastrea&amp;dor de Tempo</translation>
     </message>
     <message>
-        <location filename="../TimeTracker.py" line="195"/>
-        <source>Save Time Tracker File</source>
-        <translation>Gravar Ficheiro do Rastreador de Tempo</translation>
+      <location filename="../TimeTracker.py" line="80" />
+      <source>Alt+Shift+I</source>
+      <translation>Alt+Shift+I</translation>
     </message>
     <message>
-        <location filename="../TimeTracker.py" line="195"/>
-        <source>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; could not be saved.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
-        <translation>&lt;p&gt;O ficheiro &lt;b&gt;{0}&lt;/b&gt; do rastreador de tempo não se pôde guardar.&lt;/p&gt;&lt;p&gt;Motivo: {1}&lt;/p&gt;</translation>
+      <location filename="../TimeTracker.py" line="83" />
+      <source>Switch the input focus to the Time Tracker window.</source>
+      <translation>Mudar o foco de entrada à janela do Rastreador de Tempo.</translation>
     </message>
     <message>
-        <location filename="../TimeTracker.py" line="276"/>
-        <source>Import Time Tracker File</source>
-        <translation>Importar Ficheiro do Rastreador de Tempo</translation>
+      <location filename="../TimeTracker.py" line="85" />
+      <source>&lt;b&gt;Activate Time Tracker&lt;/b&gt;&lt;p&gt;This switches the input focus to the Time Tracker window.&lt;/p&gt;</source>
+      <translation>&lt;b&gt;Ativar Rastreador de Tempo&lt;/b&gt;&lt;p&gt;Muda o foco de entrada à janela do Rastreador de Tempo.&lt;/p&gt;</translation>
     </message>
-    <message numerus="yes">
-        <location filename="../TimeTracker.py" line="269"/>
-        <source>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; contained %n invalid entries.</source>
-        <translation>
-            <numerusform>&lt;p&gt;O ficheiro &lt;b&gt;{0}&lt;/b&gt; do rastreador de tempo tem uma entrada inválida.</numerusform>
-            <numerusform>&lt;p&gt;O ficheiro &lt;b&gt;{0}&lt;/b&gt; do rastreador de tempo tem %n entradas inválidas.</numerusform>
-        </translation>
+    <message>
+      <location filename="../TimeTracker.py" line="168" />
+      <location filename="../TimeTracker.py" line="148" />
+      <source>Read Time Tracker File</source>
+      <translation>Ler Ficheiro do Rastreador de Tempo</translation>
+    </message>
+    <message>
+      <location filename="../TimeTracker.py" line="217" />
+      <location filename="../TimeTracker.py" line="149" />
+      <source>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
+      <translation>&lt;p&gt;O ficheiro do rastreador de tempo &lt;b&gt;{0}&lt;/b&gt; não se pôde ler.&lt;/p&gt;&lt;p&gt;Motivo: {1}&lt;/p&gt;</translation>
     </message>
     <message numerus="yes">
-        <location filename="../TimeTracker.py" line="264"/>
-        <source>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; contained %n duplicate entries.</source>
-        <translation>
-            <numerusform>&lt;p&gt;O ficheiro &lt;b&gt;{0}&lt;/b&gt; do rastreador de tempo tem uma entrada repetida.</numerusform>
-            <numerusform>&lt;p&gt;O ficheiro &lt;b&gt;{0}&lt;/b&gt; dorastreador de tempo tem %n entradas repetidas.</numerusform>
-        </translation>
+      <location filename="../TimeTracker.py" line="169" />
+      <source>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; contained %n invalid entries. These have been discarded.&lt;/p&gt;</source>
+      <translation>
+        <numerusform>&lt;p&gt;O ficheiro &lt;b&gt;{0}&lt;/b&gt; do rastreador de tempo tem uma entrada inválida. Foi descartada.&lt;/p&gt;</numerusform>
+        <numerusform>&lt;p&gt;O ficheiro &lt;b&gt;{0}&lt;/b&gt; tem %n entradas inválidas. Foram descartadas.&lt;/p&gt;</numerusform>
+      </translation>
     </message>
-    <message numerus="yes">
-        <location filename="../TimeTracker.py" line="165"/>
-        <source>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; contained %n invalid entries. These have been discarded.&lt;/p&gt;</source>
-        <translation>
-            <numerusform>&lt;p&gt;O ficheiro &lt;b&gt;{0}&lt;/b&gt; do rastreador de tempo tem uma entrada inválida. Foi descartada.&lt;/p&gt;</numerusform>
-            <numerusform>&lt;p&gt;O ficheiro &lt;b&gt;{0}&lt;/b&gt; tem %n entradas inválidas. Foram descartadas.&lt;/p&gt;</numerusform>
-        </translation>
+    <message>
+      <location filename="../TimeTracker.py" line="198" />
+      <source>Save Time Tracker File</source>
+      <translation>Gravar Ficheiro do Rastreador de Tempo</translation>
     </message>
-    <message numerus="yes">
-        <location filename="../TimeTracker.py" line="260"/>
-        <source> %n duplicate entries were detected.</source>
-        <translation>
-            <numerusform> detectada uma entrada repetida.</numerusform>
-            <numerusform> detectadas %n entradas repetidas.</numerusform>
-        </translation>
+    <message>
+      <location filename="../TimeTracker.py" line="199" />
+      <source>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; could not be saved.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
+      <translation>&lt;p&gt;O ficheiro &lt;b&gt;{0}&lt;/b&gt; do rastreador de tempo não se pôde guardar.&lt;/p&gt;&lt;p&gt;Motivo: {1}&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../TimeTracker.py" line="280" />
+      <location filename="../TimeTracker.py" line="216" />
+      <source>Import Time Tracker File</source>
+      <translation>Importar Ficheiro do Rastreador de Tempo</translation>
     </message>
     <message numerus="yes">
-        <location filename="../TimeTracker.py" line="273"/>
-        <source> %n entries have been ignored.&lt;/p&gt;</source>
-        <translation>
-            <numerusform> foi ignorada uma entrada.&lt;/p&gt;</numerusform>
-            <numerusform> foram ignoradas %n entradas.&lt;/p&gt;</numerusform>
-        </translation>
+      <location filename="../TimeTracker.py" line="271" />
+      <location filename="../TimeTracker.py" line="258" />
+      <source>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; contained %n invalid entries.</source>
+      <translation>
+        <numerusform>&lt;p&gt;O ficheiro &lt;b&gt;{0}&lt;/b&gt; do rastreador de tempo tem uma entrada inválida.</numerusform>
+        <numerusform>&lt;p&gt;O ficheiro &lt;b&gt;{0}&lt;/b&gt; do rastreador de tempo tem %n entradas inválidas.</numerusform>
+      </translation>
     </message>
-    <message>
-        <location filename="../TimeTracker.py" line="76"/>
-        <source>T&amp;ime Tracker</source>
-        <translation>Rastrea&amp;dor de Tempo</translation>
+    <message numerus="yes">
+      <location filename="../TimeTracker.py" line="262" />
+      <source> %n duplicate entries were detected.</source>
+      <translation>
+        <numerusform> detectada uma entrada repetida.</numerusform>
+        <numerusform> detectadas %n entradas repetidas.</numerusform>
+      </translation>
     </message>
-    <message>
-        <location filename="../TimeTracker.py" line="76"/>
-        <source>Alt+Shift+I</source>
-        <translation>Alt+Shift+I</translation>
+    <message numerus="yes">
+      <location filename="../TimeTracker.py" line="266" />
+      <source>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; contained %n duplicate entries.</source>
+      <translation>
+        <numerusform>&lt;p&gt;O ficheiro &lt;b&gt;{0}&lt;/b&gt; do rastreador de tempo tem uma entrada repetida.</numerusform>
+        <numerusform>&lt;p&gt;O ficheiro &lt;b&gt;{0}&lt;/b&gt; dorastreador de tempo tem %n entradas repetidas.</numerusform>
+      </translation>
     </message>
-    <message>
-        <location filename="../TimeTracker.py" line="82"/>
-        <source>Switch the input focus to the Time Tracker window.</source>
-        <translation>Mudar o foco de entrada à janela do Rastreador de Tempo.</translation>
+    <message numerus="yes">
+      <location filename="../TimeTracker.py" line="275" />
+      <source> %n entries have been ignored.&lt;/p&gt;</source>
+      <translation>
+        <numerusform> foi ignorada uma entrada.&lt;/p&gt;</numerusform>
+        <numerusform> foram ignoradas %n entradas.&lt;/p&gt;</numerusform>
+      </translation>
     </message>
-    <message>
-        <location filename="../TimeTracker.py" line="84"/>
-        <source>&lt;b&gt;Activate Time Tracker&lt;/b&gt;&lt;p&gt;This switches the input focus to the Time Tracker window.&lt;/p&gt;</source>
-        <translation>&lt;b&gt;Ativar Rastreador de Tempo&lt;/b&gt;&lt;p&gt;Muda o foco de entrada à janela do Rastreador de Tempo.&lt;/p&gt;</translation>
-    </message>
-</context>
-<context>
+  </context>
+  <context>
     <name>TimeTrackerEntryDialog</name>
     <message>
-        <location filename="../TimeTrackerEntryDialog.ui" line="14"/>
-        <source>Edit Timer Entry</source>
-        <translation>Editar Entrada do Temporizador</translation>
+      <location filename="../TimeTrackerEntryDialog.ui" line="0" />
+      <source>Edit Timer Entry</source>
+      <translation>Editar Entrada do Temporizador</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerEntryDialog.ui" line="25"/>
-        <source>Start Date/Time:</source>
-        <translation>Data/Hora de Inicio:</translation>
+      <location filename="../TimeTrackerEntryDialog.ui" line="0" />
+      <source>Start Date/Time:</source>
+      <translation>Data/Hora de Inicio:</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerEntryDialog.ui" line="32"/>
-        <source>Edit the start date and time of the timer</source>
-        <translation>Editar a data e hora de inicio do temporizador</translation>
+      <location filename="../TimeTrackerEntryDialog.ui" line="0" />
+      <source>Edit the start date and time of the timer</source>
+      <translation>Editar a data e hora de inicio do temporizador</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerEntryDialog.ui" line="35"/>
-        <source>yyyy-MM-dd HH:mm:ss</source>
-        <translation>dd-MM-yyyy HH:mm:ss</translation>
+      <location filename="../TimeTrackerEntryDialog.ui" line="0" />
+      <source>yyyy-MM-dd HH:mm:ss</source>
+      <translation>dd-MM-yyyy HH:mm:ss</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerEntryDialog.ui" line="58"/>
-        <source>Duration:</source>
-        <translation>Duração:</translation>
+      <location filename="../TimeTrackerEntryDialog.ui" line="0" />
+      <source>Duration:</source>
+      <translation>Duração:</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerEntryDialog.ui" line="65"/>
-        <source>Edit the duration of the timer</source>
-        <translation>Editar a duração do temporizador</translation>
+      <location filename="../TimeTrackerEntryDialog.ui" line="0" />
+      <source>Edit the duration of the timer</source>
+      <translation>Editar a duração do temporizador</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerEntryDialog.ui" line="71"/>
-        <source> min</source>
-        <translation> min</translation>
+      <location filename="../TimeTrackerEntryDialog.ui" line="0" />
+      <source> min</source>
+      <translation> min</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerEntryDialog.ui" line="94"/>
-        <source>Task:</source>
-        <translation>Tarefa:</translation>
+      <location filename="../TimeTrackerEntryDialog.ui" line="0" />
+      <source>Task:</source>
+      <translation>Tarefa:</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerEntryDialog.ui" line="107"/>
-        <source>Enter the task description for the timer</source>
-        <translation>Introduzir descrição da tarefa para o temporizador</translation>
+      <location filename="../TimeTrackerEntryDialog.ui" line="0" />
+      <source>Enter the task description for the timer</source>
+      <translation>Introduzir descrição da tarefa para o temporizador</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerEntryDialog.ui" line="117"/>
-        <source>Comment:</source>
-        <translation>Comentário:</translation>
+      <location filename="../TimeTrackerEntryDialog.ui" line="0" />
+      <source>Comment:</source>
+      <translation>Comentário:</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerEntryDialog.ui" line="130"/>
-        <source>Enter a comment for the timer</source>
-        <translation>Introduzir um comentário para o temporizador</translation>
+      <location filename="../TimeTrackerEntryDialog.ui" line="0" />
+      <source>Enter a comment for the timer</source>
+      <translation>Introduzir um comentário para o temporizador</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerEntryDialog.py" line="49"/>
-        <source>Add Tracker Entry</source>
-        <translation>Adicionar entrada de rastreio</translation>
+      <location filename="../TimeTrackerEntryDialog.py" line="55" />
+      <source>Add Tracker Entry</source>
+      <translation>Adicionar entrada de rastreio</translation>
     </message>
-</context>
-<context>
+  </context>
+  <context>
     <name>TimeTrackerPage</name>
     <message>
-        <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="17"/>
-        <source>&lt;b&gt;Configure Time Tracker&lt;/b&gt;</source>
-        <translation>&lt;b&gt;Configurar Rastreador de Tempo&lt;/b&gt;</translation>
+      <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="0" />
+      <source>&lt;b&gt;Configure Time Tracker&lt;/b&gt;</source>
+      <translation>&lt;b&gt;Configurar Rastreador de Tempo&lt;/b&gt;</translation>
     </message>
     <message>
-        <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="39"/>
-        <source>Minimum Duration:</source>
-        <translation>Duração Mínima:</translation>
+      <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="0" />
+      <source>Minimum Duration:</source>
+      <translation>Duração Mínima:</translation>
     </message>
     <message>
-        <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="46"/>
-        <source>Enter the value of the minimum duration for a valid tracker entry</source>
-        <translation>Introduzir o valor da duração mínima para uma entrada válida do rastreador</translation>
+      <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="0" />
+      <source>Enter the value of the minimum duration for a valid tracker entry</source>
+      <translation>Introduzir o valor da duração mínima para uma entrada válida do rastreador</translation>
     </message>
     <message>
-        <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="49"/>
-        <source> min</source>
-        <translation> min</translation>
+      <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="0" />
+      <source> min</source>
+      <translation> min</translation>
     </message>
     <message>
-        <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="75"/>
-        <source>Select to save automatically whenever a tracker is stopped</source>
-        <translation>Selecioar para gravar automaticamente quando o rastreador esteja parado</translation>
+      <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="0" />
+      <source>Select to save automatically whenever a tracker is stopped</source>
+      <translation>Selecioar para gravar automaticamente quando o rastreador esteja parado</translation>
     </message>
     <message>
-        <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="78"/>
-        <source>Auto Save Enabled</source>
-        <translation>Autogravar Habilitado</translation>
+      <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="0" />
+      <source>Auto Save Enabled</source>
+      <translation>Autogravar Habilitado</translation>
     </message>
     <message>
-        <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="85"/>
-        <source>Select to allow multiple entries with the same start date and time</source>
-        <translation>Selecionar para permitir múltiplas entradas com a mesma data e hora</translation>
+      <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="0" />
+      <source>Select to allow multiple entries with the same start date and time</source>
+      <translation>Selecionar para permitir múltiplas entradas com a mesma data e hora</translation>
     </message>
     <message>
-        <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="88"/>
-        <source>Allow entries with identical start date and time</source>
-        <translation>Permitir entradas com data e hora de inicio identicas</translation>
+      <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="0" />
+      <source>Allow entries with identical start date and time</source>
+      <translation>Permitir entradas com data e hora de inicio identicas</translation>
     </message>
-</context>
-<context>
+  </context>
+  <context>
     <name>TimeTrackerPlugin</name>
     <message>
-        <location filename="../../PluginTimeTracker.py" line="75"/>
-        <source>Time Tracker</source>
-        <translation>Rastreador de Tempo</translation>
+      <location filename="../../PluginTimeTracker.py" line="69" />
+      <source>Time Tracker</source>
+      <translation>Rastreador de Tempo</translation>
     </message>
-</context>
-<context>
+  </context>
+  <context>
     <name>TimeTrackerWidget</name>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="22"/>
-        <source>Start Date/Time:</source>
-        <translation>Data/Hora de Inicio:</translation>
+      <location filename="../TimeTrackerWidget.py" line="349" />
+      <location filename="../TimeTrackerWidget.py" line="206" />
+      <location filename="../TimeTrackerWidget.py" line="114" />
+      <location filename="../TimeTrackerWidget.py" line="97" />
+      <source>{0} min</source>
+      <translation>{0} min</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="29"/>
-        <source>Duration:</source>
-        <translation>Duração:</translation>
-    </message>
-    <message>
-        <location filename="../TimeTrackerWidget.ui" line="36"/>
-        <source>Task:</source>
-        <translation>Tarefa:</translation>
+      <location filename="../TimeTrackerWidget.py" line="134" />
+      <source>Edit</source>
+      <translation>Editar</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="43"/>
-        <source>Comment:</source>
-        <translation>Comentário:</translation>
+      <location filename="../TimeTrackerWidget.py" line="140" />
+      <source>Add</source>
+      <translation>Adicionar</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="53"/>
-        <source>Shows the start date and time of the current timer</source>
-        <translation>Mostra a data e hora de inicio do temporizador atual</translation>
+      <location filename="../TimeTrackerWidget.py" line="141" />
+      <source>Delete</source>
+      <translation>Apagar</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="59"/>
-        <source>yyyy-MM-dd HH:mm:ss</source>
-        <translation>dd-MM-yyyy HH:mm:ss</translation>
+      <location filename="../TimeTrackerWidget.py" line="149" />
+      <source>Save</source>
+      <translation>Gravar</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="72"/>
-        <source>Shows the duration of the current timer</source>
-        <translation>Mostra a duração do temporizador atual</translation>
+      <location filename="../TimeTrackerWidget.py" line="151" />
+      <source>Import</source>
+      <translation>Importar</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="81"/>
-        <source> min</source>
-        <translation> min</translation>
+      <location filename="../TimeTrackerWidget.py" line="152" />
+      <source>Export Selected</source>
+      <translation>Exportar Selecionados</translation>
+    </message>
+    <message>
+      <location filename="../TimeTrackerWidget.py" line="155" />
+      <source>Export All</source>
+      <translation>Exportar Todos</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="97"/>
-        <source>Enter the task description for the current timer</source>
-        <translation>Introduzir a descrição da tarefa para o temporizador atual</translation>
+      <location filename="../TimeTrackerWidget.py" line="157" />
+      <source>Remove duplicates</source>
+      <translation>Retirar repetidos</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="113"/>
-        <source>Enter a comment for the current timer</source>
-        <translation>Introduzir um comentário para o temporizador atual</translation>
+      <location filename="../TimeTrackerWidget.py" line="158" />
+      <source>Merge duplicates</source>
+      <translation>Mesclar repetidos</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="140"/>
-        <source>Press to pause the current timer</source>
-        <translation>Pressionar para pausar o temporizador atual</translation>
+      <location filename="../TimeTrackerWidget.py" line="347" />
+      <location filename="../TimeTrackerWidget.py" line="203" />
+      <source>{0}, {1}</source>
+      <comment>date, time</comment>
+      <translation>{0}, {1}</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="143"/>
-        <source>Pause</source>
-        <translation>Pausa</translation>
+      <location filename="../TimeTrackerWidget.py" line="217" />
+      <source>Delete Selected Entries</source>
+      <translation>Apagar Entradas Selecionadas</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="153"/>
-        <source>Press to end the current timer and start a new one</source>
-        <translation>Pressionar para terminar o temporizador atual e iniciar um novo</translation>
+      <location filename="../TimeTrackerWidget.py" line="218" />
+      <source>Do you really want to delete the selected entries?</source>
+      <translation>Tem a certeza de que quer apagar as entradas selecionadas?</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="156"/>
-        <source>End Current Timer and Start a New Timer</source>
-        <translation>Terminar Temporizador Atual e Iniciar Novo Temporizador</translation>
+      <location filename="../TimeTrackerWidget.py" line="254" />
+      <location filename="../TimeTrackerWidget.py" line="246" />
+      <source>Import Time Tracker Entries</source>
+      <translation>Importar Entradas do Rastreador</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="200"/>
-        <source>Start Date/Time</source>
-        <translation>Data/Hora de Inicio</translation>
+      <location filename="../TimeTrackerWidget.py" line="276" />
+      <location filename="../TimeTrackerWidget.py" line="248" />
+      <source>Time Tracker Files (*.ttj);;All Files (*)</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="205"/>
-        <source>Duration</source>
-        <translation>Duração</translation>
+      <location filename="../TimeTrackerWidget.py" line="255" />
+      <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; does not exist.&lt;/p&gt;</source>
+      <translation>&lt;p&gt;O ficheiro &lt;b&gt;{0}&lt;/b&gt; não existe.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="210"/>
-        <source>Task</source>
-        <translation>Tarefa</translation>
+      <location filename="../TimeTrackerWidget.py" line="288" />
+      <location filename="../TimeTrackerWidget.py" line="274" />
+      <source>Export Time Tracker Entries</source>
+      <translation>Exportar Entradas do Rastreador</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="215"/>
-        <source>Comment</source>
-        <translation>Comentário</translation>
-    </message>
-    <message>
-        <location filename="../TimeTrackerWidget.py" line="341"/>
-        <source>{0} min</source>
-        <translation>{0} min</translation>
+      <location filename="../TimeTrackerWidget.py" line="289" />
+      <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
+      <translation>&lt;p&gt;Já existe o ficheiro &lt;b&gt;{0}&lt;/b&gt;. Sobreescrever-lo?&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="129"/>
-        <source>Edit</source>
-        <translation>Editar</translation>
+      <location filename="../TimeTrackerWidget.py" line="316" />
+      <source>Remove Duplicate Tracker Entries</source>
+      <translation>Retirar Entradas do Rastreador Repetidas</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="134"/>
-        <source>Add</source>
-        <translation>Adicionar</translation>
+      <location filename="../TimeTrackerWidget.py" line="317" />
+      <source>Are you sure you want to remove duplicate tracker entries? Only the one with the longest duration will be kept.</source>
+      <translation>Tem a certeza de que quer retirar as entradas repetidas do rastreador ? Apenas a que tenha a maior duração será mantida.</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="135"/>
-        <source>Delete</source>
-        <translation>Apagar</translation>
+      <location filename="../TimeTrackerWidget.py" line="329" />
+      <source>Merge Duplicate Tracker Entries</source>
+      <translation>Mesclar Entradas do Rastreador Repetidas</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="142"/>
-        <source>Save</source>
-        <translation>Gravar</translation>
+      <location filename="../TimeTrackerWidget.py" line="330" />
+      <source>Are you sure you want to merge duplicate tracker entries? The durations of duplicate ones will be added.</source>
+      <translation>Tem a certeza de que quer mesclar as entradas repetidas do rastreador? As durações das repetidas serão adicionadas.</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="144"/>
-        <source>Import</source>
-        <translation>Importar</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Start Date/Time:</source>
+      <translation>Data/Hora de Inicio:</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="145"/>
-        <source>Export Selected</source>
-        <translation>Exportar Selecionados</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Duration:</source>
+      <translation>Duração:</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="148"/>
-        <source>Export All</source>
-        <translation>Exportar Todos</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Task:</source>
+      <translation>Tarefa:</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="150"/>
-        <source>Remove duplicates</source>
-        <translation>Retirar repetidos</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Comment:</source>
+      <translation>Comentário:</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="151"/>
-        <source>Merge duplicates</source>
-        <translation>Mesclar repetidos</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Shows the start date and time of the current timer</source>
+      <translation>Mostra a data e hora de inicio do temporizador atual</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="341"/>
-        <source>{0}, {1}</source>
-        <comment>date, time</comment>
-        <translation>{0}, {1}</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>yyyy-MM-dd HH:mm:ss</source>
+      <translation>dd-MM-yyyy HH:mm:ss</translation>
+    </message>
+    <message>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Shows the duration of the current timer</source>
+      <translation>Mostra a duração do temporizador atual</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="212"/>
-        <source>Delete Selected Entries</source>
-        <translation>Apagar Entradas Selecionadas</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source> min</source>
+      <translation> min</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="212"/>
-        <source>Do you really want to delete the selected entries?</source>
-        <translation>Tem a certeza de que quer apagar as entradas selecionadas?</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Enter the task description for the current timer</source>
+      <translation>Introduzir a descrição da tarefa para o temporizador atual</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="249"/>
-        <source>Import Tracker Entries</source>
-        <translation>Importar Entradas do Rastreador</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Enter a comment for the current timer</source>
+      <translation>Introduzir um comentário para o temporizador atual</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="268"/>
-        <source>Text Files (*.txt);;All Files (*)</source>
-        <translation>Ficheiros de Texto (*.txt);;Ficheiros Todos (*)</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Press to pause the current timer</source>
+      <translation>Pressionar para pausar o temporizador atual</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="249"/>
-        <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; does not exist.&lt;/p&gt;</source>
-        <translation>&lt;p&gt;O ficheiro &lt;b&gt;{0}&lt;/b&gt; não existe.&lt;/p&gt;</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Pause</source>
+      <translation>Pausa</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="282"/>
-        <source>Export Tracker Entries</source>
-        <translation>Exportar Entradas do Rastreador</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Press to end the current timer and start a new one</source>
+      <translation>Pressionar para terminar o temporizador atual e iniciar um novo</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="282"/>
-        <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
-        <translation>&lt;p&gt;Já existe o ficheiro &lt;b&gt;{0}&lt;/b&gt;. Sobreescrever-lo?&lt;/p&gt;</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>End Current Timer and Start a New Timer</source>
+      <translation>Terminar Temporizador Atual e Iniciar Novo Temporizador</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="310"/>
-        <source>Remove Duplicate Tracker Entries</source>
-        <translation>Retirar Entradas do Rastreador Repetidas</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Start Date/Time</source>
+      <translation>Data/Hora de Inicio</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="310"/>
-        <source>Are you sure you want to remove duplicate tracker entries? Only the one with the longest duration will be kept.</source>
-        <translation>Tem a certeza de que quer retirar as entradas repetidas do rastreador ? Apenas a que tenha a maior duração será mantida.</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Duration</source>
+      <translation>Duração</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="323"/>
-        <source>Merge Duplicate Tracker Entries</source>
-        <translation>Mesclar Entradas do Rastreador Repetidas</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Task</source>
+      <translation>Tarefa</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="323"/>
-        <source>Are you sure you want to merge duplicate tracker entries? The durations of duplicate ones will be added.</source>
-        <translation>Tem a certeza de que quer mesclar as entradas repetidas do rastreador? As durações das repetidas serão adicionadas.</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Comment</source>
+      <translation>Comentário</translation>
     </message>
-</context>
+  </context>
 </TS>
--- a/TimeTracker/i18n/timetracker_ru.ts	Thu Jun 03 18:02:18 2021 +0200
+++ b/TimeTracker/i18n/timetracker_ru.ts	Fri Jun 04 16:40:54 2021 +0200
@@ -1,419 +1,444 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS><TS version="2.0" language="ru" sourcelanguage="">
-<context>
+<!DOCTYPE TS>
+<TS version="2.0" language="ru" sourcelanguage="">
+  <context>
     <name>TimeTracker</name>
     <message>
-        <location filename="../TimeTracker.py" line="76"/>
-        <source>Time Tracker</source>
-        <translation>Time Tracker</translation>
+      <location filename="../TimeTracker.py" line="78" />
+      <location filename="../TimeTracker.py" line="75" />
+      <source>Time Tracker</source>
+      <translation>Time Tracker</translation>
     </message>
     <message>
-        <location filename="../TimeTracker.py" line="165"/>
-        <source>Read Time Tracker File</source>
-        <translation>Чтение файла Time Tracker</translation>
-    </message>
-    <message>
-        <location filename="../TimeTracker.py" line="213"/>
-        <source>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
-        <translation>&lt;p&gt;Файл трекера &lt;b&gt;{0}&lt;/b&gt; не может быть прочитан.&lt;/p&gt;&lt;p&gt;Причина: {1}&lt;/p&gt;</translation>
+      <location filename="../TimeTracker.py" line="79" />
+      <source>T&amp;ime Tracker</source>
+      <translation>T&amp;ime Tracker</translation>
     </message>
     <message>
-        <location filename="../TimeTracker.py" line="195"/>
-        <source>Save Time Tracker File</source>
-        <translation>Сохранение файла Time Tracker</translation>
+      <location filename="../TimeTracker.py" line="80" />
+      <source>Alt+Shift+I</source>
+      <translation>Alt+Shift+I</translation>
     </message>
     <message>
-        <location filename="../TimeTracker.py" line="195"/>
-        <source>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; could not be saved.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
-        <translation>&lt;p&gt;Файл трекера &lt;b&gt;{0}&lt;/b&gt;не может быть сохранен.&lt;/p&gt;&lt;p&gt;Причина: {1}&lt;/p&gt;</translation>
+      <location filename="../TimeTracker.py" line="83" />
+      <source>Switch the input focus to the Time Tracker window.</source>
+      <translation>Переключить фокус ввода в окно Time Tracker.</translation>
     </message>
     <message>
-        <location filename="../TimeTracker.py" line="276"/>
-        <source>Import Time Tracker File</source>
-        <translation>Импорт файла Time Tracker</translation>
+      <location filename="../TimeTracker.py" line="85" />
+      <source>&lt;b&gt;Activate Time Tracker&lt;/b&gt;&lt;p&gt;This switches the input focus to the Time Tracker window.&lt;/p&gt;</source>
+      <translation>&lt;b&gt;Активация Time Tracker&lt;/b&gt;&lt;p&gt;Переключение фокуса ввода в окно Time Tracker.&lt;/p&gt;</translation>
     </message>
-    <message numerus="yes">
-        <location filename="../TimeTracker.py" line="269"/>
-        <source>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; contained %n invalid entries.</source>
-        <translation>
-            <numerusform>&lt;p&gt;Файл трекера &lt;b&gt;{0}&lt;/b&gt; содержит %n недействительную запись.</numerusform>
-            <numerusform>&lt;p&gt;Файл трекера &lt;b&gt;{0}&lt;/b&gt; содержит %n недействительные записи.</numerusform>
-            <numerusform>&lt;p&gt;Файл трекера &lt;b&gt;{0}&lt;/b&gt; содержит %n недействительных записей.</numerusform>
-        </translation>
+    <message>
+      <location filename="../TimeTracker.py" line="168" />
+      <location filename="../TimeTracker.py" line="148" />
+      <source>Read Time Tracker File</source>
+      <translation>Чтение файла Time Tracker</translation>
+    </message>
+    <message>
+      <location filename="../TimeTracker.py" line="217" />
+      <location filename="../TimeTracker.py" line="149" />
+      <source>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
+      <translation>&lt;p&gt;Файл трекера &lt;b&gt;{0}&lt;/b&gt; не может быть прочитан.&lt;/p&gt;&lt;p&gt;Причина: {1}&lt;/p&gt;</translation>
     </message>
     <message numerus="yes">
-        <location filename="../TimeTracker.py" line="264"/>
-        <source>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; contained %n duplicate entries.</source>
-        <translation>
-            <numerusform>&lt;p&gt;Файл трекера &lt;b&gt;{0}&lt;/b&gt; содержит %n дублирующую запись.</numerusform>
-            <numerusform>&lt;p&gt;Файл трекера &lt;b&gt;{0}&lt;/b&gt; содержит %n дублирующие записи.</numerusform>
-            <numerusform>&lt;p&gt;Файл трекера &lt;b&gt;{0}&lt;/b&gt; содержит %n дублирующих записей.</numerusform>
-        </translation>
+      <location filename="../TimeTracker.py" line="169" />
+      <source>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; contained %n invalid entries. These have been discarded.&lt;/p&gt;</source>
+      <translation>
+        <numerusform>&lt;p&gt;Файл трекера &lt;b&gt;{0}&lt;/b&gt; содержит %n недействительную запись. Она была отброшена.&lt;/p&gt;</numerusform>
+        <numerusform>&lt;p&gt;Файл трекера &lt;b&gt;{0}&lt;/b&gt; содержит %n недействительные записи. Они были отброшены.&lt;/p&gt;</numerusform>
+        <numerusform>&lt;p&gt;Файл трекера &lt;b&gt;{0}&lt;/b&gt; содержит %n недействительных записей. Они были отброшены.&lt;/p&gt;</numerusform>
+      </translation>
     </message>
-    <message numerus="yes">
-        <location filename="../TimeTracker.py" line="165"/>
-        <source>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; contained %n invalid entries. These have been discarded.&lt;/p&gt;</source>
-        <translation>
-            <numerusform>&lt;p&gt;Файл трекера &lt;b&gt;{0}&lt;/b&gt; содержит %n недействительную запись. Она была отброшена.&lt;/p&gt;</numerusform>
-            <numerusform>&lt;p&gt;Файл трекера &lt;b&gt;{0}&lt;/b&gt; содержит %n недействительные записи. Они были отброшены.&lt;/p&gt;</numerusform>
-            <numerusform>&lt;p&gt;Файл трекера &lt;b&gt;{0}&lt;/b&gt; содержит %n недействительных записей. Они были отброшены.&lt;/p&gt;</numerusform>
-        </translation>
+    <message>
+      <location filename="../TimeTracker.py" line="198" />
+      <source>Save Time Tracker File</source>
+      <translation>Сохранение файла Time Tracker</translation>
     </message>
-    <message numerus="yes">
-        <location filename="../TimeTracker.py" line="260"/>
-        <source> %n duplicate entries were detected.</source>
-        <translation>
-            <numerusform> Была определена %n дублирующая запись.</numerusform>
-            <numerusform> Были определены %n дублирующие записи.</numerusform>
-            <numerusform> Были определены %n дублирующих записей.</numerusform>
-        </translation>
+    <message>
+      <location filename="../TimeTracker.py" line="199" />
+      <source>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; could not be saved.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
+      <translation>&lt;p&gt;Файл трекера &lt;b&gt;{0}&lt;/b&gt;не может быть сохранен.&lt;/p&gt;&lt;p&gt;Причина: {1}&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../TimeTracker.py" line="280" />
+      <location filename="../TimeTracker.py" line="216" />
+      <source>Import Time Tracker File</source>
+      <translation>Импорт файла Time Tracker</translation>
     </message>
     <message numerus="yes">
-        <location filename="../TimeTracker.py" line="273"/>
-        <source> %n entries have been ignored.&lt;/p&gt;</source>
-        <translation>
-            <numerusform> Была проигнорирована %n запись.&lt;/p&gt;</numerusform>
-            <numerusform> Были проигнорированы %n записи.&lt;/p&gt;</numerusform>
-            <numerusform> Были проигнорированы %n записей.&lt;/p&gt;</numerusform>
-        </translation>
+      <location filename="../TimeTracker.py" line="271" />
+      <location filename="../TimeTracker.py" line="258" />
+      <source>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; contained %n invalid entries.</source>
+      <translation>
+        <numerusform>&lt;p&gt;Файл трекера &lt;b&gt;{0}&lt;/b&gt; содержит %n недействительную запись.</numerusform>
+        <numerusform>&lt;p&gt;Файл трекера &lt;b&gt;{0}&lt;/b&gt; содержит %n недействительные записи.</numerusform>
+        <numerusform>&lt;p&gt;Файл трекера &lt;b&gt;{0}&lt;/b&gt; содержит %n недействительных записей.</numerusform>
+      </translation>
     </message>
-    <message>
-        <location filename="../TimeTracker.py" line="76"/>
-        <source>T&amp;ime Tracker</source>
-        <translation>T&amp;ime Tracker</translation>
+    <message numerus="yes">
+      <location filename="../TimeTracker.py" line="262" />
+      <source> %n duplicate entries were detected.</source>
+      <translation>
+        <numerusform> Была определена %n дублирующая запись.</numerusform>
+        <numerusform> Были определены %n дублирующие записи.</numerusform>
+        <numerusform> Были определены %n дублирующих записей.</numerusform>
+      </translation>
     </message>
-    <message>
-        <location filename="../TimeTracker.py" line="76"/>
-        <source>Alt+Shift+I</source>
-        <translation>Alt+Shift+I</translation>
+    <message numerus="yes">
+      <location filename="../TimeTracker.py" line="266" />
+      <source>&lt;p&gt;The time tracker file &lt;b&gt;{0}&lt;/b&gt; contained %n duplicate entries.</source>
+      <translation>
+        <numerusform>&lt;p&gt;Файл трекера &lt;b&gt;{0}&lt;/b&gt; содержит %n дублирующую запись.</numerusform>
+        <numerusform>&lt;p&gt;Файл трекера &lt;b&gt;{0}&lt;/b&gt; содержит %n дублирующие записи.</numerusform>
+        <numerusform>&lt;p&gt;Файл трекера &lt;b&gt;{0}&lt;/b&gt; содержит %n дублирующих записей.</numerusform>
+      </translation>
     </message>
-    <message>
-        <location filename="../TimeTracker.py" line="82"/>
-        <source>Switch the input focus to the Time Tracker window.</source>
-        <translation>Переключить фокус ввода в окно Time Tracker.</translation>
+    <message numerus="yes">
+      <location filename="../TimeTracker.py" line="275" />
+      <source> %n entries have been ignored.&lt;/p&gt;</source>
+      <translation>
+        <numerusform> Была проигнорирована %n запись.&lt;/p&gt;</numerusform>
+        <numerusform> Были проигнорированы %n записи.&lt;/p&gt;</numerusform>
+        <numerusform> Были проигнорированы %n записей.&lt;/p&gt;</numerusform>
+      </translation>
     </message>
-    <message>
-        <location filename="../TimeTracker.py" line="84"/>
-        <source>&lt;b&gt;Activate Time Tracker&lt;/b&gt;&lt;p&gt;This switches the input focus to the Time Tracker window.&lt;/p&gt;</source>
-        <translation>&lt;b&gt;Активация Time Tracker&lt;/b&gt;&lt;p&gt;Переключение фокуса ввода в окно Time Tracker.&lt;/p&gt;</translation>
-    </message>
-</context>
-<context>
+  </context>
+  <context>
     <name>TimeTrackerEntryDialog</name>
     <message>
-        <location filename="../TimeTrackerEntryDialog.ui" line="14"/>
-        <source>Edit Timer Entry</source>
-        <translation>Править запись таймера</translation>
+      <location filename="../TimeTrackerEntryDialog.ui" line="0" />
+      <source>Edit Timer Entry</source>
+      <translation>Править запись таймера</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerEntryDialog.ui" line="25"/>
-        <source>Start Date/Time:</source>
-        <translation>Начальные дата/время:</translation>
+      <location filename="../TimeTrackerEntryDialog.ui" line="0" />
+      <source>Start Date/Time:</source>
+      <translation>Начальные дата/время:</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerEntryDialog.ui" line="32"/>
-        <source>Edit the start date and time of the timer</source>
-        <translation>Правка начала отсчета даты и времени таймера</translation>
+      <location filename="../TimeTrackerEntryDialog.ui" line="0" />
+      <source>Edit the start date and time of the timer</source>
+      <translation>Правка начала отсчета даты и времени таймера</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerEntryDialog.ui" line="35"/>
-        <source>yyyy-MM-dd HH:mm:ss</source>
-        <translation>yyyy-MM-dd HH:mm:ss</translation>
+      <location filename="../TimeTrackerEntryDialog.ui" line="0" />
+      <source>yyyy-MM-dd HH:mm:ss</source>
+      <translation>yyyy-MM-dd HH:mm:ss</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerEntryDialog.ui" line="58"/>
-        <source>Duration:</source>
-        <translation>Продолжительность:</translation>
+      <location filename="../TimeTrackerEntryDialog.ui" line="0" />
+      <source>Duration:</source>
+      <translation>Продолжительность:</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerEntryDialog.ui" line="65"/>
-        <source>Edit the duration of the timer</source>
-        <translation>Правка отсчета таймера</translation>
+      <location filename="../TimeTrackerEntryDialog.ui" line="0" />
+      <source>Edit the duration of the timer</source>
+      <translation>Правка отсчета таймера</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerEntryDialog.ui" line="71"/>
-        <source> min</source>
-        <translation> мин</translation>
+      <location filename="../TimeTrackerEntryDialog.ui" line="0" />
+      <source> min</source>
+      <translation> мин</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerEntryDialog.ui" line="94"/>
-        <source>Task:</source>
-        <translation>Задача:</translation>
+      <location filename="../TimeTrackerEntryDialog.ui" line="0" />
+      <source>Task:</source>
+      <translation>Задача:</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerEntryDialog.ui" line="107"/>
-        <source>Enter the task description for the timer</source>
-        <translation>Введите описание задачи таймера</translation>
+      <location filename="../TimeTrackerEntryDialog.ui" line="0" />
+      <source>Enter the task description for the timer</source>
+      <translation>Введите описание задачи таймера</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerEntryDialog.ui" line="117"/>
-        <source>Comment:</source>
-        <translation>Комментарий:</translation>
+      <location filename="../TimeTrackerEntryDialog.ui" line="0" />
+      <source>Comment:</source>
+      <translation>Комментарий:</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerEntryDialog.ui" line="130"/>
-        <source>Enter a comment for the timer</source>
-        <translation>Введите комментарий для таймера</translation>
+      <location filename="../TimeTrackerEntryDialog.ui" line="0" />
+      <source>Enter a comment for the timer</source>
+      <translation>Введите комментарий для таймера</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerEntryDialog.py" line="49"/>
-        <source>Add Tracker Entry</source>
-        <translation>Добавить запись трекера</translation>
+      <location filename="../TimeTrackerEntryDialog.py" line="55" />
+      <source>Add Tracker Entry</source>
+      <translation>Добавить запись трекера</translation>
     </message>
-</context>
-<context>
+  </context>
+  <context>
     <name>TimeTrackerPage</name>
     <message>
-        <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="17"/>
-        <source>&lt;b&gt;Configure Time Tracker&lt;/b&gt;</source>
-        <translation>&lt;b&gt;Настройка Time Tracker&lt;/b&gt;</translation>
+      <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="0" />
+      <source>&lt;b&gt;Configure Time Tracker&lt;/b&gt;</source>
+      <translation>&lt;b&gt;Настройка Time Tracker&lt;/b&gt;</translation>
     </message>
     <message>
-        <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="39"/>
-        <source>Minimum Duration:</source>
-        <translation>Минимальная продолжительность:</translation>
+      <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="0" />
+      <source>Minimum Duration:</source>
+      <translation>Минимальная продолжительность:</translation>
     </message>
     <message>
-        <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="46"/>
-        <source>Enter the value of the minimum duration for a valid tracker entry</source>
-        <translation>Задайте значение минимальной продолжительности для правильной записи трекера</translation>
+      <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="0" />
+      <source>Enter the value of the minimum duration for a valid tracker entry</source>
+      <translation>Задайте значение минимальной продолжительности для правильной записи трекера</translation>
     </message>
     <message>
-        <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="49"/>
-        <source> min</source>
-        <translation> мин</translation>
+      <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="0" />
+      <source> min</source>
+      <translation> мин</translation>
     </message>
     <message>
-        <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="75"/>
-        <source>Select to save automatically whenever a tracker is stopped</source>
-        <translation>Разрешить автоматическое сохранение при остановке трекера</translation>
+      <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="0" />
+      <source>Select to save automatically whenever a tracker is stopped</source>
+      <translation>Разрешить автоматическое сохранение при остановке трекера</translation>
     </message>
     <message>
-        <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="78"/>
-        <source>Auto Save Enabled</source>
-        <translation>Автосохранение включено</translation>
+      <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="0" />
+      <source>Auto Save Enabled</source>
+      <translation>Автосохранение включено</translation>
     </message>
     <message>
-        <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="85"/>
-        <source>Select to allow multiple entries with the same start date and time</source>
-        <translation>Разрешить несколько записей с одинаковой датой и временем запуска</translation>
+      <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="0" />
+      <source>Select to allow multiple entries with the same start date and time</source>
+      <translation>Разрешить несколько записей с одинаковой датой и временем запуска</translation>
     </message>
     <message>
-        <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="88"/>
-        <source>Allow entries with identical start date and time</source>
-        <translation>Разрешены записи с одинаковыми датой и временем запуска</translation>
+      <location filename="../ConfigurationPage/TimeTrackerPage.ui" line="0" />
+      <source>Allow entries with identical start date and time</source>
+      <translation>Разрешены записи с одинаковыми датой и временем запуска</translation>
     </message>
-</context>
-<context>
+  </context>
+  <context>
     <name>TimeTrackerPlugin</name>
     <message>
-        <location filename="../../PluginTimeTracker.py" line="75"/>
-        <source>Time Tracker</source>
-        <translation>Time Tracker</translation>
+      <location filename="../../PluginTimeTracker.py" line="69" />
+      <source>Time Tracker</source>
+      <translation>Time Tracker</translation>
     </message>
-</context>
-<context>
+  </context>
+  <context>
     <name>TimeTrackerWidget</name>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="22"/>
-        <source>Start Date/Time:</source>
-        <translation>Начальные дата/время:</translation>
+      <location filename="../TimeTrackerWidget.py" line="349" />
+      <location filename="../TimeTrackerWidget.py" line="206" />
+      <location filename="../TimeTrackerWidget.py" line="114" />
+      <location filename="../TimeTrackerWidget.py" line="97" />
+      <source>{0} min</source>
+      <translation>{0} мин</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="29"/>
-        <source>Duration:</source>
-        <translation>Продолжительность:</translation>
-    </message>
-    <message>
-        <location filename="../TimeTrackerWidget.ui" line="36"/>
-        <source>Task:</source>
-        <translation>Задача:</translation>
+      <location filename="../TimeTrackerWidget.py" line="134" />
+      <source>Edit</source>
+      <translation>Править</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="43"/>
-        <source>Comment:</source>
-        <translation>Комментарий:</translation>
+      <location filename="../TimeTrackerWidget.py" line="140" />
+      <source>Add</source>
+      <translation>Добавить</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="53"/>
-        <source>Shows the start date and time of the current timer</source>
-        <translation>Дата и время запуска текущего таймера</translation>
+      <location filename="../TimeTrackerWidget.py" line="141" />
+      <source>Delete</source>
+      <translation>Удалить</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="59"/>
-        <source>yyyy-MM-dd HH:mm:ss</source>
-        <translation>yyyy-MM-dd HH:mm:ss</translation>
+      <location filename="../TimeTrackerWidget.py" line="149" />
+      <source>Save</source>
+      <translation>Сохранить</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="72"/>
-        <source>Shows the duration of the current timer</source>
-        <translation>Отсчет текущего таймера</translation>
+      <location filename="../TimeTrackerWidget.py" line="151" />
+      <source>Import</source>
+      <translation>Импорт</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="81"/>
-        <source> min</source>
-        <translation> мин</translation>
+      <location filename="../TimeTrackerWidget.py" line="152" />
+      <source>Export Selected</source>
+      <translation>Экспорт выбранного</translation>
+    </message>
+    <message>
+      <location filename="../TimeTrackerWidget.py" line="155" />
+      <source>Export All</source>
+      <translation>Экспортировать все</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="97"/>
-        <source>Enter the task description for the current timer</source>
-        <translation>Введите описание задачи для текущего таймера</translation>
+      <location filename="../TimeTrackerWidget.py" line="157" />
+      <source>Remove duplicates</source>
+      <translation>Удалить повторения</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="113"/>
-        <source>Enter a comment for the current timer</source>
-        <translation>Введите комментарий для текущего таймера</translation>
+      <location filename="../TimeTrackerWidget.py" line="158" />
+      <source>Merge duplicates</source>
+      <translation>Объединить повторения</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="140"/>
-        <source>Press to pause the current timer</source>
-        <translation>Пауза для текущего таймера</translation>
+      <location filename="../TimeTrackerWidget.py" line="347" />
+      <location filename="../TimeTrackerWidget.py" line="203" />
+      <source>{0}, {1}</source>
+      <comment>date, time</comment>
+      <translation>{0}, {1}</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="143"/>
-        <source>Pause</source>
-        <translation>Пауза</translation>
+      <location filename="../TimeTrackerWidget.py" line="217" />
+      <source>Delete Selected Entries</source>
+      <translation>Удалить выбранные записи</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="153"/>
-        <source>Press to end the current timer and start a new one</source>
-        <translation>Завершение текущего таймера и запуск нового</translation>
+      <location filename="../TimeTrackerWidget.py" line="218" />
+      <source>Do you really want to delete the selected entries?</source>
+      <translation>Вы действительно хотите удалить выбранные записи?</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="156"/>
-        <source>End Current Timer and Start a New Timer</source>
-        <translation>Останов текущего таймера и запуск нового</translation>
+      <location filename="../TimeTrackerWidget.py" line="254" />
+      <location filename="../TimeTrackerWidget.py" line="246" />
+      <source>Import Time Tracker Entries</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="200"/>
-        <source>Start Date/Time</source>
-        <translation>Начальные дата/время</translation>
+      <location filename="../TimeTrackerWidget.py" line="276" />
+      <location filename="../TimeTrackerWidget.py" line="248" />
+      <source>Time Tracker Files (*.ttj);;All Files (*)</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="205"/>
-        <source>Duration</source>
-        <translation>Продолжительность</translation>
+      <location filename="../TimeTrackerWidget.py" line="255" />
+      <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; does not exist.&lt;/p&gt;</source>
+      <translation>&lt;p&gt;Файл &lt;b&gt;{0}&lt;/b&gt; не существует.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="210"/>
-        <source>Task</source>
-        <translation>Задача</translation>
+      <location filename="../TimeTrackerWidget.py" line="288" />
+      <location filename="../TimeTrackerWidget.py" line="274" />
+      <source>Export Time Tracker Entries</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.ui" line="215"/>
-        <source>Comment</source>
-        <translation>Комментарий</translation>
+      <location filename="../TimeTrackerWidget.py" line="289" />
+      <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
+      <translation>&lt;p&gt;Файл &lt;b&gt;{0}&lt;/b&gt; уже существует. Переписать его?&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="341"/>
-        <source>{0} min</source>
-        <translation>{0} мин</translation>
+      <location filename="../TimeTrackerWidget.py" line="316" />
+      <source>Remove Duplicate Tracker Entries</source>
+      <translation>Удалить повторяющиеся записи трекера</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="129"/>
-        <source>Edit</source>
-        <translation>Править</translation>
+      <location filename="../TimeTrackerWidget.py" line="317" />
+      <source>Are you sure you want to remove duplicate tracker entries? Only the one with the longest duration will be kept.</source>
+      <translation>Вы действительно хотите удалить повторяющиеся записи трекера? Будет сохранена только одна запись с максимальной продолжительностью.</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="134"/>
-        <source>Add</source>
-        <translation>Добавить</translation>
+      <location filename="../TimeTrackerWidget.py" line="329" />
+      <source>Merge Duplicate Tracker Entries</source>
+      <translation>Объединение повторяющихся записей трекера</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="135"/>
-        <source>Delete</source>
-        <translation>Удалить</translation>
+      <location filename="../TimeTrackerWidget.py" line="330" />
+      <source>Are you sure you want to merge duplicate tracker entries? The durations of duplicate ones will be added.</source>
+      <translation>Вы действительно хотите объединить повторяющиеся записи трекера? Будут сложены записи одинаковой продолжительности.</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="142"/>
-        <source>Save</source>
-        <translation>Сохранить</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Start Date/Time:</source>
+      <translation>Начальные дата/время:</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="144"/>
-        <source>Import</source>
-        <translation>Импорт</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Duration:</source>
+      <translation>Продолжительность:</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="145"/>
-        <source>Export Selected</source>
-        <translation>Экспорт выбранного</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Task:</source>
+      <translation>Задача:</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="148"/>
-        <source>Export All</source>
-        <translation>Экспортировать все</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Comment:</source>
+      <translation>Комментарий:</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="150"/>
-        <source>Remove duplicates</source>
-        <translation>Удалить повторения</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Shows the start date and time of the current timer</source>
+      <translation>Дата и время запуска текущего таймера</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="151"/>
-        <source>Merge duplicates</source>
-        <translation>Объединить повторения</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>yyyy-MM-dd HH:mm:ss</source>
+      <translation>yyyy-MM-dd HH:mm:ss</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="341"/>
-        <source>{0}, {1}</source>
-        <comment>date, time</comment>
-        <translation>{0}, {1}</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Shows the duration of the current timer</source>
+      <translation>Отсчет текущего таймера</translation>
+    </message>
+    <message>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source> min</source>
+      <translation> мин</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="212"/>
-        <source>Delete Selected Entries</source>
-        <translation>Удалить выбранные записи</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Enter the task description for the current timer</source>
+      <translation>Введите описание задачи для текущего таймера</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="212"/>
-        <source>Do you really want to delete the selected entries?</source>
-        <translation>Вы действительно хотите удалить выбранные записи?</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Enter a comment for the current timer</source>
+      <translation>Введите комментарий для текущего таймера</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="249"/>
-        <source>Import Tracker Entries</source>
-        <translation>Импорт записей трекера</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Press to pause the current timer</source>
+      <translation>Пауза для текущего таймера</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="268"/>
-        <source>Text Files (*.txt);;All Files (*)</source>
-        <translation>Текстовые файлы (*.txt);;Все файлы (*)</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Pause</source>
+      <translation>Пауза</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="249"/>
-        <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; does not exist.&lt;/p&gt;</source>
-        <translation>&lt;p&gt;Файл &lt;b&gt;{0}&lt;/b&gt; не существует.&lt;/p&gt;</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Press to end the current timer and start a new one</source>
+      <translation>Завершение текущего таймера и запуск нового</translation>
+    </message>
+    <message>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>End Current Timer and Start a New Timer</source>
+      <translation>Останов текущего таймера и запуск нового</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="282"/>
-        <source>Export Tracker Entries</source>
-        <translation>Экспорт записей трекера</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Start Date/Time</source>
+      <translation>Начальные дата/время</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="282"/>
-        <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
-        <translation>&lt;p&gt;Файл &lt;b&gt;{0}&lt;/b&gt; уже существует. Переписать его?&lt;/p&gt;</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Duration</source>
+      <translation>Продолжительность</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="310"/>
-        <source>Remove Duplicate Tracker Entries</source>
-        <translation>Удалить повторяющиеся записи трекера</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Task</source>
+      <translation>Задача</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="310"/>
-        <source>Are you sure you want to remove duplicate tracker entries? Only the one with the longest duration will be kept.</source>
-        <translation>Вы действительно хотите удалить повторяющиеся записи трекера? Будет сохранена только одна запись с максимальной продолжительностью.</translation>
+      <location filename="../TimeTrackerWidget.ui" line="0" />
+      <source>Comment</source>
+      <translation>Комментарий</translation>
+    </message>
+    <message>
+      <source>Import Tracker Entries</source>
+      <translation type="vanished">Импорт записей трекера</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="323"/>
-        <source>Merge Duplicate Tracker Entries</source>
-        <translation>Объединение повторяющихся записей трекера</translation>
+      <source>Text Files (*.txt);;All Files (*)</source>
+      <translation type="vanished">Текстовые файлы (*.txt);;Все файлы (*)</translation>
     </message>
     <message>
-        <location filename="../TimeTrackerWidget.py" line="323"/>
-        <source>Are you sure you want to merge duplicate tracker entries? The durations of duplicate ones will be added.</source>
-        <translation>Вы действительно хотите объединить повторяющиеся записи трекера? Будут сложены записи одинаковой продолжительности.</translation>
+      <source>Export Tracker Entries</source>
+      <translation type="vanished">Экспорт записей трекера</translation>
     </message>
-</context>
+  </context>
 </TS>

eric ide

mercurial