]> gitweb.hamatoma.de Git - reqt/commitdiff
rebackgui: switch English/German
authorhama <hama@siduction.net>
Fri, 19 Feb 2016 23:30:50 +0000 (00:30 +0100)
committerhama <hama@siduction.net>
Fri, 19 Feb 2016 23:30:50 +0000 (00:30 +0100)
12 files changed:
appl/rebackgui/aboutdialog.ui
appl/rebackgui/main.cpp
appl/rebackgui/mainwindow.cpp
appl/rebackgui/mainwindow.hpp
appl/rebackgui/mainwindow.ui
appl/rebackgui/rebackgui.de.qm
appl/rebackgui/rebackgui.de.ts
appl/rebackgui/rebackgui.pro
base/ReQStringUtils.cpp
gui/ReGuiApplication.cpp
gui/ReGuiApplication.hpp
gui/regui.hpp

index 5870ff08a9016d1a193c4b2cbd47e19e5b7f12e1..bbaa9b4f77edd6bfd41e272f474a198b5f44f6d1 100644 (file)
@@ -11,7 +11,7 @@
    </rect>
   </property>
   <property name="windowTitle">
-   <string>Dialog</string>
+   <string>About the program</string>
   </property>
   <property name="modal">
    <bool>true</bool>
index bfa513e66026d7d5275b7f6460eff29b6ab7f805..df7047fd177217ae9fbdedbff23d0f46282bcae0 100644 (file)
 #include "mainwindow.hpp"
 #include <QApplication>
 char** g_argv;
