From: hama Date: Thu, 18 Feb 2016 23:22:59 +0000 (+0100) Subject: rebackgui speaks German X-Git-Url: https://gitweb.hamatoma.de/?a=commitdiff_plain;h=7de925ef4a48c77370ca73105c8dbde7f8567d5d;p=reqt rebackgui speaks German --- diff --git a/appl/rebackgui/main.cpp b/appl/rebackgui/main.cpp index 0d45da3..bfa513e 100644 --- a/appl/rebackgui/main.cpp +++ b/appl/rebackgui/main.cpp @@ -18,7 +18,7 @@ int main(int argc, char *argv[]){ g_argv = argv; QString homeDir = argc > 1 ? argv[1] : ""; QApplication a(argc, argv); - MainWindow w(homeDir); + MainWindow w(a, homeDir); w.show(); return a.exec(); } diff --git a/appl/rebackgui/mainwindow.cpp b/appl/rebackgui/mainwindow.cpp index 2ab0460..00c035d 100644 --- a/appl/rebackgui/mainwindow.cpp +++ b/appl/rebackgui/mainwindow.cpp @@ -21,8 +21,9 @@ const QString VERSION("2016.02.17"); * @param homeDir the home directory. If "": usage of the user's homedir * @param parent QT parent or NULL */ -MainWindow::MainWindow(const QString& homeDir, QWidget *parent) : - ReGuiApplication("rebackupgui", homeDir, 2, 100100100, parent), +MainWindow::MainWindow(QApplication& application, const QString& homeDir, + QWidget *parent) : + ReGuiApplication(application, "rebackupgui", homeDir, 2, 100100100, "de", parent), ReGuiValidator(), ui(new Ui::MainWindow), m_configuration(this), diff --git a/appl/rebackgui/mainwindow.hpp b/appl/rebackgui/mainwindow.hpp index b043ff4..4560a55 100644 --- a/appl/rebackgui/mainwindow.hpp +++ b/appl/rebackgui/mainwindow.hpp @@ -23,7 +23,8 @@ class MainWindow : public ReGuiApplication, public ReGuiValidator Q_OBJECT public: - explicit MainWindow(const QString& homeDir, QWidget *parent = 0); + explicit MainWindow(QApplication& application, const QString& homeDir, + QWidget *parent = 0); ~MainWindow(); public: void addToFileList(const QString info); diff --git a/appl/rebackgui/rebackgui.de.qm b/appl/rebackgui/rebackgui.de.qm new file mode 100644 index 0000000..278cbd6 Binary files /dev/null and b/appl/rebackgui/rebackgui.de.qm differ diff --git a/appl/rebackgui/rebackgui.de.ts b/appl/rebackgui/rebackgui.de.ts new file mode 100644 index 0000000..7a3de2e --- /dev/null +++ b/appl/rebackgui/rebackgui.de.ts @@ -0,0 +1,614 @@ + + + + + AboutDialog + + + Dialog + + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Droid Sans'; font-size:10pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; font-weight:600;">ReBackupGui</span><span style=" font-family:'Sans Serif'; font-size:9pt;"> for backup of directories to external media.</span></p> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">This is a program of the project</span></p> +<p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; font-weight:600;">Re</span><span style=" font-family:'Sans Serif'; font-size:9pt;">al </span><span style=" font-family:'Sans Serif'; font-size:9pt; font-weight:600;">Pub</span><span style=" font-family:'Sans Serif'; font-size:9pt;">lic </span><span style=" font-family:'Sans Serif'; font-size:9pt; font-weight:600;">Lib</span><span style=" font-family:'Sans Serif'; font-size:9pt;">rary (RePubLib)</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">Sources are public domain and available under</span></p> +<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="https://github.com/republib"><span style=" font-family:'Sans Serif'; font-size:9pt; text-decoration: underline; color:#0000ff;">https://github.com/republib</span></a><span style=" font-family:'Sans Serif'; font-size:9pt;"> </span></p> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">Implemented in QT (C++) 5.x</span></p> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">Icons: Mark James, </span><a href="http://famfamfam.com"><span style=" font-family:'Sans Serif'; font-size:9pt; text-decoration: underline; color:#0000ff;">http://famfamfam.com</span></a><span style=" font-family:'Sans Serif'; font-size:9pt;"> </span></p></body></html> + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Droid Sans'; font-size:10pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; font-weight:600;">ReBackupGui</span><span style=" font-family:'Sans Serif'; font-size:9pt;"> kann Dateisicherungen auf externen Medien durchführen.</span></p> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">This is a program of the project</span></p> +<p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; font-weight:600;">Re</span><span style=" font-family:'Sans Serif'; font-size:9pt;">al </span><span style=" font-family:'Sans Serif'; font-size:9pt; font-weight:600;">Pub</span><span style=" font-family:'Sans Serif'; font-size:9pt;">lic </span><span style=" font-family:'Sans Serif'; font-size:9pt; font-weight:600;">Lib</span><span style=" font-family:'Sans Serif'; font-size:9pt;">rary (RePubLib)</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">Der Quelltext ist Public Domain und unter</span></p> +<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="https://github.com/republib"><span style=" font-family:'Sans Serif'; font-size:9pt; text-decoration: underline; color:#0000ff;">https://github.com/republib</span></a> verf&uuml;gbar.<span style=" font-family:'Sans Serif'; font-size:9pt;"> </span></p> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">Implementiert in QT (C++) 5.x</span></p> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">Icons: Mark James, </span><a href="http://famfamfam.com"><span style=" font-family:'Sans Serif'; font-size:9pt; text-decoration: underline; color:#0000ff;">http://famfamfam.com</span></a><span style=" font-family:'Sans Serif'; font-size:9pt;"> </span></p></body></html> + + + + Version: + + + + + 2015.05.00 + + + + + &OK + + + + + BackupTask + + + cannot remove file (for making a directory (%1): %2 + kann Datei nicht löschen, um ein Verzeichnis anzulegen (%1): %2 + + + + cannot make directory (%1): %2 + kann Verzeichnis nicht anlegen (%1): %2 + + + + %1 of %2 (%3 of %4) %5 MB/sec runtime: %6 + %1 von %2 (%3 von %4) %5 MB/sec Laufzeit: %6 + + + + backup complete after %1. Errors: %2 + Sicherung nach %1 fertiggestellt Fehler: %2 + + + + ChecksumOfSourceTask + + + Building source checksum complete after %1. Processed: %2 + Erzeugen der Prüfsummen für die Quelldateien fertig nach %1. Bearbeitet: %2 + + + + ChecksumOfTargetTask + + + %1 of %2 (%3 of %4) %5 MB/sec runtime: %6 + %1 von %2 (%3 von %4) %5 MB/sec Laufzeit: %6 + + + + Building target checksums complete after %1. Processed: %2 Errors: %3 + Erzeugen der Prüfsummen für die Zieldateien fertig nach %1. Bearbeitet: %2 Fehler: %3 + + + + CleanTask + + + %1 of %2 files %3 files/sec runtime: %6 + %1 von %2 Dateien %3 Dateien/sec Laufzeit: %6 + + + + clean complete after %1. Errors: %2 + Bereinigen fertig nach %1. Fehler: %2 + + + + MainWindow + + + RePubLib rebackgui + RePubLib rebackgui + + + + + Action + Aktion + + + + Active + Aktiv + + + + + Name + Name + + + + + Target + Ziel + + + + + Last backup + Letzte Sicherung + + + + + Source(s) + Quelle(n) + + + + Options: + Optionen: + + + + Max. list length: + Max. Listenlänge: + + + + Max. length of the file list / error list. 0: unlimited + Max. Länge der Datei-/Fehlerliste. 0: unbeschränkt + + + + 100 + 100 + + + + Starting a task cleans filelist and errorlist + Start löscht Datei- und Fehlerliste + + + + Start cleans + Start löscht + + + + Verbose level + Ausgabenstufe + + + + Quiet + Still + + + + Summary + Zusammenfassung + + + + File log + Dateiliste + + + + Chatty + Geschwätzig + + + + Start + Start + + + + + Stop + Beenden + + + + + Calculates checksums for source and target files and reports differences + Berechnet Prüfsummen für Quell- und Zieldateien und meldet Unterschiede + + + + + Checksums + Prüfsummen + + + + Detects files/dirs not found in the source directory. Old files will be remove, the other will be moved to the shadow directory + Entdeckt Dateien/Verzeichnisse, die nicht im Quellverzeichnis stehen. Alte Dateien werden gelöscht, die anderen werden ins Schattenverzeichnis verschoben + + + + + Clean + Protokoll: + Bereinigen + + + + Log: + + + + + + + Clear + Löschen + + + + Configuration + Konfiguration + + + + Backup elements: + Sicherungselemente: + + + + Add item + Element hinzufügen + + + + Delete item + Element löschen + + + + Save config + Konfiguration speichern + + + + Name: + Name: + + + + Update + Aktualisieren + + + + Target: + Ziel: + + + + Select target + Wähle Ziel + + + + File patterns: + Dateinamensmuster: + + + + <html><head/><body><p>A comma (',') separated list of filename patterns. A prefix of '-' means inversion: if a filename matches it will not be found.</p><p>Example: *.txt,*.odt</p></body></html> + <html><head/><body><p>Eine Liste von Dateinamensmustern, getrennt mit Komma (',') . Ein Präfix '-' bedeuted Umkehrung: Wenn ein Dateiname passt, wird er nicht gefunden.</p><p>Beispiel: *.txt,*.odt</p></body></html> + + + + Dir patterns: + Verzeichnismuster: + + + + <html><head/><body><p>A comma (',') separated list of directory name patterns. A prefix of '-' means inversion: if a directory name matches it will not be found.</p><p>Example: *,-.git,-*cache*</p></body></html> + <html><head/><body><p>Eine Liste von Verzeichnisnamensmustern, getrennt mit Komma (',') . Ein Präfix '-' bedeuted Umkehrung: Wenn ein Verzeichnisname passt, wird er nicht gefunden.</p><p>Beispiel: *,-.git,-*cache*</p></body></html> + + + + Source dirs: + Quelldateien: + + + + Add source + Quelle hinzufügen + + + + Delete source + Quelle löschen + + + + Files + Dateien + + + + File log: + Dateiliste: + + + + Errors + Fehler: + + + + Error log: + Fehlerprotokoll: + + + + File + Bearbeiten + Datei + + + + Edit + Bearbeiten + + + + Help + Hilfe + + + + Load Config + Konfiguration laden + + + + Save Config + Konfiguration sichern + + + + Exit + Beenden + + + + Start backup + Sicherung starten + + + + About + Über + + + + + + no backup item selected + Kein Sicherungselement ausgewählt + + + + + + Target not available + Ziel nicht vorhanden + + + + Select Source Directory + Quellverzeichnis auswählen + + + + Select Target Directory + Zielverzeichnis auswählen + + + + target initialized with %1 + Ziel mit %1 vorbelegt + + + + QObject + + + cannot build checksum: %1 + Kann Prüfsumme nicht ermitteln: %1 + + + + checksum differs: + Prüfsummen unterscheiden sich: + + + + cannot delete (%1): %2 + Kann nicht löschen (%1): %2 + + + + cannot remove directory (%1): %2 + Kann Verzeichnis nicht erstellen (%1): %2 + + + + cannot create the shadow directory: %1 + Kann das Schattenverzeichnis nicht erstellen (%1): %2 + + + + cannot delete shadow file (%1): %2 + Kann Schattendatei nicht löschen (%1): %2 + + + + cannot rename target file (%1): %2 -> %3 + Kann Zieldatei nicht umbenennen (%1): %2 -> %3 + + + + cannot create shadow directory (%1): %2 + Kann Schattenverzeichnis nicht erstellen (%1): %2 + + + + cannot move to shadow directory (%1): %2 -> %3 + Kann Datei nicht in Schattenverzeichnis verschieben (%1): %2 + + + + item + Element + + + + + + + cannot open (%1): %2 + Kann nicht öffnen (%1): %2 + + + + unknown format in %1-%2: %3 + Unbekanntes Format in %1-%2: %3 + + + + cannot write (%1): %2 + Kann nicht schreiben (%1): %2 + + + + Search started... + Suche gestartet... + + + + not found: %1 + Nicht gefunden: %1 + + + + cannot write (%1): $2 [%3/%4] + Kann nicht schreiben(%1): %2 [%3/%4] + + + + file can be read only partitionally: %1 [%2/%3] + Datei kann nur teilweise gelesen werden: %1 [%2/%3] + + + + cannot set date/time (%1): %2 + Kann Datum/Zeit nicht setzen (%1): %2 + + + + cannot set permissions (%1): %2 + Kann Dateirechte nicht setzen (%1): %2 + + + + can't create directory (%1): %2 + Kann Verzeichnis nicht erzeugen (%1): %2 + + + + can't create directory (is a file): + Kann Verzeichnis nicht erzeugen (ist eine Datei): + + + + unknown placeholder: + Unbekannter Platzhalter: + + + + %1 of %2 (%3 %) + %1 von %2 (%3 %) + + + + more than 2 power operators, e.g. '2^3^4' + Mehr als 2 Potenzoperatoren, z.B. '2^3^4' + + + + number overflow while power operation + Zahlüberlauf während Potenzoperation + + + + number expected: + Zahl erwartet: + + + + missing ':' in unit definition, e.g. 'k:1000': + ';' fehlt in der Einheitendefinition, z.B. 'k:1000': + + + + too many ':' in unit definition: + Zu viele ':' in der Einheitsdefinition: + + + + not a number: + Keine Zahl: + + + + unknown unit '$1'. Allowed: + Unbekannte Einheit '%1'. Erlaubt: + + + + empty string is not a date/time + Leerer String ist kein Datum bzw. keine Zeit + + + + not an integer: + Keine Ganzzahl: + + + + ReGuiApplication + + + Welcome! + Willkommen! + + + + SearchTargetTask + + + Search in target finished: to process: %1 with %2 dirs to delete: %3 total: %4 subdirs: %5 runtime: %6 + Suche im Ziel bendet: zu behandeln: %1 mit %2 zu löschende Verzeichnisse: %3 gesamt: %4 Unterverz.: %5 Laufzeit: %6 + + + + SearchTask + + + Search finished: to process: %1 with %2 matching: %3 total: %4 subdirs: %5 runtime: %6 + Suche beendet: zu behandeln: %1 mit %2 passend: %3 gesamt: %4 Unterverz: %5 Laufzeit: %6 + + + diff --git a/appl/rebackgui/rebackgui_de.ts b/appl/rebackgui/rebackgui_de.ts deleted file mode 100644 index 7a3de2e..0000000 --- a/appl/rebackgui/rebackgui_de.ts +++ /dev/null @@ -1,614 +0,0 @@ - - - - - AboutDialog - - - Dialog - - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Droid Sans'; font-size:10pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; font-weight:600;">ReBackupGui</span><span style=" font-family:'Sans Serif'; font-size:9pt;"> for backup of directories to external media.</span></p> -<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">This is a program of the project</span></p> -<p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; font-weight:600;">Re</span><span style=" font-family:'Sans Serif'; font-size:9pt;">al </span><span style=" font-family:'Sans Serif'; font-size:9pt; font-weight:600;">Pub</span><span style=" font-family:'Sans Serif'; font-size:9pt;">lic </span><span style=" font-family:'Sans Serif'; font-size:9pt; font-weight:600;">Lib</span><span style=" font-family:'Sans Serif'; font-size:9pt;">rary (RePubLib)</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">Sources are public domain and available under</span></p> -<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="https://github.com/republib"><span style=" font-family:'Sans Serif'; font-size:9pt; text-decoration: underline; color:#0000ff;">https://github.com/republib</span></a><span style=" font-family:'Sans Serif'; font-size:9pt;"> </span></p> -<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">Implemented in QT (C++) 5.x</span></p> -<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">Icons: Mark James, </span><a href="http://famfamfam.com"><span style=" font-family:'Sans Serif'; font-size:9pt; text-decoration: underline; color:#0000ff;">http://famfamfam.com</span></a><span style=" font-family:'Sans Serif'; font-size:9pt;"> </span></p></body></html> - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Droid Sans'; font-size:10pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; font-weight:600;">ReBackupGui</span><span style=" font-family:'Sans Serif'; font-size:9pt;"> kann Dateisicherungen auf externen Medien durchführen.</span></p> -<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">This is a program of the project</span></p> -<p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; font-weight:600;">Re</span><span style=" font-family:'Sans Serif'; font-size:9pt;">al </span><span style=" font-family:'Sans Serif'; font-size:9pt; font-weight:600;">Pub</span><span style=" font-family:'Sans Serif'; font-size:9pt;">lic </span><span style=" font-family:'Sans Serif'; font-size:9pt; font-weight:600;">Lib</span><span style=" font-family:'Sans Serif'; font-size:9pt;">rary (RePubLib)</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">Der Quelltext ist Public Domain und unter</span></p> -<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="https://github.com/republib"><span style=" font-family:'Sans Serif'; font-size:9pt; text-decoration: underline; color:#0000ff;">https://github.com/republib</span></a> verf&uuml;gbar.<span style=" font-family:'Sans Serif'; font-size:9pt;"> </span></p> -<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">Implementiert in QT (C++) 5.x</span></p> -<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">Icons: Mark James, </span><a href="http://famfamfam.com"><span style=" font-family:'Sans Serif'; font-size:9pt; text-decoration: underline; color:#0000ff;">http://famfamfam.com</span></a><span style=" font-family:'Sans Serif'; font-size:9pt;"> </span></p></body></html> - - - - Version: - - - - - 2015.05.00 - - - - - &OK - - - - - BackupTask - - - cannot remove file (for making a directory (%1): %2 - kann Datei nicht löschen, um ein Verzeichnis anzulegen (%1): %2 - - - - cannot make directory (%1): %2 - kann Verzeichnis nicht anlegen (%1): %2 - - - - %1 of %2 (%3 of %4) %5 MB/sec runtime: %6 - %1 von %2 (%3 von %4) %5 MB/sec Laufzeit: %6 - - - - backup complete after %1. Errors: %2 - Sicherung nach %1 fertiggestellt Fehler: %2 - - - - ChecksumOfSourceTask - - - Building source checksum complete after %1. Processed: %2 - Erzeugen der Prüfsummen für die Quelldateien fertig nach %1. Bearbeitet: %2 - - - - ChecksumOfTargetTask - - - %1 of %2 (%3 of %4) %5 MB/sec runtime: %6 - %1 von %2 (%3 von %4) %5 MB/sec Laufzeit: %6 - - - - Building target checksums complete after %1. Processed: %2 Errors: %3 - Erzeugen der Prüfsummen für die Zieldateien fertig nach %1. Bearbeitet: %2 Fehler: %3 - - - - CleanTask - - - %1 of %2 files %3 files/sec runtime: %6 - %1 von %2 Dateien %3 Dateien/sec Laufzeit: %6 - - - - clean complete after %1. Errors: %2 - Bereinigen fertig nach %1. Fehler: %2 - - - - MainWindow - - - RePubLib rebackgui - RePubLib rebackgui - - - - - Action - Aktion - - - - Active - Aktiv - - - - - Name - Name - - - - - Target - Ziel - - - - - Last backup - Letzte Sicherung - - - - - Source(s) - Quelle(n) - - - - Options: - Optionen: - - - - Max. list length: - Max. Listenlänge: - - - - Max. length of the file list / error list. 0: unlimited - Max. Länge der Datei-/Fehlerliste. 0: unbeschränkt - - - - 100 - 100 - - - - Starting a task cleans filelist and errorlist - Start löscht Datei- und Fehlerliste - - - - Start cleans - Start löscht - - - - Verbose level - Ausgabenstufe - - - - Quiet - Still - - - - Summary - Zusammenfassung - - - - File log - Dateiliste - - - - Chatty - Geschwätzig - - - - Start - Start - - - - - Stop - Beenden - - - - - Calculates checksums for source and target files and reports differences - Berechnet Prüfsummen für Quell- und Zieldateien und meldet Unterschiede - - - - - Checksums - Prüfsummen - - - - Detects files/dirs not found in the source directory. Old files will be remove, the other will be moved to the shadow directory - Entdeckt Dateien/Verzeichnisse, die nicht im Quellverzeichnis stehen. Alte Dateien werden gelöscht, die anderen werden ins Schattenverzeichnis verschoben - - - - - Clean - Protokoll: - Bereinigen - - - - Log: - - - - - - - Clear - Löschen - - - - Configuration - Konfiguration - - - - Backup elements: - Sicherungselemente: - - - - Add item - Element hinzufügen - - - - Delete item - Element löschen - - - - Save config - Konfiguration speichern - - - - Name: - Name: - - - - Update - Aktualisieren - - - - Target: - Ziel: - - - - Select target - Wähle Ziel - - - - File patterns: - Dateinamensmuster: - - - - <html><head/><body><p>A comma (',') separated list of filename patterns. A prefix of '-' means inversion: if a filename matches it will not be found.</p><p>Example: *.txt,*.odt</p></body></html> - <html><head/><body><p>Eine Liste von Dateinamensmustern, getrennt mit Komma (',') . Ein Präfix '-' bedeuted Umkehrung: Wenn ein Dateiname passt, wird er nicht gefunden.</p><p>Beispiel: *.txt,*.odt</p></body></html> - - - - Dir patterns: - Verzeichnismuster: - - - - <html><head/><body><p>A comma (',') separated list of directory name patterns. A prefix of '-' means inversion: if a directory name matches it will not be found.</p><p>Example: *,-.git,-*cache*</p></body></html> - <html><head/><body><p>Eine Liste von Verzeichnisnamensmustern, getrennt mit Komma (',') . Ein Präfix '-' bedeuted Umkehrung: Wenn ein Verzeichnisname passt, wird er nicht gefunden.</p><p>Beispiel: *,-.git,-*cache*</p></body></html> - - - - Source dirs: - Quelldateien: - - - - Add source - Quelle hinzufügen - - - - Delete source - Quelle löschen - - - - Files - Dateien - - - - File log: - Dateiliste: - - - - Errors - Fehler: - - - - Error log: - Fehlerprotokoll: - - - - File - Bearbeiten - Datei - - - - Edit - Bearbeiten - - - - Help - Hilfe - - - - Load Config - Konfiguration laden - - - - Save Config - Konfiguration sichern - - - - Exit - Beenden - - - - Start backup - Sicherung starten - - - - About - Über - - - - - - no backup item selected - Kein Sicherungselement ausgewählt - - - - - - Target not available - Ziel nicht vorhanden - - - - Select Source Directory - Quellverzeichnis auswählen - - - - Select Target Directory - Zielverzeichnis auswählen - - - - target initialized with %1 - Ziel mit %1 vorbelegt - - - - QObject - - - cannot build checksum: %1 - Kann Prüfsumme nicht ermitteln: %1 - - - - checksum differs: - Prüfsummen unterscheiden sich: - - - - cannot delete (%1): %2 - Kann nicht löschen (%1): %2 - - - - cannot remove directory (%1): %2 - Kann Verzeichnis nicht erstellen (%1): %2 - - - - cannot create the shadow directory: %1 - Kann das Schattenverzeichnis nicht erstellen (%1): %2 - - - - cannot delete shadow file (%1): %2 - Kann Schattendatei nicht löschen (%1): %2 - - - - cannot rename target file (%1): %2 -> %3 - Kann Zieldatei nicht umbenennen (%1): %2 -> %3 - - - - cannot create shadow directory (%1): %2 - Kann Schattenverzeichnis nicht erstellen (%1): %2 - - - - cannot move to shadow directory (%1): %2 -> %3 - Kann Datei nicht in Schattenverzeichnis verschieben (%1): %2 - - - - item - Element - - - - - - - cannot open (%1): %2 - Kann nicht öffnen (%1): %2 - - - - unknown format in %1-%2: %3 - Unbekanntes Format in %1-%2: %3 - - - - cannot write (%1): %2 - Kann nicht schreiben (%1): %2 - - - - Search started... - Suche gestartet... - - - - not found: %1 - Nicht gefunden: %1 - - - - cannot write (%1): $2 [%3/%4] - Kann nicht schreiben(%1): %2 [%3/%4] - - - - file can be read only partitionally: %1 [%2/%3] - Datei kann nur teilweise gelesen werden: %1 [%2/%3] - - - - cannot set date/time (%1): %2 - Kann Datum/Zeit nicht setzen (%1): %2 - - - - cannot set permissions (%1): %2 - Kann Dateirechte nicht setzen (%1): %2 - - - - can't create directory (%1): %2 - Kann Verzeichnis nicht erzeugen (%1): %2 - - - - can't create directory (is a file): - Kann Verzeichnis nicht erzeugen (ist eine Datei): - - - - unknown placeholder: - Unbekannter Platzhalter: - - - - %1 of %2 (%3 %) - %1 von %2 (%3 %) - - - - more than 2 power operators, e.g. '2^3^4' - Mehr als 2 Potenzoperatoren, z.B. '2^3^4' - - - - number overflow while power operation - Zahlüberlauf während Potenzoperation - - - - number expected: - Zahl erwartet: - - - - missing ':' in unit definition, e.g. 'k:1000': - ';' fehlt in der Einheitendefinition, z.B. 'k:1000': - - - - too many ':' in unit definition: - Zu viele ':' in der Einheitsdefinition: - - - - not a number: - Keine Zahl: - - - - unknown unit '$1'. Allowed: - Unbekannte Einheit '%1'. Erlaubt: - - - - empty string is not a date/time - Leerer String ist kein Datum bzw. keine Zeit - - - - not an integer: - Keine Ganzzahl: - - - - ReGuiApplication - - - Welcome! - Willkommen! - - - - SearchTargetTask - - - Search in target finished: to process: %1 with %2 dirs to delete: %3 total: %4 subdirs: %5 runtime: %6 - Suche im Ziel bendet: zu behandeln: %1 mit %2 zu löschende Verzeichnisse: %3 gesamt: %4 Unterverz.: %5 Laufzeit: %6 - - - - SearchTask - - - Search finished: to process: %1 with %2 matching: %3 total: %4 subdirs: %5 runtime: %6 - Suche beendet: zu behandeln: %1 mit %2 passend: %3 gesamt: %4 Unterverz: %5 Laufzeit: %6 - - - diff --git a/gui/ReGuiApplication.cpp b/gui/ReGuiApplication.cpp index 131bd68..ebe26ec 100644 --- a/gui/ReGuiApplication.cpp +++ b/gui/ReGuiApplication.cpp @@ -27,11 +27,13 @@ enum { * directory * @param maxLogFiles max. count of (rotating) log files * @param maxLogSize max. size of the (rotating) log files + * @param languages a comma separated list of supported languages, + * e.g. "de,fr" */ -ReGuiApplication::ReGuiApplication(const char* applicationName, - const QString& homeDirBase, - int maxLogFiles, int maxLogSize, - QWidget *parent = NULL) : +ReGuiApplication::ReGuiApplication(QApplication& application, + const char* applicationName,const QString& homeDirBase, + int maxLogFiles, int maxLogSize, const QString& languages = "de", + QWidget *parent = NULL) : QMainWindow(parent), m_applicationName(applicationName), m_homeDir(buildHomeDir(homeDirBase, ".reappl")), @@ -40,12 +42,21 @@ ReGuiApplication::ReGuiApplication(const char* applicationName, m_guiQueue(), m_guiTimer(new QTimer(this)), m_statusMessage(new QLabel(tr("Welcome!"))), - m_mutexGuiQueue() + m_mutexGuiQueue(), + m_application(application), + m_currentTranslator(NULL), + m_translators(), + m_languages(languages), + m_installPath() + { + m_installPath = QDir(ReFileUtils::parentOf(m_application.arguments().at(0))) + .absolutePath(); 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(""); } /** @@ -107,19 +118,6 @@ void ReGuiApplication::externalTaskFinished(const QString& message){ m_mutexGuiQueue.unlock(); } -/** - * Initializes the GUI elements of this class. - * - * Should be called after initializing the formular (ui->setupUi()). - */ -void ReGuiApplication::initializeGuiElements(){ - QCoreApplication* app = QCoreApplication::instance(); - QObject::connect(app, SIGNAL(aboutToQuit()), this, SLOT(onAboutToQuit())); - connect(m_guiTimer, SIGNAL(timeout()), this, SLOT(onGuiTimerUpdate())); - m_guiTimer->start(100); - statusBar()->addWidget(m_statusMessage); -} - /** * Returns the application's name. * @@ -187,6 +185,63 @@ void ReGuiApplication::externalLog(const QString& message){ m_mutexGuiQueue.unlock(); } +/** + * Initializes the GUI elements of this class. + * + * Should be called after initializing the formular (ui->setupUi()). + */ +void ReGuiApplication::initializeGuiElements(){ + QCoreApplication* app = QCoreApplication::instance(); + QObject::connect(app, SIGNAL(aboutToQuit()), this, SLOT(onAboutToQuit())); + connect(m_guiTimer, SIGNAL(timeout()), this, SLOT(onGuiTimerUpdate())); + m_guiTimer->start(100); + statusBar()->addWidget(m_statusMessage); +} + +/** + * Initializes the possibility to switch the GUI language. + */ +void ReGuiApplication::initializeLanguage(const QString& language) +{ + if (language.isEmpty()){ + QStringList languages = m_languages.split(','); + for (int ix = 0; ix < languages.count(); ix++){ + QString lang = languages.at(ix); + if (lang != "en") + initializeLanguage(lang); + } + QLocale locale; + QString lang = locale.name(); + if (lang.length() == 5) + switchLanguage(lang.mid(0, 2)); + if (m_currentTranslator == NULL) + switchLanguage(lang); + } else { + QTranslator* translator = new QTranslator(); + QString fn = QString(m_applicationName) + "." + language; + if (translator->load(fn, m_installPath)){ + // found, nothing to do + } else if (translator->load(fn, m_homeDir)){ + // found, nothing to do + } else { + // forget it: + delete translator; + translator = NULL; + } + if (translator != NULL) + m_translators.insert(language, translator); + } +} + +/** + * Returns the path of the program file. + * @return the path of the program file + */ +const QString& ReGuiApplication::installPath() const +{ + return m_installPath; +} + /** * Writes a text to the status line. * @@ -207,3 +262,31 @@ void ReGuiApplication::setStatusMessage(ReLoggerLevel level, const QString& mess } } +/** + * Switch the GUI language. + * + * @param language + */ +void ReGuiApplication::switchLanguage(const QString& language){ + if (language == "en"){ + if (m_currentTranslator != NULL){ + m_application.removeTranslator(m_currentTranslator); + m_currentTranslator = NULL; + } + } else { + QString lang = language; + QTranslator* translator = NULL; + if (m_translators.contains(lang)){ + translator = m_translators.value(lang); + } else if (lang.length() == 5 && lang.at(2) == '_'){ + lang = lang.mid(0, 2); + if (m_translators.contains(lang)){ + translator = m_translators.value(lang); + } + } + if (translator != NULL){ + m_currentTranslator = translator; + m_application.installTranslator(translator); + } + } +} diff --git a/gui/ReGuiApplication.hpp b/gui/ReGuiApplication.hpp index 0d6c7bf..449c400 100644 --- a/gui/ReGuiApplication.hpp +++ b/gui/ReGuiApplication.hpp @@ -19,9 +19,9 @@ */ class ReGuiApplication : public QMainWindow{ public: - ReGuiApplication(const char* applicationName, + ReGuiApplication(QApplication& application, const char* applicationName, const QString& homeDir, int maxLogFiles, int maxLogSize, - QWidget *parent); + const QString& languages, QWidget *parent); public: const QByteArray& applicationName() const; QString fileOfHome(const QString& node); @@ -29,12 +29,16 @@ public: void externalError(const QString& message); void externalLog(const QString& message); void externalTaskFinished(const QString& message); + const QString& installPath() const; ReLogger* logger(); + void setStatusMessage(ReLoggerLevel level, const QString& message); + void switchLanguage(const QString& language); public: static QString buildHomeDir(QString homeDirBase, const QString& node); - void setStatusMessage(ReLoggerLevel level, const QString& message); + protected: void initializeGuiElements(); + void initializeLanguage(const QString& language); protected slots: /** * Reads the m_guiQueue. @@ -52,7 +56,12 @@ protected: QTimer* m_guiTimer; QLabel* m_statusMessage; QMutex m_mutexGuiQueue; - + QApplication& m_application; + QTranslator* m_currentTranslator; + QHash m_translators; + QString m_languages; + // Path of the program file + QString m_installPath; }; #endif /* REGUIAPPLICATION_HPP_ */ diff --git a/gui/regui.hpp b/gui/regui.hpp index 8e8f9e7..b65228f 100644 --- a/gui/regui.hpp +++ b/gui/regui.hpp @@ -16,6 +16,7 @@ #include #include #include +#include #include "gui/ReGuiUtils.hpp" #include "gui/ReGuiQueue.hpp" #include "gui/ReStateStorage.hpp"