-int main(int argc, char *argv[]){
-   g_argv = argv;
-   QString homeDir = argc > 1 ? argv[1] : "";
-   QApplication a(argc, argv);
-   MainWindow w(a, homeDir);
-       w.show();
-       return a.exec();
+int main(int argc, char* argv[]) {
+    g_argv = argv;
+    QString homeDir = argc > 1 ? argv[1] : "";
+    QApplication a(argc, argv);
+    MainWindow w(a, homeDir);
+    w.show();
+    return a.exec();
 }
index 00c035de8b96e982b369d22e323593ede5023a83..4dfad13044acd02193485327f6bca8332e9ed78a 100644 (file)
@@ -13,7 +13,7 @@
 #include "aboutdialog.hpp"
 #include <QFileDialog>
 
-const QString VERSION("2016.02.17");
+const QString VERSION("2016.02.19");
 
 /**
  * Constructor.
@@ -23,7 +23,7 @@ const QString VERSION("2016.02.17");
  */
 MainWindow::MainWindow(QApplication& application, const QString& homeDir,
                                           QWidget *parent) :
-       ReGuiApplication(application, "rebackupgui", homeDir, 2, 100100100, "de", parent),
+       ReGuiApplication(application, "rebackgui", homeDir, 2, 100100100, "de", parent),
        ReGuiValidator(),
        ui(new Ui::MainWindow),
        m_configuration(this),
@@ -39,48 +39,64 @@ MainWindow::MainWindow(QApplication& application, const QString& homeDir,
        m_errors(0),
        m_maxListSize(1000)
 {
+       initializeGui();
+}
+
+/**
+ * Initializes the Graphical User Interface.
+ */
+void MainWindow::initializeGui(){
        ui->setupUi(this);
        initializeGuiElements();
-   startStop(false);
-   connect(ui->actionStart, SIGNAL(triggered()), this,
-         SLOT(onStart()));
-   connect(ui->actionChecksums, SIGNAL(triggered()), this,
-         SLOT(onChecksums()));
-   connect(ui->actionClean, SIGNAL(triggered()), this,
-         SLOT(onClean()));
-   connect(ui->actionStop, SIGNAL(triggered()), this,
-         SLOT(onStop()));
-   connect(ui->pushButtonBackup, SIGNAL(clicked()), this, SLOT(onStart()));
-   connect(ui->pushButtonChecksum, SIGNAL(clicked()), this, SLOT(onChecksums()));
-   connect(ui->pushButtonStop, SIGNAL(clicked()), this, SLOT(onStop()));
-   connect(ui->pushButtonAddItem, SIGNAL(clicked()), this, SLOT(onAddItem()));
-   connect(ui->pushButtonDeleteItem, SIGNAL(clicked()), this, SLOT(onDeleteItem()));
-   connect(ui->pushButtonAddSource, SIGNAL(clicked()), this, SLOT(onAddSource()));
-   connect(ui->pushButtonDeleteSource, SIGNAL(clicked()), this, SLOT(onDeleteSource()));
-   connect(ui->pushButtonSelectTarget, SIGNAL(clicked()), this, SLOT(onSelectTarget()));
-   connect(ui->pushButtonSaveConfig, SIGNAL(clicked()), this, SLOT(onSaveConfig()));
-   connect(ui->pushButtonUpdate, SIGNAL(clicked()), this, SLOT(onUpdate()));
-   connect(ui->actionLoadConfig, SIGNAL(triggered()), this,
-         SLOT(onLoadConfig()));
-   connect(ui->actionSaveConfig, SIGNAL(triggered()), this,
-         SLOT(onSaveConfig()));
-   connect(ui->actionAbout, SIGNAL(triggered()), this, SLOT(onAbout()));
-   connect(ui->tableWidgetConfiguration->selectionModel(),
-                  SIGNAL( selectionChanged(const QItemSelection&, const QItemSelection&)),
-                  this, SLOT( onSelectionChanged(const QItemSelection&, const QItemSelection&) ));
-   connect(ui->tableWidgetConfiguration->selectionModel(),
-               SIGNAL(currentChanged(const QModelIndex&, const QModelIndex&)),
-               this,
-               SLOT(onCurrentChanged(const QModelIndex&, const QModelIndex&)));
-   connect(ui->pushButtonClearFileList, SIGNAL(clicked()), this, SLOT(onClearFileList()));
-   connect(ui->pushButtonClearErrorList, SIGNAL(clicked()), this, SLOT(onClearErrorList()));
-   connect(ui->pushButtonClear, SIGNAL(clicked()), this, SLOT(onClearLog()));
-   connect(ui->pushButtonClean, SIGNAL(clicked()), this, SLOT(onClean()));
-   connect(ui->comboBoxVerbose, SIGNAL(currentIndexChanged(int)), this, SLOT(onVerboseIndexChanged(int)));
-   m_configuration.load("");
-   ui->tableWidgetConfiguration->selectRow(0);
-   updateTable();
-   updateItem(0);
+       initializeGuiLanguage(ui->actionEnglish, ui->actionGerman);
+       startStop(false);
+       connect(ui->actionStart, SIGNAL(triggered()), this,
+          SLOT(onStart()));
+       connect(ui->actionChecksums, SIGNAL(triggered()), this,
+          SLOT(onChecksums()));
+       connect(ui->actionClean, SIGNAL(triggered()), this,
+          SLOT(onClean()));
+       connect(ui->actionStop, SIGNAL(triggered()), this,
+          SLOT(onStop()));
+       connect(ui->pushButtonBackup, SIGNAL(clicked()), this, SLOT(onStart()));
+       connect(ui->pushButtonChecksum, SIGNAL(clicked()), this, SLOT(onChecksums()));
+       connect(ui->pushButtonStop, SIGNAL(clicked()), this, SLOT(onStop()));
+       connect(ui->pushButtonAddItem, SIGNAL(clicked()), this, SLOT(onAddItem()));
+       connect(ui->pushButtonDeleteItem, SIGNAL(clicked()), this, SLOT(onDeleteItem()));
+       connect(ui->pushButtonAddSource, SIGNAL(clicked()), this, SLOT(onAddSource()));
+       connect(ui->pushButtonDeleteSource, SIGNAL(clicked()), this, SLOT(onDeleteSource()));
+       connect(ui->pushButtonSelectTarget, SIGNAL(clicked()), this, SLOT(onSelectTarget()));
+       connect(ui->pushButtonSaveConfig, SIGNAL(clicked()), this, SLOT(onSaveConfig()));
+       connect(ui->pushButtonUpdate, SIGNAL(clicked()), this, SLOT(onUpdate()));
+       connect(ui->actionLoadConfig, SIGNAL(triggered()), this,
+          SLOT(onLoadConfig()));
+       connect(ui->actionSaveConfig, SIGNAL(triggered()), this,
+          SLOT(onSaveConfig()));
+       connect(ui->actionAbout, SIGNAL(triggered()), this, SLOT(onAbout()));
+       connect(ui->tableWidgetConfiguration->selectionModel(),
+                       SIGNAL( selectionChanged(const QItemSelection&, const QItemSelection&)),
+                       this, SLOT( onSelectionChanged(const QItemSelection&, const QItemSelection&) ));
+       connect(ui->tableWidgetConfiguration->selectionModel(),
+                SIGNAL(currentChanged(const QModelIndex&, const QModelIndex&)),
+                this,
+                SLOT(onCurrentChanged(const QModelIndex&, const QModelIndex&)));
+       connect(ui->pushButtonClearFileList, SIGNAL(clicked()), this, SLOT(onClearFileList()));
+       connect(ui->pushButtonClearErrorList, SIGNAL(clicked()), this, SLOT(onClearErrorList()));
+       connect(ui->pushButtonClear, SIGNAL(clicked()), this, SLOT(onClearLog()));
+       connect(ui->pushButtonClean, SIGNAL(clicked()), this, SLOT(onClean()));
+       connect(ui->comboBoxVerbose, SIGNAL(currentIndexChanged(int)), this, SLOT(onVerboseIndexChanged(int)));
+       //connect(m_defaultLanguage, SIGNAL(triggered()), this,
+       //              SLOT(onDefault()));
+       connect(ui->actionEnglish, SIGNAL(triggered()), this, SLOT(onEnglish()));
+       connect(ui->actionGerman, SIGNAL(triggered()), this, SLOT(onGerman()));
+       m_configuration.load("");
+       ui->tableWidgetConfiguration->selectRow(0);
+       updateTable();
+       updateItem(0);
+       if (m_currentTranslator == NULL)
+               ui->actionEnglish->setChecked(true);
+       else
+               ui->actionGerman->setChecked(true);
 }
 
 /**
@@ -274,6 +290,19 @@ void MainWindow::onDeleteSource()
        }
 }
 
+/**
+ * Action "switch to English".
+ */
+void MainWindow::onEnglish(){
+       ReGuiApplication::onEnglish();
+}
+/**
+ * Action "switch to German".
+ */
+void MainWindow::onGerman(){
+       ReGuiApplication::onGerman();
+}
+
 /**
  * @brief MainWindow::onSelectionChanged
  * @param selected
@@ -290,6 +319,13 @@ void MainWindow::onSelectionChanged(const QItemSelection& selected,
 
 }
 
+/**
+ * The language has been changed.
+ */
+void MainWindow::onLanguageChange()
+{
+       initializeGui();
+}
 /**
  * Starts the backup.
  */
@@ -629,7 +665,7 @@ void MainWindow::updateTableRow(int row, BackupItem& item, QTableWidget* target)
                updateTableRow(row, item, ui->tableWidgetConfiguration);
        } else {
                int base = target == ui->tableWidget ? 1 : 0;
-               QString active = QObject::tr(item.m_active ? "yes" : "no");
+               QString active = item.m_active ? QObject::tr("yes") : QObject::tr("no");
                if (base == 1)
                        target->setItem(row, 0, new QTableWidgetItem(active));
                target->setItem(row, base + 0, new QTableWidgetItem(item.m_name));
@@ -668,3 +704,5 @@ void MainWindow::writeTargetConfiguration(BackupItem& item, const QString& targe
 
 
 
+
+
index 4560a55909dedf1635522dbc12239b80baaf66e7..912e7f76027e8a6964efd50d960e841b86077b36 100644 (file)
@@ -38,6 +38,7 @@ public:
 
 private:
    QString extractTarget(const QString& dir);
+   void initializeGui();
    bool initializeStart();
    void writeTargetConfiguration(BackupItem& item, const QString& target);
 private slots:
@@ -53,6 +54,8 @@ private slots:
    void onCurrentChanged(const QModelIndex& current, const QModelIndex& previous);
    void onDeleteItem();
    void onDeleteSource();
+   void onEnglish();
+   void onGerman();
    virtual void onGuiTimerUpdate();
    void onSaveConfig();
    void onStart();
@@ -79,6 +82,8 @@ private:
        CleanTask* m_cleanTask;
        int m_errors;
        int m_maxListSize;
+protected slots:
+       virtual void onLanguageChange();
 };
 
 #endif // MAINWINDOW_HPP
index b032479d44fb94f739bd82119261623bd4c316e8..35ce0ee86281cbf6031ff9242c0b35fc6afdd840 100644 (file)
                  </size>
                 </property>
                 <property name="text">
-                 <string>Start</string>
+                 <string>Backup</string>
                 </property>
                </widget>
               </item>
                  </size>
                 </property>
                 <property name="text">
-                 <string>Select target</string>
+                 <string notr="true">...</string>
                 </property>
                </widget>
               </item>
      <string>Help</string>
     </property>
     <addaction name="actionAbout"/>
+    <addaction name="separator"/>
+    <addaction name="actionDefault"/>
+    <addaction name="actionEnglish"/>
+    <addaction name="actionGerman"/>
    </widget>
    <widget class="QMenu" name="menuAction">
     <property name="title">
     <string>Clean</string>
    </property>
   </action>
+  <action name="actionEnglish">
+   <property name="checkable">
+    <bool>true</bool>
+   </property>
+   <property name="text">
+    <string>English</string>
+   </property>
+  </action>
+  <action name="actionGerman">
+   <property name="checkable">
+    <bool>true</bool>
+   </property>
+   <property name="text">
+    <string>German</string>
+   </property>
+  </action>
+  <action name="actionDefault">
+   <property name="checkable">
+    <bool>true</bool>
+   </property>
+   <property name="text">
+    <string>Default</string>
+   </property>
+  </action>
  </widget>
  <layoutdefault spacing="6" margin="11"/>
  <resources/>
- <connections/>
+ <connections>
+  <connection>
+   <sender>actionExit</sender>
+   <signal>triggered()</signal>
+   <receiver>MainWindow</receiver>
+   <slot>close()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>-1</x>
+     <y>-1</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>419</x>
+     <y>330</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
 </ui>
index 278cbd6ddff36469e29f310bf3b0393dba6ce6f7..1c8395d7dcedb63afac066109dde52d702261229 100644 (file)
Binary files a/appl/rebackgui/rebackgui.de.qm and b/appl/rebackgui/rebackgui.de.qm differ
index 7a3de2ef219bd4e4d0a16e6cc4701593fcb6c2bc..13869d3ea49b228809737cbd372bb12e6c81c89e 100644 (file)
@@ -5,8 +5,8 @@
     <name>AboutDialog</name>
     <message>
         <location filename="aboutdialog.ui" line="14"/>
-        <source>Dialog</source>
-        <translation type="unfinished"></translation>
+        <source>About the program</source>
+        <translation>Über das Programm</translation>
     </message>
     <message>
         <location filename="aboutdialog.ui" line="32"/>
@@ -21,12 +21,12 @@ p, li { white-space: pre-wrap; }
 &lt;p align=&quot;center&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;a href=&quot;https://github.com/republib&quot;&gt;&lt;span style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt; text-decoration: underline; color:#0000ff;&quot;&gt;https://github.com/republib&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt;&quot;&gt; &lt;/span&gt;&lt;/p&gt;
 &lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt;&quot;&gt;Implemented in QT (C++) 5.x&lt;/span&gt;&lt;/p&gt;
 &lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt;&quot;&gt;Icons: Mark James, &lt;/span&gt;&lt;a href=&quot;http://famfamfam.com&quot;&gt;&lt;span style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt; text-decoration: underline; color:#0000ff;&quot;&gt;http://famfamfam.com&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt;&quot;&gt; &lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
-        <translation type="unfinished">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+        <translation>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
 &lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
 p, li { white-space: pre-wrap; }
 &lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Droid Sans&apos;; font-size:10pt; font-weight:400; font-style:normal;&quot;&gt;
 &lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt; font-weight:600;&quot;&gt;ReBackupGui&lt;/span&gt;&lt;span style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt;&quot;&gt; kann Dateisicherungen auf externen Medien durchführen.&lt;/span&gt;&lt;/p&gt;
-&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt;&quot;&gt;This is a program of the project&lt;/span&gt;&lt;/p&gt;
+&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt;&quot;&gt;Das ist ein Programm des Projekts&lt;/span&gt;&lt;/p&gt;
 &lt;p align=&quot;center&quot; style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt; font-weight:600;&quot;&gt;Re&lt;/span&gt;&lt;span style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt;&quot;&gt;al &lt;/span&gt;&lt;span style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt; font-weight:600;&quot;&gt;Pub&lt;/span&gt;&lt;span style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt;&quot;&gt;lic &lt;/span&gt;&lt;span style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt; font-weight:600;&quot;&gt;Lib&lt;/span&gt;&lt;span style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt;&quot;&gt;rary (RePubLib)&lt;/span&gt;&lt;/p&gt;
 &lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt;&quot;&gt;Der Quelltext ist Public Domain und unter&lt;/span&gt;&lt;/p&gt;
 &lt;p align=&quot;center&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;a href=&quot;https://github.com/republib&quot;&gt;&lt;span style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt; text-decoration: underline; color:#0000ff;&quot;&gt;https://github.com/republib&lt;/span&gt;&lt;/a&gt; verf&amp;uuml;gbar.&lt;span style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt;&quot;&gt; &lt;/span&gt;&lt;/p&gt;
@@ -36,17 +36,17 @@ p, li { white-space: pre-wrap; }
     <message>
         <location filename="aboutdialog.ui" line="64"/>
         <source>Version:</source>
-        <translation type="unfinished"></translation>
+        <translation></translation>
     </message>
     <message>
         <location filename="aboutdialog.ui" line="71"/>
         <source>2015.05.00</source>
-        <translation type="unfinished"></translation>
+        <translation></translation>
     </message>
     <message>
         <location filename="aboutdialog.ui" line="91"/>
         <source>&amp;OK</source>
-        <translation type="unfinished"></translation>
+        <translation></translation>
     </message>
 </context>
 <context>
@@ -54,22 +54,22 @@ p, li { white-space: pre-wrap; }
     <message>
         <location filename="BackupEngine.cpp" line="154"/>
         <source>cannot remove file (for making a directory (%1): %2</source>
-        <translation type="unfinished">kann Datei nicht löschen, um ein Verzeichnis anzulegen (%1): %2</translation>
+        <translation>kann Datei nicht löschen, um ein Verzeichnis anzulegen (%1): %2</translation>
     </message>
     <message>
         <location filename="BackupEngine.cpp" line="158"/>
         <source>cannot make directory (%1): %2</source>
-        <translation type="unfinished">kann Verzeichnis nicht anlegen (%1): %2</translation>
+        <translation>kann Verzeichnis nicht anlegen (%1): %2</translation>
     </message>
     <message>
         <location filename="BackupEngine.cpp" line="222"/>
         <source>%1 of %2 (%3 of %4) %5 MB/sec runtime: %6</source>
-        <translation type="unfinished">%1 von %2 (%3 von %4) %5 MB/sec Laufzeit: %6</translation>
+        <translation>%1 von %2 (%3 von %4) %5 MB/sec Laufzeit: %6</translation>
     </message>
     <message>
         <location filename="BackupEngine.cpp" line="231"/>
         <source>backup complete after %1. Errors: %2</source>
-        <translation type="unfinished">Sicherung nach %1 fertiggestellt Fehler: %2</translation>
+        <translation>Sicherung nach %1 fertiggestellt Fehler: %2</translation>
     </message>
 </context>
 <context>
@@ -77,7 +77,7 @@ p, li { white-space: pre-wrap; }
     <message>
         <location filename="BackupEngine.cpp" line="347"/>
         <source>Building source checksum complete after %1. Processed: %2</source>
-        <translation type="unfinished">Erzeugen der Prüfsummen für die Quelldateien fertig nach %1. Bearbeitet: %2</translation>
+        <translation>Erzeugen der Prüfsummen für die Quelldateien fertig nach %1. Bearbeitet: %2</translation>
     </message>
 </context>
 <context>
@@ -85,12 +85,12 @@ p, li { white-space: pre-wrap; }
     <message>
         <location filename="BackupEngine.cpp" line="425"/>
         <source>%1 of %2 (%3 of %4) %5 MB/sec runtime: %6</source>
-        <translation type="unfinished">%1 von %2 (%3 von %4) %5 MB/sec Laufzeit: %6</translation>
+        <translation>%1 von %2 (%3 von %4) %5 MB/sec Laufzeit: %6</translation>
     </message>
     <message>
         <location filename="BackupEngine.cpp" line="436"/>
         <source>Building target checksums complete after %1. Processed: %2 Errors: %3</source>
-        <translation type="unfinished">Erzeugen der Prüfsummen für die Zieldateien fertig nach %1. Bearbeitet: %2 Fehler: %3</translation>
+        <translation>Erzeugen der Prüfsummen für die Zieldateien fertig nach %1. Bearbeitet: %2 Fehler: %3</translation>
     </message>
 </context>
 <context>
@@ -98,12 +98,12 @@ p, li { white-space: pre-wrap; }
     <message>
         <location filename="BackupEngine.cpp" line="548"/>
         <source>%1 of %2 files  %3 files/sec runtime: %6</source>
-        <translation type="unfinished">%1 von %2 Dateien  %3 Dateien/sec Laufzeit: %6</translation>
+        <translation>%1 von %2 Dateien  %3 Dateien/sec Laufzeit: %6</translation>
     </message>
     <message>
         <location filename="BackupEngine.cpp" line="556"/>
         <source>clean complete after %1. Errors: %2</source>
-        <translation type="unfinished">Bereinigen fertig nach %1. Fehler: %2</translation>
+        <translation>Bereinigen fertig nach %1. Fehler: %2</translation>
     </message>
 </context>
 <context>
@@ -111,314 +111,332 @@ p, li { white-space: pre-wrap; }
     <message>
         <location filename="mainwindow.ui" line="14"/>
         <source>RePubLib rebackgui</source>
-        <translation type="unfinished">RePubLib rebackgui</translation>
+        <translation>RePubLib rebackgui</translation>
     </message>
     <message>
         <location filename="mainwindow.ui" line="25"/>
-        <location filename="mainwindow.ui" line="804"/>
+        <location filename="mainwindow.ui" line="808"/>
         <source>Action</source>
-        <translation type="unfinished">Aktion</translation>
+        <translation>Aktion</translation>
     </message>
     <message>
         <location filename="mainwindow.ui" line="51"/>
         <source>Active</source>
-        <translation type="unfinished">Aktiv</translation>
+        <translation>Aktiv</translation>
     </message>
     <message>
         <location filename="mainwindow.ui" line="56"/>
         <location filename="mainwindow.ui" line="389"/>
         <source>Name</source>
-        <translation type="unfinished">Name</translation>
+        <translation>Name</translation>
     </message>
     <message>
         <location filename="mainwindow.ui" line="61"/>
         <location filename="mainwindow.ui" line="394"/>
         <source>Target</source>
-        <translation type="unfinished">Ziel</translation>
+        <translation>Ziel</translation>
     </message>
     <message>
         <location filename="mainwindow.ui" line="66"/>
         <location filename="mainwindow.ui" line="399"/>
         <source>Last backup</source>
-        <translation type="unfinished">Letzte Sicherung</translation>
+        <translation>Letzte Sicherung</translation>
     </message>
     <message>
         <location filename="mainwindow.ui" line="71"/>
         <location filename="mainwindow.ui" line="404"/>
         <source>Source(s)</source>
-        <translation type="unfinished">Quelle(n)</translation>
+        <translation>Quelle(n)</translation>
     </message>
     <message>
         <location filename="mainwindow.ui" line="87"/>
         <source>Options:</source>
-        <translation type="unfinished">Optionen:</translation>
+        <translation>Optionen:</translation>
     </message>
     <message>
         <location filename="mainwindow.ui" line="100"/>
         <source>Max. list length:</source>
-        <translation type="unfinished">Max. Listenlänge:</translation>
+        <translation>Max. Listenlänge:</translation>
     </message>
     <message>
         <location filename="mainwindow.ui" line="113"/>
         <source>Max. length of the file list / error list. 0: unlimited</source>
-        <translation type="unfinished">Max. Länge der Datei-/Fehlerliste. 0: unbeschränkt</translation>
+        <translation>Max. Länge der Datei-/Fehlerliste. 0: unbeschränkt</translation>
     </message>
     <message>
         <location filename="mainwindow.ui" line="119"/>
         <source>100</source>
-        <translation type="unfinished">100</translation>
+        <translation>100</translation>
     </message>
     <message>
         <location filename="mainwindow.ui" line="138"/>
         <source>Starting a task cleans filelist and errorlist</source>
-        <translation type="unfinished">Start löscht Datei- und Fehlerliste</translation>
+        <translation>Start löscht Datei- und Fehlerliste</translation>
     </message>
     <message>
         <location filename="mainwindow.ui" line="141"/>
         <source>Start cleans</source>
-        <translation type="unfinished">Start löscht</translation>
+        <translation>Start löscht</translation>
     </message>
     <message>
         <location filename="mainwindow.ui" line="170"/>
         <source>Verbose level</source>
-        <translation type="unfinished">Ausgabenstufe</translation>
+        <translation>Ausgabenstufe</translation>
     </message>
     <message>
         <location filename="mainwindow.ui" line="177"/>
         <source>Quiet</source>
-        <translation type="unfinished">Still</translation>
+        <translation>Still</translation>
     </message>
     <message>
         <location filename="mainwindow.ui" line="182"/>
         <source>Summary</source>
-        <translation type="unfinished">Zusammenfassung</translation>
+        <translation>Kurzfassung</translation>
     </message>
     <message>
         <location filename="mainwindow.ui" line="187"/>
         <source>File log</source>
-        <translation type="unfinished">Dateiliste</translation>
+        <translation>Dateiliste</translation>
     </message>
     <message>
         <location filename="mainwindow.ui" line="192"/>
         <source>Chatty</source>
-        <translation type="unfinished">Geschwätzig</translation>
+        <translation>Geschwätzig</translation>
     </message>
     <message>
-        <location filename="mainwindow.ui" line="210"/>
         <source>Start</source>
-        <translation type="unfinished">Start</translation>
+        <translation type="obsolete">Start</translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="210"/>
+        <source>Backup</source>
+        <translation>Sicherung</translation>
     </message>
     <message>
         <location filename="mainwindow.ui" line="226"/>
-        <location filename="mainwindow.ui" line="847"/>
+        <location filename="mainwindow.ui" line="851"/>
         <source>Stop</source>
-        <translation type="unfinished">Beenden</translation>
+        <translation>Beenden</translation>
     </message>
     <message>
         <location filename="mainwindow.ui" line="252"/>
-        <location filename="mainwindow.ui" line="860"/>
+        <location filename="mainwindow.ui" line="864"/>
         <source>Calculates checksums for source and target files and reports differences</source>
-        <translation type="unfinished">Berechnet Prüfsummen für Quell- und Zieldateien und meldet Unterschiede</translation>
+        <translation>Berechnet Prüfsummen für Quell- und Zieldateien und meldet Unterschiede</translation>
     </message>
     <message>
         <location filename="mainwindow.ui" line="255"/>
-        <location filename="mainwindow.ui" line="857"/>
+        <location filename="mainwindow.ui" line="861"/>
         <source>Checksums</source>
-        <translation type="unfinished">Prüfsummen</translation>
+        <translation>Prüfsummen</translation>
     </message>
     <message>
         <location filename="mainwindow.ui" line="268"/>
         <source>Detects files/dirs not found in the source directory. Old files will be remove, the other will be moved to the shadow directory</source>
-        <translation type="unfinished">Entdeckt Dateien/Verzeichnisse, die nicht im Quellverzeichnis stehen. Alte Dateien werden gelöscht, die anderen werden ins Schattenverzeichnis verschoben</translation>
+        <translation>Entdeckt Dateien/Verzeichnisse, die nicht im Quellverzeichnis stehen. Alte Dateien werden gelöscht, die anderen werden ins Schattenverzeichnis verschoben</translation>
     </message>
     <message>
         <location filename="mainwindow.ui" line="271"/>
-        <location filename="mainwindow.ui" line="865"/>
+        <location filename="mainwindow.ui" line="869"/>
         <source>Clean</source>
         <translatorcomment>Protokoll:</translatorcomment>
-        <translation type="unfinished">Bereinigen</translation>
+        <translation>Bereinigen</translation>
     </message>
     <message>
         <location filename="mainwindow.ui" line="292"/>
         <source>Log:</source>
-        <translation type="unfinished"></translation>
+        <translation>Protokoll:</translation>
     </message>
     <message>
         <location filename="mainwindow.ui" line="305"/>
         <location filename="mainwindow.ui" line="692"/>
         <location filename="mainwindow.ui" line="745"/>
         <source>Clear</source>
-        <translation type="unfinished">Löschen</translation>
+        <translation>Löschen</translation>
     </message>
     <message>
         <location filename="mainwindow.ui" line="339"/>
         <source>Configuration</source>
-        <translation type="unfinished">Konfiguration</translation>
+        <translation>Konfiguration</translation>
     </message>
     <message>
         <location filename="mainwindow.ui" line="354"/>
         <source>Backup elements:</source>
-        <translation type="unfinished">Sicherungselemente:</translation>
+        <translation>Sicherungselemente:</translation>
     </message>
     <message>
         <location filename="mainwindow.ui" line="420"/>
         <source>Add item</source>
-        <translation type="unfinished">Element hinzufügen</translation>
+        <translation>Hinzufügen</translation>
     </message>
     <message>
         <location filename="mainwindow.ui" line="433"/>
         <source>Delete item</source>
-        <translation type="unfinished">Element löschen</translation>
+        <translation>Löschen</translation>
     </message>
     <message>
         <location filename="mainwindow.ui" line="459"/>
         <source>Save config</source>
-        <translation type="unfinished">Konfiguration speichern</translation>
+        <translation>Konf. speichern</translation>
     </message>
     <message>
         <location filename="mainwindow.ui" line="480"/>
         <source>Name:</source>
-        <translation type="unfinished">Name:</translation>
+        <translation>Name:</translation>
     </message>
     <message>
         <location filename="mainwindow.ui" line="509"/>
         <source>Update</source>
-        <translation type="unfinished">Aktualisieren</translation>
+        <translation>Aktualisieren</translation>
     </message>
     <message>
         <location filename="mainwindow.ui" line="526"/>
         <source>Target:</source>
-        <translation type="unfinished">Ziel:</translation>
+        <translation>Ziel:</translation>
     </message>
     <message>
-        <location filename="mainwindow.ui" line="542"/>
         <source>Select target</source>
-        <translation type="unfinished">Wähle Ziel</translation>
+        <translation type="vanished">Wähle Ziel</translation>
     </message>
     <message>
         <location filename="mainwindow.ui" line="559"/>
         <source>File patterns:</source>
-        <translation type="unfinished">Dateinamensmuster:</translation>
+        <translation>Dateimuster:</translation>
     </message>
     <message>
         <location filename="mainwindow.ui" line="566"/>
         <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;A comma (&apos;,&apos;) separated list of filename patterns. A prefix of &apos;-&apos;  means inversion: if a filename matches it will not be found.&lt;/p&gt;&lt;p&gt;Example: *.txt,*.odt&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
-        <translation type="unfinished">&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Eine Liste von Dateinamensmustern, getrennt mit Komma (&apos;,&apos;) . Ein Präfix &apos;-&apos;  bedeuted Umkehrung: Wenn ein Dateiname passt, wird er nicht gefunden.&lt;/p&gt;&lt;p&gt;Beispiel: *.txt,*.odt&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+        <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Eine Liste von Dateinamensmustern, getrennt mit Komma (&apos;,&apos;) . Ein Präfix &apos;-&apos;  bedeuted Umkehrung: Wenn ein Dateiname passt, wird er nicht gefunden.&lt;/p&gt;&lt;p&gt;Beispiel: *.txt,*.odt&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
     </message>
     <message>
         <location filename="mainwindow.ui" line="582"/>
         <source>Dir patterns:</source>
-        <translation type="unfinished">Verzeichnismuster:</translation>
+        <translation>Verzeichnismuster:</translation>
     </message>
     <message>
         <location filename="mainwindow.ui" line="589"/>
         <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;A comma (&apos;,&apos;) separated list of directory name patterns. A prefix of &apos;-&apos;  means inversion: if a directory name matches it will not be found.&lt;/p&gt;&lt;p&gt;Example: *,-.git,-*cache*&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
-        <translation type="unfinished">&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Eine Liste von Verzeichnisnamensmustern, getrennt mit Komma (&apos;,&apos;) . Ein Präfix &apos;-&apos;  bedeuted Umkehrung: Wenn ein Verzeichnisname passt, wird er nicht gefunden.&lt;/p&gt;&lt;p&gt;Beispiel: *,-.git,-*cache*&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+        <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Eine Liste von Verzeichnisnamensmustern, getrennt mit Komma (&apos;,&apos;) . Ein Präfix &apos;-&apos;  bedeuted Umkehrung: Wenn ein Verzeichnisname passt, wird er nicht gefunden.&lt;/p&gt;&lt;p&gt;Beispiel: *,-.git,-*cache*&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
     </message>
     <message>
         <location filename="mainwindow.ui" line="609"/>
         <source>Source dirs:</source>
-        <translation type="unfinished">Quelldateien:</translation>
+        <translation>Quelldateien:</translation>
     </message>
     <message>
         <location filename="mainwindow.ui" line="635"/>
         <source>Add source</source>
-        <translation type="unfinished">Quelle hinzufügen</translation>
+        <translation>Hinzufügen</translation>
     </message>
     <message>
         <location filename="mainwindow.ui" line="648"/>
         <source>Delete source</source>
-        <translation type="unfinished">Quelle löschen</translation>
+        <translation>Löschen</translation>
     </message>
     <message>
         <location filename="mainwindow.ui" line="665"/>
         <source>Files</source>
-        <translation type="unfinished">Dateien</translation>
+        <translation>Dateien</translation>
     </message>
     <message>
         <location filename="mainwindow.ui" line="679"/>
         <source>File log:</source>
-        <translation type="unfinished">Dateiliste:</translation>
+        <translation>Dateiliste:</translation>
     </message>
     <message>
         <location filename="mainwindow.ui" line="718"/>
         <source>Errors</source>
-        <translation type="unfinished">Fehler:</translation>
+        <translation>Fehler</translation>
     </message>
     <message>
         <location filename="mainwindow.ui" line="732"/>
         <source>Error log:</source>
-        <translation type="unfinished">Fehlerprotokoll:</translation>
+        <translation>Fehlerprotokoll:</translation>
     </message>
     <message>
         <location filename="mainwindow.ui" line="784"/>
         <source>File</source>
         <translatorcomment>Bearbeiten</translatorcomment>
-        <translation type="unfinished">Datei</translation>
+        <translation>Datei</translation>
     </message>
     <message>
         <location filename="mainwindow.ui" line="793"/>
         <source>Edit</source>
-        <translation type="unfinished">Bearbeiten</translation>
+        <translation>Bearbeiten</translation>
     </message>
     <message>
         <location filename="mainwindow.ui" line="798"/>
         <source>Help</source>
-        <translation type="unfinished">Hilfe</translation>
+        <translation>Hilfe</translation>
     </message>
     <message>
-        <location filename="mainwindow.ui" line="827"/>
+        <location filename="mainwindow.ui" line="831"/>
         <source>Load Config</source>
-        <translation type="unfinished">Konfiguration laden</translation>
+        <translation>Konfiguration laden</translation>
     </message>
     <message>
-        <location filename="mainwindow.ui" line="832"/>
+        <location filename="mainwindow.ui" line="836"/>
         <source>Save Config</source>
-        <translation type="unfinished">Konfiguration sichern</translation>
+        <translation>Konfiguration sichern</translation>
     </message>
     <message>
-        <location filename="mainwindow.ui" line="837"/>
+        <location filename="mainwindow.ui" line="841"/>
         <source>Exit</source>
-        <translation type="unfinished">Beenden</translation>
+        <translation>Beenden</translation>
     </message>
     <message>
-        <location filename="mainwindow.ui" line="842"/>
+        <location filename="mainwindow.ui" line="846"/>
         <source>Start backup</source>
-        <translation type="unfinished">Sicherung starten</translation>
+        <translation>Sicherung starten</translation>
     </message>
     <message>
-        <location filename="mainwindow.ui" line="852"/>
+        <location filename="mainwindow.ui" line="856"/>
         <source>About</source>
-        <translation type="unfinished">Über</translation>
+        <translation>Über</translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="298"/>
-        <location filename="mainwindow.cpp" line="355"/>
-        <location filename="mainwindow.cpp" line="457"/>
+        <location filename="mainwindow.ui" line="877"/>
+        <source>English</source>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="885"/>
+        <source>German</source>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="893"/>
+        <source>Default</source>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="335"/>
+        <location filename="mainwindow.cpp" line="392"/>
+        <location filename="mainwindow.cpp" line="494"/>
         <source>no backup item selected</source>
-        <translation type="unfinished">Kein Sicherungselement ausgewählt</translation>
+        <translation>Kein Sicherungselement ausgewählt</translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="303"/>
-        <location filename="mainwindow.cpp" line="360"/>
-        <location filename="mainwindow.cpp" line="462"/>
+        <location filename="mainwindow.cpp" line="340"/>
+        <location filename="mainwindow.cpp" line="397"/>
+        <location filename="mainwindow.cpp" line="499"/>
         <source>Target not available</source>
-        <translation type="unfinished">Ziel nicht vorhanden</translation>
+        <translation>Ziel nicht vorhanden</translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="329"/>
+        <location filename="mainwindow.cpp" line="366"/>
         <source>Select Source Directory</source>
-        <translation type="unfinished">Quellverzeichnis auswählen</translation>
+        <translation>Quellverzeichnis auswählen</translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="414"/>
+        <location filename="mainwindow.cpp" line="451"/>
         <source>Select Target Directory</source>
-        <translation type="unfinished">Zielverzeichnis auswählen</translation>
+        <translation>Zielverzeichnis auswählen</translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="420"/>
+        <location filename="mainwindow.cpp" line="457"/>
         <source>target initialized with %1</source>
-        <translation type="unfinished">Ziel mit %1 vorbelegt</translation>
+        <translation>Ziel mit %1 vorbelegt</translation>
     </message>
 </context>
 <context>
@@ -426,52 +444,52 @@ p, li { white-space: pre-wrap; }
     <message>
         <location filename="BackupEngine.cpp" line="281"/>
         <source>cannot build checksum: %1</source>
-        <translation type="unfinished">Kann Prüfsumme nicht ermitteln: %1</translation>
+        <translation>Kann Prüfsumme nicht ermitteln: %1</translation>
     </message>
     <message>
         <location filename="BackupEngine.cpp" line="407"/>
         <source>checksum differs: </source>
-        <translation type="unfinished">Prüfsummen unterscheiden sich:</translation>
+        <translation>Prüfsummen unterscheiden sich:</translation>
     </message>
     <message>
         <location filename="BackupEngine.cpp" line="501"/>
         <source>cannot delete (%1): %2</source>
-        <translation type="unfinished">Kann nicht löschen (%1): %2</translation>
+        <translation>Kann nicht löschen (%1): %2</translation>
     </message>
     <message>
         <location filename="BackupEngine.cpp" line="510"/>
         <source>cannot remove directory (%1): %2</source>
-        <translation type="unfinished">Kann Verzeichnis nicht erstellen (%1): %2</translation>
+        <translation>Kann Verzeichnis nicht erstellen (%1): %2</translation>
     </message>
     <message>
         <location filename="BackupEngine.cpp" line="524"/>
         <source>cannot create the shadow directory: %1</source>
-        <translation type="unfinished">Kann das Schattenverzeichnis nicht erstellen (%1): %2</translation>
+        <translation>Kann das Schattenverzeichnis nicht erstellen: %1</translation>
     </message>
     <message>
         <location filename="BackupEngine.cpp" line="530"/>
         <source>cannot delete shadow file (%1): %2</source>
-        <translation type="unfinished">Kann Schattendatei nicht löschen (%1): %2</translation>
+        <translation>Kann Schattendatei nicht löschen (%1): %2</translation>
     </message>
     <message>
         <location filename="BackupEngine.cpp" line="534"/>
         <source>cannot rename target file (%1): %2 -&gt; %3</source>
-        <translation type="unfinished">Kann Zieldatei nicht umbenennen (%1): %2 -&gt; %3</translation>
+        <translation>Kann Zieldatei nicht umbenennen (%1): %2 -&gt; %3</translation>
     </message>
     <message>
         <location filename="BackupEngine.cpp" line="904"/>
         <source>cannot create shadow directory (%1): %2</source>
-        <translation type="unfinished">Kann Schattenverzeichnis nicht erstellen (%1): %2</translation>
+        <translation>Kann Schattenverzeichnis nicht erstellen (%1): %2</translation>
     </message>
     <message>
         <location filename="BackupEngine.cpp" line="909"/>
         <source>cannot move to shadow directory (%1): %2 -&gt; %3</source>
-        <translation type="unfinished">Kann Datei nicht in Schattenverzeichnis verschieben (%1): %2</translation>
+        <translation>Kann Datei nicht in Schattenverzeichnis verschieben (%1): %2 -&gt; %3</translation>
     </message>
     <message>
         <location filename="Configuration.cpp" line="68"/>
         <source>item</source>
-        <translation type="unfinished">Element</translation>
+        <translation>Element</translation>
     </message>
     <message>
         <location filename="Configuration.cpp" line="119"/>
@@ -479,120 +497,138 @@ p, li { white-space: pre-wrap; }
         <location filename="../../base/ReFileUtils.cpp" line="181"/>
         <location filename="../../base/ReFileUtils.cpp" line="185"/>
         <source>cannot open (%1): %2</source>
-        <translation type="unfinished">Kann nicht öffnen (%1): %2</translation>
+        <translation>Kann nicht öffnen (%1): %2</translation>
     </message>
     <message>
         <location filename="Configuration.cpp" line="151"/>
         <source>unknown format in %1-%2: %3</source>
-        <translation type="unfinished">Unbekanntes Format in %1-%2: %3</translation>
+        <translation>Unbekanntes Format in %1-%2: %3</translation>
     </message>
     <message>
         <location filename="Configuration.cpp" line="227"/>
         <source>cannot write (%1): %2</source>
-        <translation type="unfinished">Kann nicht schreiben (%1): %2</translation>
+        <translation>Kann nicht schreiben (%1): %2</translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="196"/>
+        <location filename="mainwindow.cpp" line="213"/>
         <source>Search started...</source>
-        <translation type="unfinished">Suche gestartet...</translation>
+        <translation>Suche gestartet...</translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="668"/>
+        <source>yes</source>
+        <translation>Ja</translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="668"/>
+        <source>no</source>
+        <translation>nein</translation>
     </message>
     <message>
         <location filename="../../base/ReFileUtils.cpp" line="177"/>
         <source>not found: %1</source>
-        <translation type="unfinished">Nicht gefunden: %1</translation>
+        <translation>Nicht gefunden: %1</translation>
     </message>
     <message>
-        <location filename="../../base/ReFileUtils.cpp" line="202"/>
         <source>cannot write (%1): $2 [%3/%4]</source>
-        <translation type="unfinished">Kann nicht schreiben(%1): %2 [%3/%4]</translation>
+        <translation type="obsolete">Kann nicht schreiben(%1): %2 [%3/%4]</translation>
+    </message>
+    <message>
+        <location filename="../../base/ReFileUtils.cpp" line="202"/>
+        <source>cannot write (%1): %2 [%3/%4]</source>
+        <translation>Kann nicht schreiben(%1): %2 [%3/%4]</translation>
     </message>
     <message>
         <location filename="../../base/ReFileUtils.cpp" line="209"/>
         <source>file can be read only partitionally: %1 [%2/%3]</source>
-        <translation type="unfinished">Datei kann nur teilweise gelesen werden: %1 [%2/%3]</translation>
+        <translation>Datei kann nur teilweise gelesen werden: %1 [%2/%3]</translation>
     </message>
     <message>
         <location filename="../../base/ReFileUtils.cpp" line="214"/>
         <source>cannot set date/time (%1): %2</source>
-        <translation type="unfinished">Kann Datum/Zeit nicht setzen (%1): %2</translation>
+        <translation>Kann Datum/Zeit nicht setzen (%1): %2</translation>
     </message>
     <message>
         <location filename="../../base/ReFileUtils.cpp" line="217"/>
         <source>cannot set permissions (%1): %2</source>
-        <translation type="unfinished">Kann Dateirechte nicht setzen (%1): %2</translation>
+        <translation>Kann Dateirechte nicht setzen (%1): %2</translation>
     </message>
     <message>
         <location filename="../../base/ReFileUtils.cpp" line="491"/>
         <source>can&apos;t create directory (%1): %2</source>
-        <translation type="unfinished">Kann Verzeichnis nicht erzeugen (%1): %2</translation>
+        <translation>Kann Verzeichnis nicht erzeugen (%1): %2</translation>
     </message>
     <message>
         <location filename="../../base/ReFileUtils.cpp" line="497"/>
         <source>can&apos;t create directory (is a file): </source>
-        <translation type="unfinished">Kann Verzeichnis nicht erzeugen (ist eine Datei): </translation>
+        <translation>Kann Verzeichnis nicht erzeugen (ist eine Datei): </translation>
     </message>
     <message>
         <location filename="../../base/ReQStringUtils.cpp" line="472"/>
         <source>unknown placeholder: </source>
-        <translation type="unfinished">Unbekannter Platzhalter:</translation>
+        <translation>Unbekannter Platzhalter:</translation>
     </message>
     <message>
         <location filename="../../base/ReQStringUtils.cpp" line="555"/>
         <source>%1 of %2 (%3 %)</source>
-        <translation type="unfinished">%1 von %2 (%3 %)</translation>
+        <translation>%1 von %2 (%3 %)</translation>
     </message>
     <message>
         <location filename="../../base/ReQStringUtils.cpp" line="715"/>
         <source>more than 2 power operators, e.g. &apos;2^3^4&apos;</source>
-        <translation type="unfinished">Mehr als 2 Potenzoperatoren, z.B. &apos;2^3^4&apos;</translation>
+        <translation>Mehr als 2 Potenzoperatoren, z.B. &apos;2^3^4&apos;</translation>
     </message>
     <message>
         <location filename="../../base/ReQStringUtils.cpp" line="728"/>
         <source>number overflow while power operation</source>
-        <translation type="unfinished">Zahlüberlauf während Potenzoperation</translation>
+        <translation>Zahlüberlauf während Potenzoperation</translation>
     </message>
     <message>
         <location filename="../../base/ReQStringUtils.cpp" line="758"/>
         <source>number expected: </source>
-        <translation type="unfinished">Zahl erwartet: </translation>
+        <translation>Zahl erwartet: </translation>
     </message>
     <message>
         <location filename="../../base/ReQStringUtils.cpp" line="768"/>
         <source>missing &apos;:&apos; in unit definition, e.g. &apos;k:1000&apos;: </source>
-        <translation type="unfinished">&apos;;&apos; fehlt in der Einheitendefinition, z.B. &apos;k:1000&apos;: </translation>
+        <translation>&apos;;&apos; fehlt in der Einheitendefinition, z.B. &apos;k:1000&apos;: </translation>
     </message>
     <message>
         <location filename="../../base/ReQStringUtils.cpp" line="773"/>
         <source>too many  &apos;:&apos; in unit definition: </source>
-        <translation type="unfinished">Zu viele &apos;:&apos; in der Einheitsdefinition: </translation>
+        <translation>Zu viele &apos;:&apos; in der Einheitsdefinition: </translation>
     </message>
     <message>
         <location filename="../../base/ReQStringUtils.cpp" line="779"/>
         <source>not a number: </source>
-        <translation type="unfinished">Keine Zahl: </translation>
+        <translation>Keine Zahl: </translation>
     </message>
     <message>
         <location filename="../../base/ReQStringUtils.cpp" line="788"/>
+        <source>unknown unit &apos;%1&apos;. Allowed: </source>
+        <translation>Unbekannte Einheit &apos;%1&apos;. Erlaubt: </translation>
+    </message>
+    <message>
         <source>unknown unit &apos;$1&apos;. Allowed: </source>
-        <translation type="unfinished">Unbekannte Einheit &apos;%1&apos;. Erlaubt: </translation>
+        <translation type="vanished">Unbekannte Einheit &apos;%1&apos;. Erlaubt: </translation>
     </message>
     <message>
         <location filename="../../base/ReQStringUtils.cpp" line="839"/>
         <source>empty string is not a date/time</source>
-        <translation type="unfinished">Leerer String ist kein Datum bzw. keine Zeit</translation>
+        <translation>Leerer String ist kein Datum bzw. keine Zeit</translation>
     </message>
     <message>
         <location filename="../../gui/ReGuiValidator.cpp" line="73"/>
         <source>not an integer: </source>
-        <translation type="unfinished">Keine Ganzzahl: </translation>
+        <translation>Keine Ganzzahl: </translation>
     </message>
 </context>
 <context>
     <name>ReGuiApplication</name>
     <message>
-        <location filename="../../gui/ReGuiApplication.cpp" line="42"/>
+        <location filename="../../gui/ReGuiApplication.cpp" line="44"/>
         <source>Welcome!</source>
-        <translation type="unfinished">Willkommen!</translation>
+        <translation>Willkommen!</translation>
     </message>
 </context>
 <context>
@@ -600,7 +636,7 @@ p, li { white-space: pre-wrap; }
     <message>
         <location filename="BackupEngine.cpp" line="934"/>
         <source>Search in target finished: to process: %1 with %2 dirs to delete: %3 total: %4 subdirs: %5 runtime: %6</source>
-        <translation type="unfinished">Suche im Ziel bendet: zu behandeln: %1 mit %2 zu löschende Verzeichnisse: %3 gesamt: %4 Unterverz.: %5 Laufzeit: %6</translation>
+        <translation>Suche im Ziel bendet: zu behandeln: %1 mit %2 zu löschende Verzeichnisse: %3 gesamt: %4 Unterverz.: %5 Laufzeit: %6</translation>
     </message>
 </context>
 <context>
@@ -608,7 +644,7 @@ p, li { white-space: pre-wrap; }
     <message>
         <location filename="BackupEngine.cpp" line="602"/>
         <source>Search finished: to process: %1 with %2 matching: %3 total: %4 subdirs: %5 runtime: %6</source>
-        <translation type="unfinished">Suche beendet: zu behandeln: %1 mit %2 passend: %3 gesamt: %4 Unterverz: %5 Laufzeit: %6</translation>
+        <translation>Suche beendet: zu behandeln: %1 mit %2 passend: %3 gesamt: %4 Unterverz: %5 Laufzeit: %6</translation>
     </message>
 </context>
 </TS>
index acc94eae279c07581e9805e267c85f59659924e7..b24d4e4eb415a1c5217ced575797851a442fc959 100644 (file)
@@ -54,6 +54,6 @@ DISTFILES += \
        ReBackGui.html \
        osconnect.pl
 
-TRANSLATIONS    = rebackgui_de.ts
+TRANSLATIONS    = rebackgui.de.ts
 CODECFORTR      = UTF-8
 
index dfb3346cdc0a5c10ccfeba5762d63946bf246201..bd60ebdf6b448ee34fd749b4824a39079ea49353 100644 (file)
@@ -547,7 +547,7 @@ QString ReQStringUtils::readableDuration(qint64 durationMilliSec){
 QString ReQStringUtils::runtimeEstimation(const QDateTime& start,
                double factor){
        qint64 duration = QDateTime::currentMSecsSinceEpoch() - start.toMSecsSinceEpoch();
-    if (factor > 1)
+       if (factor > 1)
                factor = 1;
        else if (factor <= 0.001)
                factor = 0.001;
@@ -785,7 +785,7 @@ quint64 ReUnitParser::valueOf(const QString& value) const {
                }
                if (!found)
                        throw ReParserException(
-                               QObject::tr("unknown unit '$1'. Allowed: ").arg(unit)
+                               QObject::tr("unknown unit '%1'. Allowed: ").arg(unit)
                                        + QString(m_unitList));
        }
        return rc;
index ebe26ec3c1bb001695fd0dd2b26e90a0b3f2078d..f2aff5fb30a5635804311456c3cfe79b489c8164 100644 (file)
@@ -47,7 +47,9 @@ ReGuiApplication::ReGuiApplication(QApplication& application,
        m_currentTranslator(NULL),
        m_translators(),
        m_languages(languages),
-       m_installPath()
+       m_installPath(),
+       m_english(NULL),
+       m_german(NULL)
 
 {
        m_installPath = QDir(ReFileUtils::parentOf(m_application.arguments().at(0)))
@@ -55,8 +57,8 @@ ReGuiApplication::ReGuiApplication(QApplication& application,
        m_logger.buildStandardAppender(I18N::s2b(m_homeDir) + applicationName,
                                                                   maxLogSize, maxLogFiles);
        m_storageFile = m_homeDir + applicationName + ".state.conf";
-       m_logger.log(LOG_INFO, LOC_CONSTRUCTOR_1, "start");
        initializeLanguage("");
+       m_logger.log(LOG_INFO, LOC_CONSTRUCTOR_1, "start");
 }
 
 /**
@@ -200,6 +202,8 @@ void ReGuiApplication::initializeGuiElements(){
 
 /**
  * Initializes the possibility to switch the GUI language.
+ *
+ * @param language     the language, e.g. "de"
  */
 void ReGuiApplication::initializeLanguage(const QString& language)
 {
@@ -232,6 +236,36 @@ void ReGuiApplication::initializeLanguage(const QString& language)
                        m_translators.insert(language, translator);
        }
 }
+/**
+ * Initializes the possibility to switch the GUI language.
+ *
+ * @param language     the language, e.g. "de"
+ * @param english      the action for choosing English
+ * @param german       the action for choosing German
+ */
+void ReGuiApplication::initializeGuiLanguage(QAction* english, QAction* german)
+{
+       m_english = english;
+       m_german = german;
+}
+/**
+ * Action "switch to English".
+ */
+void ReGuiApplication::onEnglish(){
+       switchLanguage("en");
+       onLanguageChange();
+       m_english->setChecked(true);
+       m_german->setChecked(false);
+}
+/**
+ * Action "switch to German".
+ */
+void ReGuiApplication::onGerman(){
+       switchLanguage("de");
+       onLanguageChange();
+       m_english->setChecked(false);
+       m_german->setChecked(true);
+}
 
 /**
  * Returns the path of the program file.
@@ -285,6 +319,8 @@ void ReGuiApplication::switchLanguage(const QString& language){
                        }
                }
                if (translator != NULL){
+                       if (m_currentTranslator != NULL)
+                               m_application.removeTranslator(m_currentTranslator);
                        m_currentTranslator = translator;
                        m_application.installTranslator(translator);
                }
index 449c400b0a5c9cc016967d18c25419d8c56820e3..a1cd0aeef55dbf560b4fcba11e3b6f8f0d40ea0d 100644 (file)
@@ -37,14 +37,18 @@ public:
        static QString buildHomeDir(QString homeDirBase, const QString& node);
 
 protected:
+       void onEnglish();
+       void onGerman();
        void initializeGuiElements();
        void initializeLanguage(const QString& language);
+       void initializeGuiLanguage(QAction* english, QAction* german);
 protected slots:
        /**
         * Reads the <code>m_guiQueue</code>.
         */
-       virtual void onGuiTimerUpdate() = 0;
        virtual void onAboutToQuit();
+       virtual void onGuiTimerUpdate() = 0;
+       virtual void onLanguageChange() = 0;
 protected:
        QByteArray m_applicationName;
        /// the base directory for resources of the program like configuration file.
@@ -62,6 +66,8 @@ protected:
        QString m_languages;
        // Path of the program file
        QString m_installPath;
+       QAction* m_english;
+       QAction* m_german;
 };
 
 #endif /* REGUIAPPLICATION_HPP_ */
index b65228fabfcba0190ad5a0b82b347100713aafb4..6fb64513346426a36cb102850d623fbe6bf55e0c 100644 (file)
@@ -16,6 +16,7 @@
 #include <QLabel>
 #include <QTableWidget>
 #include <QListWidget>
+#include <QAction>
 #include <QApplication>
 #include "gui/ReGuiUtils.hpp"
 #include "gui/ReGuiQueue.hpp"